Merge "Fix Float/Int formatters based on API feedback." into androidx-main
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt
index e41a947..d839e8f 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt
@@ -27,6 +27,7 @@
import androidx.benchmark.Outputs
import androidx.benchmark.Shell
import androidx.benchmark.userspaceTrace
+import androidx.core.os.BuildCompat
import java.io.File
/**
@@ -147,7 +148,8 @@
// Don't reset for subsequent iterations
Log.d(TAG, "Killing package $packageName")
killProcessBlock()
- mode.compileImpl(packageName = packageName,
+ mode.compileImpl(
+ packageName = packageName,
killProcessBlock = killProcessBlock
) {
scope.iteration = iteration
@@ -172,7 +174,8 @@
lastProfile = unfilteredProfile
stableCount = 1
} else {
- Log.d(TAG,
+ Log.d(
+ TAG,
"Profiles stable in iteration $iteration (for $stableCount iterations)"
)
stableCount += 1
@@ -295,10 +298,22 @@
* Does not require root.
*/
@RequiresApi(33)
[email protected](BuildCompat.PrereleaseSdkCheck::class)
private fun extractProfile(packageName: String): String {
- Shell.executeScriptSilent(
- "pm dump-profiles --dump-classes-and-methods $packageName"
- )
+
+ val dumpCommand = "pm dump-profiles --dump-classes-and-methods $packageName"
+ if (BuildCompat.isAtLeastU()) {
+ // On api 34 this will produce an output like:
+ // Profile saved to '/data/misc/profman/<PACKAGE_NAME>-primary.prof.txt'
+ val stdout = Shell.executeScriptCaptureStdout(dumpCommand).trim()
+ val expected = "Profile saved to '/data/misc/profman/$packageName-primary.prof.txt'"
+ check(stdout == expected) {
+ "Expected `pm dump-profiles` stdout to be $expected but was $stdout"
+ }
+ } else {
+ // On api 33 and below this command does not produce any output
+ Shell.executeScriptSilent(dumpCommand)
+ }
val fileName = "$packageName-primary.prof.txt"
Shell.executeScriptSilent(
"mv /data/misc/profman/$fileName ${Outputs.dirUsableByAppAndShell}/"
diff --git a/bluetooth/integration-tests/testapp/build.gradle b/bluetooth/integration-tests/testapp/build.gradle
index 441d909..860d815 100644
--- a/bluetooth/integration-tests/testapp/build.gradle
+++ b/bluetooth/integration-tests/testapp/build.gradle
@@ -48,17 +48,17 @@
implementation(project(":bluetooth:bluetooth"))
implementation("androidx.core:core-ktx:1.9.0")
- implementation("androidx.appcompat:appcompat:1.6.0")
+ implementation("androidx.appcompat:appcompat:1.6.1")
implementation(libs.material)
- implementation("androidx.activity:activity-ktx:1.6.1")
- implementation("androidx.fragment:fragment-ktx:1.5.5")
+ implementation("androidx.activity:activity-ktx:1.7.0")
+ implementation("androidx.fragment:fragment-ktx:1.5.6")
implementation(libs.constraintLayout)
- implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.5.1")
- implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1")
+ implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.1")
+ implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
implementation("androidx.navigation:navigation-fragment-ktx:2.5.3")
implementation("androidx.navigation:navigation-ui-ktx:2.5.3")
diff --git a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/MainActivity.kt b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/MainActivity.kt
index 634a638..aa29ddb 100644
--- a/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/MainActivity.kt
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/MainActivity.kt
@@ -25,6 +25,8 @@
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
+import androidx.navigation.ui.setupWithNavController
+import com.google.android.material.bottomnavigation.BottomNavigationView
class MainActivity : AppCompatActivity() {
@@ -47,11 +49,14 @@
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
+ val navView: BottomNavigationView = binding.navView
+
val navController = findNavController(R.id.nav_host_fragment_activity_main)
val appBarConfiguration = AppBarConfiguration(
- setOf(R.id.navigation_home)
+ setOf(R.id.navigation_home, R.id.navigation_scanner, R.id.navigation_advertiser)
)
setupActionBarWithNavController(navController, appBarConfiguration)
+ navView.setupWithNavController(navController)
}
override fun onResume() {
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
new file mode 100644
index 0000000..3f12108
--- /dev/null
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/advertiser/AdvertiserFragment.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.bluetooth.integration.testapp.ui.advertiser
+
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.bluetooth.integration.testapp.databinding.FragmentAdvertiserBinding
+import androidx.fragment.app.Fragment
+
+class AdvertiserFragment : Fragment() {
+
+ companion object {
+ private const val TAG = "AdvertiserFragment"
+ }
+
+ private var _binding: FragmentAdvertiserBinding? = null
+
+ // This property is only valid between onCreateView and onDestroyView.
+ private val binding get() = _binding!!
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ Log.d(
+ TAG, "onCreateView() called with: inflater = $inflater, " +
+ "container = $container, savedInstanceState = $savedInstanceState"
+ )
+
+ _binding = FragmentAdvertiserBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
+}
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
new file mode 100644
index 0000000..ec8e6d9
--- /dev/null
+++ b/bluetooth/integration-tests/testapp/src/main/java/androidx/bluetooth/integration/testapp/ui/scanner/ScannerFragment.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.bluetooth.integration.testapp.ui.scanner
+
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.bluetooth.integration.testapp.databinding.FragmentScannerBinding
+import androidx.fragment.app.Fragment
+
+class ScannerFragment : Fragment() {
+
+ companion object {
+ private const val TAG = "ScannerFragment"
+ }
+
+ private var _binding: FragmentScannerBinding? = null
+
+ // This property is only valid between onCreateView and onDestroyView.
+ private val binding get() = _binding!!
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ Log.d(
+ TAG, "onCreateView() called with: inflater = $inflater, " +
+ "container = $container, savedInstanceState = $savedInstanceState"
+ )
+
+ _binding = FragmentScannerBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
+}
diff --git a/bluetooth/integration-tests/testapp/src/main/res/drawable/baseline_bluetooth_searching_24.xml b/bluetooth/integration-tests/testapp/src/main/res/drawable/baseline_bluetooth_searching_24.xml
new file mode 100644
index 0000000..0e722c2
--- /dev/null
+++ b/bluetooth/integration-tests/testapp/src/main/res/drawable/baseline_bluetooth_searching_24.xml
@@ -0,0 +1,21 @@
+<!--
+ 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.
+ -->
+
+<vector android:autoMirrored="true" android:height="24dp"
+ android:tint="#000000" android:viewportHeight="24"
+ android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="@android:color/white" android:pathData="M14.24,12.01l2.32,2.32c0.28,-0.72 0.44,-1.51 0.44,-2.33 0,-0.82 -0.16,-1.59 -0.43,-2.31l-2.33,2.32zM19.53,6.71l-1.26,1.26c0.63,1.21 0.98,2.57 0.98,4.02s-0.36,2.82 -0.98,4.02l1.2,1.2c0.97,-1.54 1.54,-3.36 1.54,-5.31 -0.01,-1.89 -0.55,-3.67 -1.48,-5.19zM15.71,7.71L10,2L9,2v7.59L4.41,5 3,6.41 8.59,12 3,17.59 4.41,19 9,14.41L9,22h1l5.71,-5.71 -4.3,-4.29 4.3,-4.29zM11,5.83l1.88,1.88L11,9.59L11,5.83zM12.88,16.29L11,18.17v-3.76l1.88,1.88z"/>
+</vector>
diff --git a/bluetooth/integration-tests/testapp/src/main/res/drawable/baseline_wb_iridescent_24.xml b/bluetooth/integration-tests/testapp/src/main/res/drawable/baseline_wb_iridescent_24.xml
new file mode 100644
index 0000000..37762ce
--- /dev/null
+++ b/bluetooth/integration-tests/testapp/src/main/res/drawable/baseline_wb_iridescent_24.xml
@@ -0,0 +1,21 @@
+<!--
+ 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.
+ -->
+
+<vector android:height="24dp" android:tint="#000000"
+ android:viewportHeight="24" android:viewportWidth="24"
+ android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+ <path android:fillColor="@android:color/white" android:pathData="M5,14.5h14v-6L5,8.5v6zM11,0.55L11,3.5h2L13,0.55h-2zM19.04,3.05l-1.79,1.79 1.41,1.41 1.8,-1.79 -1.42,-1.41zM13,22.45L13,19.5h-2v2.95h2zM20.45,18.54l-1.8,-1.79 -1.41,1.41 1.79,1.8 1.42,-1.42zM3.55,4.46l1.79,1.79 1.41,-1.41 -1.79,-1.79 -1.41,1.41zM4.96,19.95l1.79,-1.8 -1.41,-1.41 -1.79,1.79 1.41,1.42z"/>
+</vector>
diff --git a/bluetooth/integration-tests/testapp/src/main/res/layout/activity_main.xml b/bluetooth/integration-tests/testapp/src/main/res/layout/activity_main.xml
index ad75688..4c9b86fb 100644
--- a/bluetooth/integration-tests/testapp/src/main/res/layout/activity_main.xml
+++ b/bluetooth/integration-tests/testapp/src/main/res/layout/activity_main.xml
@@ -23,6 +23,18 @@
android:layout_height="match_parent"
tools:context=".MainActivity">
+ <com.google.android.material.bottomnavigation.BottomNavigationView
+ android:id="@+id/nav_view"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="0dp"
+ android:layout_marginEnd="0dp"
+ android:background="?android:attr/windowBackground"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintRight_toRightOf="parent"
+ app:menu="@menu/bottom_nav_menu" />
+
<fragment
android:id="@+id/nav_host_fragment_activity_main"
android:name="androidx.navigation.fragment.NavHostFragment"
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
new file mode 100644
index 0000000..14e7b3e
--- /dev/null
+++ b/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_advertiser.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.
+ -->
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+</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
new file mode 100644
index 0000000..14e7b3e
--- /dev/null
+++ b/bluetooth/integration-tests/testapp/src/main/res/layout/fragment_scanner.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.
+ -->
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/bluetooth/integration-tests/testapp/src/main/res/menu/bottom_nav_menu.xml b/bluetooth/integration-tests/testapp/src/main/res/menu/bottom_nav_menu.xml
index 87e60bd..68f6353 100644
--- a/bluetooth/integration-tests/testapp/src/main/res/menu/bottom_nav_menu.xml
+++ b/bluetooth/integration-tests/testapp/src/main/res/menu/bottom_nav_menu.xml
@@ -21,4 +21,14 @@
android:icon="@drawable/ic_bluetooth_24"
android:title="@string/title_home" />
+ <item
+ android:id="@+id/navigation_scanner"
+ android:icon="@drawable/baseline_bluetooth_searching_24"
+ android:title="@string/title_scanner" />
+
+ <item
+ android:id="@+id/navigation_advertiser"
+ android:icon="@drawable/baseline_wb_iridescent_24"
+ android:title="@string/title_advertiser" />
+
</menu>
diff --git a/bluetooth/integration-tests/testapp/src/main/res/navigation/nav_graph.xml b/bluetooth/integration-tests/testapp/src/main/res/navigation/nav_graph.xml
index 2713795..b3c74a1 100644
--- a/bluetooth/integration-tests/testapp/src/main/res/navigation/nav_graph.xml
+++ b/bluetooth/integration-tests/testapp/src/main/res/navigation/nav_graph.xml
@@ -26,4 +26,16 @@
android:label="@string/title_home"
tools:layout="@layout/fragment_home" />
+ <fragment
+ android:id="@+id/navigation_scanner"
+ android:name="androidx.bluetooth.integration.testapp.ui.scanner.ScannerFragment"
+ android:label="@string/title_scanner"
+ tools:layout="@layout/fragment_home" />
+
+ <fragment
+ android:id="@+id/navigation_advertiser"
+ android:name="androidx.bluetooth.integration.testapp.ui.advertiser.AdvertiserFragment"
+ android:label="@string/title_advertiser"
+ tools:layout="@layout/fragment_home" />
+
</navigation>
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 4ec5c99..d60cf5c 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
@@ -18,6 +18,8 @@
<string name="app_name">AndroidX Bluetooth Test App</string>
<string name="title_home">AndroidX Bluetooth</string>
+ <string name="title_scanner">Scanner</string>
+ <string name="title_advertiser">Advertiser</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/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
index f3b5a89..1bea081 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
@@ -19,7 +19,6 @@
import androidx.benchmark.gradle.BenchmarkPlugin
import androidx.build.AndroidXImplPlugin.Companion.TASK_TIMEOUT_MINUTES
import androidx.build.Release.DEFAULT_PUBLISH_CONFIG
-import androidx.build.SupportConfig.BUILD_TOOLS_VERSION
import androidx.build.SupportConfig.COMPILE_SDK_VERSION
import androidx.build.SupportConfig.DEFAULT_MIN_SDK_VERSION
import androidx.build.SupportConfig.INSTRUMENTATION_RUNNER
@@ -591,7 +590,7 @@
}
compileSdkVersion(COMPILE_SDK_VERSION)
- buildToolsVersion = BUILD_TOOLS_VERSION
+ buildToolsVersion = SupportConfig.buildToolsVersion(project)
defaultConfig.targetSdk = TARGET_SDK_VERSION
ndkVersion = SupportConfig.NDK_VERSION
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 cab8d67..25452de 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/docs/AndroidXDocsImplPlugin.kt
@@ -98,7 +98,7 @@
is LibraryPlugin -> {
val libraryExtension = project.extensions.getByType<LibraryExtension>()
libraryExtension.compileSdkVersion = SupportConfig.COMPILE_SDK_VERSION
- libraryExtension.buildToolsVersion = SupportConfig.BUILD_TOOLS_VERSION
+ libraryExtension.buildToolsVersion = SupportConfig.buildToolsVersion(project)
// Use a local debug keystore to avoid build server issues.
val debugSigningConfig = libraryExtension.signingConfigs.getByName("debug")
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/SdkResourceGenerator.kt b/buildSrc/public/src/main/kotlin/androidx/build/SdkResourceGenerator.kt
index 439f4c9..35a8575 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/SdkResourceGenerator.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/SdkResourceGenerator.kt
@@ -28,6 +28,7 @@
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.plugins.JavaPluginExtension
+import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.OutputDirectory
@@ -57,7 +58,7 @@
val compileSdkVersion: String = SupportConfig.COMPILE_SDK_VERSION
@get:Input
- val buildToolsVersion: String = SupportConfig.BUILD_TOOLS_VERSION
+ abstract val buildToolsVersion: Property<String>
@get:Input
val minSdkVersion: Int = SupportConfig.DEFAULT_MIN_SDK_VERSION
@@ -109,7 +110,7 @@
writer.write("navigationRuntime=$navigationRuntime\n")
writer.write("kotlinStdlib=$kotlinStdlib\n")
writer.write("compileSdkVersion=$compileSdkVersion\n")
- writer.write("buildToolsVersion=$buildToolsVersion\n")
+ writer.write("buildToolsVersion=${buildToolsVersion.get()}\n")
writer.write("minSdkVersion=$minSdkVersion\n")
writer.write("kotlinVersion=$kotlinVersion\n")
writer.write("kspVersion=$kspVersion\n")
@@ -136,6 +137,11 @@
project.getRepositoryDirectory().toRelativeString(project.projectDir)
it.debugKeystore.set(project.getKeystore())
it.outputDir.set(generatedDirectory)
+ it.buildToolsVersion.set(
+ project.provider {
+ SupportConfig.buildToolsVersion(project)
+ }
+ )
it.buildSrcOutRelativePath =
(project.properties["buildSrcOut"] as File).toRelativeString(project.projectDir)
// Copy repositories used for the library project so that it can replicate the same
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt b/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt
index 9842cf0..de3d495 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt
@@ -24,7 +24,8 @@
object SupportConfig {
const val DEFAULT_MIN_SDK_VERSION = 14
const val INSTRUMENTATION_RUNNER = "androidx.test.runner.AndroidJUnitRunner"
- const val BUILD_TOOLS_VERSION = "34.0.0-rc3"
+ private const val INTERNAL_BUILD_TOOLS_VERSION = "34.0.0-rc3"
+ private const val PUBLIC_BUILD_TOOLS_VERSION = "33.0.1"
const val NDK_VERSION = "23.1.7779620"
/**
@@ -47,6 +48,20 @@
* set to a pre-release version, tests will only be able to run on pre-release devices.
*/
const val TARGET_SDK_VERSION = 33
+
+ /**
+ * Returns the build tools version that should be used for the project.
+ *
+ * Note that the value might be different between the internal and external (github) builds.
+ */
+ @JvmStatic
+ fun buildToolsVersion(project: Project): String {
+ return if (ProjectLayoutType.isPlayground(project)) {
+ PUBLIC_BUILD_TOOLS_VERSION
+ } else {
+ INTERNAL_BUILD_TOOLS_VERSION
+ }
+ }
}
fun Project.getExternalProjectPath(): File {
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/AeFpsRangeLegacyQuirk.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/AeFpsRangeLegacyQuirk.kt
new file mode 100644
index 0000000..e8c12f7
--- /dev/null
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/AeFpsRangeLegacyQuirk.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.camera.camera2.pipe.integration.compat.quirk
+
+import android.annotation.SuppressLint
+import android.hardware.camera2.CameraCharacteristics
+import android.util.Range
+import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.CameraMetadata
+import androidx.camera.core.impl.Quirk
+
+/**
+ *
+ * QuirkSummary
+ * - Bug Id: b/167425305
+ * - Description: Quirk required to maintain good exposure on legacy devices by specifying a
+ * proper [android.hardware.camera2.CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE].
+ * Legacy devices set the AE target FPS range to [30, 30]. This can potentially
+ * cause underexposure issues.
+ * [androidx.camera.camera2.internal.compat.workaround.AeFpsRange]
+ * contains a workaround that is used on legacy devices to set a AE FPS range
+ * whose upper bound is 30, which guarantees a smooth frame rate, and whose lower
+ * bound is as small as possible to properly expose frames in low light
+ * conditions. The default behavior on non legacy devices does not add the AE
+ * FPS range option.
+ * - Device(s): All legacy devices
+ *
+ * TODO(b/270421716): enable CameraXQuirksClassDetector lint check when kotlin is supported.
+ */
+@SuppressLint("CameraXQuirksClassDetector")
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+class AeFpsRangeLegacyQuirk(cameraMetadata: CameraMetadata) : Quirk {
+ /**
+ * Returns the fps range whose upper is 30 and whose lower is the smallest, or null if no
+ * range has an upper equal to 30. The rationale is:
+ * - Range upper is always 30 so that a smooth frame rate is guaranteed.
+ * - Range lower contains the smallest supported value so that it can adapt as much as
+ * possible to low light conditions.
+ */
+ val range: Range<Int>? by lazy {
+ val availableFpsRanges: Array<out Range<Int>>? =
+ cameraMetadata[CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES]
+ pickSuitableFpsRange(availableFpsRanges)
+ }
+
+ private fun pickSuitableFpsRange(
+ availableFpsRanges: Array<out Range<Int>>?
+ ): Range<Int>? {
+ if (availableFpsRanges.isNullOrEmpty()) {
+ return null
+ }
+ var pickedRange: Range<Int>? = null
+ for (fpsRangeBeforeCorrection in availableFpsRanges) {
+ val fpsRange = getCorrectedFpsRange(fpsRangeBeforeCorrection)
+ if (fpsRange.upper != 30) {
+ continue
+ }
+ if (pickedRange == null) {
+ pickedRange = fpsRange
+ } else {
+ if (fpsRange.lower < pickedRange.lower) {
+ pickedRange = fpsRange
+ }
+ }
+ }
+ return pickedRange
+ }
+
+ /**
+ * On android 5.0/5.1, [CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES]
+ * returns wrong ranges whose values were multiplied by 1000. So we need to convert them to the
+ * correct values.
+ */
+ private fun getCorrectedFpsRange(fpsRange: Range<Int>): Range<Int> {
+ var newUpper = fpsRange.upper
+ var newLower = fpsRange.lower
+ if (fpsRange.upper >= 1000) {
+ newUpper = fpsRange.upper / 1000
+ }
+ if (fpsRange.lower >= 1000) {
+ newLower = fpsRange.lower / 1000
+ }
+ return Range(newLower, newUpper)
+ }
+
+ companion object {
+ fun isEnabled(cameraMetadata: CameraMetadata): Boolean {
+ val level = cameraMetadata[CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL]
+ return level == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY
+ }
+ }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/CameraQuirks.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/CameraQuirks.kt
index d2fbf1e..c46831d 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/CameraQuirks.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/quirk/CameraQuirks.kt
@@ -47,6 +47,9 @@
// Go through all defined camera quirks in lexicographical order,
// and add them to `quirks` if they should be loaded
+ if (AeFpsRangeLegacyQuirk.isEnabled(cameraMetadata)) {
+ quirks.add(AeFpsRangeLegacyQuirk(cameraMetadata))
+ }
if (AfRegionFlipHorizontallyQuirk.isEnabled(cameraMetadata)) {
quirks.add(AfRegionFlipHorizontallyQuirk())
}
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/workaround/AeFpsRange.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/workaround/AeFpsRange.kt
new file mode 100644
index 0000000..8f1c132
--- /dev/null
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/compat/workaround/AeFpsRange.kt
@@ -0,0 +1,46 @@
+/*
+ * 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.camera.camera2.pipe.integration.compat.workaround
+
+import android.util.Range
+import androidx.annotation.RequiresApi
+import androidx.camera.camera2.pipe.integration.compat.quirk.AeFpsRangeLegacyQuirk
+import androidx.camera.camera2.pipe.integration.compat.quirk.CameraQuirks
+import androidx.camera.camera2.pipe.integration.config.CameraScope
+import javax.inject.Inject
+
+/**
+ * Sets an AE target FPS range on legacy devices from [AeFpsRangeLegacyQuirk] to maintain good
+ * exposure.
+ */
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+
+@CameraScope
+class AeFpsRange @Inject constructor(cameraQuirks: CameraQuirks) {
+ private val aeTargetFpsRange: Range<Int>? by lazy {
+ /** Chooses the AE target FPS range on legacy devices. */
+ cameraQuirks.quirks[AeFpsRangeLegacyQuirk::class.java]?.range
+ }
+
+ /**
+ * Sets the [android.hardware.camera2.CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE]
+ * option on legacy device when possible.
+ */
+ fun getTargetAeFpsRange(): Range<Int>? {
+ return aeTargetFpsRange
+ }
+}
\ No newline at end of file
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/State3AControl.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/State3AControl.kt
index b402f17..f61c4bc 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/State3AControl.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/State3AControl.kt
@@ -19,10 +19,12 @@
import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraDevice
import android.hardware.camera2.CaptureRequest
+import android.util.Range
import androidx.annotation.GuardedBy
import androidx.annotation.RequiresApi
import androidx.camera.camera2.pipe.integration.adapter.SessionConfigAdapter
import androidx.camera.camera2.pipe.integration.adapter.propagateTo
+import androidx.camera.camera2.pipe.integration.compat.workaround.AeFpsRange
import androidx.camera.camera2.pipe.integration.compat.workaround.AutoFlashAEModeDisabler
import androidx.camera.camera2.pipe.integration.config.CameraScope
import androidx.camera.core.CameraControl
@@ -43,6 +45,7 @@
class State3AControl @Inject constructor(
val cameraProperties: CameraProperties,
private val aeModeDisabler: AutoFlashAEModeDisabler,
+ private val aeFpsRange: AeFpsRange
) : UseCaseCameraControl, UseCaseCamera.RunningUseCasesChangeListener {
private var _useCaseCamera: UseCaseCamera? = null
override var useCaseCamera: UseCaseCamera?
@@ -94,10 +97,12 @@
var template by updateOnPropertyChange(DEFAULT_REQUEST_TEMPLATE)
var preferredAeMode: Int? by updateOnPropertyChange(null)
var preferredFocusMode: Int? by updateOnPropertyChange(null)
+ var preferredAeFpsRange: Range<Int>? by updateOnPropertyChange(aeFpsRange.getTargetAeFpsRange())
override fun reset() {
synchronized(lock) { updateSignals.toList() }.cancelAll()
preferredAeMode = null
+ preferredAeFpsRange = null
preferredFocusMode = null
flashMode = DEFAULT_FLASH_MODE
template = DEFAULT_REQUEST_TEMPLATE
@@ -114,6 +119,8 @@
}
fun invalidate() {
+ // TODO(b/276779600): Refactor and move the setting of these parameter to
+ // CameraGraph.Config(requiredParameters = mapOf(....)).
val preferAeMode = preferredAeMode ?: when (flashMode) {
ImageCapture.FLASH_MODE_OFF -> CaptureRequest.CONTROL_AE_MODE_ON
ImageCapture.FLASH_MODE_ON -> CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH
@@ -125,14 +132,18 @@
val preferAfMode = preferredFocusMode ?: getDefaultAfMode()
+ val parameters: MutableMap<CaptureRequest.Key<*>, Any> = mutableMapOf(
+ CaptureRequest.CONTROL_AE_MODE to getSupportedAeMode(preferAeMode),
+ CaptureRequest.CONTROL_AF_MODE to getSupportedAfMode(preferAfMode),
+ CaptureRequest.CONTROL_AWB_MODE to getSupportedAwbMode(
+ CaptureRequest.CONTROL_AWB_MODE_AUTO))
+
+ preferredAeFpsRange?.let {
+ parameters[CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE] = it
+ }
+
useCaseCamera?.requestControl?.addParametersAsync(
- values = mapOf(
- CaptureRequest.CONTROL_AE_MODE to getSupportedAeMode(preferAeMode),
- CaptureRequest.CONTROL_AF_MODE to getSupportedAfMode(preferAfMode),
- CaptureRequest.CONTROL_AWB_MODE to getSupportedAwbMode(
- CaptureRequest.CONTROL_AWB_MODE_AUTO
- ),
- )
+ values = parameters
)?.apply {
toCompletableDeferred().also { signal ->
synchronized(lock) {
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/FocusMeteringControlTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/FocusMeteringControlTest.kt
index 3b0b4c2..b51e10f 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/FocusMeteringControlTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/adapter/FocusMeteringControlTest.kt
@@ -34,6 +34,7 @@
import androidx.camera.camera2.pipe.integration.compat.StreamConfigurationMapCompat
import androidx.camera.camera2.pipe.integration.compat.ZoomCompat
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.MeteringRegionCorrection
import androidx.camera.camera2.pipe.integration.compat.workaround.NoOpAutoFlashAEModeDisabler
import androidx.camera.camera2.pipe.integration.compat.workaround.NoOpMeteringRegionCorrection
@@ -1584,6 +1585,18 @@
) = State3AControl(
properties,
NoOpAutoFlashAEModeDisabler,
+ AeFpsRange(
+ CameraQuirks(
+ FakeCameraMetadata(),
+ StreamConfigurationMapCompat(
+ StreamConfigurationMapBuilder.newBuilder().build(),
+ OutputSizesCorrector(
+ FakeCameraMetadata(),
+ StreamConfigurationMapBuilder.newBuilder().build()
+ )
+ )
+ )
+ )
).apply {
this.useCaseCamera = useCaseCamera
}
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/AeFpsRangeTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/AeFpsRangeTest.kt
new file mode 100644
index 0000000..1f0626e
--- /dev/null
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/compat/workaround/AeFpsRangeTest.kt
@@ -0,0 +1,152 @@
+/*
+ * 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.camera.camera2.pipe.integration.compat.workaround
+
+import android.hardware.camera2.CameraCharacteristics
+import android.os.Build
+import android.util.Range
+import androidx.camera.camera2.pipe.integration.compat.StreamConfigurationMapCompat
+import androidx.camera.camera2.pipe.integration.compat.quirk.CameraQuirks
+import androidx.camera.camera2.pipe.testing.FakeCameraMetadata
+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 org.robolectric.shadows.StreamConfigurationMapBuilder
+
+@RunWith(RobolectricTestRunner::class)
+@DoNotInstrument
+@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
+class AeFpsRangeTest {
+ @Test
+ fun validEntryExists_correctRangeIsSelected() {
+ val availableFpsRanges: Array<Range<Int>> = arrayOf(
+ Range(25, 30),
+ Range(7, 33),
+ Range(15, 30),
+ Range(11, 22),
+ Range(30, 30)
+ )
+ val aeFpsRange: AeFpsRange =
+ createAeFpsRange(
+ CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY,
+ availableFpsRanges
+ )
+ val pick = getAeFpsRange(aeFpsRange)
+ assertThat(pick).isEqualTo(Range(15, 30))
+ }
+
+ @Test
+ fun noValidEntry_doesNotSetFpsRange() {
+ val availableFpsRanges: Array<Range<Int>> = arrayOf(
+ Range(25, 25),
+ Range(7, 33),
+ Range(15, 24),
+ Range(11, 22)
+ )
+ val aeFpsRange =
+ createAeFpsRange(
+ CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY,
+ availableFpsRanges
+ )
+ val pick = getAeFpsRange(aeFpsRange)
+ assertThat(pick).isNull()
+ }
+
+ @Test
+ fun availableArrayIsNull_doesNotSetFpsRange() {
+ val aeFpsRange =
+ createAeFpsRange(
+ CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY,
+ null
+ )
+ val pick = getAeFpsRange(aeFpsRange)
+ assertThat(pick).isNull()
+ }
+
+ @Test
+ fun limitedDevices_doesNotSetFpsRange() {
+ val availableFpsRanges: Array<Range<Int>> = arrayOf(
+ Range(15, 30)
+ )
+ val aeFpsRange =
+ createAeFpsRange(
+ CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED,
+ availableFpsRanges
+ )
+ val pick = getAeFpsRange(aeFpsRange)
+ assertThat(pick).isNull()
+ }
+
+ @Test
+ fun fullDevices_doesNotSetFpsRange() {
+ val availableFpsRanges: Array<Range<Int>> = arrayOf(
+ Range(15, 30)
+ )
+ val aeFpsRange =
+ createAeFpsRange(
+ CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL,
+ availableFpsRanges
+ )
+ val pick = getAeFpsRange(aeFpsRange)
+ assertThat(pick).isNull()
+ }
+
+ @Test
+ fun level3Devices_doesNotSetFpsRange() {
+ val availableFpsRanges: Array<Range<Int>> = arrayOf(
+ Range(15, 30)
+ )
+ val aeFpsRange =
+ createAeFpsRange(
+ CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_3,
+ availableFpsRanges
+ )
+ val pick = getAeFpsRange(aeFpsRange)
+ assertThat(pick).isNull()
+ }
+
+ private fun createAeFpsRange(
+ hardwareLevel: Int,
+ availableFpsRanges: Array<Range<Int>>?
+ ): AeFpsRange {
+ val streamConfigurationMap = StreamConfigurationMapBuilder.newBuilder().build()
+
+ val metadata = FakeCameraMetadata(
+ mapOf(
+ CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL to hardwareLevel,
+ CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES to availableFpsRanges,
+ CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP to streamConfigurationMap
+ )
+ )
+ return AeFpsRange(
+ CameraQuirks(
+ metadata,
+ StreamConfigurationMapCompat(
+ streamConfigurationMap,
+ OutputSizesCorrector(metadata, streamConfigurationMap)
+ )
+ )
+ )
+ }
+
+ private fun getAeFpsRange(aeFpsRange: AeFpsRange): Range<Int>? {
+ return aeFpsRange.getTargetAeFpsRange()
+ }
+}
\ No newline at end of file
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 34b3175..28e3c559 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
@@ -38,9 +38,13 @@
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.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.config.UseCaseGraphConfig
import androidx.camera.camera2.pipe.integration.testing.FakeCameraGraph
import androidx.camera.camera2.pipe.integration.testing.FakeCameraGraphSession
@@ -77,6 +81,7 @@
import org.mockito.Mockito.mock
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
+import org.robolectric.shadows.StreamConfigurationMapBuilder
import org.robolectric.util.ReflectionHelpers
@RunWith(RobolectricCameraPipeTestRunner::class)
@@ -207,6 +212,18 @@
State3AControl(
fakeCameraProperties,
NoOpAutoFlashAEModeDisabler,
+ AeFpsRange(
+ CameraQuirks(
+ FakeCameraMetadata(),
+ StreamConfigurationMapCompat(
+ StreamConfigurationMapBuilder.newBuilder().build(),
+ OutputSizesCorrector(
+ FakeCameraMetadata(),
+ StreamConfigurationMapBuilder.newBuilder().build()
+ )
+ )
+ )
+ )
).apply {
useCaseCamera = fakeUseCaseCamera
},
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/FlashControlTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/FlashControlTest.kt
index 1666ff2..d281927 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/FlashControlTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/FlashControlTest.kt
@@ -20,7 +20,11 @@
import android.hardware.camera2.CaptureRequest
import android.os.Build
import androidx.camera.camera2.pipe.integration.adapter.RobolectricCameraPipeTestRunner
+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.NoOpAutoFlashAEModeDisabler
+import androidx.camera.camera2.pipe.integration.compat.workaround.OutputSizesCorrector
import androidx.camera.camera2.pipe.integration.testing.FakeCameraProperties
import androidx.camera.camera2.pipe.integration.testing.FakeUseCaseCamera
import androidx.camera.camera2.pipe.integration.testing.FakeUseCaseCameraRequestControl
@@ -43,6 +47,7 @@
import org.junit.runner.RunWith
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
+import org.robolectric.shadows.StreamConfigurationMapBuilder
@RunWith(RobolectricCameraPipeTestRunner::class)
@DoNotInstrument
@@ -71,8 +76,24 @@
)
private val fakeRequestControl = FakeUseCaseCameraRequestControl()
private val fakeUseCaseCamera = FakeUseCaseCamera(requestControl = fakeRequestControl)
+ private val aeFpsRange = AeFpsRange(
+ CameraQuirks(
+ FakeCameraMetadata(),
+ StreamConfigurationMapCompat(
+ StreamConfigurationMapBuilder.newBuilder().build(),
+ OutputSizesCorrector(
+ FakeCameraMetadata(),
+ StreamConfigurationMapBuilder.newBuilder().build()
+ )
+ )
+ )
+ )
private val state3AControl =
- State3AControl(FakeCameraProperties(metadata), NoOpAutoFlashAEModeDisabler).apply {
+ State3AControl(
+ FakeCameraProperties(metadata),
+ NoOpAutoFlashAEModeDisabler,
+ aeFpsRange
+ ).apply {
useCaseCamera = fakeUseCaseCamera
}
private lateinit var flashControl: FlashControl
@@ -92,7 +113,11 @@
val fakeCameraProperties = FakeCameraProperties()
val flashControl = FlashControl(
- State3AControl(fakeCameraProperties, NoOpAutoFlashAEModeDisabler).apply {
+ State3AControl(
+ fakeCameraProperties,
+ NoOpAutoFlashAEModeDisabler,
+ aeFpsRange
+ ).apply {
useCaseCamera = fakeUseCaseCamera
},
fakeUseCaseThreads,
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/TorchControlTest.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/TorchControlTest.kt
index aba1a20..e5d846e 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/TorchControlTest.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/impl/TorchControlTest.kt
@@ -20,7 +20,11 @@
import android.os.Build
import androidx.camera.camera2.pipe.Result3A
import androidx.camera.camera2.pipe.integration.adapter.RobolectricCameraPipeTestRunner
+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.NoOpAutoFlashAEModeDisabler
+import androidx.camera.camera2.pipe.integration.compat.workaround.OutputSizesCorrector
import androidx.camera.camera2.pipe.integration.testing.FakeCameraProperties
import androidx.camera.camera2.pipe.integration.testing.FakeUseCaseCamera
import androidx.camera.camera2.pipe.integration.testing.FakeUseCaseCameraRequestControl
@@ -49,6 +53,7 @@
import org.junit.runner.RunWith
import org.robolectric.annotation.Config
import org.robolectric.annotation.internal.DoNotInstrument
+import org.robolectric.shadows.StreamConfigurationMapBuilder
@RunWith(RobolectricCameraPipeTestRunner::class)
@DoNotInstrument
@@ -80,6 +85,18 @@
// Set a CompletableDeferred without set it to completed.
setTorchResult = CompletableDeferred()
}
+ private val aeFpsRange = AeFpsRange(
+ CameraQuirks(
+ FakeCameraMetadata(),
+ StreamConfigurationMapCompat(
+ StreamConfigurationMapBuilder.newBuilder().build(),
+ OutputSizesCorrector(
+ FakeCameraMetadata(),
+ StreamConfigurationMapBuilder.newBuilder().build()
+ )
+ )
+ )
+ )
private lateinit var torchControl: TorchControl
@@ -92,6 +109,7 @@
State3AControl(
fakeCameraProperties,
NoOpAutoFlashAEModeDisabler,
+ aeFpsRange
).apply {
useCaseCamera = fakeUseCaseCamera
},
@@ -109,7 +127,11 @@
// Without a flash unit, this Job will complete immediately with a IllegalStateException
TorchControl(
fakeCameraProperties,
- State3AControl(fakeCameraProperties, NoOpAutoFlashAEModeDisabler).apply {
+ State3AControl(
+ fakeCameraProperties,
+ NoOpAutoFlashAEModeDisabler,
+ aeFpsRange
+ ).apply {
useCaseCamera = fakeUseCaseCamera
},
fakeUseCaseThreads,
@@ -126,7 +148,11 @@
val torchState = TorchControl(
fakeCameraProperties,
- State3AControl(fakeCameraProperties, NoOpAutoFlashAEModeDisabler).apply {
+ State3AControl(
+ fakeCameraProperties,
+ NoOpAutoFlashAEModeDisabler,
+ aeFpsRange
+ ).apply {
useCaseCamera = fakeUseCaseCamera
},
@@ -146,7 +172,11 @@
TorchControl(
fakeCameraProperties,
- State3AControl(fakeCameraProperties, NoOpAutoFlashAEModeDisabler).apply {
+ State3AControl(
+ fakeCameraProperties,
+ NoOpAutoFlashAEModeDisabler,
+ aeFpsRange
+ ).apply {
useCaseCamera = fakeUseCaseCamera
},
fakeUseCaseThreads,
diff --git a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeCameraInfoAdapterCreator.kt b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeCameraInfoAdapterCreator.kt
index f0b520c..3e93b84 100644
--- a/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeCameraInfoAdapterCreator.kt
+++ b/camera/camera-camera2-pipe-integration/src/test/java/androidx/camera/camera2/pipe/integration/testing/FakeCameraInfoAdapterCreator.kt
@@ -28,6 +28,7 @@
import androidx.camera.camera2.pipe.integration.adapter.EncoderProfilesProviderAdapter
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.MeteringRegionCorrection
import androidx.camera.camera2.pipe.integration.compat.workaround.NoOpAutoFlashAEModeDisabler
import androidx.camera.camera2.pipe.integration.compat.workaround.OutputSizesCorrector
@@ -95,9 +96,6 @@
zoomControl: ZoomControl = this.zoomControl,
): CameraInfoAdapter {
val fakeUseCaseCamera = FakeUseCaseCamera()
- val state3AControl = State3AControl(cameraProperties, NoOpAutoFlashAEModeDisabler).apply {
- useCaseCamera = fakeUseCaseCamera
- }
val fakeStreamConfigurationMap = StreamConfigurationMapCompat(
streamConfigurationMap,
OutputSizesCorrector(cameraProperties.metadata, streamConfigurationMap)
@@ -106,6 +104,13 @@
cameraProperties.metadata,
fakeStreamConfigurationMap,
)
+ val state3AControl = State3AControl(
+ cameraProperties,
+ NoOpAutoFlashAEModeDisabler,
+ AeFpsRange(fakeCameraQuirks)
+ ).apply {
+ useCaseCamera = fakeUseCaseCamera
+ }
return CameraInfoAdapter(
cameraProperties,
CameraConfig(cameraId),
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 0ed3b9a..088aa5d 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
@@ -1185,7 +1185,7 @@
Map<DeferrableSurface, Long> streamUseCaseMap = new HashMap<>();
StreamUseCaseUtil.populateSurfaceToStreamUseCaseMapping(
mUseCaseAttachState.getAttachedSessionConfigs(),
- streamUseCaseMap, mCameraCharacteristicsCompat, false);
+ streamUseCaseMap, mCameraCharacteristicsCompat, true);
mCaptureSession.setStreamUseCaseMap(streamUseCaseMap);
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/AeFpsRangeLegacyQuirk.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/AeFpsRangeLegacyQuirk.java
index 5f3c1b4..5e78461 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/AeFpsRangeLegacyQuirk.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/AeFpsRangeLegacyQuirk.java
@@ -64,8 +64,8 @@
/**
* Returns the fps range whose upper is 30 and whose lower is the smallest, or null if no
* range has an upper equal to 30. The rational is:
- * (1) Range upper is always 30 so that a smooth frame rate is guaranteed.
- * (2) Range lower contains the smallest supported value so that it can adapt as much as
+ * 1. Range upper is always 30 so that a smooth frame rate is guaranteed.
+ * 2. Range lower contains the smallest supported value so that it can adapt as much as
* possible to low light conditions.
*/
@Nullable
diff --git a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateDemoScreen.java b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateDemoScreen.java
index 63300fa..b6f22ed 100644
--- a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateDemoScreen.java
+++ b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateDemoScreen.java
@@ -120,20 +120,17 @@
ICON_RES_IDS[i])).build())
.setContentId(contentId);
if (TextUtils.isEmpty(mActiveContentId) && i == 0) {
- tabBuilder.setActive(true);
+ mActiveContentId = contentId;
mTabTemplateBuilder.setTabContents(tabContents);
} else if (TextUtils.equals(mActiveContentId, contentId)) {
- tabBuilder.setActive(true);
mTabTemplateBuilder.setTabContents(tabContents);
- } else {
- tabBuilder.setActive(false);
}
Tab tab = tabBuilder.build();
mTabs.put(tab.getContentId(), tab);
mTabTemplateBuilder.addTab(tab);
}
- return mTabTemplateBuilder.build();
+ return mTabTemplateBuilder.setActiveTabContentId(mActiveContentId).build();
}
private ListTemplate createListTemplate() {
diff --git a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateLoadingDemoScreen.java b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateLoadingDemoScreen.java
index ee434b7..2c961fd 100644
--- a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateLoadingDemoScreen.java
+++ b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateLoadingDemoScreen.java
@@ -86,18 +86,14 @@
sIconResIds[i])).build())
.setContentId(contentId);
if (TextUtils.isEmpty(mActiveContentId) && i == 0) {
- tabBuilder.setActive(true);
- } else if (TextUtils.equals(mActiveContentId, contentId)) {
- tabBuilder.setActive(true);
- } else {
- tabBuilder.setActive(false);
+ mActiveContentId = contentId;
}
Tab tab = tabBuilder.build();
mTabs.put(tab.getContentId(), tab);
mTabTemplateBuilder.addTab(tab);
- if (tab.isActive()) {
+ if (TextUtils.equals(mActiveContentId, contentId)) {
if (i == 0) {
mTabTemplateBuilder.setLoading(true);
} else {
@@ -105,7 +101,7 @@
}
}
}
- return mTabTemplateBuilder.build();
+ return mTabTemplateBuilder.setActiveTabContentId(mActiveContentId).build();
}
private TabContents createSearchTab() {
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-or/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-or/strings.xml
index b80fcd6..d9d3573 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-or/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-or/strings.xml
@@ -38,7 +38,7 @@
<string name="settings_action_title" msgid="8616900063253887861">"ସେଟିଂସ"</string>
<string name="accept_action_title" msgid="4899660585470647578">"ଗ୍ରହଣ କରନ୍ତୁ"</string>
<string name="reject_action_title" msgid="6730366705938402668">"ଅଗ୍ରାହ୍ୟ କରନ୍ତୁ"</string>
- <string name="ok_action_title" msgid="7128494973966098611">"ଠିକ୍ ଅଛି"</string>
+ <string name="ok_action_title" msgid="7128494973966098611">"ଠିକ ଅଛି"</string>
<string name="throw_action_title" msgid="7163710562670220163">"ଥ୍ରୋ କରନ୍ତୁ"</string>
<string name="commute_action_title" msgid="2585755255290185096">"ଯାତାୟାତ"</string>
<string name="sign_out_action_title" msgid="1653943000866713010">"ସାଇନ ଆଉଟ କରନ୍ତୁ"</string>
diff --git a/car/app/app/api/public_plus_experimental_current.txt b/car/app/app/api/public_plus_experimental_current.txt
index 9812488..33ffc83 100644
--- a/car/app/app/api/public_plus_experimental_current.txt
+++ b/car/app/app/api/public_plus_experimental_current.txt
@@ -1170,10 +1170,13 @@
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
@@ -1185,6 +1188,7 @@
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);
@@ -1525,14 +1529,14 @@
method public String getContentId();
method public androidx.car.app.model.CarIcon getIcon();
method public androidx.car.app.model.CarText getTitle();
- method public boolean isActive();
+ method @Deprecated public boolean isActive();
method public androidx.car.app.model.Tab.Builder toBuilder();
}
public static final class Tab.Builder {
ctor public Tab.Builder();
method public androidx.car.app.model.Tab build();
- method public androidx.car.app.model.Tab.Builder setActive(boolean);
+ method @Deprecated public androidx.car.app.model.Tab.Builder setActive(boolean);
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);
@@ -1554,6 +1558,7 @@
}
@androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi @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();
@@ -1563,8 +1568,10 @@
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);
diff --git a/car/app/app/src/main/java/androidx/car/app/model/GridTemplate.java b/car/app/app/src/main/java/androidx/car/app/model/GridTemplate.java
index eac356c..2706095 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/GridTemplate.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/GridTemplate.java
@@ -66,8 +66,6 @@
* <p>The host decides how to map these size buckets to dimensions. The grid item image size
* and grid item width will vary by bucket, and the number of items per row
* will be adjusted according to bucket and screen size.
- *
- * @hide
*/
@ExperimentalCarApi
@RequiresCarApi(7)
@@ -109,6 +107,43 @@
@RequiresCarApi(7)
public static final int ITEM_SIZE_LARGE = (1 << 2);
+ /**
+ * The shape of each grid item image contained within this GridTemplate.
+ *
+ * <p>Grid item images will be cropped by the host to match the shape type.
+ */
+ @ExperimentalCarApi
+ @RequiresCarApi(7)
+ @IntDef(
+ value = {
+ ITEM_IMAGE_SHAPE_UNSET,
+ ITEM_IMAGE_SHAPE_CIRCLE,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ @RestrictTo(LIBRARY)
+ public @interface ItemImageShape {
+ }
+
+ /**
+ * Represents a preference to keep the images as-is without modifying their shape.
+ *
+ * <p>This is the default setting.
+ *
+ * @see GridTemplate.Builder#setItemImageShape(int)
+ */
+ @ExperimentalCarApi
+ @RequiresCarApi(7)
+ public static final int ITEM_IMAGE_SHAPE_UNSET = (1 << 0);
+
+ /**
+ * Represents a preference to crop all grid item images into the shape of a circle.
+ *
+ * @see GridTemplate.Builder#setItemImageShape(int)
+ */
+ @ExperimentalCarApi
+ @RequiresCarApi(7)
+ public static final int ITEM_IMAGE_SHAPE_CIRCLE = (1 << 1);
+
private final boolean mIsLoading;
@Nullable
private final CarText mTitle;
@@ -121,6 +156,8 @@
private final List<Action> mActions;
@ItemSize
private final int mItemSize;
+ @ItemImageShape
+ private final int mItemImageShape;
/**
* Returns the title of the template or {@code null} if not set.
@@ -197,6 +234,20 @@
return mItemSize;
}
+ /**
+ * Returns the item image shape.
+ *
+ * <p>All item images in the grid are cropped into the specified shape.
+ *
+ * @see GridTemplate.Builder#setItemImageShape(int)
+ */
+ @ExperimentalCarApi
+ @ItemImageShape
+ @RequiresCarApi(7)
+ public int getItemImageShape() {
+ return mItemImageShape;
+ }
+
@NonNull
@Override
public String toString() {
@@ -206,7 +257,7 @@
@Override
public int hashCode() {
return Objects.hash(mIsLoading, mTitle, mHeaderAction, mSingleList, mActionStrip,
- mItemSize);
+ mItemSize, mItemImageShape);
}
@Override
@@ -225,7 +276,8 @@
&& Objects.equals(mSingleList, otherTemplate.mSingleList)
&& Objects.equals(mActionStrip, otherTemplate.mActionStrip)
&& Objects.equals(mActions, otherTemplate.mActions)
- && mItemSize == otherTemplate.mItemSize;
+ && mItemSize == otherTemplate.mItemSize
+ && mItemImageShape == otherTemplate.mItemImageShape;
}
GridTemplate(Builder builder) {
@@ -236,6 +288,7 @@
mActionStrip = builder.mActionStrip;
mActions = CollectionUtils.unmodifiableCopy(builder.mActions);
mItemSize = builder.mItemSize;
+ mItemImageShape = builder.mItemImageShape;
}
/** Constructs an empty instance, used by serialization code. */
@@ -248,6 +301,7 @@
mActionStrip = null;
mActions = Collections.emptyList();
mItemSize = ITEM_SIZE_SMALL;
+ mItemImageShape = ITEM_IMAGE_SHAPE_UNSET;
}
/** A builder of {@link GridTemplate}. */
@@ -265,6 +319,7 @@
final List<Action> mActions = new ArrayList<>();
@ItemSize
int mItemSize = ITEM_SIZE_SMALL;
+ @ItemImageShape int mItemImageShape = ITEM_IMAGE_SHAPE_UNSET;
/**
* Sets whether the template is in a loading state.
@@ -393,6 +448,22 @@
}
/**
+ * Sets the item image shape for this template.
+ *
+ * <p>Grid item images will all be cropped to the specified shape. If set to
+ * ITEM_IMAGE_SHAPE_UNSET, the images will be rendered as-is without changing the shape.
+ *
+ * <p>If not set, default to ITEM_IMAGE_SHAPE_UNSET.
+ */
+ @ExperimentalCarApi
+ @NonNull
+ @RequiresCarApi(7)
+ public Builder setItemImageShape(@ItemImageShape int itemImageShape) {
+ mItemImageShape = itemImageShape;
+ return this;
+ }
+
+ /**
* Constructs the template defined by this builder.
*
* <h4>Requirements</h4>
diff --git a/car/app/app/src/main/java/androidx/car/app/model/Tab.java b/car/app/app/src/main/java/androidx/car/app/model/Tab.java
index 732d534..b6f6089 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/Tab.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/Tab.java
@@ -22,10 +22,10 @@
import androidx.annotation.Nullable;
import androidx.car.app.annotations.CarProtocol;
import androidx.car.app.annotations.ExperimentalCarApi;
+import androidx.car.app.annotations.KeepFields;
import androidx.car.app.annotations.RequiresCarApi;
import androidx.car.app.model.constraints.CarIconConstraints;
import androidx.car.app.model.constraints.CarTextConstraints;
-import androidx.car.app.annotations.KeepFields;
import java.util.Objects;
@@ -84,7 +84,9 @@
* Indicates if this is the currently active tab.
*
* @see Tab.Builder#setActive(boolean)
+ * @deprecated use {@link TabTemplate#getActiveTabContentId()} instead.
*/
+ @Deprecated
public boolean isActive() {
return mIsActive;
}
@@ -226,8 +228,11 @@
/**
* Sets the active state of the tab.
+ *
+ * @deprecated use {@link TabTemplate.Builder#setActiveTabContentId(String)} instead.
*/
@NonNull
+ @Deprecated
public Tab.Builder setActive(boolean isActive) {
mIsActive = isActive;
return this;
diff --git a/car/app/app/src/main/java/androidx/car/app/model/TabTemplate.java b/car/app/app/src/main/java/androidx/car/app/model/TabTemplate.java
index e3fb36f..1a55793 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/TabTemplate.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/TabTemplate.java
@@ -24,11 +24,12 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.car.app.Screen;
import androidx.car.app.annotations.CarProtocol;
import androidx.car.app.annotations.ExperimentalCarApi;
+import androidx.car.app.annotations.KeepFields;
import androidx.car.app.annotations.RequiresCarApi;
import androidx.car.app.model.constraints.TabsConstraints;
-import androidx.car.app.annotations.KeepFields;
import androidx.car.app.utils.CollectionUtils;
import java.util.ArrayList;
@@ -81,6 +82,8 @@
private final TabContents mTabContents;
@Nullable
private final List<Tab> mTabs;
+ @Nullable
+ private final String mActiveTabContentId;
/**
* Returns the {@link Action} that is set to be displayed in the header of the template, or
@@ -126,6 +129,14 @@
return requireNonNull(mTabCallbackDelegate);
}
+ /**
+ * Returns the {@link Tab#getContentId()} for the active tab.
+ */
+ @NonNull
+ public String getActiveTabContentId() {
+ return requireNonNull(mActiveTabContentId);
+ }
+
@NonNull
@Override
public String toString() {
@@ -134,7 +145,7 @@
@Override
public int hashCode() {
- return Objects.hash(mIsLoading, mHeaderAction, mTabs, mTabContents);
+ return Objects.hash(mIsLoading, mHeaderAction, mTabs, mTabContents, mActiveTabContentId);
}
@Override
@@ -150,7 +161,8 @@
return mIsLoading == otherTemplate.mIsLoading
&& Objects.equals(mHeaderAction, otherTemplate.mHeaderAction)
&& Objects.equals(mTabs, otherTemplate.mTabs)
- && Objects.equals(mTabContents, otherTemplate.mTabContents);
+ && Objects.equals(mTabContents, otherTemplate.mTabContents)
+ && Objects.equals(mActiveTabContentId, otherTemplate.getActiveTabContentId());
}
TabTemplate(TabTemplate.Builder builder) {
@@ -159,6 +171,7 @@
mTabs = CollectionUtils.unmodifiableCopy(builder.mTabs);
mTabContents = builder.mTabContents;
mTabCallbackDelegate = builder.mTabCallbackDelegate;
+ mActiveTabContentId = builder.mActiveTabContentId;
}
/** Constructs an empty instance, used by serialization code. */
@@ -168,6 +181,7 @@
mTabs = Collections.emptyList();
mTabContents = null;
mTabCallbackDelegate = null;
+ mActiveTabContentId = null;
}
/** A builder of {@link TabTemplate}. */
@@ -180,10 +194,13 @@
@Nullable
Action mHeaderAction;
- final List<Tab> mTabs = new ArrayList<>();
+ final List<Tab> mTabs;
@Nullable
TabContents mTabContents;
+ @Nullable
+ String mActiveTabContentId;
+
/**
* Sets whether the template is in a loading state.
*
@@ -234,6 +251,19 @@
}
/**
+ * Stores the given {@code contentId} as the "active tab" to show on the screen. The given
+ * ID must match a tab that was added by {@link #addTab(Tab)}.
+ */
+ @NonNull
+ public TabTemplate.Builder setActiveTabContentId(@NonNull String contentId) {
+ if (requireNonNull(contentId).isEmpty()) {
+ throw new IllegalArgumentException("The content ID cannot be null or empty");
+ }
+ mActiveTabContentId = contentId;
+ return this;
+ }
+
+ /**
* Adds an {@link Tab} to display in the template.
*
* @throws NullPointerException if {@code tab} is {@code null}
@@ -274,8 +304,14 @@
+ "contents");
}
- if (hasTabs) {
- TabsConstraints.DEFAULT.validateOrThrow(mTabs);
+ if (hasTabs && mActiveTabContentId == null) {
+ throw new IllegalStateException(
+ "Template requires setting content ID for the active tab when not in "
+ + "Loading state");
+ }
+
+ if (hasTabs && mActiveTabContentId != null) {
+ TabsConstraints.DEFAULT.validateOrThrow(mTabs, mActiveTabContentId);
}
if (!mIsLoading && mHeaderAction == null) {
@@ -292,6 +328,17 @@
@SuppressLint("ExecutorRegistration")
public Builder(@NonNull TabCallback callback) {
mTabCallbackDelegate = TabCallbackDelegateImpl.create(requireNonNull(callback));
+ mTabs = new ArrayList<>();
+ }
+
+ /** Creates a new {@link Builder}, populated from the input {@link TabTemplate} */
+ public Builder(@NonNull TabTemplate tabTemplate) {
+ mIsLoading = tabTemplate.isLoading();
+ mHeaderAction = tabTemplate.getHeaderAction();
+ mTabs = new ArrayList<>(tabTemplate.getTabs());
+ mTabContents = tabTemplate.getTabContents();
+ mTabCallbackDelegate = tabTemplate.getTabCallbackDelegate();
+ mActiveTabContentId = tabTemplate.getActiveTabContentId();
}
}
}
diff --git a/car/app/app/src/main/java/androidx/car/app/model/constraints/TabsConstraints.java b/car/app/app/src/main/java/androidx/car/app/model/constraints/TabsConstraints.java
index 9b089a6..d80ab48 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/constraints/TabsConstraints.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/constraints/TabsConstraints.java
@@ -22,7 +22,9 @@
import androidx.car.app.annotations.RequiresCarApi;
import androidx.car.app.model.Tab;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
/**
* Encapsulates the constraints to apply when creating {@link TabTemplate}.
@@ -51,29 +53,36 @@
*
* @throws IllegalArgumentException if the constraints are not met
*/
- public void validateOrThrow(@NonNull List<Tab> tabs) {
+ public void validateOrThrow(@NonNull List<Tab> tabs, @NonNull String activeTabContentId) {
if (tabs.size() < mMinTabs) {
throw new IllegalArgumentException(
- "Number of tabs set do not meet the minimum requirement of " + mMinTabs
- + " tabs");
+ "There must be at least " + mMinTabs + " tab(s) added, but only found "
+ + tabs.size());
}
if (tabs.size() > mMaxTabs) {
throw new IllegalArgumentException(
- "Number of tabs set exceed the maximum allowed size of " + mMaxTabs);
+ "There cannot be more than " + mMaxTabs + " tabs added, found " + tabs.size());
}
- int numOfActiveTabs = 0;
+ boolean hasTabWithActiveTabContentId = false;
+ Set<String> contentIdSet = new HashSet<>();
for (Tab tab : tabs) {
- if (tab.isActive()) {
- numOfActiveTabs++;
+ if (activeTabContentId.equals(tab.getContentId())) {
+ hasTabWithActiveTabContentId = true;
+ }
+ if (!contentIdSet.add(tab.getContentId())) {
+ throw new IllegalArgumentException(
+ "Found duplicate tab ID: " + tab.getContentId() + ". Each tab must have a"
+ + " unique ID."
+ );
}
}
- if (numOfActiveTabs == 0) {
- throw new IllegalArgumentException("An active tab is required");
- }
- if (numOfActiveTabs > 1) {
- throw new IllegalArgumentException("Only one active tab is allowed");
+
+ if (!hasTabWithActiveTabContentId) {
+ throw new IllegalArgumentException(
+ "There is no tab with content ID matching the active tab content ID set on "
+ + "the template");
}
}
diff --git a/car/app/app/src/test/java/androidx/car/app/model/GridTemplateTest.java b/car/app/app/src/test/java/androidx/car/app/model/GridTemplateTest.java
index 9dc5d83..bafe3a7 100644
--- a/car/app/app/src/test/java/androidx/car/app/model/GridTemplateTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/model/GridTemplateTest.java
@@ -240,6 +240,23 @@
}
@Test
+ public void createInstance_defaultItemImageShape() {
+ ItemList list = TestUtils.getGridItemList(2);
+ GridTemplate template = new GridTemplate.Builder().setSingleList(list).build();
+ assertThat(template.getItemImageShape()).isEqualTo(GridTemplate.ITEM_IMAGE_SHAPE_UNSET);
+ }
+
+ @Test
+ public void createInstance_setItemImageShape() {
+ ItemList list = TestUtils.getGridItemList(2);
+ GridTemplate template =
+ new GridTemplate.Builder()
+ .setSingleList(list)
+ .setItemImageShape(GridTemplate.ITEM_IMAGE_SHAPE_CIRCLE).build();
+ assertThat(template.getItemImageShape()).isEqualTo(GridTemplate.ITEM_IMAGE_SHAPE_CIRCLE);
+ }
+
+ @Test
public void equals() {
ItemList itemList = new ItemList.Builder().build();
String title = "title";
@@ -366,7 +383,23 @@
.setLoading(true)
.setItemSize(GridTemplate.ITEM_SIZE_SMALL)
.build();
+ assertThat(template1).isNotEqualTo(template2);
+ }
+ @Test
+ public void notEquals_differentItemImageShape() {
+ ItemList itemList = new ItemList.Builder().build();
+
+ GridTemplate template1 =
+ new GridTemplate.Builder()
+ .setSingleList(itemList)
+ .setItemImageShape(GridTemplate.ITEM_IMAGE_SHAPE_CIRCLE)
+ .build();
+ GridTemplate template2 =
+ new GridTemplate.Builder()
+ .setSingleList(itemList)
+ .setItemImageShape(GridTemplate.ITEM_IMAGE_SHAPE_UNSET)
+ .build();
assertThat(template1).isNotEqualTo(template2);
}
}
diff --git a/car/app/app/src/test/java/androidx/car/app/model/TabTemplateTest.java b/car/app/app/src/test/java/androidx/car/app/model/TabTemplateTest.java
index 8d1cbd8..046f416 100644
--- a/car/app/app/src/test/java/androidx/car/app/model/TabTemplateTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/model/TabTemplateTest.java
@@ -52,6 +52,8 @@
.build())
.build();
+ private static final String ACTIVE_TAB_CONTENT_ID = "ID_ACTIVE";
+
@Test
public void createInstance_emptyTemplate_notLoading_Throws() {
assertThrows(
@@ -69,8 +71,9 @@
() ->
new TabTemplate.Builder(mMockTabCallback)
.setLoading(true)
- .addTab(getTab("TAB_1", true))
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build());
}
@@ -81,7 +84,21 @@
() ->
new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", true))
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
+ .build());
+ }
+
+ @Test
+ public void createInstance_activeTabContentIdNotSet_Throws() {
+ assertThrows(
+ IllegalStateException.class,
+ () ->
+ new TabTemplate.Builder(mMockTabCallback)
+ .setHeaderAction(Action.APP_ICON)
+ .addTab(getTab("TAB_1", "ID_1"))
+ .addTab(getTab("TAB_2", "ID_2"))
.setTabContents(TAB_CONTENTS)
.build());
}
@@ -93,9 +110,24 @@
() ->
new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", true))
- .addTab(getTab("TAB_2", true))
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", ACTIVE_TAB_CONTENT_ID))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
+ .build());
+ }
+
+ @Test
+ public void createInstance_noActiveTab_Throws() {
+ assertThrows(
+ IllegalArgumentException.class,
+ () ->
+ new TabTemplate.Builder(mMockTabCallback)
+ .setHeaderAction(Action.APP_ICON)
+ .addTab(getTab("TAB_1", "ID_1"))
+ .addTab(getTab("TAB_2", "ID_2"))
+ .setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build());
}
@@ -106,12 +138,30 @@
() ->
new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", true))
- .addTab(getTab("TAB_2", false))
- .addTab(getTab("TAB_3", false))
- .addTab(getTab("TAB_4", false))
- .addTab(getTab("TAB_5", false))
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", "ID_2"))
+ .addTab(getTab("TAB_3", "ID_3"))
+ .addTab(getTab("TAB_4", "ID_4"))
+ .addTab(getTab("TAB_5", "ID_5"))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
+ .build());
+ }
+
+ @Test
+ public void createInstance_multipleTabsWithSameContentId_Throws() {
+ String duplicateId = "ID_DUPLICATE";
+ assertThrows(
+ IllegalArgumentException.class,
+ () ->
+ new TabTemplate.Builder(mMockTabCallback)
+ .setHeaderAction(Action.APP_ICON)
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", duplicateId))
+ .addTab(getTab("TAB_3", duplicateId))
+ .addTab(getTab("TAB_4", "ID_4"))
+ .setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build());
}
@@ -122,9 +172,10 @@
() ->
new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.BACK)
- .addTab(getTab("TAB_1", true))
- .addTab(getTab("TAB_2", false))
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", "ID_2"))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build());
}
@@ -135,8 +186,9 @@
() ->
new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", true))
- .addTab(getTab("TAB_2", false))
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", "ID_2"))
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build());
}
@@ -144,16 +196,18 @@
public void equals() {
TabTemplate template1 = new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", true))
- .addTab(getTab("TAB_2", false))
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", "ID_2"))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build();
TabTemplate template2 = new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", true))
- .addTab(getTab("TAB_2", false))
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", "ID_2"))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build();
assertEquals(template1, template2);
@@ -163,18 +217,20 @@
public void notEquals_differentTabs() {
TabTemplate template = new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", true))
- .addTab(getTab("TAB_2", false))
+ .addTab(getTab("TAB_1", "ID_1"))
+ .addTab(getTab("TAB_2", ACTIVE_TAB_CONTENT_ID))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build();
assertThat(template)
.isNotEqualTo(
new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_2", true))
- .addTab(getTab("TAB_3", false))
+ .addTab(getTab("TAB_2", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_3", "ID_3"))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build());
}
@@ -182,19 +238,21 @@
public void notEquals_differentNumberOfTabs() {
TabTemplate template = new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", true))
- .addTab(getTab("TAB_2", false))
- .addTab(getTab("TAB_3", false))
+ .addTab(getTab("TAB_1", "ID_1"))
+ .addTab(getTab("TAB_2", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_3", "ID_3"))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build();
assertThat(template)
.isNotEqualTo(
new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_2", true))
- .addTab(getTab("TAB_3", false))
+ .addTab(getTab("TAB_2", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_3", "ID_3"))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build());
}
@@ -202,16 +260,18 @@
public void notEquals_differentActiveTab() {
TabTemplate template1 = new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", true))
- .addTab(getTab("TAB_2", false))
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", "ID_2"))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build();
TabTemplate template2 = new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", false))
- .addTab(getTab("TAB_2", true))
+ .addTab(getTab("TAB_1", "ID_1"))
+ .addTab(getTab("TAB_2", ACTIVE_TAB_CONTENT_ID))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build();
assertNotEquals(template1, template2);
@@ -226,18 +286,20 @@
TabTemplate template = new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", true))
- .addTab(getTab("TAB_2", false))
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", "ID_2"))
.setTabContents(new TabContents.Builder(listTemplate).build())
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build();
assertThat(template)
.isNotEqualTo(
new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", true))
- .addTab(getTab("TAB_2", false))
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", "ID_2"))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build());
}
@@ -245,9 +307,10 @@
public void createInstance_twoTabs_valid() {
TabTemplate template = new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", true))
- .addTab(getTab("TAB_2", false))
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", "ID_2"))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build();
assertEquals(template.getTabs().size(), 2);
@@ -257,23 +320,57 @@
public void createInstance_fourTabs_valid() {
TabTemplate template = new TabTemplate.Builder(mMockTabCallback)
.setHeaderAction(Action.APP_ICON)
- .addTab(getTab("TAB_1", true))
- .addTab(getTab("TAB_2", false))
- .addTab(getTab("TAB_3", false))
- .addTab(getTab("TAB_4", false))
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", "ID_2"))
+ .addTab(getTab("TAB_3", "ID_3"))
+ .addTab(getTab("TAB_4", "ID_4"))
.setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
.build();
assertEquals(template.getTabs().size(), 4);
}
- private static Tab getTab(String title, boolean isActive) {
+ @Test
+ public void copy_createsEquivalentInstance() {
+ TabTemplate template1 = new TabTemplate.Builder(mMockTabCallback)
+ .setHeaderAction(Action.APP_ICON)
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", "ID_2"))
+ .setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
+ .build();
+
+ TabTemplate template2 = new TabTemplate.Builder(template1).build();
+
+ assertEquals(template1, template2);
+ }
+
+ @Test
+ public void copy_fieldsCanBeOverwritten() {
+ TabTemplate template = new TabTemplate.Builder(mMockTabCallback)
+ .setHeaderAction(Action.APP_ICON)
+ .addTab(getTab("TAB_1", ACTIVE_TAB_CONTENT_ID))
+ .addTab(getTab("TAB_2", "ID_2"))
+ .setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId(ACTIVE_TAB_CONTENT_ID)
+ .build();
+
+ // Verify fields can be overwritten (no crash)
+ new TabTemplate.Builder(template)
+ .setHeaderAction(Action.APP_ICON)
+ .addTab(getTab("TAB_3", "ID_3"))
+ .setTabContents(TAB_CONTENTS)
+ .setActiveTabContentId("ID_3")
+ .build();
+ }
+
+ private static Tab getTab(String title, String contentId) {
return new Tab.Builder()
- .setContentId(title)
+ .setContentId(contentId)
.setIcon(TestUtils.getTestCarIcon(
ApplicationProvider.getApplicationContext(),
"ic_test_1"))
- .setActive(isActive)
.setTitle(title)
.build();
}
diff --git a/car/app/app/src/test/java/androidx/car/app/model/TabTest.java b/car/app/app/src/test/java/androidx/car/app/model/TabTest.java
index 702c572..14a5e80 100644
--- a/car/app/app/src/test/java/androidx/car/app/model/TabTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/model/TabTest.java
@@ -17,7 +17,6 @@
package androidx.car.app.model;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertThrows;
@@ -92,7 +91,7 @@
.setContentId("id")
.build();
- assertFalse(tab.isActive());
+ assertEquals(tab.getContentId(), "id");
}
@Test
@@ -103,7 +102,6 @@
ApplicationProvider.getApplicationContext(),
"ic_test_1"))
.setContentId("id")
- .setActive(false)
.build();
assertEquals(tab, TEST_TAB);
@@ -140,11 +138,4 @@
assertNotEquals(tab, TEST_TAB);
}
-
- @Test
- public void notEquals_differentActiveState() {
- Tab tab = TEST_TAB.toBuilder().setActive(true).build();
-
- assertNotEquals(tab, TEST_TAB);
- }
}
diff --git a/compose/foundation/foundation/api/public_plus_experimental_current.txt b/compose/foundation/foundation/api/public_plus_experimental_current.txt
index 947aacf..3954218 100644
--- a/compose/foundation/foundation/api/public_plus_experimental_current.txt
+++ b/compose/foundation/foundation/api/public_plus_experimental_current.txt
@@ -1446,8 +1446,8 @@
@androidx.compose.foundation.ExperimentalFoundationApi public final class TextFieldState {
ctor public TextFieldState(optional String initialText, optional long initialSelectionInChars);
method public inline void edit(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.text2.input.TextFieldBuffer,? extends androidx.compose.foundation.text2.input.TextEditResult> block);
- method public androidx.compose.foundation.text2.input.TextFieldCharSequence getValue();
- property public final androidx.compose.foundation.text2.input.TextFieldCharSequence value;
+ method public androidx.compose.foundation.text2.input.TextFieldCharSequence getText();
+ property public final androidx.compose.foundation.text2.input.TextFieldCharSequence text;
}
public static final class TextFieldState.Saver implements androidx.compose.runtime.saveable.Saver<androidx.compose.foundation.text2.input.TextFieldState,java.lang.Object> {
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/DecorationBoxDemos.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/DecorationBoxDemos.kt
index 88597a5..6b7c425 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/DecorationBoxDemos.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text2/DecorationBoxDemos.kt
@@ -49,7 +49,7 @@
textStyle = LocalTextStyle.current,
decorationBox = @Composable {
TextFieldDefaults.OutlinedTextFieldDecorationBox(
- value = state.value.toString(),
+ value = state.text.toString(),
visualTransformation = VisualTransformation.None,
innerTextField = it,
placeholder = null,
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt
index 9495e6a..2761b7e 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2SemanticsTest.kt
@@ -228,7 +228,7 @@
rule.onNodeWithTag(Tag).performTextInputSelection(TextRange(2))
rule.runOnIdle {
- assertThat(state.value.selectionInChars).isEqualTo(TextRange(2))
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(2))
}
}
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2Test.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2Test.kt
index 9d4250e..6a7ba4b 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2Test.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/BasicTextField2Test.kt
@@ -20,16 +20,21 @@
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputConnection
import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.ScrollState
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.size
import androidx.compose.foundation.text.KeyboardHelper
import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.foundation.text2.input.TextEditFilter
import androidx.compose.foundation.text2.input.TextFieldBuffer.ChangeList
import androidx.compose.foundation.text2.input.TextFieldBufferWithSelection
-import androidx.compose.foundation.text2.input.TextEditFilter
import androidx.compose.foundation.text2.input.TextFieldCharSequence
import androidx.compose.foundation.text2.input.TextFieldState
import androidx.compose.foundation.text2.input.internal.AndroidTextInputAdapter
import androidx.compose.foundation.text2.input.rememberTextFieldState
+import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@@ -55,7 +60,10 @@
import androidx.compose.ui.test.performTextInput
import androidx.compose.ui.test.performTextInputSelection
import androidx.compose.ui.test.performTextReplacement
+import androidx.compose.ui.test.performTouchInput
import androidx.compose.ui.test.pressKey
+import androidx.compose.ui.test.swipeRight
+import androidx.compose.ui.test.swipeUp
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.TextLayoutResult
import androidx.compose.ui.text.TextRange
@@ -63,9 +71,11 @@
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
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 org.junit.After
import org.junit.Ignore
@@ -120,7 +130,7 @@
rule.onNodeWithTag(Tag).performTextInput("World!")
rule.runOnIdle {
- assertThat(state.value.toString()).isEqualTo("Hello World!")
+ assertThat(state.text.toString()).isEqualTo("Hello World!")
}
rule.onNodeWithTag(Tag).assertTextEquals("Hello World!")
@@ -329,8 +339,8 @@
performTextReplacement("Compose2")
assertTextEquals("Compose2")
}
- assertThat(state1.value.toString()).isEqualTo("Compose")
- assertThat(state2.value.toString()).isEqualTo("Compose2")
+ assertThat(state1.text.toString()).isEqualTo("Compose")
+ assertThat(state2.text.toString()).isEqualTo("Compose2")
}
@Test
@@ -865,6 +875,73 @@
}
}
+ @SdkSuppress(minSdkVersion = 23)
+ @Test
+ fun textField_showsKeyboardAgainWhenTapped_ifFocused() {
+ val keyboardHelper = KeyboardHelper(rule)
+ rule.setContent {
+ keyboardHelper.initialize()
+ BasicTextField2(
+ state = rememberTextFieldState(),
+ modifier = Modifier.testTag(Tag)
+ )
+ }
+
+ // make sure keyboard is hidden initially
+ keyboardHelper.hideKeyboardIfShown()
+
+ // click the first time to gain focus.
+ rule.onNodeWithTag(Tag).performClick()
+ keyboardHelper.waitForKeyboardVisibility(true)
+ assertThat(keyboardHelper.isSoftwareKeyboardShown()).isTrue()
+
+ // hide it again.
+ keyboardHelper.hideKeyboardIfShown()
+ rule.onNodeWithTag(Tag).assertIsFocused()
+ rule.onNodeWithTag(Tag).performClick()
+
+ // expect keyboard to show up again.
+ keyboardHelper.waitForKeyboardVisibility(true)
+ assertThat(keyboardHelper.isSoftwareKeyboardShown()).isTrue()
+ }
+
+ @Test
+ fun swipingThroughTextField_doesNotGainFocus() {
+ rule.setContent {
+ BasicTextField2(
+ state = rememberTextFieldState(),
+ modifier = Modifier.testTag(Tag)
+ )
+ }
+
+ rule.onNodeWithTag(Tag).performTouchInput {
+ // swipe through
+ swipeRight(endX = right + 200, durationMillis = 1000)
+ }
+ rule.onNodeWithTag(Tag).assertIsNotFocused()
+ }
+
+ @Test
+ fun swipingTextFieldInScrollableContainer_doesNotGainFocus() {
+ val scrollState = ScrollState(0)
+ rule.setContent {
+ Column(Modifier.size(100.dp).verticalScroll(scrollState)) {
+ BasicTextField2(
+ state = rememberTextFieldState(),
+ modifier = Modifier.testTag(Tag)
+ )
+ Box(Modifier.size(200.dp))
+ }
+ }
+
+ rule.onNodeWithTag(Tag).performTouchInput {
+ // swipe through
+ swipeUp(durationMillis = 1000)
+ }
+ rule.onNodeWithTag(Tag).assertIsNotFocused()
+ assertThat(scrollState.value).isNotEqualTo(0)
+ }
+
private fun requestFocus(tag: String) =
rule.onNodeWithTag(tag).performSemanticsAction(SemanticsActions.RequestFocus)
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/DecorationBoxTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/DecorationBoxTest.kt
index 148087d..673dd9e 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/DecorationBoxTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/DecorationBoxTest.kt
@@ -173,7 +173,7 @@
}
rule.runOnIdle {
- assertThat(state.value.toString()).isEqualTo("hello")
+ assertThat(state.text.toString()).isEqualTo("hello")
}
}
@@ -208,7 +208,7 @@
}
rule.runOnIdle {
- assertThat(state.value.toString()).isEqualTo("hello")
+ assertThat(state.text.toString()).isEqualTo("hello")
}
}
@@ -242,7 +242,7 @@
// assertThat selection happened
rule.runOnIdle {
- assertThat(state.value.selectionInChars).isEqualTo(TextRange(0, 5))
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(0, 5))
}
}
}
\ No newline at end of file
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldCursorTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldCursorTest.kt
index 2aa87be..b615766 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldCursorTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldCursorTest.kt
@@ -108,7 +108,7 @@
private var textLayoutResult: TextLayoutResult? = null
private val cursorRect: Rect
// assume selection is collapsed
- get() = textLayoutResult?.getCursorRect(state.value.selectionInChars.start) ?: Rect.Zero
+ get() = textLayoutResult?.getCursorRect(state.text.selectionInChars.start) ?: Rect.Zero
private val backgroundModifier = Modifier.background(contentColor)
private val focusModifier = Modifier.onFocusChanged { if (it.isFocused) isFocused = true }
@@ -575,7 +575,7 @@
textStyle = textStyle,
modifier = textFieldModifier.layout { measurable, constraints ->
// change the state during layout so draw can read the new state
- val currValue = state.value
+ val currValue = state.text
if (currValue.isNotEmpty()) {
val newText = currValue.dropLast(1)
val newValue =
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldKeyEventTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldKeyEventTest.kt
index fed092c..8c399e13 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldKeyEventTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldKeyEventTest.kt
@@ -623,13 +623,13 @@
fun expectedText(text: String) {
rule.runOnIdle {
- assertThat(state.value.toString()).isEqualTo(text)
+ assertThat(state.text.toString()).isEqualTo(text)
}
}
fun expectedSelection(selection: TextRange) {
rule.runOnIdle {
- assertThat(state.value.selectionInChars).isEqualTo(selection)
+ assertThat(state.text.selectionInChars).isEqualTo(selection)
}
}
}
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldScrollTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldScrollTest.kt
index 7661d74..5285a66 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldScrollTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldScrollTest.kt
@@ -401,7 +401,7 @@
// move cursor to the end
// TODO
state.editProcessor.reset(
- TextFieldCharSequence(state.value, selection = TextRange(longText.length))
+ TextFieldCharSequence(state.text, selection = TextRange(longText.length))
)
rule.runOnIdle {
@@ -426,7 +426,7 @@
// move cursor to the end
state.editProcessor.reset(
- TextFieldCharSequence(state.value, selection = TextRange(longText.length))
+ TextFieldCharSequence(state.text, selection = TextRange(longText.length))
)
rule.runOnIdle {
@@ -454,7 +454,7 @@
rule.runOnIdle {
assertThat(scrollState.value).isEqualTo(scrollState.maxValue)
- assertThat(state.value.selectionInChars).isEqualTo(TextRange(5))
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(5))
}
}
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldStateRestorationTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldStateRestorationTest.kt
index 62a1def..cae64e7 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldStateRestorationTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldStateRestorationTest.kt
@@ -64,8 +64,8 @@
restorationTester.emulateSavedInstanceStateRestore()
rule.runOnIdle {
- assertThat(restoredState.value.toString()).isEqualTo("hello, world")
- assertThat(restoredState.value.selectionInChars).isEqualTo(TextRange(0, 12))
+ assertThat(restoredState.text.toString()).isEqualTo("hello, world")
+ assertThat(restoredState.text.selectionInChars).isEqualTo(TextRange(0, 12))
}
}
}
\ No newline at end of file
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/AndroidTextInputAdapterTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/AndroidTextInputAdapterTest.kt
index 5b75315..2c65d65 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/AndroidTextInputAdapterTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/input/internal/AndroidTextInputAdapterTest.kt
@@ -147,8 +147,8 @@
connection.commitText("Hello", 0)
- assertThat(state1.value.toString()).isEqualTo("")
- assertThat(state2.value.toString()).isEqualTo("Hello")
+ assertThat(state1.text.toString()).isEqualTo("")
+ assertThat(state2.text.toString()).isEqualTo("Hello")
}
}
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/BasicTextField2.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/BasicTextField2.kt
index 7ad7eff..b51170c 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/BasicTextField2.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/BasicTextField2.kt
@@ -153,7 +153,7 @@
val textLayoutState = remember {
TextLayoutState(
TextDelegate(
- text = AnnotatedString(state.value.toString()),
+ text = AnnotatedString(state.text.toString()),
style = textStyle,
density = density,
fontFamilyResolver = fontFamilyResolver,
@@ -225,7 +225,7 @@
Layout(modifier = coreModifiers) { _, constraints ->
val result = with(textLayoutState) {
- val visualText = state.value.toVisualText(codepointTransformation)
+ val visualText = state.text.toVisualText(codepointTransformation)
layout(
text = AnnotatedString(visualText.toString()),
textStyle = textStyle,
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt
index ef350fa..9cd5e6a 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/TextFieldState.kt
@@ -40,7 +40,7 @@
internal var editProcessor =
EditProcessor(TextFieldCharSequence(initialText, initialSelectionInChars))
- val value: TextFieldCharSequence
+ val text: TextFieldCharSequence
get() = editProcessor.value
/**
@@ -54,13 +54,13 @@
* @see setTextAndSelectAll
*/
inline fun edit(block: TextFieldBuffer.() -> TextEditResult) {
- val mutableValue = startEdit(value)
+ val mutableValue = startEdit(text)
val result = mutableValue.block()
commitEdit(mutableValue, result)
}
override fun toString(): String =
- "TextFieldState(selection=${value.selectionInChars}, text=\"$value\")"
+ "TextFieldState(selection=${text.selectionInChars}, text=\"$text\")"
@Suppress("ShowingMemberInHiddenClass")
@PublishedApi
@@ -70,7 +70,7 @@
@Suppress("ShowingMemberInHiddenClass")
@PublishedApi
internal fun commitEdit(newValue: TextFieldBuffer, result: TextEditResult) {
- val newSelection = result.calculateSelection(value, newValue)
+ val newSelection = result.calculateSelection(text, newValue)
val finalValue = newValue.toTextFieldCharSequence(newSelection)
editProcessor.reset(finalValue)
}
@@ -84,9 +84,9 @@
@Suppress("RedundantNullableReturnType")
object Saver : androidx.compose.runtime.saveable.Saver<TextFieldState, Any> {
override fun SaverScope.save(value: TextFieldState): Any? = listOf(
- value.value.toString(),
- value.value.selectionInChars.start,
- value.value.selectionInChars.end
+ value.text.toString(),
+ value.text.selectionInChars.start,
+ value.text.selectionInChars.end
)
override fun restore(value: Any): TextFieldState? {
@@ -146,7 +146,7 @@
@OptIn(ExperimentalFoundationApi::class)
internal fun TextFieldState.deselect() {
- if (!value.selectionInChars.collapsed) {
+ if (!text.selectionInChars.collapsed) {
edit {
selectCharsIn(TextRange.Zero)
}
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/AndroidTextInputAdapter.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/AndroidTextInputAdapter.kt
index d04a716..1877cfa 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/AndroidTextInputAdapter.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/AndroidTextInputAdapter.kt
@@ -184,7 +184,7 @@
// region EditableTextInputSession
override val value: TextFieldCharSequence
- get() = state.value
+ get() = state.text
private var filter: TextEditFilter? = initialFilter
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldCoreModifier.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldCoreModifier.kt
index ffe9ad8..655d496 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldCoreModifier.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldCoreModifier.kt
@@ -181,7 +181,7 @@
changeObserverJob = coroutineScope.launch {
// Animate the cursor even when animations are disabled by the system.
withContext(FixedMotionDurationScale) {
- snapshotFlow { textFieldState.value }
+ snapshotFlow { textFieldState.text }
.collectLatest {
// ensure that the value is always 1f _this_ frame by calling snapTo
cursorAlpha.snapTo(1f)
@@ -204,7 +204,7 @@
override fun ContentDrawScope.draw() {
drawContent()
- val value = textFieldState.value
+ val value = textFieldState.text
val textLayoutResult = textLayoutState.layoutResult ?: return
if (value.selectionInChars.collapsed) {
@@ -224,7 +224,7 @@
measurable: Measurable,
constraints: Constraints
): MeasureResult {
- val currSelection = textFieldState.value.selectionInChars
+ val currSelection = textFieldState.text.selectionInChars
val offsetToFollow = when {
currSelection.start != previousSelection.start -> currSelection.start
currSelection.end != previousSelection.end -> currSelection.end
@@ -260,7 +260,7 @@
measurable: Measurable,
constraints: Constraints
): MeasureResult {
- val value = textFieldState.value
+ val value = textFieldState.text
val offsetToFollow = when {
value.selectionInChars.start != previousSelection.start -> value.selectionInChars.start
value.selectionInChars.end != previousSelection.end -> value.selectionInChars.end
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldDecoratorModifier.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldDecoratorModifier.kt
index b71665b..b1955d7 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldDecoratorModifier.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextFieldDecoratorModifier.kt
@@ -17,6 +17,7 @@
package androidx.compose.foundation.text2.input.internal
import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.gestures.detectTapAndPress
import androidx.compose.foundation.text.KeyboardActionScope
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
@@ -25,7 +26,6 @@
import androidx.compose.foundation.text2.input.TextFieldCharSequence
import androidx.compose.foundation.text2.input.TextFieldState
import androidx.compose.foundation.text2.input.deselect
-import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusDirection
import androidx.compose.ui.focus.FocusEventModifierNode
import androidx.compose.ui.focus.FocusManager
@@ -36,9 +36,10 @@
import androidx.compose.ui.input.key.KeyInputModifierNode
import androidx.compose.ui.input.pointer.PointerEvent
import androidx.compose.ui.input.pointer.PointerEventPass
-import androidx.compose.ui.input.pointer.changedToDown
+import androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNode
import androidx.compose.ui.layout.LayoutCoordinates
import androidx.compose.ui.node.CompositionLocalConsumerModifierNode
+import androidx.compose.ui.node.DelegatingNode
import androidx.compose.ui.node.GlobalPositionAwareModifierNode
import androidx.compose.ui.node.ModifierNodeElement
import androidx.compose.ui.node.PointerInputModifierNode
@@ -63,7 +64,6 @@
import androidx.compose.ui.text.input.KeyboardCapitalization
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.IntSize
-import androidx.compose.ui.util.fastAny
/**
* Modifier element for most of the functionality of [BasicTextField2] that is attached to the
@@ -128,7 +128,7 @@
keyboardOptions: KeyboardOptions,
var keyboardActions: KeyboardActions,
var singleLine: Boolean,
-) : Modifier.Node(),
+) : DelegatingNode(),
SemanticsModifierNode,
FocusRequesterModifierNode,
FocusEventModifierNode,
@@ -137,6 +137,19 @@
KeyInputModifierNode,
CompositionLocalConsumerModifierNode {
+ private val pointerInputNode = SuspendingPointerInputModifierNode {
+ detectTapAndPress(onTap = {
+ if (!isFocused) {
+ requestFocus()
+ } else if (enabled && !readOnly) {
+ textInputSession?.showSoftwareKeyboard()
+ }
+ })
+ }
+ // TODO: remove `.node` after aosp/2462416 lands and merge everything into one delegated
+ // block
+ .also { delegated { it.node } }
+
var keyboardOptions: KeyboardOptions = keyboardOptions.withDefaultsFrom(filter?.keyboardOptions)
private set
@@ -255,7 +268,7 @@
override val semanticsConfiguration: SemanticsConfiguration
get() {
var localSemantics = semanticsConfigurationCache
- val value = textFieldState.value
+ val value = textFieldState.text
// Cache invalidation is done here instead of only in updateNode because the text or
// selection might change without triggering a modifier update.
if (localSemantics == null ||
@@ -302,13 +315,11 @@
pass: PointerEventPass,
bounds: IntSize
) {
- if (pass == PointerEventPass.Main && pointerEvent.changes.fastAny { it.changedToDown() }) {
- requestFocus()
- }
+ pointerInputNode.onPointerEvent(pointerEvent, pass, bounds)
}
override fun onCancelPointerInput() {
- // Nothing to do yet, since onPointerEvent isn't handling any gestures.
+ pointerInputNode.onCancelPointerInput()
}
override fun onPreKeyEvent(event: KeyEvent): Boolean {
@@ -369,7 +380,7 @@
// reset is required to make sure IME gets the update.
textFieldState.editProcessor.reset(
TextFieldCharSequence(
- text = textFieldState.value,
+ text = textFieldState.text,
selection = TextRange(start, end)
)
)
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextPreparedSelection.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextPreparedSelection.kt
index 7c4310a..9bc6d85 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextPreparedSelection.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text2/input/internal/TextPreparedSelection.kt
@@ -78,7 +78,7 @@
* [TextFieldPreparedSelection]. It is also used to make comparison between the initial state
* and the modified state of selection and content.
*/
- val initialValue = Snapshot.withoutReadObservation { state.value }
+ val initialValue = Snapshot.withoutReadObservation { state.text }
/**
* Current active selection in the context of this [TextFieldPreparedSelection]
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextFieldStateSaverTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextFieldStateSaverTest.kt
index 792ccef..4325a6a 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextFieldStateSaverTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextFieldStateSaverTest.kt
@@ -35,8 +35,8 @@
val restoredState = TextFieldState.Saver.restore(saved)
assertNotNull(restoredState)
- assertThat(restoredState.value.toString()).isEqualTo("hello, world")
- assertThat(restoredState.value.selectionInChars).isEqualTo(TextRange(0, 5))
+ assertThat(restoredState.text.toString()).isEqualTo("hello, world")
+ assertThat(restoredState.text.selectionInChars).isEqualTo(TextRange(0, 5))
}
private object TestSaverScope : SaverScope {
diff --git a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextFieldStateTest.kt b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextFieldStateTest.kt
index 8079447..d068e21 100644
--- a/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextFieldStateTest.kt
+++ b/compose/foundation/foundation/src/test/kotlin/androidx/compose/foundation/text2/input/TextFieldStateTest.kt
@@ -32,7 +32,7 @@
@Test
fun initialValue() {
- assertThat(state.value.toString()).isEqualTo("")
+ assertThat(state.text.toString()).isEqualTo("")
}
@Test
@@ -46,7 +46,7 @@
}
}
- assertThat(state.value.toString()).isEmpty()
+ assertThat(state.text.toString()).isEmpty()
}
@Test
@@ -65,14 +65,14 @@
replace(0, 0, "hello")
placeCursorAtEnd()
}
- assertThat(state.value.toString()).isEqualTo("hello")
+ assertThat(state.text.toString()).isEqualTo("hello")
}
@Test
fun edit_replace_doesNotChangeStateUntilReturn() {
state.edit {
replace(0, 0, "hello")
- assertThat(state.value.toString()).isEmpty()
+ assertThat(state.text.toString()).isEmpty()
placeCursorAtEnd()
}
}
@@ -85,10 +85,10 @@
replace(5, 5, " ")
replace(6, 11, "Compose")
assertThat(toString()).isEqualTo("hello Compose")
- assertThat(state.value.toString()).isEmpty()
+ assertThat(state.text.toString()).isEmpty()
placeCursorAtEnd()
}
- assertThat(state.value.toString()).isEqualTo("hello Compose")
+ assertThat(state.text.toString()).isEqualTo("hello Compose")
}
@Test
@@ -97,7 +97,7 @@
replace(0, 0, "hello")
placeCursorAtEnd()
}
- assertThat(state.value.selectionInChars).isEqualTo(TextRange(5))
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(5))
}
@Test
@@ -106,7 +106,7 @@
replace(0, 0, "hello")
placeCursorBeforeCharAt(2)
}
- assertThat(state.value.selectionInChars).isEqualTo(TextRange(2))
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(2))
}
@Test
@@ -128,7 +128,7 @@
replace(0, 0, "hello")
placeCursorBeforeCodepointAt(2)
}
- assertThat(state.value.selectionInChars).isEqualTo(TextRange(2))
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(2))
}
@Test
@@ -150,7 +150,7 @@
replace(0, 0, "hello")
selectAll()
}
- assertThat(state.value.selectionInChars).isEqualTo(TextRange(0, 5))
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(0, 5))
}
@Test
@@ -159,7 +159,7 @@
replace(0, 0, "hello")
selectCharsIn(TextRange(1, 4))
}
- assertThat(state.value.selectionInChars).isEqualTo(TextRange(1, 4))
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(1, 4))
}
@Test
@@ -187,7 +187,7 @@
replace(0, 0, "hello")
selectCodepointsIn(TextRange(1, 4))
}
- assertThat(state.value.selectionInChars).isEqualTo(TextRange(1, 4))
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(1, 4))
}
@Test
@@ -221,7 +221,7 @@
assertThat(toString()).isEqualTo("hello world")
placeCursorAtEnd()
}
- assertThat(state.value.toString()).isEqualTo("hello world")
+ assertThat(state.text.toString()).isEqualTo("hello world")
}
@Test
@@ -230,7 +230,7 @@
append('c')
placeCursorAtEnd()
}
- assertThat(state.value.toString()).isEqualTo("c")
+ assertThat(state.text.toString()).isEqualTo("c")
}
@Test
@@ -239,7 +239,7 @@
append("hello")
placeCursorAtEnd()
}
- assertThat(state.value.toString()).isEqualTo("hello")
+ assertThat(state.text.toString()).isEqualTo("hello")
}
@Test
@@ -248,21 +248,21 @@
append("hello world", 0, 5)
placeCursorAtEnd()
}
- assertThat(state.value.toString()).isEqualTo("hello")
+ assertThat(state.text.toString()).isEqualTo("hello")
}
@Test
fun setTextAndPlaceCursorAtEnd_works() {
state.setTextAndPlaceCursorAtEnd("Hello")
- assertThat(state.value.toString()).isEqualTo("Hello")
- assertThat(state.value.selectionInChars).isEqualTo(TextRange(5))
+ assertThat(state.text.toString()).isEqualTo("Hello")
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(5))
}
@Test
fun setTextAndSelectAll_works() {
state.setTextAndSelectAll("Hello")
- assertThat(state.value.toString()).isEqualTo("Hello")
- assertThat(state.value.selectionInChars).isEqualTo(TextRange(0, 5))
+ assertThat(state.text.toString()).isEqualTo("Hello")
+ assertThat(state.text.selectionInChars).isEqualTo(TextRange(0, 5))
}
@Test
diff --git a/compose/material3/material3-adaptive/api/current.txt b/compose/material3/material3-adaptive/api/current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/compose/material3/material3-adaptive/api/current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/compose/material3/material3-adaptive/api/public_plus_experimental_current.txt b/compose/material3/material3-adaptive/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/compose/material3/material3-adaptive/api/public_plus_experimental_current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/compose/material3/material3-adaptive/api/res-current.txt b/compose/material3/material3-adaptive/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/material3/material3-adaptive/api/res-current.txt
diff --git a/compose/material3/material3-adaptive/api/restricted_current.txt b/compose/material3/material3-adaptive/api/restricted_current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/compose/material3/material3-adaptive/api/restricted_current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/compose/material3/material3-adaptive/build.gradle b/compose/material3/material3-adaptive/build.gradle
new file mode 100644
index 0000000..43c428c
--- /dev/null
+++ b/compose/material3/material3-adaptive/build.gradle
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 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.AndroidXComposePlugin
+import androidx.build.LibraryType
+import androidx.build.Publish
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+ id("AndroidXPlugin")
+ id("com.android.library")
+ id("AndroidXComposePlugin")
+}
+
+AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project)
+
+dependencies {
+
+
+ if(!AndroidXComposePlugin.isMultiplatformEnabled(project)) {
+ /*
+ * When updating dependencies, make sure to make the an an analogous update in the
+ * corresponding block below
+ */
+ implementation(libs.kotlinStdlibCommon)
+
+ api("androidx.annotation:annotation:1.1.0")
+ }
+}
+
+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 {
+ implementation(libs.kotlinStdlibCommon)
+ }
+
+ androidMain.dependencies {
+ api("androidx.annotation:annotation:1.1.0")
+ }
+
+ desktopMain.dependencies {
+ implementation(libs.kotlinStdlib)
+ }
+ }
+ }
+}
+
+android {
+ namespace "androidx.compose.material3.adaptive"
+}
+
+androidx {
+ name = "Material Adaptive"
+ mavenVersion = LibraryVersions.COMPOSE_MATERIAL3_ADAPTIVE
+ type = LibraryType.PUBLISHED_LIBRARY
+ publish = Publish.SNAPSHOT_ONLY
+ inceptionYear = "2023"
+ description = "Compose Material Design Adaptive Library"
+}
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/androidx-compose-material3-adaptive-documentation.md
new file mode 100644
index 0000000..a2f8852
--- /dev/null
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/androidx-compose-material3-adaptive-documentation.md
@@ -0,0 +1,6 @@
+# Module root
+
+Compose Material Adaptive
+
+# Package androidx.compose.material3.adaptive
+
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt
index 02a9933..a304e5d 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt
@@ -2187,7 +2187,11 @@
fun moveFrom(table: SlotTable, index: Int, removeSourceGroup: Boolean = true): List<Anchor> {
runtimeCheck(insertCount > 0)
- if (index == 0 && currentGroup == 0 && this.table.groupsSize == 0) {
+ if (
+ index == 0 && currentGroup == 0 &&
+ this.table.groupsSize == 0 &&
+ table.groups.groupSize(index) == table.groupsSize
+ ) {
// Special case for moving the entire slot table into an empty table. This case occurs
// during initial composition.
val myGroups = groups
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArrayIntMap.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArrayIntMap.kt
index 5644c62..69e32d6 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArrayIntMap.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArrayIntMap.kt
@@ -19,11 +19,11 @@
import androidx.compose.runtime.identityHashCode
internal class IdentityArrayIntMap {
- internal var size = 0
+ var size = 0
private set
- internal var keys: Array<Any?> = arrayOfNulls(4)
+ var keys: Array<Any?> = arrayOfNulls(4)
private set
- internal var values: IntArray = IntArray(4)
+ var values: IntArray = IntArray(4)
private set
operator fun get(key: Any): Int {
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArrayMap.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArrayMap.kt
index cb6d619..bc600cc 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArrayMap.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArrayMap.kt
@@ -19,11 +19,11 @@
import androidx.compose.runtime.identityHashCode
internal class IdentityArrayMap<Key : Any, Value : Any?>(capacity: Int = 16) {
- internal var keys = arrayOfNulls<Any?>(capacity)
+ var keys = arrayOfNulls<Any?>(capacity)
private set
- internal var values = arrayOfNulls<Any?>(capacity)
+ var values = arrayOfNulls<Any?>(capacity)
private set
- internal var size = 0
+ var size = 0
private set
fun isEmpty() = size == 0
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArraySet.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArraySet.kt
index 29721ca..1c250bd 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArraySet.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArraySet.kt
@@ -29,8 +29,7 @@
override var size = 0
private set
- @PublishedApi
- internal var values: Array<Any?> = arrayOfNulls(16)
+ var values: Array<Any?> = arrayOfNulls(16)
private set
/**
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityScopeMap.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityScopeMap.kt
index f94b85f..d683a23 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityScopeMap.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityScopeMap.kt
@@ -30,28 +30,27 @@
* in the [IdentityScopeMap]. The length of the used values is [size], and all remaining values
* are the unused indices in [values] and [scopeSets].
*/
- @PublishedApi
- internal var valueOrder: IntArray = IntArray(50) { it }
+ var valueOrder: IntArray = IntArray(50) { it }
+ private set
/**
* The [identityHashCode] for the keys in the collection. We never use the actual
* values
*/
- @PublishedApi
- internal var values: Array<Any?> = arrayOfNulls(50)
+ var values: Array<Any?> = arrayOfNulls(50)
+ private set
/**
* The [IdentityArraySet]s for values, in the same index order as [values], indexed
* by [valueOrder]. The consumed values may extend beyond [size] if a value has been removed.
*/
- @PublishedApi
- internal var scopeSets: Array<IdentityArraySet<T>?> = arrayOfNulls(50)
+ var scopeSets: Array<IdentityArraySet<T>?> = arrayOfNulls(50)
+ private set
/**
* The number of values in the map.
*/
- @PublishedApi
- internal var size = 0
+ var size = 0
/**
* Returns the [IdentityArraySet] for the value at the given [index] order in the map.
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 dd53854..06d1f47 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
@@ -23,11 +23,11 @@
import androidx.compose.runtime.InternalComposeApi
import androidx.compose.runtime.SnapshotThreadLocal
import androidx.compose.runtime.collection.IdentityArraySet
+import androidx.compose.runtime.internal.JvmDefaultWithCompatibility
import androidx.compose.runtime.synchronized
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract
-import androidx.compose.runtime.internal.JvmDefaultWithCompatibility
/**
* A snapshot of the values return by mutable states and other state objects. All state object
@@ -850,7 +850,7 @@
// id to be forgotten as no state records will refer to it.
this.modified = null
val id = id
- for (state in modified) {
+ modified.fastForEach { state ->
var current: StateRecord? = state.firstStateRecord
while (current != null) {
if (current.snapshotId == id || current.snapshotId in previousIds) {
@@ -885,12 +885,12 @@
val start = this.invalid.set(id).or(this.previousIds)
val modified = modified!!
var statesToRemove: MutableList<StateObject>? = null
- for (state in modified) {
+ modified.fastForEach { state ->
val first = state.firstStateRecord
// If either current or previous cannot be calculated the object was created
// in a nested snapshot that was committed then changed.
- val current = readable(first, snapshotId, invalidSnapshots) ?: continue
- val previous = readable(first, id, start) ?: continue
+ val current = readable(first, snapshotId, invalidSnapshots) ?: return@fastForEach
+ val previous = readable(first, id, start) ?: return@fastForEach
if (current != previous) {
val applied = readable(first, id, this.invalid) ?: readError()
val merged = optimisticMerges?.get(current) ?: run {
@@ -1403,12 +1403,12 @@
val result = innerApplyLocked(parent.id, optimisticMerges, parent.invalid)
if (result != SnapshotApplyResult.Success) return result
- // Add all modified objects in this set to the parent
- (
- parent.modified ?: IdentityArraySet<StateObject>().also {
+ parent.modified?.apply { addAll(modified) }
+ ?: modified.also {
+ // Ensure modified reference is only used by one snapshot
parent.modified = it
+ this.modified = null
}
- ).addAll(modified)
}
// Ensure the parent is newer than the current snapshot
@@ -2176,10 +2176,10 @@
if (modified == null) return null
val start = applyingSnapshot.invalid.set(applyingSnapshot.id).or(applyingSnapshot.previousIds)
var result: MutableMap<StateRecord, StateRecord>? = null
- for (state in modified) {
+ modified.fastForEach { state ->
val first = state.firstStateRecord
- val current = readable(first, id, invalidSnapshots) ?: continue
- val previous = readable(first, id, start) ?: continue
+ val current = readable(first, id, invalidSnapshots) ?: return@fastForEach
+ val previous = readable(first, id, start) ?: return@fastForEach
if (current != previous) {
// Try to produce a merged state record
val applied = readable(first, applyingSnapshot.id, applyingSnapshot.invalid)
diff --git a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/SlotTableTests.kt b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/SlotTableTests.kt
index a4b3600..d6505b04 100644
--- a/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/SlotTableTests.kt
+++ b/compose/runtime/runtime/src/commonTest/kotlin/androidx/compose/runtime/SlotTableTests.kt
@@ -1401,6 +1401,56 @@
}
@Test
+ fun testMovingFromMultiRootGroup() {
+ val sourceTable = SlotTable()
+ val destinationTable = SlotTable()
+
+ val anchors = mutableListOf<Anchor>()
+ sourceTable.write { writer ->
+ writer.insert {
+ writer.group(10) {
+ anchors.add(writer.anchor(writer.parent))
+ writer.group(100) {
+ writer.group(1000) { }
+ writer.group(1001) { }
+ writer.group(1002) { }
+ writer.group(10003) { }
+ }
+ }
+ writer.group(20) {
+ anchors.add(writer.anchor(writer.parent))
+ writer.group(200) {
+ writer.group(2000) { }
+ writer.group(2001) { }
+ writer.group(2002) { }
+ writer.group(20003) { }
+ }
+ }
+ writer.group(30) {
+ anchors.add(writer.anchor(writer.parent))
+ writer.group(300) {
+ writer.group(3000) { }
+ writer.group(3001) { }
+ writer.group(3002) { }
+ writer.group(30003) { }
+ }
+ }
+ }
+ }
+ sourceTable.verifyWellFormed()
+
+ destinationTable.write { writer ->
+ for (anchor in anchors) {
+ writer.insert {
+ writer.moveFrom(sourceTable, sourceTable.anchorIndex(anchor))
+ sourceTable.verifyWellFormed()
+ }
+ }
+ }
+ destinationTable.verifyWellFormed()
+ }
+
+ @Test
fun testToIndexFor() {
val (slots, anchors) = narrowTrees()
val indexes = anchors.map { it.toIndexFor(slots) }
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
index 17391e0..ee20288 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
@@ -25,7 +25,6 @@
import android.os.Handler
import android.os.Looper
import android.os.SystemClock
-import android.text.SpannableString
import android.util.Log
import android.view.MotionEvent
import android.view.View
@@ -724,17 +723,6 @@
}
}
- private fun isScreenReaderFocusable(
- node: SemanticsNode
- ): Boolean {
- val isSpeakingNode = node.infoContentDescriptionOrNull != null ||
- getInfoText(node) != null || getInfoStateDescriptionOrNull(node) != null ||
- getInfoIsCheckable(node)
-
- return node.unmergedConfig.isMergingSemanticsOfDescendants ||
- node.isUnmergedLeafNode && isSpeakingNode
- }
-
@VisibleForTesting
@OptIn(ExperimentalComposeUiApi::class)
fun populateAccessibilityNodeInfoProperties(
@@ -742,6 +730,15 @@
info: AccessibilityNodeInfoCompat,
semanticsNode: SemanticsNode
) {
+ val isUnmergedLeafNode =
+ !semanticsNode.isFake &&
+ semanticsNode.replacedChildren.isEmpty() &&
+ semanticsNode.layoutNode.findClosestParentNode {
+ it.outerSemantics
+ ?.collapsedSemanticsConfiguration()
+ ?.isMergingSemanticsOfDescendants == true
+ } == null
+
// set classname
info.className = ClassName
val role = semanticsNode.unmergedConfig.getOrNull(SemanticsProperties.Role)
@@ -756,7 +753,7 @@
// Images are often minor children of larger widgets, so we only want to
// announce the Image role when the image itself is focusable.
if (role != Role.Image ||
- semanticsNode.isUnmergedLeafNode ||
+ isUnmergedLeafNode ||
semanticsNode.unmergedConfig.isMergingSemanticsOfDescendants
) {
info.className = className
@@ -801,17 +798,39 @@
setText(semanticsNode, info)
setContentInvalid(semanticsNode, info)
- setStateDescription(semanticsNode, info)
- setIsCheckable(semanticsNode, info)
+ info.stateDescription =
+ semanticsNode.unmergedConfig.getOrNull(SemanticsProperties.StateDescription)
val toggleState = semanticsNode.unmergedConfig.getOrNull(
SemanticsProperties.ToggleableState
)
toggleState?.let {
- if (toggleState == ToggleableState.On) {
- info.isChecked = true
- } else if (toggleState == ToggleableState.Off) {
- info.isChecked = false
+ info.isCheckable = true
+ when (it) {
+ ToggleableState.On -> {
+ info.isChecked = true
+ // Unfortunately, talback has a bug of using "checked", so we set state
+ // description here
+ if (role == Role.Switch && info.stateDescription == null) {
+ info.stateDescription = view.context.resources.getString(R.string.on)
+ }
+ }
+
+ ToggleableState.Off -> {
+ info.isChecked = false
+ // Unfortunately, talkback has a bug of using "not checked", so we set state
+ // description here
+ if (role == Role.Switch && info.stateDescription == null) {
+ info.stateDescription = view.context.resources.getString(R.string.off)
+ }
+ }
+
+ ToggleableState.Indeterminate -> {
+ if (info.stateDescription == null) {
+ info.stateDescription =
+ view.context.resources.getString(R.string.indeterminate)
+ }
+ }
}
}
semanticsNode.unmergedConfig.getOrNull(SemanticsProperties.Selected)?.let {
@@ -819,7 +838,18 @@
// Tab in native android uses selected property
info.isSelected = it
} else {
+ info.isCheckable = true
info.isChecked = it
+ if (info.stateDescription == null) {
+ // If a radio entry (radio button + text) is selectable, it won't have the role
+ // RadioButton, so if we use info.isCheckable/info.isChecked, talkback will say
+ // "checked/not checked" instead "selected/note selected".
+ info.stateDescription = if (it) {
+ view.context.resources.getString(R.string.selected)
+ } else {
+ view.context.resources.getString(R.string.not_selected)
+ }
+ }
}
}
@@ -1035,6 +1065,29 @@
rangeInfo.range.endInclusive,
rangeInfo.current
)
+ // let's set state description here and use state description change events.
+ // otherwise, we need to send out type_view_selected event, as the old android
+ // versions do. But the support for type_view_selected event for progress bars
+ // maybe deprecated in talkback in the future.
+ if (info.stateDescription == null) {
+ val valueRange = rangeInfo.range
+ val progress = (
+ if (valueRange.endInclusive - valueRange.start == 0f) 0f
+ else (rangeInfo.current - valueRange.start) /
+ (valueRange.endInclusive - valueRange.start)
+ ).coerceIn(0f, 1f)
+
+ // We only display 0% or 100% when it is exactly 0% or 100%.
+ val percent = when (progress) {
+ 0f -> 0
+ 1f -> 100
+ else -> (progress * 100).roundToInt().coerceIn(1, 99)
+ }
+ info.stateDescription =
+ view.context.resources.getString(R.string.template_percent, percent)
+ }
+ } else if (info.stateDescription == null) {
+ info.stateDescription = view.context.resources.getString(R.string.in_progress)
}
if (semanticsNode.unmergedConfig.contains(SemanticsActions.SetProgress) &&
semanticsNode.enabled()
@@ -1210,7 +1263,12 @@
}
}
- info.isScreenReaderFocusable = isScreenReaderFocusable(semanticsNode)
+ val isSpeakingNode = info.contentDescription != null || info.text != null ||
+ info.hintText != null || info.stateDescription != null || info.isCheckable
+
+ info.isScreenReaderFocusable =
+ semanticsNode.unmergedConfig.isMergingSemanticsOfDescendants ||
+ isUnmergedLeafNode && isSpeakingNode
if (idToBeforeMap[virtualViewId] != null) {
idToBeforeMap[virtualViewId]?.let { info.setTraversalBefore(view, it) }
@@ -1235,131 +1293,10 @@
}
}
- private fun getInfoStateDescriptionOrNull(
- node: SemanticsNode
- ): String? {
- var stateDescription = node.unmergedConfig.getOrNull(SemanticsProperties.StateDescription)
- val toggleState = node.unmergedConfig.getOrNull(SemanticsProperties.ToggleableState)
- val role = node.unmergedConfig.getOrNull(SemanticsProperties.Role)
-
- // Check toggle state and retrieve description accordingly
- toggleState?.let {
- when (it) {
- ToggleableState.On -> {
- // Unfortunately, talkback has a bug of using "checked", so we set state
- // description here
- if (role == Role.Switch && stateDescription == null) {
- stateDescription = view.context.resources.getString(R.string.on)
- }
- }
-
- ToggleableState.Off -> {
- // Unfortunately, talkback has a bug of using "not checked", so we set state
- // description here
- if (role == Role.Switch && stateDescription == null) {
- stateDescription = view.context.resources.getString(R.string.off)
- }
- }
-
- ToggleableState.Indeterminate -> {
- if (stateDescription == null) {
- stateDescription =
- view.context.resources.getString(R.string.indeterminate)
- }
- }
- }
- }
-
- // Check Selected property and retrieve description accordingly
- node.unmergedConfig.getOrNull(SemanticsProperties.Selected)?.let {
- if (role != Role.Tab) {
- if (stateDescription == null) {
- // If a radio entry (radio button + text) is selectable, it won't have the role
- // RadioButton, so if we use info.isCheckable/info.isChecked, talkback will say
- // "checked/not checked" instead "selected/note selected".
- stateDescription = if (it) {
- view.context.resources.getString(R.string.selected)
- } else {
- view.context.resources.getString(R.string.not_selected)
- }
- }
- }
- }
-
- // Check if a node has progress bar range info and retrieve description accordingly
- val rangeInfo =
- node.unmergedConfig.getOrNull(SemanticsProperties.ProgressBarRangeInfo)
- rangeInfo?.let {
- // let's set state description here and use state description change events.
- // otherwise, we need to send out type_view_selected event, as the old android
- // versions do. But the support for type_view_selected event for progress bars
- // maybe deprecated in talkback in the future.
- if (rangeInfo !== ProgressBarRangeInfo.Indeterminate) {
- if (stateDescription == null) {
- val valueRange = rangeInfo.range
- val progress = (
- if (valueRange.endInclusive - valueRange.start == 0f) 0f
- else (rangeInfo.current - valueRange.start) /
- (valueRange.endInclusive - valueRange.start)
- ).coerceIn(0f, 1f)
-
- // We only display 0% or 100% when it is exactly 0% or 100%.
- val percent = when (progress) {
- 0f -> 0
- 1f -> 100
- else -> (progress * 100).roundToInt().coerceIn(1, 99)
- }
- stateDescription =
- view.context.resources.getString(R.string.template_percent, percent)
- }
- } else if (stateDescription == null) {
- stateDescription = view.context.resources.getString(R.string.in_progress)
- }
- }
-
- return stateDescription
- }
-
- private fun setStateDescription(
+ private fun setText(
node: SemanticsNode,
info: AccessibilityNodeInfoCompat,
) {
- info.stateDescription = getInfoStateDescriptionOrNull(node)
- }
-
- private fun getInfoIsCheckable(
- node: SemanticsNode
- ): Boolean {
- var isCheckable = false
- val toggleState = node.unmergedConfig.getOrNull(SemanticsProperties.ToggleableState)
- val role = node.unmergedConfig.getOrNull(SemanticsProperties.Role)
-
- toggleState?.let {
- isCheckable = true
- }
-
- node.unmergedConfig.getOrNull(SemanticsProperties.Selected)?.let {
- if (role != Role.Tab) {
- isCheckable = true
- }
- }
-
- return isCheckable
- }
-
- private fun setIsCheckable(
- node: SemanticsNode,
- info: AccessibilityNodeInfoCompat
- ) {
- info.isCheckable = getInfoIsCheckable(node)
- }
-
- // This needs to be here instead of around line 3000 because we need access to the `view`
- // that is inside the `AndroidComposeViewAccessibilityDelegateCompat` class
- @OptIn(InternalTextApi::class)
- private fun getInfoText(
- node: SemanticsNode
- ): SpannableString? {
val fontFamilyResolver: FontFamily.Resolver = view.fontFamilyResolver
val editableTextToAssign = trimToSize(
node.unmergedConfig.getTextForTextField()
@@ -1380,14 +1317,8 @@
),
ParcelSafeTextLength
)
- return editableTextToAssign ?: textToAssign
- }
- private fun setText(
- node: SemanticsNode,
- info: AccessibilityNodeInfoCompat,
- ) {
- info.text = getInfoText(node)
+ info.text = editableTextToAssign ?: textToAssign
}
/**
@@ -2817,10 +2748,10 @@
}
if (bufferedContentCaptureDisappearedNodes.isNotEmpty()) {
session.notifyViewsDisappeared(
- bufferedContentCaptureDisappearedNodes
- .toList()
- .fastMap { it.toLong() }
- .toLongArray())
+ bufferedContentCaptureDisappearedNodes
+ .toList()
+ .fastMap { it.toLong() }
+ .toLongArray())
bufferedContentCaptureDisappearedNodes.clear()
}
}
@@ -3277,9 +3208,6 @@
return false
}
-private val SemanticsNode.infoContentDescriptionOrNull get() = this.unmergedConfig.getOrNull(
- SemanticsProperties.ContentDescription)?.firstOrNull()
-
@OptIn(ExperimentalComposeUiApi::class)
private fun SemanticsNode.excludeLineAndPageGranularities(): Boolean {
// text field that is not in focus
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsNode.kt
index c56a5d2..ab6678e 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsNode.kt
@@ -78,13 +78,6 @@
internal val unmergedConfig = outerSemanticsNode.collapsedSemanticsConfiguration()
- internal var isUnmergedLeafNode =
- !isFake && replacedChildren.isEmpty() && layoutNode.findClosestParentNode {
- it.outerSemantics
- ?.collapsedSemanticsConfiguration()
- ?.isMergingSemanticsOfDescendants == true
- } == null
-
/**
* The [LayoutInfo] that this is associated with.
*/
diff --git a/constraintlayout/constraintlayout-compose/api/api_lint.ignore b/constraintlayout/constraintlayout-compose/api/api_lint.ignore
index 77dd380..33c2cfc 100644
--- a/constraintlayout/constraintlayout-compose/api/api_lint.ignore
+++ b/constraintlayout/constraintlayout-compose/api/api_lint.ignore
@@ -5,29 +5,11 @@
Parameter type is concrete collection (`java.util.HashMap`); must be higher-level interface
-KotlinDefaultParameterOrder: androidx.constraintlayout.compose.MotionLayoutKt#MotionLayout(androidx.compose.ui.Modifier, int, androidx.constraintlayout.compose.MotionLayoutState, androidx.constraintlayout.compose.MotionScene, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit>) parameter #0:
+KotlinDefaultParameterOrder: androidx.constraintlayout.compose.MotionLayoutKt#MotionLayout(androidx.constraintlayout.compose.ConstraintSet, androidx.constraintlayout.compose.ConstraintSet, androidx.compose.ui.Modifier, androidx.constraintlayout.compose.Transition, float, int, androidx.constraintlayout.compose.LayoutInformationReceiver, int, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit>) parameter #2:
Parameter `modifier` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.constraintlayout.compose.MotionLayoutKt#MotionLayout(androidx.compose.ui.Modifier, int, androidx.constraintlayout.compose.MotionLayoutState, androidx.constraintlayout.compose.MotionScene, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit>) parameter #1:
- Parameter `optimizationLevel` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.constraintlayout.compose.MotionLayoutKt#MotionLayout(androidx.constraintlayout.compose.ConstraintSet, androidx.constraintlayout.compose.ConstraintSet, androidx.compose.ui.Modifier, androidx.constraintlayout.compose.Transition, float, java.util.EnumSet<androidx.constraintlayout.compose.MotionLayoutDebugFlags>, androidx.constraintlayout.compose.LayoutInformationReceiver, int, java.util.Set<? extends androidx.constraintlayout.compose.MotionLayoutFlag>, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit>) parameter #2:
- Parameter `modifier` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.constraintlayout.compose.MotionLayoutKt#MotionLayout(androidx.constraintlayout.compose.ConstraintSet, androidx.constraintlayout.compose.ConstraintSet, androidx.compose.ui.Modifier, androidx.constraintlayout.compose.Transition, float, java.util.EnumSet<androidx.constraintlayout.compose.MotionLayoutDebugFlags>, androidx.constraintlayout.compose.LayoutInformationReceiver, int, java.util.Set<? extends androidx.constraintlayout.compose.MotionLayoutFlag>, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit>) parameter #3:
+KotlinDefaultParameterOrder: androidx.constraintlayout.compose.MotionLayoutKt#MotionLayout(androidx.constraintlayout.compose.ConstraintSet, androidx.constraintlayout.compose.ConstraintSet, androidx.compose.ui.Modifier, androidx.constraintlayout.compose.Transition, float, int, androidx.constraintlayout.compose.LayoutInformationReceiver, int, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit>) parameter #3:
Parameter `transition` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.constraintlayout.compose.MotionLayoutKt#MotionLayout(androidx.constraintlayout.compose.ConstraintSet, androidx.constraintlayout.compose.ConstraintSet, androidx.compose.ui.Modifier, androidx.constraintlayout.compose.Transition, float, java.util.EnumSet<androidx.constraintlayout.compose.MotionLayoutDebugFlags>, int, java.util.Set<? extends androidx.constraintlayout.compose.MotionLayoutFlag>, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit>) parameter #2:
+KotlinDefaultParameterOrder: androidx.constraintlayout.compose.MotionLayoutKt#MotionLayout(androidx.constraintlayout.compose.ConstraintSet, androidx.constraintlayout.compose.ConstraintSet, androidx.compose.ui.Modifier, androidx.constraintlayout.compose.Transition, float, int, int, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit>) parameter #2:
Parameter `modifier` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.constraintlayout.compose.MotionLayoutKt#MotionLayout(androidx.constraintlayout.compose.ConstraintSet, androidx.constraintlayout.compose.ConstraintSet, androidx.compose.ui.Modifier, androidx.constraintlayout.compose.Transition, float, java.util.EnumSet<androidx.constraintlayout.compose.MotionLayoutDebugFlags>, int, java.util.Set<? extends androidx.constraintlayout.compose.MotionLayoutFlag>, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit>) parameter #3:
+KotlinDefaultParameterOrder: androidx.constraintlayout.compose.MotionLayoutKt#MotionLayout(androidx.constraintlayout.compose.ConstraintSet, androidx.constraintlayout.compose.ConstraintSet, androidx.compose.ui.Modifier, androidx.constraintlayout.compose.Transition, float, int, int, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit>) parameter #3:
Parameter `transition` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.constraintlayout.compose.MotionSceneScope#addConstraintSet(String, androidx.constraintlayout.compose.ConstraintSet) parameter #0:
- Parameter `name` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.constraintlayout.compose.MotionSceneScope#addTransition(String, androidx.constraintlayout.compose.Transition) parameter #0:
- Parameter `name` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-KotlinDefaultParameterOrder: androidx.constraintlayout.compose.MotionSceneScope#transition(String, androidx.constraintlayout.compose.ConstraintSetRef, androidx.constraintlayout.compose.ConstraintSetRef, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.TransitionScope,kotlin.Unit>) parameter #0:
- Parameter `name` has a default value and should come after all parameters without default values (except for a trailing lambda parameter)
-
-
-MethodNameUnits: androidx.constraintlayout.compose.TransitionScope#getDurationMs():
- Expected method name units to be `Millis or Micros`, was `Ms` in `getDurationMs`
-
-
-MutableBareField: androidx.constraintlayout.compose.State#layoutDirection:
- Bare field layoutDirection must be marked final, or moved behind accessors if mutable
diff --git a/constraintlayout/constraintlayout-compose/api/current.txt b/constraintlayout/constraintlayout-compose/api/current.txt
index 5190382..3d50674 100644
--- a/constraintlayout/constraintlayout-compose/api/current.txt
+++ b/constraintlayout/constraintlayout-compose/api/current.txt
@@ -442,11 +442,11 @@
enum_constant public static final androidx.constraintlayout.compose.MotionLayoutDebugFlags UNKNOWN;
}
- public enum MotionLayoutFlag {
- method public static androidx.constraintlayout.compose.MotionLayoutFlag valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method public static androidx.constraintlayout.compose.MotionLayoutFlag[] values();
- enum_constant public static final androidx.constraintlayout.compose.MotionLayoutFlag Default;
- enum_constant public static final androidx.constraintlayout.compose.MotionLayoutFlag FullMeasure;
+ @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;
}
@kotlin.jvm.JvmInline public final value class Skip {
diff --git a/constraintlayout/constraintlayout-compose/api/public_plus_experimental_current.txt b/constraintlayout/constraintlayout-compose/api/public_plus_experimental_current.txt
index c230eb2..92a3feb 100644
--- a/constraintlayout/constraintlayout-compose/api/public_plus_experimental_current.txt
+++ b/constraintlayout/constraintlayout-compose/api/public_plus_experimental_current.txt
@@ -335,6 +335,24 @@
property public final androidx.constraintlayout.compose.CurveFit Spline;
}
+ @androidx.constraintlayout.compose.ExperimentalMotionApi @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();
@@ -617,18 +635,18 @@
enum_constant public static final androidx.constraintlayout.compose.MotionLayoutDebugFlags UNKNOWN;
}
- public enum MotionLayoutFlag {
- method public static androidx.constraintlayout.compose.MotionLayoutFlag valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method public static androidx.constraintlayout.compose.MotionLayoutFlag[] values();
- enum_constant public static final androidx.constraintlayout.compose.MotionLayoutFlag Default;
- enum_constant public static final androidx.constraintlayout.compose.MotionLayoutFlag FullMeasure;
+ @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 @androidx.constraintlayout.compose.ExperimentalMotionApi public static inline void MotionLayout(androidx.constraintlayout.compose.ConstraintSet start, androidx.constraintlayout.compose.ConstraintSet end, optional androidx.compose.ui.Modifier modifier, optional androidx.constraintlayout.compose.Transition? transition, float progress, optional java.util.EnumSet<androidx.constraintlayout.compose.MotionLayoutDebugFlags> debug, optional int optimizationLevel, optional java.util.Set<? extends androidx.constraintlayout.compose.MotionLayoutFlag> motionLayoutFlags, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable @androidx.constraintlayout.compose.ExperimentalMotionApi public static inline void MotionLayout(androidx.constraintlayout.compose.MotionScene motionScene, float progress, optional androidx.compose.ui.Modifier modifier, optional String transitionName, optional java.util.EnumSet<androidx.constraintlayout.compose.MotionLayoutDebugFlags> debug, optional int optimizationLevel, optional java.util.Set<? extends androidx.constraintlayout.compose.MotionLayoutFlag> motionLayoutFlags, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable @androidx.constraintlayout.compose.ExperimentalMotionApi public static inline void MotionLayout(androidx.constraintlayout.compose.MotionScene motionScene, optional androidx.compose.ui.Modifier modifier, optional String? constraintSetName, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional java.util.EnumSet<androidx.constraintlayout.compose.MotionLayoutDebugFlags> debug, optional int optimizationLevel, optional java.util.Set<? extends androidx.constraintlayout.compose.MotionLayoutFlag> motionLayoutFlags, optional kotlin.jvm.functions.Function0<kotlin.Unit>? finishedAnimationListener, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable @androidx.constraintlayout.compose.ExperimentalMotionApi public static inline void MotionLayout(androidx.constraintlayout.compose.ConstraintSet start, androidx.constraintlayout.compose.ConstraintSet end, optional androidx.compose.ui.Modifier modifier, optional androidx.constraintlayout.compose.Transition? transition, float progress, optional java.util.EnumSet<androidx.constraintlayout.compose.MotionLayoutDebugFlags> debug, optional androidx.constraintlayout.compose.LayoutInformationReceiver? informationReceiver, optional int optimizationLevel, optional java.util.Set<? extends androidx.constraintlayout.compose.MotionLayoutFlag> motionLayoutFlags, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.constraintlayout.compose.ExperimentalMotionApi public static inline void MotionLayout(androidx.constraintlayout.compose.ConstraintSet start, androidx.constraintlayout.compose.ConstraintSet end, optional androidx.compose.ui.Modifier modifier, optional androidx.constraintlayout.compose.Transition? transition, float progress, optional int debugFlags, optional int optimizationLevel, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.constraintlayout.compose.ExperimentalMotionApi 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 @androidx.constraintlayout.compose.ExperimentalMotionApi public static inline void MotionLayout(androidx.constraintlayout.compose.MotionScene motionScene, optional androidx.compose.ui.Modifier modifier, optional String? constraintSetName, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional int debugFlags, optional int optimizationLevel, optional kotlin.jvm.functions.Function0<kotlin.Unit>? finishedAnimationListener, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @androidx.constraintlayout.compose.ExperimentalMotionApi public static inline void MotionLayout(androidx.constraintlayout.compose.ConstraintSet start, androidx.constraintlayout.compose.ConstraintSet end, optional androidx.compose.ui.Modifier modifier, optional androidx.constraintlayout.compose.Transition? transition, float progress, optional int debugFlags, optional androidx.constraintlayout.compose.LayoutInformationReceiver? informationReceiver, optional int optimizationLevel, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable @androidx.constraintlayout.compose.ExperimentalMotionApi public static inline void MotionLayout(androidx.constraintlayout.compose.MotionScene motionScene, androidx.constraintlayout.compose.MotionLayoutState motionLayoutState, optional androidx.compose.ui.Modifier modifier, optional int optimizationLevel, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
}
diff --git a/constraintlayout/constraintlayout-compose/api/restricted_current.txt b/constraintlayout/constraintlayout-compose/api/restricted_current.txt
index 4611a20..6038cb7 100644
--- a/constraintlayout/constraintlayout-compose/api/restricted_current.txt
+++ b/constraintlayout/constraintlayout-compose/api/restricted_current.txt
@@ -558,16 +558,16 @@
enum_constant public static final androidx.constraintlayout.compose.MotionLayoutDebugFlags UNKNOWN;
}
- public enum MotionLayoutFlag {
- method public static androidx.constraintlayout.compose.MotionLayoutFlag valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
- method public static androidx.constraintlayout.compose.MotionLayoutFlag[] values();
- enum_constant public static final androidx.constraintlayout.compose.MotionLayoutFlag Default;
- enum_constant public static final androidx.constraintlayout.compose.MotionLayoutFlag FullMeasure;
+ @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 @kotlin.PublishedApi internal static inline void MotionLayoutCore(androidx.constraintlayout.compose.MotionScene motionScene, optional androidx.compose.ui.Modifier modifier, optional String? constraintSetName, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional androidx.constraintlayout.compose.MotionLayoutDebugFlags debugFlag, optional int optimizationLevel, optional java.util.Set<? extends androidx.constraintlayout.compose.MotionLayoutFlag> motionLayoutFlags, optional kotlin.jvm.functions.Function0<kotlin.Unit>? finishedAnimationListener, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static inline void MotionLayoutCore(androidx.constraintlayout.compose.MotionScene motionScene, float progress, String transitionName, int optimizationLevel, java.util.Set<? extends androidx.constraintlayout.compose.MotionLayoutFlag> motionLayoutFlags, java.util.EnumSet<androidx.constraintlayout.compose.MotionLayoutDebugFlags> debug, androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static inline void MotionLayoutCore(androidx.constraintlayout.compose.MotionScene motionScene, optional androidx.compose.ui.Modifier modifier, optional String? constraintSetName, optional androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec, optional int debugFlags, optional int optimizationLevel, optional kotlin.jvm.functions.Function0<kotlin.Unit>? finishedAnimationListener, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static inline void MotionLayoutCore(androidx.constraintlayout.compose.MotionScene motionScene, float progress, String transitionName, int optimizationLevel, int debugFlags, androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static inline void MotionLayoutCore(androidx.constraintlayout.compose.MotionScene motionScene, String transitionName, androidx.constraintlayout.compose.MotionLayoutStateImpl motionLayoutState, int optimizationLevel, androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static inline void MotionLayoutCore(androidx.constraintlayout.compose.ConstraintSet start, androidx.constraintlayout.compose.ConstraintSet end, androidx.constraintlayout.compose.TransitionImpl? transition, androidx.constraintlayout.compose.MotionProgress motionProgress, androidx.constraintlayout.compose.LayoutInformationReceiver? informationReceiver, int optimizationLevel, boolean showBounds, boolean showPaths, boolean showKeyPositions, androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.constraintlayout.compose.MotionLayoutScope,kotlin.Unit> content);
method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static void UpdateWithForcedIfNoUserChange(androidx.constraintlayout.compose.MotionProgress motionProgress, androidx.constraintlayout.compose.LayoutInformationReceiver? informationReceiver);
diff --git a/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/MotionCarousel.kt b/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/MotionCarousel.kt
index ba68ca1..2656198 100644
--- a/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/MotionCarousel.kt
+++ b/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/MotionCarousel.kt
@@ -238,7 +238,6 @@
MotionLayout(motionScene = motionScene,
transitionName = transitionName.value,
progress = mprogress,
- motionLayoutFlags = setOf(MotionLayoutFlag.FullMeasure), // TODO: only apply as needed
modifier = Modifier
.fillMaxSize()
.background(Color.White)
diff --git a/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/MotionLayout.kt b/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/MotionLayout.kt
index b961b63..61b5b95 100644
--- a/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/MotionLayout.kt
+++ b/constraintlayout/constraintlayout-compose/src/androidMain/kotlin/androidx/constraintlayout/compose/MotionLayout.kt
@@ -50,15 +50,17 @@
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.constraintlayout.core.widgets.Optimizer
-import java.util.EnumSet
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.launch
/**
* Measure flags for MotionLayout
*/
+@Deprecated("Unnecessary, MotionLayout remeasures when its content changes.")
enum class MotionLayoutFlag(@Suppress("UNUSED_PARAMETER") value: Long) {
Default(0),
+
+ @Suppress("unused")
FullMeasure(1)
}
@@ -72,7 +74,6 @@
* Layout that interpolate its children layout given two sets of constraint and
* a progress (from 0 to 1)
*/
-@Suppress("UNUSED_PARAMETER")
@ExperimentalMotionApi
@Composable
inline fun MotionLayout(
@@ -81,13 +82,11 @@
modifier: Modifier = Modifier,
transition: Transition? = null,
progress: Float,
- debug: EnumSet<MotionLayoutDebugFlags> = EnumSet.of(MotionLayoutDebugFlags.NONE),
+ debugFlags: DebugFlags = DebugFlags.None,
optimizationLevel: Int = Optimizer.OPTIMIZATION_STANDARD,
- motionLayoutFlags: Set<MotionLayoutFlag> = setOf<MotionLayoutFlag>(),
crossinline content: @Composable MotionLayoutScope.() -> Unit
) {
val motionProgress = createAndUpdateMotionProgress(progress = progress)
- val showDebug = debug.firstOrNull() == MotionLayoutDebugFlags.SHOW_ALL
MotionLayoutCore(
start = start,
end = end,
@@ -95,9 +94,9 @@
motionProgress = motionProgress,
informationReceiver = null,
optimizationLevel = optimizationLevel,
- showBounds = showDebug,
- showPaths = showDebug,
- showKeyPositions = showDebug,
+ showBounds = debugFlags.showBounds,
+ showPaths = debugFlags.showPaths,
+ showKeyPositions = debugFlags.showKeyPositions,
modifier = modifier,
content = content
)
@@ -114,19 +113,17 @@
progress: Float,
modifier: Modifier = Modifier,
transitionName: String = "default",
- debug: EnumSet<MotionLayoutDebugFlags> = EnumSet.of(MotionLayoutDebugFlags.NONE),
+ debugFlags: DebugFlags = DebugFlags.None,
optimizationLevel: Int = Optimizer.OPTIMIZATION_STANDARD,
- motionLayoutFlags: Set<MotionLayoutFlag> = setOf<MotionLayoutFlag>(),
crossinline content: @Composable (MotionLayoutScope.() -> Unit),
) {
MotionLayoutCore(
motionScene = motionScene,
progress = progress,
- debug = debug,
+ debugFlags = debugFlags,
modifier = modifier,
optimizationLevel = optimizationLevel,
transitionName = transitionName,
- motionLayoutFlags = motionLayoutFlags,
content = content
)
}
@@ -150,9 +147,8 @@
modifier: Modifier = Modifier,
constraintSetName: String? = null,
animationSpec: AnimationSpec<Float> = tween(),
- debug: EnumSet<MotionLayoutDebugFlags> = EnumSet.of(MotionLayoutDebugFlags.NONE),
+ debugFlags: DebugFlags = DebugFlags.None,
optimizationLevel: Int = Optimizer.OPTIMIZATION_STANDARD,
- motionLayoutFlags: Set<MotionLayoutFlag> = setOf<MotionLayoutFlag>(),
noinline finishedAnimationListener: (() -> Unit)? = null,
crossinline content: @Composable (MotionLayoutScope.() -> Unit)
) {
@@ -160,16 +156,14 @@
motionScene = motionScene,
constraintSetName = constraintSetName,
animationSpec = animationSpec,
- debugFlag = debug.firstOrNull() ?: MotionLayoutDebugFlags.NONE,
+ debugFlags = debugFlags,
modifier = modifier,
optimizationLevel = optimizationLevel,
finishedAnimationListener = finishedAnimationListener,
- motionLayoutFlags = motionLayoutFlags,
content = content
)
}
-@Suppress("UNUSED_PARAMETER")
@ExperimentalMotionApi
@Composable
inline fun MotionLayout(
@@ -178,14 +172,12 @@
modifier: Modifier = Modifier,
transition: Transition? = null,
progress: Float,
- debug: EnumSet<MotionLayoutDebugFlags> = EnumSet.of(MotionLayoutDebugFlags.NONE),
+ debugFlags: DebugFlags = DebugFlags.None,
informationReceiver: LayoutInformationReceiver? = null,
optimizationLevel: Int = Optimizer.OPTIMIZATION_STANDARD,
- motionLayoutFlags: Set<MotionLayoutFlag> = setOf<MotionLayoutFlag>(),
crossinline content: @Composable (MotionLayoutScope.() -> Unit)
) {
val motionProgress = createAndUpdateMotionProgress(progress = progress)
- val showDebug = debug.firstOrNull() == MotionLayoutDebugFlags.SHOW_ALL
MotionLayoutCore(
start = start,
end = end,
@@ -193,9 +185,9 @@
motionProgress = motionProgress,
informationReceiver = informationReceiver,
optimizationLevel = optimizationLevel,
- showBounds = showDebug,
- showPaths = showDebug,
- showKeyPositions = showDebug,
+ showBounds = debugFlags.showBounds,
+ showPaths = debugFlags.showPaths,
+ showKeyPositions = debugFlags.showKeyPositions,
modifier = modifier,
content = content
)
@@ -204,16 +196,15 @@
@ExperimentalMotionApi
@PublishedApi
@Composable
-@Suppress("UnavailableSymbol", "UNUSED_PARAMETER")
+@Suppress("UnavailableSymbol")
internal inline fun MotionLayoutCore(
@Suppress("HiddenTypeParameter")
motionScene: MotionScene,
modifier: Modifier = Modifier,
constraintSetName: String? = null,
animationSpec: AnimationSpec<Float> = tween(),
- debugFlag: MotionLayoutDebugFlags = MotionLayoutDebugFlags.NONE,
+ debugFlags: DebugFlags = DebugFlags.None,
optimizationLevel: Int = Optimizer.OPTIMIZATION_STANDARD,
- motionLayoutFlags: Set<MotionLayoutFlag> = setOf<MotionLayoutFlag>(),
noinline finishedAnimationListener: (() -> Unit)? = null,
@Suppress("HiddenTypeParameter")
crossinline content: @Composable (MotionLayoutScope.() -> Unit)
@@ -293,9 +284,9 @@
motionProgress = motionProgress,
informationReceiver = motionScene as? LayoutInformationReceiver,
optimizationLevel = optimizationLevel,
- showBounds = debugFlag == MotionLayoutDebugFlags.SHOW_ALL,
- showPaths = debugFlag == MotionLayoutDebugFlags.SHOW_ALL,
- showKeyPositions = debugFlag == MotionLayoutDebugFlags.SHOW_ALL,
+ showBounds = debugFlags.showBounds,
+ showPaths = debugFlags.showPaths,
+ showKeyPositions = debugFlags.showKeyPositions,
modifier = modifier,
content = content
)
@@ -311,8 +302,7 @@
progress: Float,
transitionName: String,
optimizationLevel: Int,
- motionLayoutFlags: Set<MotionLayoutFlag>,
- debug: EnumSet<MotionLayoutDebugFlags>,
+ debugFlags: DebugFlags,
modifier: Modifier,
@Suppress("HiddenTypeParameter")
crossinline content: @Composable MotionLayoutScope.() -> Unit,
@@ -338,11 +328,10 @@
end = end,
transition = transition,
progress = progress,
- debug = debug,
+ debugFlags = debugFlags,
informationReceiver = motionScene as? LayoutInformationReceiver,
modifier = modifier,
optimizationLevel = optimizationLevel,
- motionLayoutFlags = motionLayoutFlags,
content = content
)
}
@@ -958,4 +947,78 @@
* states.
*/
Content
+}
+
+/**
+ * Flags to use with MotionLayout to enable visual debugging.
+ *
+ * @property showBounds
+ * @property showPaths
+ * @property showKeyPositions
+ *
+ * @see None
+ * @see All
+ */
+@ExperimentalMotionApi
+@JvmInline
+value class DebugFlags internal constructor(private val flags: Int) {
+ /**
+ * @param showBounds Whether to show the bounds of widgets at the start and end of the current transition.
+ * @param showPaths Whether to show the paths each widget will take through the current transition.
+ * @param showKeyPositions Whether to show a diamond icon representing KeyPositions defined for each widget along the path.
+ */
+ constructor(
+ showBounds: Boolean = false,
+ showPaths: Boolean = false,
+ showKeyPositions: Boolean = false
+ ) : this(
+ (if (showBounds) BOUNDS_FLAG else 0) or
+ (if (showPaths) PATHS_FLAG else 0) or
+ (if (showKeyPositions) KEY_POSITIONS_FLAG else 0)
+ )
+
+ /**
+ * When enabled, shows the bounds of widgets at the start and end of the current transition.
+ */
+ val showBounds: Boolean
+ get() = flags and BOUNDS_FLAG > 0
+
+ /**
+ * When enabled, shows the paths each widget will take through the current transition.
+ */
+ val showPaths: Boolean
+ get() = flags and PATHS_FLAG > 0
+
+ /**
+ *
+ * When enabled, shows a diamond icon representing KeyPositions defined for each widget along
+ * the path.
+ */
+ val showKeyPositions: Boolean
+ get() = flags and KEY_POSITIONS_FLAG > 0
+
+ override fun toString(): String =
+ "DebugFlags(" +
+ "showBounds = $showBounds, " +
+ "showPaths = $showPaths, " +
+ "showKeyPositions = $showKeyPositions" +
+ ")"
+
+ companion object {
+ private const val BOUNDS_FLAG = 1
+ private const val PATHS_FLAG = 1 shl 1
+ private const val KEY_POSITIONS_FLAG = 1 shl 2
+
+ /**
+ * [DebugFlags] instance with all flags disabled.
+ */
+ val None = DebugFlags(0)
+
+ /**
+ * [DebugFlags] instance with all flags enabled.
+ *
+ * Note that this includes any flags added in the future.
+ */
+ val All = DebugFlags(-1)
+ }
}
\ No newline at end of file
diff --git a/constraintlayout/constraintlayout-compose/src/androidTest/kotlin/androidx/constraintlayout/compose/DebugFlagsTest.kt b/constraintlayout/constraintlayout-compose/src/androidTest/kotlin/androidx/constraintlayout/compose/DebugFlagsTest.kt
new file mode 100644
index 0000000..76d06f2
--- /dev/null
+++ b/constraintlayout/constraintlayout-compose/src/androidTest/kotlin/androidx/constraintlayout/compose/DebugFlagsTest.kt
@@ -0,0 +1,120 @@
+/*
+ * 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.constraintlayout.compose
+
+import kotlin.test.assertEquals
+import kotlin.test.assertFalse
+import kotlin.test.assertNotEquals
+import kotlin.test.assertTrue
+import org.junit.Test
+
+@OptIn(ExperimentalMotionApi::class)
+class DebugFlagsTest {
+ @Test
+ fun testFlags() {
+ assertEquals(
+ DebugFlags.None,
+ DebugFlags()
+ )
+ assertEquals(
+ DebugFlags.None,
+ DebugFlags(
+ showBounds = false,
+ showPaths = false,
+ showKeyPositions = false
+ )
+ )
+
+ // Not equals because All includes potential future flags
+ assertNotEquals(
+ DebugFlags.All,
+ DebugFlags(
+ showBounds = true,
+ showPaths = true,
+ showKeyPositions = true
+ )
+ )
+
+ var flags = DebugFlags.All
+ assertTrue(flags.showBounds)
+ assertTrue(flags.showPaths)
+ assertTrue(flags.showKeyPositions)
+
+ flags = DebugFlags.None
+ assertFalse(flags.showBounds)
+ assertFalse(flags.showPaths)
+ assertFalse(flags.showKeyPositions)
+
+ flags = DebugFlags(showBounds = true, showPaths = true, showKeyPositions = true)
+ assertTrue(flags.showBounds)
+ assertTrue(flags.showPaths)
+ assertTrue(flags.showKeyPositions)
+
+ flags = DebugFlags(showBounds = false, showPaths = false, showKeyPositions = false)
+ assertFalse(flags.showBounds)
+ assertFalse(flags.showPaths)
+ assertFalse(flags.showKeyPositions)
+
+ flags = DebugFlags(showBounds = true)
+ assertTrue(flags.showBounds)
+ assertFalse(flags.showPaths)
+ assertFalse(flags.showKeyPositions)
+
+ flags = DebugFlags(showPaths = true)
+ assertFalse(flags.showBounds)
+ assertTrue(flags.showPaths)
+ assertFalse(flags.showKeyPositions)
+
+ flags = DebugFlags(showKeyPositions = true)
+ assertFalse(flags.showBounds)
+ assertFalse(flags.showPaths)
+ assertTrue(flags.showKeyPositions)
+ }
+
+ @Test
+ fun testToString() {
+ assertEquals(
+ "DebugFlags(showBounds = true, showPaths = true, showKeyPositions = true)",
+ DebugFlags.All.toString()
+ )
+ assertEquals(
+ "DebugFlags(showBounds = false, showPaths = false, showKeyPositions = false)",
+ DebugFlags.None.toString()
+ )
+
+ assertEquals(
+ "DebugFlags(showBounds = false, showPaths = false, showKeyPositions = false)",
+ DebugFlags().toString()
+ )
+ assertEquals(
+ "DebugFlags(showBounds = true, showPaths = true, showKeyPositions = true)",
+ DebugFlags(showBounds = true, showPaths = true, showKeyPositions = true).toString()
+ )
+ assertEquals(
+ "DebugFlags(showBounds = true, showPaths = false, showKeyPositions = false)",
+ DebugFlags(showBounds = true, showPaths = false, showKeyPositions = false).toString()
+ )
+ assertEquals(
+ "DebugFlags(showBounds = false, showPaths = true, showKeyPositions = false)",
+ DebugFlags(showBounds = false, showPaths = true, showKeyPositions = false).toString()
+ )
+ assertEquals(
+ "DebugFlags(showBounds = false, showPaths = false, showKeyPositions = true)",
+ DebugFlags(showBounds = false, showPaths = false, showKeyPositions = true).toString()
+ )
+ }
+}
\ No newline at end of file
diff --git a/docs-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index f99dae3..1b401fe 100644
--- a/docs-tip-of-tree/build.gradle
+++ b/docs-tip-of-tree/build.gradle
@@ -73,6 +73,7 @@
samples(project(":compose:foundation:foundation-layout:foundation-layout-samples"))
samples(project(":compose:foundation:foundation:foundation-samples"))
docs(project(":compose:material3:material3"))
+ docs(project(":compose:material3:material3-adaptive"))
samples(project(":compose:material3:material3:material3-samples"))
docs(project(":compose:material3:material3-window-size-class"))
samples(project(":compose:material3:material3-window-size-class:material3-window-size-class-samples"))
diff --git a/fragment/fragment-ktx/api/1.6.0-beta01.txt b/fragment/fragment-ktx/api/1.6.0-beta01.txt
new file mode 100644
index 0000000..b93e06b
--- /dev/null
+++ b/fragment/fragment-ktx/api/1.6.0-beta01.txt
@@ -0,0 +1,37 @@
+// 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/public_plus_experimental_1.6.0-beta01.txt b/fragment/fragment-ktx/api/public_plus_experimental_1.6.0-beta01.txt
new file mode 100644
index 0000000..b93e06b
--- /dev/null
+++ b/fragment/fragment-ktx/api/public_plus_experimental_1.6.0-beta01.txt
@@ -0,0 +1,37 @@
+// 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/res-1.6.0-beta01.txt b/fragment/fragment-ktx/api/res-1.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/fragment/fragment-ktx/api/res-1.6.0-beta01.txt
diff --git a/fragment/fragment-ktx/api/restricted_1.6.0-beta01.txt b/fragment/fragment-ktx/api/restricted_1.6.0-beta01.txt
new file mode 100644
index 0000000..b93e06b
--- /dev/null
+++ b/fragment/fragment-ktx/api/restricted_1.6.0-beta01.txt
@@ -0,0 +1,37 @@
+// 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-testing-manifest/api/1.6.0-beta01.txt b/fragment/fragment-testing-manifest/api/1.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/fragment/fragment-testing-manifest/api/1.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/fragment/fragment-testing-manifest/api/public_plus_experimental_1.6.0-beta01.txt b/fragment/fragment-testing-manifest/api/public_plus_experimental_1.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/fragment/fragment-testing-manifest/api/public_plus_experimental_1.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/fragment/fragment-testing-manifest/api/res-1.6.0-beta01.txt b/fragment/fragment-testing-manifest/api/res-1.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/fragment/fragment-testing-manifest/api/res-1.6.0-beta01.txt
diff --git a/fragment/fragment-testing-manifest/api/restricted_1.6.0-beta01.txt b/fragment/fragment-testing-manifest/api/restricted_1.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/fragment/fragment-testing-manifest/api/restricted_1.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/fragment/fragment-testing/api/1.6.0-beta01.txt b/fragment/fragment-testing/api/1.6.0-beta01.txt
new file mode 100644
index 0000000..d5c260e
--- /dev/null
+++ b/fragment/fragment-testing/api/1.6.0-beta01.txt
@@ -0,0 +1,60 @@
+// 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/public_plus_experimental_1.6.0-beta01.txt b/fragment/fragment-testing/api/public_plus_experimental_1.6.0-beta01.txt
new file mode 100644
index 0000000..d5c260e
--- /dev/null
+++ b/fragment/fragment-testing/api/public_plus_experimental_1.6.0-beta01.txt
@@ -0,0 +1,60 @@
+// 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/res-1.6.0-beta01.txt b/fragment/fragment-testing/api/res-1.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/fragment/fragment-testing/api/res-1.6.0-beta01.txt
diff --git a/fragment/fragment-testing/api/restricted_1.6.0-beta01.txt b/fragment/fragment-testing/api/restricted_1.6.0-beta01.txt
new file mode 100644
index 0000000..d5c260e
--- /dev/null
+++ b/fragment/fragment-testing/api/restricted_1.6.0-beta01.txt
@@ -0,0 +1,60 @@
+// 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/build.gradle b/fragment/fragment-testing/build.gradle
index 7afdb67..4ef2ed4 100644
--- a/fragment/fragment-testing/build.gradle
+++ b/fragment/fragment-testing/build.gradle
@@ -25,7 +25,7 @@
dependencies {
api(project(":fragment:fragment-ktx"))
- api(libs.testCore)
+ api("androidx.test:core:1.5.0")
api(libs.kotlinStdlib)
api(project(":fragment:fragment-testing-manifest"))
androidTestImplementation(libs.kotlinStdlib)
diff --git a/fragment/fragment/api/1.6.0-beta01.txt b/fragment/fragment/api/1.6.0-beta01.txt
new file mode 100644
index 0000000..2f167cf
--- /dev/null
+++ b/fragment/fragment/api/1.6.0-beta01.txt
@@ -0,0 +1,554 @@
+// 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/public_plus_experimental_1.6.0-beta01.txt b/fragment/fragment/api/public_plus_experimental_1.6.0-beta01.txt
new file mode 100644
index 0000000..2f167cf
--- /dev/null
+++ b/fragment/fragment/api/public_plus_experimental_1.6.0-beta01.txt
@@ -0,0 +1,554 @@
+// 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/res-1.6.0-beta01.txt b/fragment/fragment/api/res-1.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/fragment/fragment/api/res-1.6.0-beta01.txt
diff --git a/fragment/fragment/api/restricted_1.6.0-beta01.txt b/fragment/fragment/api/restricted_1.6.0-beta01.txt
new file mode 100644
index 0000000..83801ad
--- /dev/null
+++ b/fragment/fragment/api/restricted_1.6.0-beta01.txt
@@ -0,0 +1,583 @@
+// 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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setupDialog(android.app.Dialog, 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 @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.view.LayoutInflater getLayoutInflater(android.os.Bundle?);
+ 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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final boolean hasOptionsMenu();
+ 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 @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final boolean isMenuVisible();
+ 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.core.app.ActivityCompat.RequestPermissionsRequestCodeValidator {
+ 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 @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 @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
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class FragmentTransitionImpl {
+ ctor public FragmentTransitionImpl();
+ method public abstract void addTarget(Object, android.view.View);
+ method public abstract void addTargets(Object, java.util.ArrayList<android.view.View!>);
+ method public abstract void beginDelayedTransition(android.view.ViewGroup, Object?);
+ method protected static void bfsAddViewChildren(java.util.List<android.view.View!>!, android.view.View!);
+ method public abstract boolean canHandle(Object);
+ method public abstract Object! cloneTransition(Object?);
+ method protected void getBoundsOnScreen(android.view.View!, android.graphics.Rect!);
+ method protected static boolean isNullOrEmpty(java.util.List!);
+ method public abstract Object! mergeTransitionsInSequence(Object?, Object?, Object?);
+ method public abstract Object! mergeTransitionsTogether(Object?, Object?, Object?);
+ method public abstract void removeTarget(Object, android.view.View);
+ 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 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!>?);
+ method public abstract Object! wrapTransitionInSet(Object?);
+ }
+
+ 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/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/CanvasFrontBufferedRendererTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/CanvasFrontBufferedRendererTest.kt
index d3e0053..ef658d4 100644
--- a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/CanvasFrontBufferedRendererTest.kt
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/CanvasFrontBufferedRendererTest.kt
@@ -637,6 +637,8 @@
private fun isSupported(): Boolean =
// See "b/277225133" these tests pass on cuttlefish + other devices but fail for some reason
- // FTL configured API level 33 emulator instanceson
- !(Build.MODEL.contains("gphone") && Build.VERSION.SDK_INT == 33)
+ // FTL configured API level 33 emulator instances
+ // Additionally some cuttlefish instances don't support rotation based testing (b/277764242)
+ !(Build.MODEL.contains("gphone") && Build.VERSION.SDK_INT == 33) &&
+ !(Build.MODEL.contains("Cuttlefish") && Build.VERSION.SDK_INT == 30)
}
\ No newline at end of file
diff --git a/graphics/graphics-shapes/api/current.txt b/graphics/graphics-shapes/api/current.txt
index 9455b94..8c1144b 100644
--- a/graphics/graphics-shapes/api/current.txt
+++ b/graphics/graphics-shapes/api/current.txt
@@ -81,8 +81,6 @@
}
public final class RoundedPolygon {
- ctor public RoundedPolygon(java.util.List<? extends android.graphics.PointF> vertices, optional android.graphics.PointF? center);
- ctor public RoundedPolygon(int numVertices, optional float radius, optional android.graphics.PointF center);
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(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);
@@ -104,12 +102,13 @@
method public static androidx.graphics.shapes.RoundedPolygon Circle(optional float radius, optional android.graphics.PointF center);
method public static androidx.graphics.shapes.RoundedPolygon Circle(optional float radius);
method public static androidx.graphics.shapes.RoundedPolygon Circle();
- method public static androidx.graphics.shapes.RoundedPolygon Star(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius, 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(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius, 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(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding);
- method public static androidx.graphics.shapes.RoundedPolygon Star(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius, optional androidx.graphics.shapes.CornerRounding rounding);
- method public static androidx.graphics.shapes.RoundedPolygon Star(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius);
- method public static androidx.graphics.shapes.RoundedPolygon Star(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio);
+ method public static androidx.graphics.shapes.RoundedPolygon Star(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(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(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(int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding);
+ method public static androidx.graphics.shapes.RoundedPolygon Star(int numVerticesPerRadius, optional float radius, optional float innerRadius);
+ method public static androidx.graphics.shapes.RoundedPolygon Star(int numVerticesPerRadius, optional float radius);
+ method public static androidx.graphics.shapes.RoundedPolygon Star(int numVerticesPerRadius);
}
}
diff --git a/graphics/graphics-shapes/api/public_plus_experimental_current.txt b/graphics/graphics-shapes/api/public_plus_experimental_current.txt
index 9455b94..8c1144b 100644
--- a/graphics/graphics-shapes/api/public_plus_experimental_current.txt
+++ b/graphics/graphics-shapes/api/public_plus_experimental_current.txt
@@ -81,8 +81,6 @@
}
public final class RoundedPolygon {
- ctor public RoundedPolygon(java.util.List<? extends android.graphics.PointF> vertices, optional android.graphics.PointF? center);
- ctor public RoundedPolygon(int numVertices, optional float radius, optional android.graphics.PointF center);
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(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);
@@ -104,12 +102,13 @@
method public static androidx.graphics.shapes.RoundedPolygon Circle(optional float radius, optional android.graphics.PointF center);
method public static androidx.graphics.shapes.RoundedPolygon Circle(optional float radius);
method public static androidx.graphics.shapes.RoundedPolygon Circle();
- method public static androidx.graphics.shapes.RoundedPolygon Star(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius, 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(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius, 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(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding);
- method public static androidx.graphics.shapes.RoundedPolygon Star(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius, optional androidx.graphics.shapes.CornerRounding rounding);
- method public static androidx.graphics.shapes.RoundedPolygon Star(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius);
- method public static androidx.graphics.shapes.RoundedPolygon Star(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio);
+ method public static androidx.graphics.shapes.RoundedPolygon Star(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(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(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(int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding);
+ method public static androidx.graphics.shapes.RoundedPolygon Star(int numVerticesPerRadius, optional float radius, optional float innerRadius);
+ method public static androidx.graphics.shapes.RoundedPolygon Star(int numVerticesPerRadius, optional float radius);
+ method public static androidx.graphics.shapes.RoundedPolygon Star(int numVerticesPerRadius);
}
}
diff --git a/graphics/graphics-shapes/api/restricted_current.txt b/graphics/graphics-shapes/api/restricted_current.txt
index 9455b94..8c1144b 100644
--- a/graphics/graphics-shapes/api/restricted_current.txt
+++ b/graphics/graphics-shapes/api/restricted_current.txt
@@ -81,8 +81,6 @@
}
public final class RoundedPolygon {
- ctor public RoundedPolygon(java.util.List<? extends android.graphics.PointF> vertices, optional android.graphics.PointF? center);
- ctor public RoundedPolygon(int numVertices, optional float radius, optional android.graphics.PointF center);
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(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);
@@ -104,12 +102,13 @@
method public static androidx.graphics.shapes.RoundedPolygon Circle(optional float radius, optional android.graphics.PointF center);
method public static androidx.graphics.shapes.RoundedPolygon Circle(optional float radius);
method public static androidx.graphics.shapes.RoundedPolygon Circle();
- method public static androidx.graphics.shapes.RoundedPolygon Star(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius, 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(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius, 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(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius, optional androidx.graphics.shapes.CornerRounding rounding, optional androidx.graphics.shapes.CornerRounding? innerRounding);
- method public static androidx.graphics.shapes.RoundedPolygon Star(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius, optional androidx.graphics.shapes.CornerRounding rounding);
- method public static androidx.graphics.shapes.RoundedPolygon Star(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio, optional float radius);
- method public static androidx.graphics.shapes.RoundedPolygon Star(int numOuterVertices, @FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float innerRadiusRatio);
+ method public static androidx.graphics.shapes.RoundedPolygon Star(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(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(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(int numVerticesPerRadius, optional float radius, optional float innerRadius, optional androidx.graphics.shapes.CornerRounding rounding);
+ method public static androidx.graphics.shapes.RoundedPolygon Star(int numVerticesPerRadius, optional float radius, optional float innerRadius);
+ method public static androidx.graphics.shapes.RoundedPolygon Star(int numVerticesPerRadius, optional float radius);
+ method public static androidx.graphics.shapes.RoundedPolygon Star(int numVerticesPerRadius);
}
}
diff --git a/graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/PolygonTest.kt b/graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/PolygonTest.kt
index c715b1e..610fa3e 100644
--- a/graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/PolygonTest.kt
+++ b/graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/PolygonTest.kt
@@ -65,8 +65,8 @@
assertInBounds(manualSquare.toCubicShape(), min, max)
val offset = PointF(1f, 2f)
- val manualSquareOffset =
- RoundedPolygon(listOf(p0 + offset, p1 + offset, p2 + offset, p3 + offset), offset)
+ val manualSquareOffset = RoundedPolygon(
+ vertices = listOf(p0 + offset, p1 + offset, p2 + offset, p3 + offset), center = offset)
min = PointF(0f, 1f)
max = PointF(2f, 3f)
assertInBounds(manualSquareOffset.toCubicShape(), min, max)
diff --git a/graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/RoundedRoundedPolygonTest.kt b/graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/RoundedPolygonTest.kt
similarity index 98%
rename from graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/RoundedRoundedPolygonTest.kt
rename to graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/RoundedPolygonTest.kt
index 46f71be..11925c6 100644
--- a/graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/RoundedRoundedPolygonTest.kt
+++ b/graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/RoundedPolygonTest.kt
@@ -23,7 +23,7 @@
import org.junit.Test
@SmallTest
-class RoundedRoundedPolygonTest {
+class RoundedPolygonTest {
val rounding = CornerRounding(.1f)
val perVtxRounded = listOf<CornerRounding>(rounding, rounding, rounding, rounding)
diff --git a/graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/ShapesTest.kt b/graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/ShapesTest.kt
index 05f1f8e9..83755ae 100644
--- a/graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/ShapesTest.kt
+++ b/graphics/graphics-shapes/src/androidTest/java/androidx/graphics/shapes/ShapesTest.kt
@@ -108,24 +108,27 @@
*/
@Test
fun starTest() {
- var star = Star(4, innerRadiusRatio = .5f)
+ var star = Star(4, innerRadius = .5f)
var shape = star.toCubicShape()
+ var radius = 1f
+ var innerRadius = .5f
for (cubic in shape.cubics) {
- assertCubicOnRadii(cubic, 1f, .5f)
+ assertCubicOnRadii(cubic, radius, innerRadius)
}
val center = PointF(1f, 2f)
- star = Star(4, innerRadiusRatio = .5f, center = center)
+ star = Star(4, innerRadius = innerRadius, center = center)
shape = star.toCubicShape()
for (cubic in shape.cubics) {
- assertCubicOnRadii(cubic, 1f, .5f, center)
+ assertCubicOnRadii(cubic, radius, innerRadius, center)
}
- val radius = 4f
- star = Star(4, radius = radius, innerRadiusRatio = .5f)
+ radius = 4f
+ innerRadius = 2f
+ star = Star(4, radius, innerRadius)
shape = star.toCubicShape()
for (cubic in shape.cubics) {
- assertCubicOnRadii(cubic, radius, .5f * radius)
+ assertCubicOnRadii(cubic, radius, innerRadius)
}
}
@@ -136,24 +139,28 @@
val perVtxRounded = listOf<CornerRounding>(rounding, innerRounding, rounding, innerRounding,
rounding, innerRounding, rounding, innerRounding)
- var star = Star(4, innerRadiusRatio = .5f, rounding = rounding)
+ var star = Star(4, innerRadius = .5f, rounding = rounding)
val min = PointF(-1f, -1f)
val max = PointF(1f, 1f)
assertInBounds(star.toCubicShape(), min, max)
- star = Star(4, innerRadiusRatio = .5f, innerRounding = innerRounding)
+ star = Star(4, innerRadius = .5f, innerRounding = innerRounding)
assertInBounds(star.toCubicShape(), min, max)
- star = Star(4, innerRadiusRatio = .5f, rounding = rounding,
- innerRounding = innerRounding)
+ star = Star(
+ 4, innerRadius = .5f, rounding = rounding,
+ innerRounding = innerRounding
+ )
assertInBounds(star.toCubicShape(), min, max)
- star = Star(4, innerRadiusRatio = .5f, perVertexRounding = perVtxRounded)
+ star = Star(4, innerRadius = .5f, perVertexRounding = perVtxRounded)
assertInBounds(star.toCubicShape(), min, max)
assertThrows(IllegalArgumentException::class.java) {
- star = Star(6, innerRadiusRatio = .5f,
- perVertexRounding = perVtxRounded)
+ star = Star(
+ 6, innerRadius = .5f,
+ perVertexRounding = perVtxRounded
+ )
}
}
}
\ No newline at end of file
diff --git a/graphics/graphics-shapes/src/main/java/androidx/graphics/shapes/RoundedPolygon.kt b/graphics/graphics-shapes/src/main/java/androidx/graphics/shapes/RoundedPolygon.kt
index 60061ce..69a19c6 100644
--- a/graphics/graphics-shapes/src/main/java/androidx/graphics/shapes/RoundedPolygon.kt
+++ b/graphics/graphics-shapes/src/main/java/androidx/graphics/shapes/RoundedPolygon.kt
@@ -78,34 +78,6 @@
* Constructs a RoundedPolygon object from a given list of vertices, with optional
* corner-rounding parameters for all corners or per-corner.
*
- * @param vertices The list of vertices in this polygon. This should be an ordered list
- * (with the outline of the shape going from each vertex to the next in order of this
- * list), otherwise the results will be undefined.
- * @param center An optionally declared center of the polygon. If null or not supplied, this
- * will be calculated based on the supplied vertices.
- */
- constructor(vertices: List<PointF>, center: PointF? = null) :
- this(vertices, rounding = CornerRounding.Unrounded, perVertexRounding = null, center)
-
- /**
- * This constructor takes the number of vertices in the resulting polygon. These vertices are
- * positioned on a virtual circle around a given center with each vertex positioned [radius]
- * distance from that center, equally spaced (with equal angles between them).
- *
- * @param numVertices The number of vertices in this polygon.
- * @param radius The radius of the polygon, in pixels. This radius determines the
- * initial size of the object, which can be resized later by setting
- * a [transform matrix][transform].
- * @param center The center of the polygon, around which all vertices will be placed. The
- * default center is at (0,0).
- */
- constructor(numVertices: Int, radius: Float = 1f, center: PointF = PointF(0f, 0f)) :
- this(numVertices, radius = radius, center = center, rounding = CornerRounding.Unrounded)
-
- /**
- * Constructs a RoundedPolygon object from a given list of vertices, with optional
- * corner-rounding parameters for all corners or per-corner.
- *
* A RoundedPolygon without any rounding parameters is equivalent to a [RoundedPolygon] constructed
* with the same [vertices] and [center].
*
diff --git a/graphics/graphics-shapes/src/main/java/androidx/graphics/shapes/Shapes.kt b/graphics/graphics-shapes/src/main/java/androidx/graphics/shapes/Shapes.kt
index 9f8a5ec..4e8898d 100644
--- a/graphics/graphics-shapes/src/main/java/androidx/graphics/shapes/Shapes.kt
+++ b/graphics/graphics-shapes/src/main/java/androidx/graphics/shapes/Shapes.kt
@@ -17,7 +17,6 @@
package androidx.graphics.shapes
import android.graphics.PointF
-import androidx.annotation.FloatRange
private const val Sqrt2 = 1.41421356f
@@ -36,42 +35,63 @@
/**
* Creates a star polygon, which is like a regular polygon except every other vertex is
- * on either an inner or outer radius. The two radii are specified in the constructor by
- * providing the [innerRadiusRatio], which is a value representing the proportion (from
- * 0 to 1, non-inclusive) of the inner radius compared to the outer one.
- * @throws IllegalArgumentException if radius ratio not in [0,1]
+ * on either an inner or outer radius. The two radii specified in the constructor must both
+ * both nonzero. If the radii are equal, the result will be a regular (not star) polygon with twice
+ * the number of vertices specified in [numVerticesPerRadius].
+ *
+ * @param numVerticesPerRadius The number of vertices along each of the two radii.
+ * @param radius Outer radius for this star shape, must be greater than 0. Default value is 1.
+ * @param innerRadius Inner radius for this star shape, must be greater than 0 and less
+ * than or equal to [radius]. Note that equal radii would be the same as creating a
+ * [RoundedPolygon] directly, but with 2 * [numVerticesPerRadius] vertices. Default value is .5.
+ * @param rounding The [CornerRounding] properties of every vertex. If some vertices should
+ * have different rounding properties, then use [perVertexRounding] instead. The default
+ * rounding value is [CornerRounding.Unrounded], meaning that the polygon will use the vertices
+ * themselves in the final shape and not curves rounded around the vertices.
+ * @param innerRounding Optional rounding parameters for the vertices on the [innerRadius]. If
+ * null (the default value), inner vertices will use the [rounding] or [perVertexRounding]
+ * parameters instead.
+ * @param perVertexRounding The [CornerRounding] properties of every vertex. If this
+ * parameter is not null, then it must have the same size as 2 * [numVerticesPerRadius]. If this
+ * parameter is null, then the polygon will use the [rounding] parameter for every vertex instead.
+ * The default value is null.
+ * @param center The center of the polygon, around which all vertices will be placed. The
+ * default center is at (0,0).
+ *
+ * @throws IllegalArgumentException if either [radius] or [innerRadius] are <= 0 or
+ * [innerRadius] > [radius].
*/
@JvmOverloads
fun Star(
- numOuterVertices: Int,
- @FloatRange(from = 0.0, to = 1.0, fromInclusive = false, toInclusive = false)
- innerRadiusRatio: Float,
+ numVerticesPerRadius: Int,
radius: Float = 1f,
+ innerRadius: Float = .5f,
rounding: CornerRounding = CornerRounding.Unrounded,
innerRounding: CornerRounding? = null,
perVertexRounding: List<CornerRounding>? = null,
center: PointF = Zero
): RoundedPolygon {
- if (innerRadiusRatio <= 0f || innerRadiusRatio >= 1f) {
- throw IllegalArgumentException("Inner radius ratio must be in range (0,1), exclusive" +
- "of 0 and 1")
+ if (radius <= 0f || innerRadius <= 0f) {
+ throw IllegalArgumentException("Star radii must both be greater than 0")
+ }
+ if (innerRadius >= radius) {
+ throw IllegalArgumentException("innerRadius must be less than radius")
}
var pvRounding = perVertexRounding
// If no per-vertex rounding supplied and caller asked for inner rounding,
// create per-vertex rounding list based on supplied outer/inner rounding parameters
if (pvRounding == null && innerRounding != null) {
- pvRounding = (0 until numOuterVertices).flatMap {
+ pvRounding = (0 until numVerticesPerRadius).flatMap {
listOf(rounding, innerRounding)
}
}
// Star polygon is just a polygon with all vertices supplied (where we generate
// those vertices to be on the inner/outer radii)
- return RoundedPolygon((0 until numOuterVertices).flatMap {
+ return RoundedPolygon((0 until numVerticesPerRadius).flatMap {
listOf(
- radialToCartesian(radius, (FloatPi / numOuterVertices * 2 * it), center),
- radialToCartesian(radius * innerRadiusRatio,
- FloatPi / numOuterVertices * (2 * it + 1), center)
+ radialToCartesian(radius, (FloatPi / numVerticesPerRadius * 2 * it), center),
+ radialToCartesian(innerRadius, FloatPi / numVerticesPerRadius * (2 * it + 1), center)
)
}, rounding, pvRounding, center)
}
diff --git a/graphics/integration-tests/testapp-compose/src/main/java/androidx/graphics/shapes/testcompose/MainActivity.kt b/graphics/integration-tests/testapp-compose/src/main/java/androidx/graphics/shapes/testcompose/MainActivity.kt
index 26166e8..91a8db6 100644
--- a/graphics/integration-tests/testapp-compose/src/main/java/androidx/graphics/shapes/testcompose/MainActivity.kt
+++ b/graphics/integration-tests/testapp-compose/src/main/java/androidx/graphics/shapes/testcompose/MainActivity.kt
@@ -182,28 +182,28 @@
//
ShapeParameters(
sides = 12,
- innerRadiusRatio = .928f,
+ innerRadius = .928f,
roundness = .1f,
shapeId = ShapeParameters.ShapeId.Star
),
// Clover
ShapeParameters(
sides = 4,
- innerRadiusRatio = .352f,
+ innerRadius = .352f,
roundness = .32f,
rotation = 45f,
shapeId = ShapeParameters.ShapeId.Star
),
// Alice
ShapeParameters(
- innerRadiusRatio = 0.1f,
+ innerRadius = 0.1f,
roundness = 0.22f,
shapeId = ShapeParameters.ShapeId.Triangle
),
// Wiggle Star
ShapeParameters(
sides = 8,
- innerRadiusRatio = .784f,
+ innerRadius = .784f,
roundness = .16f,
shapeId = ShapeParameters.ShapeId.Star
),
@@ -212,20 +212,20 @@
// Wovel
ShapeParameters(
sides = 15,
- innerRadiusRatio = .892f,
+ innerRadius = .892f,
roundness = 1f,
shapeId = ShapeParameters.ShapeId.Star
),
// BlobR
ShapeParameters(
- innerRadiusRatio = .19f,
+ innerRadius = .19f,
roundness = 0.86f,
rotation = -45f,
shapeId = ShapeParameters.ShapeId.Blob
),
// BlobL
ShapeParameters(
- innerRadiusRatio = .19f,
+ innerRadius = .19f,
roundness = 0.86f,
rotation = 45f,
shapeId = ShapeParameters.ShapeId.Blob
@@ -233,7 +233,7 @@
// Scalop
ShapeParameters(
sides = 12,
- innerRadiusRatio = .928f,
+ innerRadius = .928f,
roundness = .928f,
shapeId = ShapeParameters.ShapeId.Star
),
@@ -268,14 +268,14 @@
ShapeParameters(
sides = 5,
rotation = -360f / 20,
- innerRadiusRatio = .3f,
+ innerRadius = .3f,
shapeId = ShapeParameters.ShapeId.Star
),
// 8-Sided Star
ShapeParameters(
sides = 8,
- innerRadiusRatio = .6f,
+ innerRadius = .6f,
shapeId = ShapeParameters.ShapeId.Star
)
)
diff --git a/graphics/integration-tests/testapp-compose/src/main/java/androidx/graphics/shapes/testcompose/ShapeEditor.kt b/graphics/integration-tests/testapp-compose/src/main/java/androidx/graphics/shapes/testcompose/ShapeEditor.kt
index aec2f4b..c7f98bb 100644
--- a/graphics/integration-tests/testapp-compose/src/main/java/androidx/graphics/shapes/testcompose/ShapeEditor.kt
+++ b/graphics/integration-tests/testapp-compose/src/main/java/androidx/graphics/shapes/testcompose/ShapeEditor.kt
@@ -75,7 +75,7 @@
class ShapeParameters(
sides: Int = 5,
- innerRadiusRatio: Float = 0.5f,
+ innerRadius: Float = 0.5f,
roundness: Float = 0f,
smooth: Float = 0f,
innerRoundness: Float = roundness,
@@ -84,7 +84,7 @@
shapeId: ShapeId = ShapeId.Polygon
) {
internal val sides = mutableStateOf(sides.toFloat())
- internal val innerRadiusRatio = mutableStateOf(innerRadiusRatio)
+ internal val innerRadius = mutableStateOf(innerRadius)
internal val roundness = mutableStateOf(roundness)
internal val smooth = mutableStateOf(smooth)
internal val innerRoundness = mutableStateOf(innerRoundness)
@@ -95,7 +95,7 @@
fun copy() = ShapeParameters(
this.sides.value.roundToInt(),
- this.innerRadiusRatio.value,
+ this.innerRadius.value,
this.roundness.value,
this.smooth.value,
this.innerRoundness.value,
@@ -124,8 +124,8 @@
internal val shapes = listOf(
ShapeItem("Star", shapegen = {
Star(
- numOuterVertices = this.sides.value.roundToInt(),
- innerRadiusRatio = this.innerRadiusRatio.value,
+ numVerticesPerRadius = this.sides.value.roundToInt(),
+ innerRadius = this.innerRadius.value,
rounding = CornerRounding(this.roundness.value, this.smooth.value),
innerRounding = CornerRounding(
this.innerRoundness.value,
@@ -136,7 +136,7 @@
debugDump = {
debugLog(
"ShapeParameters(sides = ${this.sides.value.roundToInt()}, " +
- "innerRadiusRatio = ${this.innerRadiusRatio.value}f, " +
+ "innerRadius = ${this.innerRadius.value}f, " +
"roundness = ${this.roundness.value}f, " +
"smooth = ${this.smooth.value}f, " +
"innerRoundness = ${this.innerRoundness.value}f, " +
@@ -167,7 +167,7 @@
val points = listOf(
radialToCartesian(1f, 270f.toRadians()),
radialToCartesian(1f, 30f.toRadians()),
- radialToCartesian(this.innerRadiusRatio.value, 90f.toRadians()),
+ radialToCartesian(this.innerRadius.value, 90f.toRadians()),
radialToCartesian(1f, 150f.toRadians()),
)
RoundedPolygon(
@@ -178,7 +178,7 @@
},
debugDump = {
debugLog(
- "ShapeParameters(innerRadiusRatio = ${this.innerRadiusRatio.value}f, " +
+ "ShapeParameters(innerRadius = ${this.innerRadius.value}f, " +
"smooth = ${this.smooth.value}f, " +
rotationAsString() +
"shapeId = ShapeParameters.ShapeId.Triangle)"
@@ -188,7 +188,7 @@
),
ShapeItem(
"Blob", shapegen = {
- val sx = this.innerRadiusRatio.value.coerceAtLeast(0.1f)
+ val sx = this.innerRadius.value.coerceAtLeast(0.1f)
val sy = this.roundness.value.coerceAtLeast(0.1f)
RoundedPolygon(
listOf(
@@ -283,11 +283,11 @@
}
MySlider("Sides", 3f, 20f, 1f, params.sides, shapeParams.usesSides)
MySlider(
- "InnerRadiusRatio",
+ "InnerRadius",
0.1f,
0.999f,
0f,
- params.innerRadiusRatio,
+ params.innerRadius,
shapeParams.usesInnerRatio
)
MySlider("RoundRadius", 0f, 1f, 0f, params.roundness, shapeParams.usesRoundness)
diff --git a/graphics/integration-tests/testapp/src/main/java/androidx/graphics/shapes/test/MaterialShapes.kt b/graphics/integration-tests/testapp/src/main/java/androidx/graphics/shapes/test/MaterialShapes.kt
index 0a78604..e3b0444 100644
--- a/graphics/integration-tests/testapp/src/main/java/androidx/graphics/shapes/test/MaterialShapes.kt
+++ b/graphics/integration-tests/testapp/src/main/java/androidx/graphics/shapes/test/MaterialShapes.kt
@@ -104,18 +104,18 @@
@JvmStatic
fun scallop(): RoundedPolygon {
- return Star(12, .928f, rounding = CornerRounding(radius = .928f))
+ return Star(12, innerRadius = .928f, rounding = CornerRounding(radius = .928f))
}
@JvmOverloads
@JvmStatic
fun clover(
rounding: Float = .32f,
- innerRadiusRatio: Float = .352f,
+ innerRadius: Float = .352f,
innerRounding: CornerRounding? = null,
scale: Float = 1f
): RoundedPolygon {
- val poly = Star(4, innerRadiusRatio,
+ val poly = Star(4, innerRadius = innerRadius,
rounding = CornerRounding(rounding * scale),
innerRounding = innerRounding)
return poly
diff --git a/graphics/integration-tests/testapp/src/main/java/androidx/graphics/shapes/test/ShapeActivity.kt b/graphics/integration-tests/testapp/src/main/java/androidx/graphics/shapes/test/ShapeActivity.kt
index d24d838..5571e62 100644
--- a/graphics/integration-tests/testapp/src/main/java/androidx/graphics/shapes/test/ShapeActivity.kt
+++ b/graphics/integration-tests/testapp/src/main/java/androidx/graphics/shapes/test/ShapeActivity.kt
@@ -115,11 +115,11 @@
val rounding = CornerRounding(.1f, .5f)
val starRounding = CornerRounding(.05f, .25f)
shapes.add(RoundedPolygon(numVertices = 4, rounding = rounding))
- shapes.add(Star(8, .4f, rounding = starRounding))
- shapes.add(Star(8, innerRadiusRatio = .4f, rounding = starRounding,
+ shapes.add(Star(8, radius = 1f, innerRadius = .4f, rounding = starRounding))
+ shapes.add(Star(8, radius = 1f, innerRadius = .4f, rounding = starRounding,
innerRounding = CornerRounding.Unrounded))
shapes.add(
- MaterialShapes.clover(rounding = .352f, innerRadiusRatio = .1f,
+ MaterialShapes.clover(rounding = .352f, innerRadius = .1f,
innerRounding = Unrounded))
shapes.add(RoundedPolygon(3))
}
diff --git a/libraryversions.toml b/libraryversions.toml
index 0ad27fc..f3c44a4 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -22,6 +22,7 @@
COMPOSE = "1.5.0-alpha03"
COMPOSE_COMPILER = "1.4.5"
COMPOSE_MATERIAL3 = "1.1.0-rc01"
+COMPOSE_MATERIAL3_ADAPTIVE = "1.0.0-alpha01"
COMPOSE_RUNTIME_TRACING = "1.0.0-alpha03"
CONSTRAINTLAYOUT = "2.2.0-alpha10"
CONSTRAINTLAYOUT_COMPOSE = "1.1.0-alpha10"
@@ -54,7 +55,7 @@
EMOJI2 = "1.4.0-beta02"
ENTERPRISE = "1.1.0-rc01"
EXIFINTERFACE = "1.4.0-alpha01"
-FRAGMENT = "1.6.0-alpha10"
+FRAGMENT = "1.6.0-beta01"
FUTURES = "1.2.0-alpha01"
GLANCE = "1.0.0-alpha06"
GLANCE_TEMPLATE = "1.0.0-alpha01"
@@ -85,7 +86,7 @@
MEDIA2 = "1.3.0-alpha01"
MEDIAROUTER = "1.5.0-alpha01"
METRICS = "1.0.0-alpha05"
-NAVIGATION = "2.6.0-alpha10"
+NAVIGATION = "2.6.0-beta01"
PAGING = "3.2.0-alpha05"
PAGING_COMPOSE = "1.0.0-alpha19"
PALETTE = "1.1.0-alpha01"
@@ -180,6 +181,7 @@
COMPOSE_FOUNDATION = { group = "androidx.compose.foundation", atomicGroupVersion = "versions.COMPOSE" }
COMPOSE_MATERIAL = { group = "androidx.compose.material", atomicGroupVersion = "versions.COMPOSE" }
COMPOSE_MATERIAL3 = { group = "androidx.compose.material3", atomicGroupVersion = "versions.COMPOSE_MATERIAL3" }
+COMPOSE_MATERIAL3_ADAPTIVE = { group = "androidx.compose.material3.material3-adaptive", atomicGroupVersion = "versions.COMPOSE_MATERIAL3_ADAPTIVE", overrideInclude = [ ":material3:material3-adpative" ] }
COMPOSE_RUNTIME = { group = "androidx.compose.runtime", atomicGroupVersion = "versions.COMPOSE" }
COMPOSE_UI = { group = "androidx.compose.ui", atomicGroupVersion = "versions.COMPOSE" }
CONCURRENT = { group = "androidx.concurrent", atomicGroupVersion = "versions.FUTURES" }
diff --git a/media2/media2-widget/src/main/res/values-or/strings.xml b/media2/media2-widget/src/main/res/values-or/strings.xml
index 79b2be3..d527d032 100644
--- a/media2/media2-widget/src/main/res/values-or/strings.xml
+++ b/media2/media2-widget/src/main/res/values-or/strings.xml
@@ -30,7 +30,7 @@
<string name="mcv2_music_title_unknown_text" msgid="6037645626002038645">"ଗୀତର ଟାଇଟେଲ୍ ଅଜଣା ଅଟେ"</string>
<string name="mcv2_music_artist_unknown_text" msgid="5393558204040775454">"କଳାକାର ଅଜଣା ଅଟନ୍ତି"</string>
<string name="mcv2_playback_error_text" msgid="6061787693725630293">"ଆପଣ ଅନୁରୋଧ କରିଥିବା ଆଇଟମ୍ ଚଲାଯାଇପାରିଲା ନାହିଁ"</string>
- <string name="mcv2_error_dialog_button" msgid="5940167897992933850">"ଠିକ୍ ଅଛି"</string>
+ <string name="mcv2_error_dialog_button" msgid="5940167897992933850">"ଠିକ ଅଛି"</string>
<string name="mcv2_back_button_desc" msgid="1540894858499118373">"ପଛକୁ ଫେରନ୍ତୁ"</string>
<string name="mcv2_overflow_left_button_desc" msgid="2749567167276435888">"ପୂର୍ବବର୍ତ୍ତୀ ବଟନ୍ ତାଲିକାକୁ ଫେରନ୍ତୁ"</string>
<string name="mcv2_overflow_right_button_desc" msgid="7388732945289831383">"ଅଧିକ ବଟନ୍ ଦେଖନ୍ତୁ"</string>
diff --git a/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/MediaRouter2Test.java b/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/MediaRouter2Test.java
index eb44a5e..6601791 100644
--- a/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/MediaRouter2Test.java
+++ b/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/MediaRouter2Test.java
@@ -20,6 +20,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import android.content.Context;
@@ -63,7 +64,7 @@
private Context mContext;
private MediaRouter mRouter;
- private MediaRouter.Callback mPlaceholderCallback = new MediaRouter.Callback() { };
+ private MediaRouter.Callback mPlaceholderCallback = new MediaRouter.Callback() {};
StubMediaRouteProviderService mService;
StubMediaRouteProviderService.StubMediaRouteProvider mProvider;
MediaRouteProviderService.MediaRouteProviderServiceImplApi30 mServiceImpl;
@@ -117,14 +118,22 @@
@After
public void tearDown() {
- getInstrumentation().runOnMainSync(() -> {
- mRouter.removeCallback(mPlaceholderCallback);
- for (MediaRouter.Callback callback : mCallbacks) {
- mRouter.removeCallback(callback);
- }
- mCallbacks.clear();
- MediaRouterTestHelper.resetMediaRouter();
- });
+ getInstrumentation()
+ .runOnMainSync(
+ () -> {
+ for (RoutingSessionInfo sessionInfo :
+ mMr2ProviderServiceAdapter.getAllSessionInfo()) {
+ mMr2ProviderServiceAdapter.onReleaseSession(
+ MediaRoute2ProviderService.REQUEST_ID_NONE,
+ sessionInfo.getId());
+ }
+ mRouter.removeCallback(mPlaceholderCallback);
+ for (MediaRouter.Callback callback : mCallbacks) {
+ mRouter.removeCallback(callback);
+ }
+ mCallbacks.clear();
+ MediaRouterTestHelper.resetMediaRouter();
+ });
MediaRouter2TestActivity.finishActivity();
}
@@ -191,6 +200,28 @@
@SmallTest
@Test
+ public void setRouteVolume_onStaticNonGroupRoute() {
+ // We run session creation on the main thread to ensure the route creation from the setup
+ // method happens before the session creation. Otherwise, this call may call into an
+ // inconsistent adapter state.
+ getInstrumentation()
+ .runOnMainSync(
+ () ->
+ mMr2ProviderServiceAdapter.onCreateSession(
+ MediaRoute2ProviderService.REQUEST_ID_NONE,
+ mContext.getPackageName(),
+ StubMediaRouteProviderService.ROUTE_ID1,
+ /* sessionHints= */ null));
+ StubMediaRouteProviderService.StubMediaRouteProvider.StubRouteController createdController =
+ mProvider.mControllers.get(StubMediaRouteProviderService.ROUTE_ID1);
+ assertNotNull(createdController); // Avoids nullability warning.
+ assertNull(createdController.mLastSetVolume);
+ mMr2ProviderServiceAdapter.setRouteVolume(StubMediaRouteProviderService.ROUTE_ID1, 100);
+ assertEquals(100, (int) createdController.mLastSetVolume);
+ }
+
+ @SmallTest
+ @Test
public void onBinderDied_releaseRoutingSessions() throws Exception {
String descriptorId = StubMediaRouteProviderService.ROUTE_ID1;
@@ -208,8 +239,9 @@
try {
List<Messenger> messengers =
- mServiceImpl.mClients.stream().map(client -> client.mMessenger)
- .collect(Collectors.toList());
+ mServiceImpl.mClients.stream()
+ .map(client -> client.mMessenger)
+ .collect(Collectors.toList());
getInstrumentation().runOnMainSync(() ->
messengers.forEach(mServiceImpl::onBinderDied));
// It should have no session info.
diff --git a/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/StubMediaRouteProviderService.java b/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/StubMediaRouteProviderService.java
index a0f60b4..97a2e83 100644
--- a/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/StubMediaRouteProviderService.java
+++ b/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/StubMediaRouteProviderService.java
@@ -21,6 +21,7 @@
import androidx.annotation.GuardedBy;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.collection.ArrayMap;
import java.util.ArrayList;
@@ -82,6 +83,7 @@
class StubMediaRouteProvider extends MediaRouteProvider {
Map<String, MediaRouteDescriptor> mRoutes = new ArrayMap<>();
+ Map<String, StubRouteController> mControllers = new ArrayMap<>();
boolean mSupportsDynamicGroup = false;
StubMediaRouteProvider(@NonNull Context context) {
@@ -90,7 +92,9 @@
@Override
public RouteController onCreateRouteController(@NonNull String routeId) {
- return new StubRouteController(routeId);
+ StubRouteController newController = new StubRouteController(routeId);
+ mControllers.put(routeId, newController);
+ return newController;
}
public void initializeRoutes() {
@@ -114,6 +118,8 @@
//TODO: Implement DynamicGroupRouteController
class StubRouteController extends RouteController {
final String mRouteId;
+ @Nullable Integer mLastSetVolume;
+
StubRouteController(String routeId) {
mRouteId = routeId;
}
@@ -133,6 +139,11 @@
.build());
publishRoutes();
}
+
+ @Override
+ public void onSetVolume(int volume) {
+ mLastSetVolume = volume;
+ }
}
}
}
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRoute2ProviderServiceAdapter.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRoute2ProviderServiceAdapter.java
index d5381f5..53c71e5 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRoute2ProviderServiceAdapter.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRoute2ProviderServiceAdapter.java
@@ -177,13 +177,20 @@
RoutingSessionInfo sessionInfo = builder.build();
sessionRecord.setSessionInfo(sessionInfo);
- // Create member route controllers if it's a static group. Member route controllers
- // for a dynamic group will be created after the group route is created.
- // (DynamicGroupRouteController#notifyDynamicRoutesChanged is called)
- if ((sessionFlags & (SessionRecord.SESSION_FLAG_GROUP | SessionRecord.SESSION_FLAG_DYNAMIC))
- == SessionRecord.SESSION_FLAG_GROUP) {
- sessionRecord.updateMemberRouteControllers(routeId, /*oldSession=*/null,
- sessionInfo);
+ if ((sessionFlags & SessionRecord.SESSION_FLAG_DYNAMIC) == 0) {
+ if ((sessionFlags & SessionRecord.SESSION_FLAG_GROUP) != 0) {
+ // Create member route controllers if it's a static group. Member route controllers
+ // for a dynamic group will be created after the group route is created.
+ // (DynamicGroupRouteController#notifyDynamicRoutesChanged is called).
+ sessionRecord.updateMemberRouteControllers(
+ routeId, /* oldSession= */ null, sessionInfo);
+ } else {
+ // The session has a non-group static route controller, whose proxy route
+ // controller has already been created. We just need to map the route id to said
+ // controller, for the controller to be found by its corresponding route id via
+ // findControllerByRouteId (needed, for example, for route volume adjustment).
+ sessionRecord.setStaticMemberRouteId(routeId);
+ }
}
mServiceImpl.setDynamicRoutesChangedListener(controller);
@@ -665,6 +672,19 @@
mClientRecord = new WeakReference<>(clientRecord);
}
+ /**
+ * Maps the provided {@code routeId} to the top level route controller of this session.
+ *
+ * <p>This method can be used for mapping a route id to a non-group static route controller.
+ * The session record takes care of the creation of the member route controllers, but not of
+ * the top level route controller, which is provided via the constructor. In the case of
+ * non-group static routes, the top level route controller is the single route controller,
+ * and has already been created, so we only need to map the corresponding route id to it.
+ */
+ public void setStaticMemberRouteId(String routeId) {
+ mRouteIdToControllerMap.put(routeId, mController);
+ }
+
public int getFlags() {
return mFlags;
}
diff --git a/navigation/navigation-common-ktx/api/2.6.0-beta01.txt b/navigation/navigation-common-ktx/api/2.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/navigation/navigation-common-ktx/api/2.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/navigation/navigation-common-ktx/api/public_plus_experimental_2.6.0-beta01.txt b/navigation/navigation-common-ktx/api/public_plus_experimental_2.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/navigation/navigation-common-ktx/api/public_plus_experimental_2.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/navigation/navigation-common-ktx/api/res-2.6.0-beta01.txt b/navigation/navigation-common-ktx/api/res-2.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/navigation-common-ktx/api/res-2.6.0-beta01.txt
diff --git a/navigation/navigation-common-ktx/api/restricted_2.6.0-beta01.txt b/navigation/navigation-common-ktx/api/restricted_2.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/navigation/navigation-common-ktx/api/restricted_2.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/navigation/navigation-common/api/2.6.0-beta01.txt b/navigation/navigation-common/api/2.6.0-beta01.txt
new file mode 100644
index 0000000..de2b551
--- /dev/null
+++ b/navigation/navigation-common/api/2.6.0-beta01.txt
@@ -0,0 +1,530 @@
+// Signature format: 4.0
+package androidx.navigation {
+
+ public final class ActionOnlyNavDirections implements androidx.navigation.NavDirections {
+ ctor public ActionOnlyNavDirections(int actionId);
+ method public int component1();
+ method public androidx.navigation.ActionOnlyNavDirections copy(int actionId);
+ method public int getActionId();
+ method public android.os.Bundle getArguments();
+ property public int actionId;
+ property public android.os.Bundle arguments;
+ }
+
+ @androidx.navigation.NavOptionsDsl public final class AnimBuilder {
+ ctor public AnimBuilder();
+ method public int getEnter();
+ method public int getExit();
+ method public int getPopEnter();
+ method public int getPopExit();
+ method public void setEnter(int);
+ method public void setExit(int);
+ method public void setPopEnter(int);
+ method public void setPopExit(int);
+ property public final int enter;
+ property public final int exit;
+ property public final int popEnter;
+ property public final int popExit;
+ }
+
+ public interface FloatingWindow {
+ }
+
+ public final class NamedNavArgument {
+ method public operator String component1();
+ method public operator androidx.navigation.NavArgument component2();
+ method public androidx.navigation.NavArgument getArgument();
+ method public String getName();
+ property public final androidx.navigation.NavArgument argument;
+ property public final String name;
+ }
+
+ public final class NamedNavArgumentKt {
+ method public static androidx.navigation.NamedNavArgument navArgument(String name, kotlin.jvm.functions.Function1<? super androidx.navigation.NavArgumentBuilder,kotlin.Unit> builder);
+ }
+
+ 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);
+ method public android.os.Bundle? getDefaultArguments();
+ method public int getDestinationId();
+ method public androidx.navigation.NavOptions? getNavOptions();
+ method public void setDefaultArguments(android.os.Bundle?);
+ method public void setNavOptions(androidx.navigation.NavOptions?);
+ property public final android.os.Bundle? defaultArguments;
+ property public final int destinationId;
+ property public final androidx.navigation.NavOptions? navOptions;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class NavActionBuilder {
+ ctor public NavActionBuilder();
+ method public java.util.Map<java.lang.String,java.lang.Object> getDefaultArguments();
+ method public int getDestinationId();
+ method public void navOptions(kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> optionsBuilder);
+ method public void setDestinationId(int);
+ property public final java.util.Map<java.lang.String,java.lang.Object> defaultArguments;
+ property public final int destinationId;
+ }
+
+ public interface NavArgs {
+ }
+
+ public final class NavArgsLazy<Args extends androidx.navigation.NavArgs> implements kotlin.Lazy<Args> {
+ ctor public NavArgsLazy(kotlin.reflect.KClass<Args> navArgsClass, kotlin.jvm.functions.Function0<android.os.Bundle> argumentProducer);
+ method public Args getValue();
+ method public boolean isInitialized();
+ property public Args value;
+ }
+
+ public final class NavArgument {
+ method public Object? getDefaultValue();
+ method public androidx.navigation.NavType<java.lang.Object> getType();
+ method public boolean isDefaultValuePresent();
+ method public boolean isNullable();
+ property public final Object? defaultValue;
+ property public final boolean isDefaultValuePresent;
+ property public final boolean isNullable;
+ property public final androidx.navigation.NavType<java.lang.Object> type;
+ }
+
+ public static final class NavArgument.Builder {
+ ctor public NavArgument.Builder();
+ method public androidx.navigation.NavArgument build();
+ method public androidx.navigation.NavArgument.Builder setDefaultValue(Object? defaultValue);
+ method public androidx.navigation.NavArgument.Builder setIsNullable(boolean isNullable);
+ method public <T> androidx.navigation.NavArgument.Builder setType(androidx.navigation.NavType<T> type);
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class NavArgumentBuilder {
+ ctor public NavArgumentBuilder();
+ method public androidx.navigation.NavArgument build();
+ method public Object? getDefaultValue();
+ method public boolean getNullable();
+ method public androidx.navigation.NavType<?> getType();
+ method public void setDefaultValue(Object?);
+ method public void setNullable(boolean);
+ method public void setType(androidx.navigation.NavType<?>);
+ property public final Object? defaultValue;
+ property public final boolean nullable;
+ property public final androidx.navigation.NavType<?> type;
+ }
+
+ public final class NavBackStackEntry implements androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+ method public android.os.Bundle? getArguments();
+ method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
+ method public androidx.navigation.NavDestination getDestination();
+ method public String getId();
+ method public androidx.lifecycle.Lifecycle getLifecycle();
+ method public androidx.lifecycle.SavedStateHandle getSavedStateHandle();
+ method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
+ method public androidx.lifecycle.ViewModelStore getViewModelStore();
+ property public final android.os.Bundle? arguments;
+ property public androidx.lifecycle.viewmodel.CreationExtras defaultViewModelCreationExtras;
+ property public androidx.lifecycle.ViewModelProvider.Factory defaultViewModelProviderFactory;
+ property public final androidx.navigation.NavDestination destination;
+ property public final String id;
+ property public androidx.lifecycle.Lifecycle lifecycle;
+ property public final androidx.lifecycle.SavedStateHandle savedStateHandle;
+ property public androidx.savedstate.SavedStateRegistry savedStateRegistry;
+ property public androidx.lifecycle.ViewModelStore viewModelStore;
+ }
+
+ public final class NavDeepLink {
+ method public String? getAction();
+ method public String? getMimeType();
+ method public String? getUriPattern();
+ property public final String? action;
+ property public final String? mimeType;
+ property public final String? uriPattern;
+ }
+
+ public static final class NavDeepLink.Builder {
+ method public androidx.navigation.NavDeepLink build();
+ method public static androidx.navigation.NavDeepLink.Builder fromAction(String action);
+ method public static androidx.navigation.NavDeepLink.Builder fromMimeType(String mimeType);
+ method public static androidx.navigation.NavDeepLink.Builder fromUriPattern(String uriPattern);
+ method public androidx.navigation.NavDeepLink.Builder setAction(String action);
+ method public androidx.navigation.NavDeepLink.Builder setMimeType(String mimeType);
+ method public androidx.navigation.NavDeepLink.Builder setUriPattern(String uriPattern);
+ }
+
+ @kotlin.DslMarker public @interface NavDeepLinkDsl {
+ }
+
+ @androidx.navigation.NavDeepLinkDsl public final class NavDeepLinkDslBuilder {
+ ctor public NavDeepLinkDslBuilder();
+ method public String? getAction();
+ method public String? getMimeType();
+ method public String? getUriPattern();
+ method public void setAction(String?);
+ method public void setMimeType(String?);
+ method public void setUriPattern(String?);
+ property public final String? action;
+ property public final String? mimeType;
+ property public final String? uriPattern;
+ }
+
+ public final class NavDeepLinkDslBuilderKt {
+ method public static androidx.navigation.NavDeepLink navDeepLink(kotlin.jvm.functions.Function1<? super androidx.navigation.NavDeepLinkDslBuilder,kotlin.Unit> deepLinkBuilder);
+ }
+
+ public class NavDeepLinkRequest {
+ method public String? getAction();
+ method public String? getMimeType();
+ method public android.net.Uri? getUri();
+ property public String? action;
+ property public String? mimeType;
+ property public android.net.Uri? uri;
+ }
+
+ public static final class NavDeepLinkRequest.Builder {
+ method public androidx.navigation.NavDeepLinkRequest build();
+ method public static androidx.navigation.NavDeepLinkRequest.Builder fromAction(String action);
+ method public static androidx.navigation.NavDeepLinkRequest.Builder fromMimeType(String mimeType);
+ method public static androidx.navigation.NavDeepLinkRequest.Builder fromUri(android.net.Uri uri);
+ method public androidx.navigation.NavDeepLinkRequest.Builder setAction(String action);
+ method public androidx.navigation.NavDeepLinkRequest.Builder setMimeType(String mimeType);
+ method public androidx.navigation.NavDeepLinkRequest.Builder setUri(android.net.Uri uri);
+ field public static final androidx.navigation.NavDeepLinkRequest.Builder.Companion Companion;
+ }
+
+ public static final class NavDeepLinkRequest.Builder.Companion {
+ method public androidx.navigation.NavDeepLinkRequest.Builder fromAction(String action);
+ method public androidx.navigation.NavDeepLinkRequest.Builder fromMimeType(String mimeType);
+ method public androidx.navigation.NavDeepLinkRequest.Builder fromUri(android.net.Uri uri);
+ }
+
+ public class NavDestination {
+ ctor public NavDestination(String navigatorName);
+ ctor public NavDestination(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ 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 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();
+ method public static final kotlin.sequences.Sequence<androidx.navigation.NavDestination> getHierarchy(androidx.navigation.NavDestination);
+ method @IdRes public final int getId();
+ method public final CharSequence? getLabel();
+ method public final String getNavigatorName();
+ method public final androidx.navigation.NavGraph? getParent();
+ method public final String? getRoute();
+ method public boolean hasDeepLink(android.net.Uri deepLink);
+ 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 removeAction(@IdRes int actionId);
+ method public final void removeArgument(String argumentName);
+ method public final void setId(@IdRes int);
+ method public final void setLabel(CharSequence?);
+ method public final void setRoute(String?);
+ property public final java.util.Map<java.lang.String,androidx.navigation.NavArgument> arguments;
+ property @IdRes public final int id;
+ property public final CharSequence? label;
+ property public final String navigatorName;
+ property public final androidx.navigation.NavGraph? parent;
+ property public final String? route;
+ field public static final androidx.navigation.NavDestination.Companion Companion;
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface NavDestination.ClassType {
+ method public abstract kotlin.reflect.KClass<?> value();
+ property public abstract kotlin.reflect.KClass<?> value;
+ }
+
+ public static final class NavDestination.Companion {
+ method public kotlin.sequences.Sequence<androidx.navigation.NavDestination> getHierarchy(androidx.navigation.NavDestination);
+ method protected <C> Class<? extends C> parseClassFromName(android.content.Context context, String name, Class<? extends C> expectedClassType);
+ }
+
+ @androidx.navigation.NavDestinationDsl public class NavDestinationBuilder<D extends androidx.navigation.NavDestination> {
+ ctor @Deprecated public NavDestinationBuilder(androidx.navigation.Navigator<? extends D> navigator, @IdRes int id);
+ ctor public NavDestinationBuilder(androidx.navigation.Navigator<? extends D> navigator, String? route);
+ method @Deprecated public final void action(int actionId, kotlin.jvm.functions.Function1<? super androidx.navigation.NavActionBuilder,kotlin.Unit> actionBuilder);
+ method public final void argument(String name, kotlin.jvm.functions.Function1<? super androidx.navigation.NavArgumentBuilder,kotlin.Unit> argumentBuilder);
+ method public D build();
+ method public final void deepLink(String uriPattern);
+ method public final void deepLink(kotlin.jvm.functions.Function1<? super androidx.navigation.NavDeepLinkDslBuilder,kotlin.Unit> navDeepLink);
+ method public final int getId();
+ method public final CharSequence? getLabel();
+ method protected final androidx.navigation.Navigator<? extends D> getNavigator();
+ method public final String? getRoute();
+ method public final void setLabel(CharSequence?);
+ property public final int id;
+ property public final CharSequence? label;
+ property protected final androidx.navigation.Navigator<? extends D> navigator;
+ property public final String? route;
+ }
+
+ @kotlin.DslMarker public @interface NavDestinationDsl {
+ }
+
+ public interface NavDirections {
+ method @IdRes public int getActionId();
+ method public android.os.Bundle getArguments();
+ property @IdRes public abstract int actionId;
+ property public abstract android.os.Bundle arguments;
+ }
+
+ public class NavGraph extends androidx.navigation.NavDestination implements java.lang.Iterable<androidx.navigation.NavDestination> kotlin.jvm.internal.markers.KMappedMarker {
+ 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 clear();
+ method public final androidx.navigation.NavDestination? findNode(@IdRes int resId);
+ method public final androidx.navigation.NavDestination? findNode(String? route);
+ method public static final androidx.navigation.NavDestination findStartDestination(androidx.navigation.NavGraph);
+ method @Deprecated @IdRes public final int getStartDestination();
+ method @IdRes public final int getStartDestinationId();
+ method public final String? getStartDestinationRoute();
+ method public final java.util.Iterator<androidx.navigation.NavDestination> iterator();
+ method public final void remove(androidx.navigation.NavDestination node);
+ method public final void setStartDestination(int startDestId);
+ method public final void setStartDestination(String startDestRoute);
+ property @IdRes public final int startDestinationId;
+ property public final String? startDestinationRoute;
+ field public static final androidx.navigation.NavGraph.Companion Companion;
+ }
+
+ public static final class NavGraph.Companion {
+ method public androidx.navigation.NavDestination findStartDestination(androidx.navigation.NavGraph);
+ }
+
+ @androidx.navigation.NavDestinationDsl public class NavGraphBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.NavGraph> {
+ ctor @Deprecated public NavGraphBuilder(androidx.navigation.NavigatorProvider provider, @IdRes int id, @IdRes int startDestination);
+ ctor public NavGraphBuilder(androidx.navigation.NavigatorProvider provider, String startDestination, String? route);
+ method public final void addDestination(androidx.navigation.NavDestination destination);
+ method public androidx.navigation.NavGraph build();
+ method public final <D extends androidx.navigation.NavDestination> void destination(androidx.navigation.NavDestinationBuilder<? extends D> navDestination);
+ method public final androidx.navigation.NavigatorProvider getProvider();
+ method public final operator void unaryPlus(androidx.navigation.NavDestination);
+ property public final androidx.navigation.NavigatorProvider provider;
+ }
+
+ 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);
+ }
+
+ public final class NavGraphKt {
+ method public static operator boolean contains(androidx.navigation.NavGraph, @IdRes int id);
+ method public static operator boolean contains(androidx.navigation.NavGraph, String route);
+ method public static inline operator androidx.navigation.NavDestination get(androidx.navigation.NavGraph, @IdRes int id);
+ method public static inline operator androidx.navigation.NavDestination get(androidx.navigation.NavGraph, String route);
+ method public static inline operator void minusAssign(androidx.navigation.NavGraph, androidx.navigation.NavDestination node);
+ method public static inline operator void plusAssign(androidx.navigation.NavGraph, androidx.navigation.NavDestination node);
+ method public static inline operator void plusAssign(androidx.navigation.NavGraph, androidx.navigation.NavGraph other);
+ }
+
+ @androidx.navigation.Navigator.Name("navigation") public class NavGraphNavigator extends androidx.navigation.Navigator<androidx.navigation.NavGraph> {
+ ctor public NavGraphNavigator(androidx.navigation.NavigatorProvider navigatorProvider);
+ method public androidx.navigation.NavGraph createDestination();
+ method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getBackStack();
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> backStack;
+ }
+
+ public final class NavOptions {
+ method @AnimRes @AnimatorRes public int getEnterAnim();
+ method @AnimRes @AnimatorRes public int getExitAnim();
+ method @AnimRes @AnimatorRes public int getPopEnterAnim();
+ method @AnimRes @AnimatorRes public int getPopExitAnim();
+ method @Deprecated @IdRes public int getPopUpTo();
+ method @IdRes public int getPopUpToId();
+ method public String? getPopUpToRoute();
+ method public boolean isPopUpToInclusive();
+ method public boolean shouldLaunchSingleTop();
+ method public boolean shouldPopUpToSaveState();
+ method public boolean shouldRestoreState();
+ property @AnimRes @AnimatorRes public final int enterAnim;
+ property @AnimRes @AnimatorRes public final int exitAnim;
+ property @AnimRes @AnimatorRes public final int popEnterAnim;
+ property @AnimRes @AnimatorRes public final int popExitAnim;
+ property @IdRes public final int popUpToId;
+ property public final String? popUpToRoute;
+ }
+
+ public static final class NavOptions.Builder {
+ ctor public NavOptions.Builder();
+ method public androidx.navigation.NavOptions build();
+ method public androidx.navigation.NavOptions.Builder setEnterAnim(@AnimRes @AnimatorRes int enterAnim);
+ method public androidx.navigation.NavOptions.Builder setExitAnim(@AnimRes @AnimatorRes int exitAnim);
+ 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(String? route, boolean inclusive);
+ method public androidx.navigation.NavOptions.Builder setRestoreState(boolean restoreState);
+ }
+
+ @androidx.navigation.NavOptionsDsl public final class NavOptionsBuilder {
+ ctor public NavOptionsBuilder();
+ method public void anim(kotlin.jvm.functions.Function1<? super androidx.navigation.AnimBuilder,kotlin.Unit> animBuilder);
+ method public boolean getLaunchSingleTop();
+ method @Deprecated public int getPopUpTo();
+ method public int getPopUpToId();
+ method public String? getPopUpToRoute();
+ method public boolean getRestoreState();
+ method public void popUpTo(@IdRes int id, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
+ method public void popUpTo(String route, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
+ method public void setLaunchSingleTop(boolean);
+ method @Deprecated public void setPopUpTo(int);
+ method public void setRestoreState(boolean);
+ property public final boolean launchSingleTop;
+ property @Deprecated public final int popUpTo;
+ property public final int popUpToId;
+ property public final String? popUpToRoute;
+ property public final boolean restoreState;
+ }
+
+ public final class NavOptionsBuilderKt {
+ method public static androidx.navigation.NavOptions navOptions(kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> optionsBuilder);
+ }
+
+ @kotlin.DslMarker public @interface NavOptionsDsl {
+ }
+
+ public abstract class NavType<T> {
+ ctor public NavType(boolean isNullableAllowed);
+ method public static androidx.navigation.NavType<?> fromArgType(String? type, String? packageName);
+ method public abstract operator T? get(android.os.Bundle bundle, String key);
+ method public String getName();
+ method public boolean isNullableAllowed();
+ method public abstract T! parseValue(String value);
+ method public T! parseValue(String value, T? previousValue);
+ method public abstract void put(android.os.Bundle bundle, String key, T? value);
+ method public String serializeAsValue(T? value);
+ property public boolean isNullableAllowed;
+ property public String name;
+ field public static final androidx.navigation.NavType<boolean[]> BoolArrayType;
+ field public static final androidx.navigation.NavType<java.lang.Boolean> BoolType;
+ field public static final androidx.navigation.NavType.Companion Companion;
+ field public static final androidx.navigation.NavType<float[]> FloatArrayType;
+ field public static final androidx.navigation.NavType<java.lang.Float> FloatType;
+ field public static final androidx.navigation.NavType<int[]> IntArrayType;
+ field public static final androidx.navigation.NavType<java.lang.Integer> IntType;
+ field public static final androidx.navigation.NavType<long[]> LongArrayType;
+ field public static final androidx.navigation.NavType<java.lang.Long> LongType;
+ field public static final androidx.navigation.NavType<java.lang.Integer> ReferenceType;
+ field public static final androidx.navigation.NavType<java.lang.String[]> StringArrayType;
+ field public static final androidx.navigation.NavType<java.lang.String> StringType;
+ }
+
+ public static final class NavType.Companion {
+ method public androidx.navigation.NavType<?> fromArgType(String? type, String? packageName);
+ }
+
+ public static final class NavType.EnumType<D extends java.lang.Enum<?>> extends androidx.navigation.NavType.SerializableType<D> {
+ ctor public NavType.EnumType(Class<D> type);
+ property public String name;
+ }
+
+ public static final class NavType.ParcelableArrayType<D extends android.os.Parcelable> extends androidx.navigation.NavType<D[]> {
+ ctor public NavType.ParcelableArrayType(Class<D> type);
+ method public D![]? get(android.os.Bundle bundle, String key);
+ method public D![] parseValue(String value);
+ method public void put(android.os.Bundle bundle, String key, D![]? value);
+ property public String name;
+ }
+
+ public static final class NavType.ParcelableType<D> extends androidx.navigation.NavType<D> {
+ ctor public NavType.ParcelableType(Class<D> type);
+ method public D? get(android.os.Bundle bundle, String key);
+ method public D! parseValue(String value);
+ method public void put(android.os.Bundle bundle, String key, D? value);
+ property public String name;
+ }
+
+ public static final class NavType.SerializableArrayType<D extends java.io.Serializable> extends androidx.navigation.NavType<D[]> {
+ ctor public NavType.SerializableArrayType(Class<D> type);
+ method public D![]? get(android.os.Bundle bundle, String key);
+ method public D![] parseValue(String value);
+ method public void put(android.os.Bundle bundle, String key, D![]? value);
+ property public String name;
+ }
+
+ public static class NavType.SerializableType<D extends java.io.Serializable> extends androidx.navigation.NavType<D> {
+ ctor public NavType.SerializableType(Class<D> type);
+ method public D? get(android.os.Bundle bundle, String key);
+ method public D parseValue(String value);
+ method public void put(android.os.Bundle bundle, String key, D value);
+ property public String name;
+ }
+
+ public abstract class Navigator<D extends androidx.navigation.NavDestination> {
+ ctor public Navigator();
+ 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 @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();
+ property public final boolean isAttached;
+ property protected final androidx.navigation.NavigatorState state;
+ }
+
+ public static interface Navigator.Extras {
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface Navigator.Name {
+ method public abstract String value();
+ property public abstract String value;
+ }
+
+ public class NavigatorProvider {
+ ctor public NavigatorProvider();
+ method public final androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? addNavigator(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ method @CallSuper public androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? addNavigator(String name, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ method public final <T extends androidx.navigation.Navigator<?>> T getNavigator(Class<T> navigatorClass);
+ method @CallSuper public <T extends androidx.navigation.Navigator<?>> T getNavigator(String name);
+ }
+
+ public final class NavigatorProviderKt {
+ method public static inline operator <T extends androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>> T get(androidx.navigation.NavigatorProvider, String name);
+ method public static inline operator <T extends androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>> T get(androidx.navigation.NavigatorProvider, kotlin.reflect.KClass<T> clazz);
+ method public static inline operator void plusAssign(androidx.navigation.NavigatorProvider, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ method public static inline operator androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? set(androidx.navigation.NavigatorProvider, String name, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ }
+
+ public abstract class NavigatorState {
+ ctor public NavigatorState();
+ method public abstract androidx.navigation.NavBackStackEntry createBackStackEntry(androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
+ method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getBackStack();
+ method public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.navigation.NavBackStackEntry>> getTransitionsInProgress();
+ method public void markTransitionComplete(androidx.navigation.NavBackStackEntry entry);
+ method @CallSuper public void onLaunchSingleTop(androidx.navigation.NavBackStackEntry backStackEntry);
+ method @CallSuper public void onLaunchSingleTopWithTransition(androidx.navigation.NavBackStackEntry backStackEntry);
+ method public void pop(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
+ method public void popWithTransition(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
+ method @CallSuper public void prepareForTransition(androidx.navigation.NavBackStackEntry entry);
+ method public void push(androidx.navigation.NavBackStackEntry backStackEntry);
+ method public void pushWithTransition(androidx.navigation.NavBackStackEntry backStackEntry);
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> backStack;
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.navigation.NavBackStackEntry>> transitionsInProgress;
+ }
+
+ @androidx.navigation.NavOptionsDsl public final class PopUpToBuilder {
+ ctor public PopUpToBuilder();
+ method public boolean getInclusive();
+ method public boolean getSaveState();
+ method public void setInclusive(boolean);
+ method public void setSaveState(boolean);
+ property public final boolean inclusive;
+ property public final boolean saveState;
+ }
+
+}
+
diff --git a/navigation/navigation-common/api/public_plus_experimental_2.6.0-beta01.txt b/navigation/navigation-common/api/public_plus_experimental_2.6.0-beta01.txt
new file mode 100644
index 0000000..de2b551
--- /dev/null
+++ b/navigation/navigation-common/api/public_plus_experimental_2.6.0-beta01.txt
@@ -0,0 +1,530 @@
+// Signature format: 4.0
+package androidx.navigation {
+
+ public final class ActionOnlyNavDirections implements androidx.navigation.NavDirections {
+ ctor public ActionOnlyNavDirections(int actionId);
+ method public int component1();
+ method public androidx.navigation.ActionOnlyNavDirections copy(int actionId);
+ method public int getActionId();
+ method public android.os.Bundle getArguments();
+ property public int actionId;
+ property public android.os.Bundle arguments;
+ }
+
+ @androidx.navigation.NavOptionsDsl public final class AnimBuilder {
+ ctor public AnimBuilder();
+ method public int getEnter();
+ method public int getExit();
+ method public int getPopEnter();
+ method public int getPopExit();
+ method public void setEnter(int);
+ method public void setExit(int);
+ method public void setPopEnter(int);
+ method public void setPopExit(int);
+ property public final int enter;
+ property public final int exit;
+ property public final int popEnter;
+ property public final int popExit;
+ }
+
+ public interface FloatingWindow {
+ }
+
+ public final class NamedNavArgument {
+ method public operator String component1();
+ method public operator androidx.navigation.NavArgument component2();
+ method public androidx.navigation.NavArgument getArgument();
+ method public String getName();
+ property public final androidx.navigation.NavArgument argument;
+ property public final String name;
+ }
+
+ public final class NamedNavArgumentKt {
+ method public static androidx.navigation.NamedNavArgument navArgument(String name, kotlin.jvm.functions.Function1<? super androidx.navigation.NavArgumentBuilder,kotlin.Unit> builder);
+ }
+
+ 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);
+ method public android.os.Bundle? getDefaultArguments();
+ method public int getDestinationId();
+ method public androidx.navigation.NavOptions? getNavOptions();
+ method public void setDefaultArguments(android.os.Bundle?);
+ method public void setNavOptions(androidx.navigation.NavOptions?);
+ property public final android.os.Bundle? defaultArguments;
+ property public final int destinationId;
+ property public final androidx.navigation.NavOptions? navOptions;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class NavActionBuilder {
+ ctor public NavActionBuilder();
+ method public java.util.Map<java.lang.String,java.lang.Object> getDefaultArguments();
+ method public int getDestinationId();
+ method public void navOptions(kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> optionsBuilder);
+ method public void setDestinationId(int);
+ property public final java.util.Map<java.lang.String,java.lang.Object> defaultArguments;
+ property public final int destinationId;
+ }
+
+ public interface NavArgs {
+ }
+
+ public final class NavArgsLazy<Args extends androidx.navigation.NavArgs> implements kotlin.Lazy<Args> {
+ ctor public NavArgsLazy(kotlin.reflect.KClass<Args> navArgsClass, kotlin.jvm.functions.Function0<android.os.Bundle> argumentProducer);
+ method public Args getValue();
+ method public boolean isInitialized();
+ property public Args value;
+ }
+
+ public final class NavArgument {
+ method public Object? getDefaultValue();
+ method public androidx.navigation.NavType<java.lang.Object> getType();
+ method public boolean isDefaultValuePresent();
+ method public boolean isNullable();
+ property public final Object? defaultValue;
+ property public final boolean isDefaultValuePresent;
+ property public final boolean isNullable;
+ property public final androidx.navigation.NavType<java.lang.Object> type;
+ }
+
+ public static final class NavArgument.Builder {
+ ctor public NavArgument.Builder();
+ method public androidx.navigation.NavArgument build();
+ method public androidx.navigation.NavArgument.Builder setDefaultValue(Object? defaultValue);
+ method public androidx.navigation.NavArgument.Builder setIsNullable(boolean isNullable);
+ method public <T> androidx.navigation.NavArgument.Builder setType(androidx.navigation.NavType<T> type);
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class NavArgumentBuilder {
+ ctor public NavArgumentBuilder();
+ method public androidx.navigation.NavArgument build();
+ method public Object? getDefaultValue();
+ method public boolean getNullable();
+ method public androidx.navigation.NavType<?> getType();
+ method public void setDefaultValue(Object?);
+ method public void setNullable(boolean);
+ method public void setType(androidx.navigation.NavType<?>);
+ property public final Object? defaultValue;
+ property public final boolean nullable;
+ property public final androidx.navigation.NavType<?> type;
+ }
+
+ public final class NavBackStackEntry implements androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+ method public android.os.Bundle? getArguments();
+ method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
+ method public androidx.navigation.NavDestination getDestination();
+ method public String getId();
+ method public androidx.lifecycle.Lifecycle getLifecycle();
+ method public androidx.lifecycle.SavedStateHandle getSavedStateHandle();
+ method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
+ method public androidx.lifecycle.ViewModelStore getViewModelStore();
+ property public final android.os.Bundle? arguments;
+ property public androidx.lifecycle.viewmodel.CreationExtras defaultViewModelCreationExtras;
+ property public androidx.lifecycle.ViewModelProvider.Factory defaultViewModelProviderFactory;
+ property public final androidx.navigation.NavDestination destination;
+ property public final String id;
+ property public androidx.lifecycle.Lifecycle lifecycle;
+ property public final androidx.lifecycle.SavedStateHandle savedStateHandle;
+ property public androidx.savedstate.SavedStateRegistry savedStateRegistry;
+ property public androidx.lifecycle.ViewModelStore viewModelStore;
+ }
+
+ public final class NavDeepLink {
+ method public String? getAction();
+ method public String? getMimeType();
+ method public String? getUriPattern();
+ property public final String? action;
+ property public final String? mimeType;
+ property public final String? uriPattern;
+ }
+
+ public static final class NavDeepLink.Builder {
+ method public androidx.navigation.NavDeepLink build();
+ method public static androidx.navigation.NavDeepLink.Builder fromAction(String action);
+ method public static androidx.navigation.NavDeepLink.Builder fromMimeType(String mimeType);
+ method public static androidx.navigation.NavDeepLink.Builder fromUriPattern(String uriPattern);
+ method public androidx.navigation.NavDeepLink.Builder setAction(String action);
+ method public androidx.navigation.NavDeepLink.Builder setMimeType(String mimeType);
+ method public androidx.navigation.NavDeepLink.Builder setUriPattern(String uriPattern);
+ }
+
+ @kotlin.DslMarker public @interface NavDeepLinkDsl {
+ }
+
+ @androidx.navigation.NavDeepLinkDsl public final class NavDeepLinkDslBuilder {
+ ctor public NavDeepLinkDslBuilder();
+ method public String? getAction();
+ method public String? getMimeType();
+ method public String? getUriPattern();
+ method public void setAction(String?);
+ method public void setMimeType(String?);
+ method public void setUriPattern(String?);
+ property public final String? action;
+ property public final String? mimeType;
+ property public final String? uriPattern;
+ }
+
+ public final class NavDeepLinkDslBuilderKt {
+ method public static androidx.navigation.NavDeepLink navDeepLink(kotlin.jvm.functions.Function1<? super androidx.navigation.NavDeepLinkDslBuilder,kotlin.Unit> deepLinkBuilder);
+ }
+
+ public class NavDeepLinkRequest {
+ method public String? getAction();
+ method public String? getMimeType();
+ method public android.net.Uri? getUri();
+ property public String? action;
+ property public String? mimeType;
+ property public android.net.Uri? uri;
+ }
+
+ public static final class NavDeepLinkRequest.Builder {
+ method public androidx.navigation.NavDeepLinkRequest build();
+ method public static androidx.navigation.NavDeepLinkRequest.Builder fromAction(String action);
+ method public static androidx.navigation.NavDeepLinkRequest.Builder fromMimeType(String mimeType);
+ method public static androidx.navigation.NavDeepLinkRequest.Builder fromUri(android.net.Uri uri);
+ method public androidx.navigation.NavDeepLinkRequest.Builder setAction(String action);
+ method public androidx.navigation.NavDeepLinkRequest.Builder setMimeType(String mimeType);
+ method public androidx.navigation.NavDeepLinkRequest.Builder setUri(android.net.Uri uri);
+ field public static final androidx.navigation.NavDeepLinkRequest.Builder.Companion Companion;
+ }
+
+ public static final class NavDeepLinkRequest.Builder.Companion {
+ method public androidx.navigation.NavDeepLinkRequest.Builder fromAction(String action);
+ method public androidx.navigation.NavDeepLinkRequest.Builder fromMimeType(String mimeType);
+ method public androidx.navigation.NavDeepLinkRequest.Builder fromUri(android.net.Uri uri);
+ }
+
+ public class NavDestination {
+ ctor public NavDestination(String navigatorName);
+ ctor public NavDestination(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ 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 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();
+ method public static final kotlin.sequences.Sequence<androidx.navigation.NavDestination> getHierarchy(androidx.navigation.NavDestination);
+ method @IdRes public final int getId();
+ method public final CharSequence? getLabel();
+ method public final String getNavigatorName();
+ method public final androidx.navigation.NavGraph? getParent();
+ method public final String? getRoute();
+ method public boolean hasDeepLink(android.net.Uri deepLink);
+ 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 removeAction(@IdRes int actionId);
+ method public final void removeArgument(String argumentName);
+ method public final void setId(@IdRes int);
+ method public final void setLabel(CharSequence?);
+ method public final void setRoute(String?);
+ property public final java.util.Map<java.lang.String,androidx.navigation.NavArgument> arguments;
+ property @IdRes public final int id;
+ property public final CharSequence? label;
+ property public final String navigatorName;
+ property public final androidx.navigation.NavGraph? parent;
+ property public final String? route;
+ field public static final androidx.navigation.NavDestination.Companion Companion;
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface NavDestination.ClassType {
+ method public abstract kotlin.reflect.KClass<?> value();
+ property public abstract kotlin.reflect.KClass<?> value;
+ }
+
+ public static final class NavDestination.Companion {
+ method public kotlin.sequences.Sequence<androidx.navigation.NavDestination> getHierarchy(androidx.navigation.NavDestination);
+ method protected <C> Class<? extends C> parseClassFromName(android.content.Context context, String name, Class<? extends C> expectedClassType);
+ }
+
+ @androidx.navigation.NavDestinationDsl public class NavDestinationBuilder<D extends androidx.navigation.NavDestination> {
+ ctor @Deprecated public NavDestinationBuilder(androidx.navigation.Navigator<? extends D> navigator, @IdRes int id);
+ ctor public NavDestinationBuilder(androidx.navigation.Navigator<? extends D> navigator, String? route);
+ method @Deprecated public final void action(int actionId, kotlin.jvm.functions.Function1<? super androidx.navigation.NavActionBuilder,kotlin.Unit> actionBuilder);
+ method public final void argument(String name, kotlin.jvm.functions.Function1<? super androidx.navigation.NavArgumentBuilder,kotlin.Unit> argumentBuilder);
+ method public D build();
+ method public final void deepLink(String uriPattern);
+ method public final void deepLink(kotlin.jvm.functions.Function1<? super androidx.navigation.NavDeepLinkDslBuilder,kotlin.Unit> navDeepLink);
+ method public final int getId();
+ method public final CharSequence? getLabel();
+ method protected final androidx.navigation.Navigator<? extends D> getNavigator();
+ method public final String? getRoute();
+ method public final void setLabel(CharSequence?);
+ property public final int id;
+ property public final CharSequence? label;
+ property protected final androidx.navigation.Navigator<? extends D> navigator;
+ property public final String? route;
+ }
+
+ @kotlin.DslMarker public @interface NavDestinationDsl {
+ }
+
+ public interface NavDirections {
+ method @IdRes public int getActionId();
+ method public android.os.Bundle getArguments();
+ property @IdRes public abstract int actionId;
+ property public abstract android.os.Bundle arguments;
+ }
+
+ public class NavGraph extends androidx.navigation.NavDestination implements java.lang.Iterable<androidx.navigation.NavDestination> kotlin.jvm.internal.markers.KMappedMarker {
+ 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 clear();
+ method public final androidx.navigation.NavDestination? findNode(@IdRes int resId);
+ method public final androidx.navigation.NavDestination? findNode(String? route);
+ method public static final androidx.navigation.NavDestination findStartDestination(androidx.navigation.NavGraph);
+ method @Deprecated @IdRes public final int getStartDestination();
+ method @IdRes public final int getStartDestinationId();
+ method public final String? getStartDestinationRoute();
+ method public final java.util.Iterator<androidx.navigation.NavDestination> iterator();
+ method public final void remove(androidx.navigation.NavDestination node);
+ method public final void setStartDestination(int startDestId);
+ method public final void setStartDestination(String startDestRoute);
+ property @IdRes public final int startDestinationId;
+ property public final String? startDestinationRoute;
+ field public static final androidx.navigation.NavGraph.Companion Companion;
+ }
+
+ public static final class NavGraph.Companion {
+ method public androidx.navigation.NavDestination findStartDestination(androidx.navigation.NavGraph);
+ }
+
+ @androidx.navigation.NavDestinationDsl public class NavGraphBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.NavGraph> {
+ ctor @Deprecated public NavGraphBuilder(androidx.navigation.NavigatorProvider provider, @IdRes int id, @IdRes int startDestination);
+ ctor public NavGraphBuilder(androidx.navigation.NavigatorProvider provider, String startDestination, String? route);
+ method public final void addDestination(androidx.navigation.NavDestination destination);
+ method public androidx.navigation.NavGraph build();
+ method public final <D extends androidx.navigation.NavDestination> void destination(androidx.navigation.NavDestinationBuilder<? extends D> navDestination);
+ method public final androidx.navigation.NavigatorProvider getProvider();
+ method public final operator void unaryPlus(androidx.navigation.NavDestination);
+ property public final androidx.navigation.NavigatorProvider provider;
+ }
+
+ 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);
+ }
+
+ public final class NavGraphKt {
+ method public static operator boolean contains(androidx.navigation.NavGraph, @IdRes int id);
+ method public static operator boolean contains(androidx.navigation.NavGraph, String route);
+ method public static inline operator androidx.navigation.NavDestination get(androidx.navigation.NavGraph, @IdRes int id);
+ method public static inline operator androidx.navigation.NavDestination get(androidx.navigation.NavGraph, String route);
+ method public static inline operator void minusAssign(androidx.navigation.NavGraph, androidx.navigation.NavDestination node);
+ method public static inline operator void plusAssign(androidx.navigation.NavGraph, androidx.navigation.NavDestination node);
+ method public static inline operator void plusAssign(androidx.navigation.NavGraph, androidx.navigation.NavGraph other);
+ }
+
+ @androidx.navigation.Navigator.Name("navigation") public class NavGraphNavigator extends androidx.navigation.Navigator<androidx.navigation.NavGraph> {
+ ctor public NavGraphNavigator(androidx.navigation.NavigatorProvider navigatorProvider);
+ method public androidx.navigation.NavGraph createDestination();
+ method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getBackStack();
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> backStack;
+ }
+
+ public final class NavOptions {
+ method @AnimRes @AnimatorRes public int getEnterAnim();
+ method @AnimRes @AnimatorRes public int getExitAnim();
+ method @AnimRes @AnimatorRes public int getPopEnterAnim();
+ method @AnimRes @AnimatorRes public int getPopExitAnim();
+ method @Deprecated @IdRes public int getPopUpTo();
+ method @IdRes public int getPopUpToId();
+ method public String? getPopUpToRoute();
+ method public boolean isPopUpToInclusive();
+ method public boolean shouldLaunchSingleTop();
+ method public boolean shouldPopUpToSaveState();
+ method public boolean shouldRestoreState();
+ property @AnimRes @AnimatorRes public final int enterAnim;
+ property @AnimRes @AnimatorRes public final int exitAnim;
+ property @AnimRes @AnimatorRes public final int popEnterAnim;
+ property @AnimRes @AnimatorRes public final int popExitAnim;
+ property @IdRes public final int popUpToId;
+ property public final String? popUpToRoute;
+ }
+
+ public static final class NavOptions.Builder {
+ ctor public NavOptions.Builder();
+ method public androidx.navigation.NavOptions build();
+ method public androidx.navigation.NavOptions.Builder setEnterAnim(@AnimRes @AnimatorRes int enterAnim);
+ method public androidx.navigation.NavOptions.Builder setExitAnim(@AnimRes @AnimatorRes int exitAnim);
+ 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(String? route, boolean inclusive);
+ method public androidx.navigation.NavOptions.Builder setRestoreState(boolean restoreState);
+ }
+
+ @androidx.navigation.NavOptionsDsl public final class NavOptionsBuilder {
+ ctor public NavOptionsBuilder();
+ method public void anim(kotlin.jvm.functions.Function1<? super androidx.navigation.AnimBuilder,kotlin.Unit> animBuilder);
+ method public boolean getLaunchSingleTop();
+ method @Deprecated public int getPopUpTo();
+ method public int getPopUpToId();
+ method public String? getPopUpToRoute();
+ method public boolean getRestoreState();
+ method public void popUpTo(@IdRes int id, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
+ method public void popUpTo(String route, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
+ method public void setLaunchSingleTop(boolean);
+ method @Deprecated public void setPopUpTo(int);
+ method public void setRestoreState(boolean);
+ property public final boolean launchSingleTop;
+ property @Deprecated public final int popUpTo;
+ property public final int popUpToId;
+ property public final String? popUpToRoute;
+ property public final boolean restoreState;
+ }
+
+ public final class NavOptionsBuilderKt {
+ method public static androidx.navigation.NavOptions navOptions(kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> optionsBuilder);
+ }
+
+ @kotlin.DslMarker public @interface NavOptionsDsl {
+ }
+
+ public abstract class NavType<T> {
+ ctor public NavType(boolean isNullableAllowed);
+ method public static androidx.navigation.NavType<?> fromArgType(String? type, String? packageName);
+ method public abstract operator T? get(android.os.Bundle bundle, String key);
+ method public String getName();
+ method public boolean isNullableAllowed();
+ method public abstract T! parseValue(String value);
+ method public T! parseValue(String value, T? previousValue);
+ method public abstract void put(android.os.Bundle bundle, String key, T? value);
+ method public String serializeAsValue(T? value);
+ property public boolean isNullableAllowed;
+ property public String name;
+ field public static final androidx.navigation.NavType<boolean[]> BoolArrayType;
+ field public static final androidx.navigation.NavType<java.lang.Boolean> BoolType;
+ field public static final androidx.navigation.NavType.Companion Companion;
+ field public static final androidx.navigation.NavType<float[]> FloatArrayType;
+ field public static final androidx.navigation.NavType<java.lang.Float> FloatType;
+ field public static final androidx.navigation.NavType<int[]> IntArrayType;
+ field public static final androidx.navigation.NavType<java.lang.Integer> IntType;
+ field public static final androidx.navigation.NavType<long[]> LongArrayType;
+ field public static final androidx.navigation.NavType<java.lang.Long> LongType;
+ field public static final androidx.navigation.NavType<java.lang.Integer> ReferenceType;
+ field public static final androidx.navigation.NavType<java.lang.String[]> StringArrayType;
+ field public static final androidx.navigation.NavType<java.lang.String> StringType;
+ }
+
+ public static final class NavType.Companion {
+ method public androidx.navigation.NavType<?> fromArgType(String? type, String? packageName);
+ }
+
+ public static final class NavType.EnumType<D extends java.lang.Enum<?>> extends androidx.navigation.NavType.SerializableType<D> {
+ ctor public NavType.EnumType(Class<D> type);
+ property public String name;
+ }
+
+ public static final class NavType.ParcelableArrayType<D extends android.os.Parcelable> extends androidx.navigation.NavType<D[]> {
+ ctor public NavType.ParcelableArrayType(Class<D> type);
+ method public D![]? get(android.os.Bundle bundle, String key);
+ method public D![] parseValue(String value);
+ method public void put(android.os.Bundle bundle, String key, D![]? value);
+ property public String name;
+ }
+
+ public static final class NavType.ParcelableType<D> extends androidx.navigation.NavType<D> {
+ ctor public NavType.ParcelableType(Class<D> type);
+ method public D? get(android.os.Bundle bundle, String key);
+ method public D! parseValue(String value);
+ method public void put(android.os.Bundle bundle, String key, D? value);
+ property public String name;
+ }
+
+ public static final class NavType.SerializableArrayType<D extends java.io.Serializable> extends androidx.navigation.NavType<D[]> {
+ ctor public NavType.SerializableArrayType(Class<D> type);
+ method public D![]? get(android.os.Bundle bundle, String key);
+ method public D![] parseValue(String value);
+ method public void put(android.os.Bundle bundle, String key, D![]? value);
+ property public String name;
+ }
+
+ public static class NavType.SerializableType<D extends java.io.Serializable> extends androidx.navigation.NavType<D> {
+ ctor public NavType.SerializableType(Class<D> type);
+ method public D? get(android.os.Bundle bundle, String key);
+ method public D parseValue(String value);
+ method public void put(android.os.Bundle bundle, String key, D value);
+ property public String name;
+ }
+
+ public abstract class Navigator<D extends androidx.navigation.NavDestination> {
+ ctor public Navigator();
+ 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 @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();
+ property public final boolean isAttached;
+ property protected final androidx.navigation.NavigatorState state;
+ }
+
+ public static interface Navigator.Extras {
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface Navigator.Name {
+ method public abstract String value();
+ property public abstract String value;
+ }
+
+ public class NavigatorProvider {
+ ctor public NavigatorProvider();
+ method public final androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? addNavigator(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ method @CallSuper public androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? addNavigator(String name, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ method public final <T extends androidx.navigation.Navigator<?>> T getNavigator(Class<T> navigatorClass);
+ method @CallSuper public <T extends androidx.navigation.Navigator<?>> T getNavigator(String name);
+ }
+
+ public final class NavigatorProviderKt {
+ method public static inline operator <T extends androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>> T get(androidx.navigation.NavigatorProvider, String name);
+ method public static inline operator <T extends androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>> T get(androidx.navigation.NavigatorProvider, kotlin.reflect.KClass<T> clazz);
+ method public static inline operator void plusAssign(androidx.navigation.NavigatorProvider, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ method public static inline operator androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? set(androidx.navigation.NavigatorProvider, String name, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ }
+
+ public abstract class NavigatorState {
+ ctor public NavigatorState();
+ method public abstract androidx.navigation.NavBackStackEntry createBackStackEntry(androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
+ method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getBackStack();
+ method public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.navigation.NavBackStackEntry>> getTransitionsInProgress();
+ method public void markTransitionComplete(androidx.navigation.NavBackStackEntry entry);
+ method @CallSuper public void onLaunchSingleTop(androidx.navigation.NavBackStackEntry backStackEntry);
+ method @CallSuper public void onLaunchSingleTopWithTransition(androidx.navigation.NavBackStackEntry backStackEntry);
+ method public void pop(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
+ method public void popWithTransition(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
+ method @CallSuper public void prepareForTransition(androidx.navigation.NavBackStackEntry entry);
+ method public void push(androidx.navigation.NavBackStackEntry backStackEntry);
+ method public void pushWithTransition(androidx.navigation.NavBackStackEntry backStackEntry);
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> backStack;
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.navigation.NavBackStackEntry>> transitionsInProgress;
+ }
+
+ @androidx.navigation.NavOptionsDsl public final class PopUpToBuilder {
+ ctor public PopUpToBuilder();
+ method public boolean getInclusive();
+ method public boolean getSaveState();
+ method public void setInclusive(boolean);
+ method public void setSaveState(boolean);
+ property public final boolean inclusive;
+ property public final boolean saveState;
+ }
+
+}
+
diff --git a/navigation/navigation-common/api/res-2.6.0-beta01.txt b/navigation/navigation-common/api/res-2.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/navigation-common/api/res-2.6.0-beta01.txt
diff --git a/navigation/navigation-common/api/restricted_2.6.0-beta01.txt b/navigation/navigation-common/api/restricted_2.6.0-beta01.txt
new file mode 100644
index 0000000..de2b551
--- /dev/null
+++ b/navigation/navigation-common/api/restricted_2.6.0-beta01.txt
@@ -0,0 +1,530 @@
+// Signature format: 4.0
+package androidx.navigation {
+
+ public final class ActionOnlyNavDirections implements androidx.navigation.NavDirections {
+ ctor public ActionOnlyNavDirections(int actionId);
+ method public int component1();
+ method public androidx.navigation.ActionOnlyNavDirections copy(int actionId);
+ method public int getActionId();
+ method public android.os.Bundle getArguments();
+ property public int actionId;
+ property public android.os.Bundle arguments;
+ }
+
+ @androidx.navigation.NavOptionsDsl public final class AnimBuilder {
+ ctor public AnimBuilder();
+ method public int getEnter();
+ method public int getExit();
+ method public int getPopEnter();
+ method public int getPopExit();
+ method public void setEnter(int);
+ method public void setExit(int);
+ method public void setPopEnter(int);
+ method public void setPopExit(int);
+ property public final int enter;
+ property public final int exit;
+ property public final int popEnter;
+ property public final int popExit;
+ }
+
+ public interface FloatingWindow {
+ }
+
+ public final class NamedNavArgument {
+ method public operator String component1();
+ method public operator androidx.navigation.NavArgument component2();
+ method public androidx.navigation.NavArgument getArgument();
+ method public String getName();
+ property public final androidx.navigation.NavArgument argument;
+ property public final String name;
+ }
+
+ public final class NamedNavArgumentKt {
+ method public static androidx.navigation.NamedNavArgument navArgument(String name, kotlin.jvm.functions.Function1<? super androidx.navigation.NavArgumentBuilder,kotlin.Unit> builder);
+ }
+
+ 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);
+ method public android.os.Bundle? getDefaultArguments();
+ method public int getDestinationId();
+ method public androidx.navigation.NavOptions? getNavOptions();
+ method public void setDefaultArguments(android.os.Bundle?);
+ method public void setNavOptions(androidx.navigation.NavOptions?);
+ property public final android.os.Bundle? defaultArguments;
+ property public final int destinationId;
+ property public final androidx.navigation.NavOptions? navOptions;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class NavActionBuilder {
+ ctor public NavActionBuilder();
+ method public java.util.Map<java.lang.String,java.lang.Object> getDefaultArguments();
+ method public int getDestinationId();
+ method public void navOptions(kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> optionsBuilder);
+ method public void setDestinationId(int);
+ property public final java.util.Map<java.lang.String,java.lang.Object> defaultArguments;
+ property public final int destinationId;
+ }
+
+ public interface NavArgs {
+ }
+
+ public final class NavArgsLazy<Args extends androidx.navigation.NavArgs> implements kotlin.Lazy<Args> {
+ ctor public NavArgsLazy(kotlin.reflect.KClass<Args> navArgsClass, kotlin.jvm.functions.Function0<android.os.Bundle> argumentProducer);
+ method public Args getValue();
+ method public boolean isInitialized();
+ property public Args value;
+ }
+
+ public final class NavArgument {
+ method public Object? getDefaultValue();
+ method public androidx.navigation.NavType<java.lang.Object> getType();
+ method public boolean isDefaultValuePresent();
+ method public boolean isNullable();
+ property public final Object? defaultValue;
+ property public final boolean isDefaultValuePresent;
+ property public final boolean isNullable;
+ property public final androidx.navigation.NavType<java.lang.Object> type;
+ }
+
+ public static final class NavArgument.Builder {
+ ctor public NavArgument.Builder();
+ method public androidx.navigation.NavArgument build();
+ method public androidx.navigation.NavArgument.Builder setDefaultValue(Object? defaultValue);
+ method public androidx.navigation.NavArgument.Builder setIsNullable(boolean isNullable);
+ method public <T> androidx.navigation.NavArgument.Builder setType(androidx.navigation.NavType<T> type);
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class NavArgumentBuilder {
+ ctor public NavArgumentBuilder();
+ method public androidx.navigation.NavArgument build();
+ method public Object? getDefaultValue();
+ method public boolean getNullable();
+ method public androidx.navigation.NavType<?> getType();
+ method public void setDefaultValue(Object?);
+ method public void setNullable(boolean);
+ method public void setType(androidx.navigation.NavType<?>);
+ property public final Object? defaultValue;
+ property public final boolean nullable;
+ property public final androidx.navigation.NavType<?> type;
+ }
+
+ public final class NavBackStackEntry implements androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+ method public android.os.Bundle? getArguments();
+ method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
+ method public androidx.navigation.NavDestination getDestination();
+ method public String getId();
+ method public androidx.lifecycle.Lifecycle getLifecycle();
+ method public androidx.lifecycle.SavedStateHandle getSavedStateHandle();
+ method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
+ method public androidx.lifecycle.ViewModelStore getViewModelStore();
+ property public final android.os.Bundle? arguments;
+ property public androidx.lifecycle.viewmodel.CreationExtras defaultViewModelCreationExtras;
+ property public androidx.lifecycle.ViewModelProvider.Factory defaultViewModelProviderFactory;
+ property public final androidx.navigation.NavDestination destination;
+ property public final String id;
+ property public androidx.lifecycle.Lifecycle lifecycle;
+ property public final androidx.lifecycle.SavedStateHandle savedStateHandle;
+ property public androidx.savedstate.SavedStateRegistry savedStateRegistry;
+ property public androidx.lifecycle.ViewModelStore viewModelStore;
+ }
+
+ public final class NavDeepLink {
+ method public String? getAction();
+ method public String? getMimeType();
+ method public String? getUriPattern();
+ property public final String? action;
+ property public final String? mimeType;
+ property public final String? uriPattern;
+ }
+
+ public static final class NavDeepLink.Builder {
+ method public androidx.navigation.NavDeepLink build();
+ method public static androidx.navigation.NavDeepLink.Builder fromAction(String action);
+ method public static androidx.navigation.NavDeepLink.Builder fromMimeType(String mimeType);
+ method public static androidx.navigation.NavDeepLink.Builder fromUriPattern(String uriPattern);
+ method public androidx.navigation.NavDeepLink.Builder setAction(String action);
+ method public androidx.navigation.NavDeepLink.Builder setMimeType(String mimeType);
+ method public androidx.navigation.NavDeepLink.Builder setUriPattern(String uriPattern);
+ }
+
+ @kotlin.DslMarker public @interface NavDeepLinkDsl {
+ }
+
+ @androidx.navigation.NavDeepLinkDsl public final class NavDeepLinkDslBuilder {
+ ctor public NavDeepLinkDslBuilder();
+ method public String? getAction();
+ method public String? getMimeType();
+ method public String? getUriPattern();
+ method public void setAction(String?);
+ method public void setMimeType(String?);
+ method public void setUriPattern(String?);
+ property public final String? action;
+ property public final String? mimeType;
+ property public final String? uriPattern;
+ }
+
+ public final class NavDeepLinkDslBuilderKt {
+ method public static androidx.navigation.NavDeepLink navDeepLink(kotlin.jvm.functions.Function1<? super androidx.navigation.NavDeepLinkDslBuilder,kotlin.Unit> deepLinkBuilder);
+ }
+
+ public class NavDeepLinkRequest {
+ method public String? getAction();
+ method public String? getMimeType();
+ method public android.net.Uri? getUri();
+ property public String? action;
+ property public String? mimeType;
+ property public android.net.Uri? uri;
+ }
+
+ public static final class NavDeepLinkRequest.Builder {
+ method public androidx.navigation.NavDeepLinkRequest build();
+ method public static androidx.navigation.NavDeepLinkRequest.Builder fromAction(String action);
+ method public static androidx.navigation.NavDeepLinkRequest.Builder fromMimeType(String mimeType);
+ method public static androidx.navigation.NavDeepLinkRequest.Builder fromUri(android.net.Uri uri);
+ method public androidx.navigation.NavDeepLinkRequest.Builder setAction(String action);
+ method public androidx.navigation.NavDeepLinkRequest.Builder setMimeType(String mimeType);
+ method public androidx.navigation.NavDeepLinkRequest.Builder setUri(android.net.Uri uri);
+ field public static final androidx.navigation.NavDeepLinkRequest.Builder.Companion Companion;
+ }
+
+ public static final class NavDeepLinkRequest.Builder.Companion {
+ method public androidx.navigation.NavDeepLinkRequest.Builder fromAction(String action);
+ method public androidx.navigation.NavDeepLinkRequest.Builder fromMimeType(String mimeType);
+ method public androidx.navigation.NavDeepLinkRequest.Builder fromUri(android.net.Uri uri);
+ }
+
+ public class NavDestination {
+ ctor public NavDestination(String navigatorName);
+ ctor public NavDestination(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ 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 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();
+ method public static final kotlin.sequences.Sequence<androidx.navigation.NavDestination> getHierarchy(androidx.navigation.NavDestination);
+ method @IdRes public final int getId();
+ method public final CharSequence? getLabel();
+ method public final String getNavigatorName();
+ method public final androidx.navigation.NavGraph? getParent();
+ method public final String? getRoute();
+ method public boolean hasDeepLink(android.net.Uri deepLink);
+ 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 removeAction(@IdRes int actionId);
+ method public final void removeArgument(String argumentName);
+ method public final void setId(@IdRes int);
+ method public final void setLabel(CharSequence?);
+ method public final void setRoute(String?);
+ property public final java.util.Map<java.lang.String,androidx.navigation.NavArgument> arguments;
+ property @IdRes public final int id;
+ property public final CharSequence? label;
+ property public final String navigatorName;
+ property public final androidx.navigation.NavGraph? parent;
+ property public final String? route;
+ field public static final androidx.navigation.NavDestination.Companion Companion;
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface NavDestination.ClassType {
+ method public abstract kotlin.reflect.KClass<?> value();
+ property public abstract kotlin.reflect.KClass<?> value;
+ }
+
+ public static final class NavDestination.Companion {
+ method public kotlin.sequences.Sequence<androidx.navigation.NavDestination> getHierarchy(androidx.navigation.NavDestination);
+ method protected <C> Class<? extends C> parseClassFromName(android.content.Context context, String name, Class<? extends C> expectedClassType);
+ }
+
+ @androidx.navigation.NavDestinationDsl public class NavDestinationBuilder<D extends androidx.navigation.NavDestination> {
+ ctor @Deprecated public NavDestinationBuilder(androidx.navigation.Navigator<? extends D> navigator, @IdRes int id);
+ ctor public NavDestinationBuilder(androidx.navigation.Navigator<? extends D> navigator, String? route);
+ method @Deprecated public final void action(int actionId, kotlin.jvm.functions.Function1<? super androidx.navigation.NavActionBuilder,kotlin.Unit> actionBuilder);
+ method public final void argument(String name, kotlin.jvm.functions.Function1<? super androidx.navigation.NavArgumentBuilder,kotlin.Unit> argumentBuilder);
+ method public D build();
+ method public final void deepLink(String uriPattern);
+ method public final void deepLink(kotlin.jvm.functions.Function1<? super androidx.navigation.NavDeepLinkDslBuilder,kotlin.Unit> navDeepLink);
+ method public final int getId();
+ method public final CharSequence? getLabel();
+ method protected final androidx.navigation.Navigator<? extends D> getNavigator();
+ method public final String? getRoute();
+ method public final void setLabel(CharSequence?);
+ property public final int id;
+ property public final CharSequence? label;
+ property protected final androidx.navigation.Navigator<? extends D> navigator;
+ property public final String? route;
+ }
+
+ @kotlin.DslMarker public @interface NavDestinationDsl {
+ }
+
+ public interface NavDirections {
+ method @IdRes public int getActionId();
+ method public android.os.Bundle getArguments();
+ property @IdRes public abstract int actionId;
+ property public abstract android.os.Bundle arguments;
+ }
+
+ public class NavGraph extends androidx.navigation.NavDestination implements java.lang.Iterable<androidx.navigation.NavDestination> kotlin.jvm.internal.markers.KMappedMarker {
+ 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 clear();
+ method public final androidx.navigation.NavDestination? findNode(@IdRes int resId);
+ method public final androidx.navigation.NavDestination? findNode(String? route);
+ method public static final androidx.navigation.NavDestination findStartDestination(androidx.navigation.NavGraph);
+ method @Deprecated @IdRes public final int getStartDestination();
+ method @IdRes public final int getStartDestinationId();
+ method public final String? getStartDestinationRoute();
+ method public final java.util.Iterator<androidx.navigation.NavDestination> iterator();
+ method public final void remove(androidx.navigation.NavDestination node);
+ method public final void setStartDestination(int startDestId);
+ method public final void setStartDestination(String startDestRoute);
+ property @IdRes public final int startDestinationId;
+ property public final String? startDestinationRoute;
+ field public static final androidx.navigation.NavGraph.Companion Companion;
+ }
+
+ public static final class NavGraph.Companion {
+ method public androidx.navigation.NavDestination findStartDestination(androidx.navigation.NavGraph);
+ }
+
+ @androidx.navigation.NavDestinationDsl public class NavGraphBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.NavGraph> {
+ ctor @Deprecated public NavGraphBuilder(androidx.navigation.NavigatorProvider provider, @IdRes int id, @IdRes int startDestination);
+ ctor public NavGraphBuilder(androidx.navigation.NavigatorProvider provider, String startDestination, String? route);
+ method public final void addDestination(androidx.navigation.NavDestination destination);
+ method public androidx.navigation.NavGraph build();
+ method public final <D extends androidx.navigation.NavDestination> void destination(androidx.navigation.NavDestinationBuilder<? extends D> navDestination);
+ method public final androidx.navigation.NavigatorProvider getProvider();
+ method public final operator void unaryPlus(androidx.navigation.NavDestination);
+ property public final androidx.navigation.NavigatorProvider provider;
+ }
+
+ 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);
+ }
+
+ public final class NavGraphKt {
+ method public static operator boolean contains(androidx.navigation.NavGraph, @IdRes int id);
+ method public static operator boolean contains(androidx.navigation.NavGraph, String route);
+ method public static inline operator androidx.navigation.NavDestination get(androidx.navigation.NavGraph, @IdRes int id);
+ method public static inline operator androidx.navigation.NavDestination get(androidx.navigation.NavGraph, String route);
+ method public static inline operator void minusAssign(androidx.navigation.NavGraph, androidx.navigation.NavDestination node);
+ method public static inline operator void plusAssign(androidx.navigation.NavGraph, androidx.navigation.NavDestination node);
+ method public static inline operator void plusAssign(androidx.navigation.NavGraph, androidx.navigation.NavGraph other);
+ }
+
+ @androidx.navigation.Navigator.Name("navigation") public class NavGraphNavigator extends androidx.navigation.Navigator<androidx.navigation.NavGraph> {
+ ctor public NavGraphNavigator(androidx.navigation.NavigatorProvider navigatorProvider);
+ method public androidx.navigation.NavGraph createDestination();
+ method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getBackStack();
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> backStack;
+ }
+
+ public final class NavOptions {
+ method @AnimRes @AnimatorRes public int getEnterAnim();
+ method @AnimRes @AnimatorRes public int getExitAnim();
+ method @AnimRes @AnimatorRes public int getPopEnterAnim();
+ method @AnimRes @AnimatorRes public int getPopExitAnim();
+ method @Deprecated @IdRes public int getPopUpTo();
+ method @IdRes public int getPopUpToId();
+ method public String? getPopUpToRoute();
+ method public boolean isPopUpToInclusive();
+ method public boolean shouldLaunchSingleTop();
+ method public boolean shouldPopUpToSaveState();
+ method public boolean shouldRestoreState();
+ property @AnimRes @AnimatorRes public final int enterAnim;
+ property @AnimRes @AnimatorRes public final int exitAnim;
+ property @AnimRes @AnimatorRes public final int popEnterAnim;
+ property @AnimRes @AnimatorRes public final int popExitAnim;
+ property @IdRes public final int popUpToId;
+ property public final String? popUpToRoute;
+ }
+
+ public static final class NavOptions.Builder {
+ ctor public NavOptions.Builder();
+ method public androidx.navigation.NavOptions build();
+ method public androidx.navigation.NavOptions.Builder setEnterAnim(@AnimRes @AnimatorRes int enterAnim);
+ method public androidx.navigation.NavOptions.Builder setExitAnim(@AnimRes @AnimatorRes int exitAnim);
+ 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(String? route, boolean inclusive);
+ method public androidx.navigation.NavOptions.Builder setRestoreState(boolean restoreState);
+ }
+
+ @androidx.navigation.NavOptionsDsl public final class NavOptionsBuilder {
+ ctor public NavOptionsBuilder();
+ method public void anim(kotlin.jvm.functions.Function1<? super androidx.navigation.AnimBuilder,kotlin.Unit> animBuilder);
+ method public boolean getLaunchSingleTop();
+ method @Deprecated public int getPopUpTo();
+ method public int getPopUpToId();
+ method public String? getPopUpToRoute();
+ method public boolean getRestoreState();
+ method public void popUpTo(@IdRes int id, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
+ method public void popUpTo(String route, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
+ method public void setLaunchSingleTop(boolean);
+ method @Deprecated public void setPopUpTo(int);
+ method public void setRestoreState(boolean);
+ property public final boolean launchSingleTop;
+ property @Deprecated public final int popUpTo;
+ property public final int popUpToId;
+ property public final String? popUpToRoute;
+ property public final boolean restoreState;
+ }
+
+ public final class NavOptionsBuilderKt {
+ method public static androidx.navigation.NavOptions navOptions(kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> optionsBuilder);
+ }
+
+ @kotlin.DslMarker public @interface NavOptionsDsl {
+ }
+
+ public abstract class NavType<T> {
+ ctor public NavType(boolean isNullableAllowed);
+ method public static androidx.navigation.NavType<?> fromArgType(String? type, String? packageName);
+ method public abstract operator T? get(android.os.Bundle bundle, String key);
+ method public String getName();
+ method public boolean isNullableAllowed();
+ method public abstract T! parseValue(String value);
+ method public T! parseValue(String value, T? previousValue);
+ method public abstract void put(android.os.Bundle bundle, String key, T? value);
+ method public String serializeAsValue(T? value);
+ property public boolean isNullableAllowed;
+ property public String name;
+ field public static final androidx.navigation.NavType<boolean[]> BoolArrayType;
+ field public static final androidx.navigation.NavType<java.lang.Boolean> BoolType;
+ field public static final androidx.navigation.NavType.Companion Companion;
+ field public static final androidx.navigation.NavType<float[]> FloatArrayType;
+ field public static final androidx.navigation.NavType<java.lang.Float> FloatType;
+ field public static final androidx.navigation.NavType<int[]> IntArrayType;
+ field public static final androidx.navigation.NavType<java.lang.Integer> IntType;
+ field public static final androidx.navigation.NavType<long[]> LongArrayType;
+ field public static final androidx.navigation.NavType<java.lang.Long> LongType;
+ field public static final androidx.navigation.NavType<java.lang.Integer> ReferenceType;
+ field public static final androidx.navigation.NavType<java.lang.String[]> StringArrayType;
+ field public static final androidx.navigation.NavType<java.lang.String> StringType;
+ }
+
+ public static final class NavType.Companion {
+ method public androidx.navigation.NavType<?> fromArgType(String? type, String? packageName);
+ }
+
+ public static final class NavType.EnumType<D extends java.lang.Enum<?>> extends androidx.navigation.NavType.SerializableType<D> {
+ ctor public NavType.EnumType(Class<D> type);
+ property public String name;
+ }
+
+ public static final class NavType.ParcelableArrayType<D extends android.os.Parcelable> extends androidx.navigation.NavType<D[]> {
+ ctor public NavType.ParcelableArrayType(Class<D> type);
+ method public D![]? get(android.os.Bundle bundle, String key);
+ method public D![] parseValue(String value);
+ method public void put(android.os.Bundle bundle, String key, D![]? value);
+ property public String name;
+ }
+
+ public static final class NavType.ParcelableType<D> extends androidx.navigation.NavType<D> {
+ ctor public NavType.ParcelableType(Class<D> type);
+ method public D? get(android.os.Bundle bundle, String key);
+ method public D! parseValue(String value);
+ method public void put(android.os.Bundle bundle, String key, D? value);
+ property public String name;
+ }
+
+ public static final class NavType.SerializableArrayType<D extends java.io.Serializable> extends androidx.navigation.NavType<D[]> {
+ ctor public NavType.SerializableArrayType(Class<D> type);
+ method public D![]? get(android.os.Bundle bundle, String key);
+ method public D![] parseValue(String value);
+ method public void put(android.os.Bundle bundle, String key, D![]? value);
+ property public String name;
+ }
+
+ public static class NavType.SerializableType<D extends java.io.Serializable> extends androidx.navigation.NavType<D> {
+ ctor public NavType.SerializableType(Class<D> type);
+ method public D? get(android.os.Bundle bundle, String key);
+ method public D parseValue(String value);
+ method public void put(android.os.Bundle bundle, String key, D value);
+ property public String name;
+ }
+
+ public abstract class Navigator<D extends androidx.navigation.NavDestination> {
+ ctor public Navigator();
+ 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 @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();
+ property public final boolean isAttached;
+ property protected final androidx.navigation.NavigatorState state;
+ }
+
+ public static interface Navigator.Extras {
+ }
+
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface Navigator.Name {
+ method public abstract String value();
+ property public abstract String value;
+ }
+
+ public class NavigatorProvider {
+ ctor public NavigatorProvider();
+ method public final androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? addNavigator(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ method @CallSuper public androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? addNavigator(String name, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ method public final <T extends androidx.navigation.Navigator<?>> T getNavigator(Class<T> navigatorClass);
+ method @CallSuper public <T extends androidx.navigation.Navigator<?>> T getNavigator(String name);
+ }
+
+ public final class NavigatorProviderKt {
+ method public static inline operator <T extends androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>> T get(androidx.navigation.NavigatorProvider, String name);
+ method public static inline operator <T extends androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>> T get(androidx.navigation.NavigatorProvider, kotlin.reflect.KClass<T> clazz);
+ method public static inline operator void plusAssign(androidx.navigation.NavigatorProvider, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ method public static inline operator androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>? set(androidx.navigation.NavigatorProvider, String name, androidx.navigation.Navigator<? extends androidx.navigation.NavDestination> navigator);
+ }
+
+ public abstract class NavigatorState {
+ ctor public NavigatorState();
+ method public abstract androidx.navigation.NavBackStackEntry createBackStackEntry(androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
+ method public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getBackStack();
+ method public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.navigation.NavBackStackEntry>> getTransitionsInProgress();
+ method public void markTransitionComplete(androidx.navigation.NavBackStackEntry entry);
+ method @CallSuper public void onLaunchSingleTop(androidx.navigation.NavBackStackEntry backStackEntry);
+ method @CallSuper public void onLaunchSingleTopWithTransition(androidx.navigation.NavBackStackEntry backStackEntry);
+ method public void pop(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
+ method public void popWithTransition(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
+ method @CallSuper public void prepareForTransition(androidx.navigation.NavBackStackEntry entry);
+ method public void push(androidx.navigation.NavBackStackEntry backStackEntry);
+ method public void pushWithTransition(androidx.navigation.NavBackStackEntry backStackEntry);
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> backStack;
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.Set<androidx.navigation.NavBackStackEntry>> transitionsInProgress;
+ }
+
+ @androidx.navigation.NavOptionsDsl public final class PopUpToBuilder {
+ ctor public PopUpToBuilder();
+ method public boolean getInclusive();
+ method public boolean getSaveState();
+ method public void setInclusive(boolean);
+ method public void setSaveState(boolean);
+ property public final boolean inclusive;
+ property public final boolean saveState;
+ }
+
+}
+
diff --git a/navigation/navigation-compose/api/2.6.0-beta01.txt b/navigation/navigation-compose/api/2.6.0-beta01.txt
new file mode 100644
index 0000000..73c5c5d
--- /dev/null
+++ b/navigation/navigation-compose/api/2.6.0-beta01.txt
@@ -0,0 +1,50 @@
+// Signature format: 4.0
+package androidx.navigation.compose {
+
+ @androidx.navigation.Navigator.Name("composable") public final class ComposeNavigator extends androidx.navigation.Navigator<androidx.navigation.compose.ComposeNavigator.Destination> {
+ ctor public ComposeNavigator();
+ method public androidx.navigation.compose.ComposeNavigator.Destination createDestination();
+ method public kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getBackStack();
+ method public void onTransitionComplete(androidx.navigation.NavBackStackEntry entry);
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> backStack;
+ }
+
+ @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);
+ }
+
+ public final class DialogHostKt {
+ method @androidx.compose.runtime.Composable public static void DialogHost(androidx.navigation.compose.DialogNavigator dialogNavigator);
+ }
+
+ @androidx.navigation.Navigator.Name("dialog") public final class DialogNavigator extends androidx.navigation.Navigator<androidx.navigation.compose.DialogNavigator.Destination> {
+ ctor public DialogNavigator();
+ method public androidx.navigation.compose.DialogNavigator.Destination createDestination();
+ }
+
+ @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class DialogNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow {
+ ctor public DialogNavigator.Destination(androidx.navigation.compose.DialogNavigator navigator, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+ }
+
+ public final class NavBackStackEntryProviderKt {
+ method @androidx.compose.runtime.Composable public static void LocalOwnersProvider(androidx.navigation.NavBackStackEntry, androidx.compose.runtime.saveable.SaveableStateHolder saveableStateHolder, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ 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 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);
+ }
+
+ public final class NavHostControllerKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.navigation.NavBackStackEntry> currentBackStackEntryAsState(androidx.navigation.NavController);
+ method @androidx.compose.runtime.Composable public static androidx.navigation.NavHostController rememberNavController(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>... navigators);
+ }
+
+ 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);
+ }
+
+}
+
diff --git a/navigation/navigation-compose/api/public_plus_experimental_2.6.0-beta01.txt b/navigation/navigation-compose/api/public_plus_experimental_2.6.0-beta01.txt
new file mode 100644
index 0000000..73c5c5d
--- /dev/null
+++ b/navigation/navigation-compose/api/public_plus_experimental_2.6.0-beta01.txt
@@ -0,0 +1,50 @@
+// Signature format: 4.0
+package androidx.navigation.compose {
+
+ @androidx.navigation.Navigator.Name("composable") public final class ComposeNavigator extends androidx.navigation.Navigator<androidx.navigation.compose.ComposeNavigator.Destination> {
+ ctor public ComposeNavigator();
+ method public androidx.navigation.compose.ComposeNavigator.Destination createDestination();
+ method public kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getBackStack();
+ method public void onTransitionComplete(androidx.navigation.NavBackStackEntry entry);
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> backStack;
+ }
+
+ @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);
+ }
+
+ public final class DialogHostKt {
+ method @androidx.compose.runtime.Composable public static void DialogHost(androidx.navigation.compose.DialogNavigator dialogNavigator);
+ }
+
+ @androidx.navigation.Navigator.Name("dialog") public final class DialogNavigator extends androidx.navigation.Navigator<androidx.navigation.compose.DialogNavigator.Destination> {
+ ctor public DialogNavigator();
+ method public androidx.navigation.compose.DialogNavigator.Destination createDestination();
+ }
+
+ @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class DialogNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow {
+ ctor public DialogNavigator.Destination(androidx.navigation.compose.DialogNavigator navigator, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+ }
+
+ public final class NavBackStackEntryProviderKt {
+ method @androidx.compose.runtime.Composable public static void LocalOwnersProvider(androidx.navigation.NavBackStackEntry, androidx.compose.runtime.saveable.SaveableStateHolder saveableStateHolder, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ 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 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);
+ }
+
+ public final class NavHostControllerKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.navigation.NavBackStackEntry> currentBackStackEntryAsState(androidx.navigation.NavController);
+ method @androidx.compose.runtime.Composable public static androidx.navigation.NavHostController rememberNavController(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>... navigators);
+ }
+
+ 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);
+ }
+
+}
+
diff --git a/navigation/navigation-compose/api/res-2.6.0-beta01.txt b/navigation/navigation-compose/api/res-2.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/navigation-compose/api/res-2.6.0-beta01.txt
diff --git a/navigation/navigation-compose/api/restricted_2.6.0-beta01.txt b/navigation/navigation-compose/api/restricted_2.6.0-beta01.txt
new file mode 100644
index 0000000..73c5c5d
--- /dev/null
+++ b/navigation/navigation-compose/api/restricted_2.6.0-beta01.txt
@@ -0,0 +1,50 @@
+// Signature format: 4.0
+package androidx.navigation.compose {
+
+ @androidx.navigation.Navigator.Name("composable") public final class ComposeNavigator extends androidx.navigation.Navigator<androidx.navigation.compose.ComposeNavigator.Destination> {
+ ctor public ComposeNavigator();
+ method public androidx.navigation.compose.ComposeNavigator.Destination createDestination();
+ method public kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> getBackStack();
+ method public void onTransitionComplete(androidx.navigation.NavBackStackEntry entry);
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> backStack;
+ }
+
+ @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);
+ }
+
+ public final class DialogHostKt {
+ method @androidx.compose.runtime.Composable public static void DialogHost(androidx.navigation.compose.DialogNavigator dialogNavigator);
+ }
+
+ @androidx.navigation.Navigator.Name("dialog") public final class DialogNavigator extends androidx.navigation.Navigator<androidx.navigation.compose.DialogNavigator.Destination> {
+ ctor public DialogNavigator();
+ method public androidx.navigation.compose.DialogNavigator.Destination createDestination();
+ }
+
+ @androidx.navigation.NavDestination.ClassType(Composable::class) public static final class DialogNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow {
+ ctor public DialogNavigator.Destination(androidx.navigation.compose.DialogNavigator navigator, optional androidx.compose.ui.window.DialogProperties dialogProperties, kotlin.jvm.functions.Function1<? super androidx.navigation.NavBackStackEntry,kotlin.Unit> content);
+ }
+
+ public final class NavBackStackEntryProviderKt {
+ method @androidx.compose.runtime.Composable public static void LocalOwnersProvider(androidx.navigation.NavBackStackEntry, androidx.compose.runtime.saveable.SaveableStateHolder saveableStateHolder, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ 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 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);
+ }
+
+ public final class NavHostControllerKt {
+ method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<androidx.navigation.NavBackStackEntry> currentBackStackEntryAsState(androidx.navigation.NavController);
+ method @androidx.compose.runtime.Composable public static androidx.navigation.NavHostController rememberNavController(androidx.navigation.Navigator<? extends androidx.navigation.NavDestination>... navigators);
+ }
+
+ 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);
+ }
+
+}
+
diff --git a/navigation/navigation-dynamic-features-fragment/api/2.6.0-beta01.txt b/navigation/navigation-dynamic-features-fragment/api/2.6.0-beta01.txt
new file mode 100644
index 0000000..fe32d9b
--- /dev/null
+++ b/navigation/navigation-dynamic-features-fragment/api/2.6.0-beta01.txt
@@ -0,0 +1,69 @@
+// Signature format: 4.0
+package androidx.navigation.dynamicfeatures.fragment {
+
+ @androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
+ ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
+ }
+
+ 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);
+ method public String? getModuleName();
+ method public void setModuleName(String?);
+ property public final String? moduleName;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DynamicFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.FragmentNavigator.Destination> {
+ ctor @Deprecated public DynamicFragmentNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator navigator, @IdRes int id, String fragmentClassName);
+ ctor public DynamicFragmentNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator navigator, String route, String fragmentClassName);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination build();
+ method public String? getModuleName();
+ method public void setModuleName(String?);
+ property public final String? moduleName;
+ }
+
+ 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 <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 <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 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);
+ }
+
+}
+
+package androidx.navigation.dynamicfeatures.fragment.ui {
+
+ public abstract class AbstractProgressFragment extends androidx.fragment.app.Fragment {
+ ctor public AbstractProgressFragment();
+ ctor public AbstractProgressFragment(int contentLayoutId);
+ method protected abstract void onCancelled();
+ method protected abstract void onFailed(@com.google.android.play.core.splitinstall.model.SplitInstallErrorCode int errorCode);
+ method protected void onInstalled();
+ method protected abstract void onProgress(@com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus int status, long bytesDownloaded, long bytesTotal);
+ }
+
+ public final class DefaultProgressFragment extends androidx.navigation.dynamicfeatures.fragment.ui.AbstractProgressFragment {
+ ctor public DefaultProgressFragment();
+ method protected void onCancelled();
+ method protected void onFailed(@com.google.android.play.core.splitinstall.model.SplitInstallErrorCode int errorCode);
+ method protected void onProgress(int status, long bytesDownloaded, long bytesTotal);
+ }
+
+}
+
diff --git a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.6.0-beta01.txt b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.6.0-beta01.txt
new file mode 100644
index 0000000..fe32d9b
--- /dev/null
+++ b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.6.0-beta01.txt
@@ -0,0 +1,69 @@
+// Signature format: 4.0
+package androidx.navigation.dynamicfeatures.fragment {
+
+ @androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
+ ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
+ }
+
+ 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);
+ method public String? getModuleName();
+ method public void setModuleName(String?);
+ property public final String? moduleName;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DynamicFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.FragmentNavigator.Destination> {
+ ctor @Deprecated public DynamicFragmentNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator navigator, @IdRes int id, String fragmentClassName);
+ ctor public DynamicFragmentNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator navigator, String route, String fragmentClassName);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination build();
+ method public String? getModuleName();
+ method public void setModuleName(String?);
+ property public final String? moduleName;
+ }
+
+ 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 <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 <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 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);
+ }
+
+}
+
+package androidx.navigation.dynamicfeatures.fragment.ui {
+
+ public abstract class AbstractProgressFragment extends androidx.fragment.app.Fragment {
+ ctor public AbstractProgressFragment();
+ ctor public AbstractProgressFragment(int contentLayoutId);
+ method protected abstract void onCancelled();
+ method protected abstract void onFailed(@com.google.android.play.core.splitinstall.model.SplitInstallErrorCode int errorCode);
+ method protected void onInstalled();
+ method protected abstract void onProgress(@com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus int status, long bytesDownloaded, long bytesTotal);
+ }
+
+ public final class DefaultProgressFragment extends androidx.navigation.dynamicfeatures.fragment.ui.AbstractProgressFragment {
+ ctor public DefaultProgressFragment();
+ method protected void onCancelled();
+ method protected void onFailed(@com.google.android.play.core.splitinstall.model.SplitInstallErrorCode int errorCode);
+ method protected void onProgress(int status, long bytesDownloaded, long bytesTotal);
+ }
+
+}
+
diff --git a/navigation/navigation-dynamic-features-fragment/api/res-2.6.0-beta01.txt b/navigation/navigation-dynamic-features-fragment/api/res-2.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/navigation-dynamic-features-fragment/api/res-2.6.0-beta01.txt
diff --git a/navigation/navigation-dynamic-features-fragment/api/restricted_2.6.0-beta01.txt b/navigation/navigation-dynamic-features-fragment/api/restricted_2.6.0-beta01.txt
new file mode 100644
index 0000000..fe32d9b
--- /dev/null
+++ b/navigation/navigation-dynamic-features-fragment/api/restricted_2.6.0-beta01.txt
@@ -0,0 +1,69 @@
+// Signature format: 4.0
+package androidx.navigation.dynamicfeatures.fragment {
+
+ @androidx.navigation.Navigator.Name("fragment") public final class DynamicFragmentNavigator extends androidx.navigation.fragment.FragmentNavigator {
+ ctor public DynamicFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager manager, int containerId, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination createDestination();
+ }
+
+ 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);
+ method public String? getModuleName();
+ method public void setModuleName(String?);
+ property public final String? moduleName;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DynamicFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.FragmentNavigator.Destination> {
+ ctor @Deprecated public DynamicFragmentNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator navigator, @IdRes int id, String fragmentClassName);
+ ctor public DynamicFragmentNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator navigator, String route, String fragmentClassName);
+ method public androidx.navigation.dynamicfeatures.fragment.DynamicFragmentNavigator.Destination build();
+ method public String? getModuleName();
+ method public void setModuleName(String?);
+ property public final String? moduleName;
+ }
+
+ 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 <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 <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 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);
+ }
+
+}
+
+package androidx.navigation.dynamicfeatures.fragment.ui {
+
+ public abstract class AbstractProgressFragment extends androidx.fragment.app.Fragment {
+ ctor public AbstractProgressFragment();
+ ctor public AbstractProgressFragment(int contentLayoutId);
+ method protected abstract void onCancelled();
+ method protected abstract void onFailed(@com.google.android.play.core.splitinstall.model.SplitInstallErrorCode int errorCode);
+ method protected void onInstalled();
+ method protected abstract void onProgress(@com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus int status, long bytesDownloaded, long bytesTotal);
+ }
+
+ public final class DefaultProgressFragment extends androidx.navigation.dynamicfeatures.fragment.ui.AbstractProgressFragment {
+ ctor public DefaultProgressFragment();
+ method protected void onCancelled();
+ method protected void onFailed(@com.google.android.play.core.splitinstall.model.SplitInstallErrorCode int errorCode);
+ method protected void onProgress(int status, long bytesDownloaded, long bytesTotal);
+ }
+
+}
+
diff --git a/navigation/navigation-dynamic-features-runtime/api/2.6.0-beta01.txt b/navigation/navigation-dynamic-features-runtime/api/2.6.0-beta01.txt
new file mode 100644
index 0000000..e4c37db
--- /dev/null
+++ b/navigation/navigation-dynamic-features-runtime/api/2.6.0-beta01.txt
@@ -0,0 +1,154 @@
+// Signature format: 4.0
+package androidx.navigation.dynamicfeatures {
+
+ @androidx.navigation.Navigator.Name("activity") public final class DynamicActivityNavigator extends androidx.navigation.ActivityNavigator {
+ ctor public DynamicActivityNavigator(android.content.Context context, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.DynamicActivityNavigator.Destination createDestination();
+ }
+
+ 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);
+ method public String? getModuleName();
+ method public void setModuleName(String?);
+ property public final String? moduleName;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DynamicActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.ActivityNavigator.Destination> {
+ ctor @Deprecated public DynamicActivityNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.DynamicActivityNavigator activityNavigator, @IdRes int id);
+ ctor public DynamicActivityNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.DynamicActivityNavigator activityNavigator, String route);
+ method public androidx.navigation.dynamicfeatures.DynamicActivityNavigator.Destination build();
+ method public String? getAction();
+ method public String? getActivityClassName();
+ method public android.net.Uri? getData();
+ method public String? getDataPattern();
+ method public String? getModuleName();
+ method public String? getTargetPackage();
+ method public void setAction(String?);
+ method public void setActivityClassName(String?);
+ method public void setData(android.net.Uri?);
+ method public void setDataPattern(String?);
+ method public void setModuleName(String?);
+ method public void setTargetPackage(String?);
+ property public final String? action;
+ property public final String? activityClassName;
+ property public final android.net.Uri? data;
+ property public final String? dataPattern;
+ property public final String? moduleName;
+ property public final String? targetPackage;
+ }
+
+ public final class DynamicActivityNavigatorDestinationBuilderKt {
+ method @Deprecated public static inline void activity(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
+ method public static inline void activity(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
+ }
+
+ 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();
+ method public androidx.navigation.Navigator.Extras? getDestinationExtras();
+ method public androidx.navigation.dynamicfeatures.DynamicInstallMonitor? getInstallMonitor();
+ property public final androidx.navigation.Navigator.Extras? destinationExtras;
+ property public final androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor;
+ }
+
+ @androidx.navigation.Navigator.Name("navigation") public final class DynamicGraphNavigator extends androidx.navigation.NavGraphNavigator {
+ ctor public DynamicGraphNavigator(androidx.navigation.NavigatorProvider navigatorProvider, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.DynamicGraphNavigator.DynamicNavGraph createDestination();
+ method public void installDefaultProgressDestination(kotlin.jvm.functions.Function0<? extends androidx.navigation.NavDestination> progressDestinationSupplier);
+ }
+
+ public static final class DynamicGraphNavigator.DynamicNavGraph extends androidx.navigation.NavGraph {
+ ctor public DynamicGraphNavigator.DynamicNavGraph(androidx.navigation.dynamicfeatures.DynamicGraphNavigator navGraphNavigator, androidx.navigation.NavigatorProvider navigatorProvider);
+ method public String? getModuleName();
+ method public int getProgressDestination();
+ method public void setModuleName(String?);
+ method public void setProgressDestination(int);
+ property public final String? moduleName;
+ property public final int progressDestination;
+ }
+
+ @androidx.navigation.Navigator.Name("include-dynamic") public final class DynamicIncludeGraphNavigator extends androidx.navigation.Navigator<androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph> {
+ ctor public DynamicIncludeGraphNavigator(android.content.Context context, androidx.navigation.NavigatorProvider navigatorProvider, androidx.navigation.NavInflater navInflater, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph createDestination();
+ }
+
+ public static final class DynamicIncludeGraphNavigator.DynamicIncludeNavGraph extends androidx.navigation.NavDestination {
+ method public String? getGraphPackage();
+ method public String? getGraphResourceName();
+ method public String? getModuleName();
+ method public void setGraphPackage(String?);
+ method public void setGraphResourceName(String?);
+ method public void setModuleName(String?);
+ property public final String? graphPackage;
+ property public final String? graphResourceName;
+ property public final String? moduleName;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DynamicIncludeNavGraphBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph> {
+ ctor @Deprecated public DynamicIncludeNavGraphBuilder(androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator dynamicIncludeGraphNavigator, @IdRes int id, String moduleName, String graphResourceName);
+ ctor public DynamicIncludeNavGraphBuilder(androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator dynamicIncludeGraphNavigator, String route, String moduleName, String graphResourceName);
+ method public androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph build();
+ method public String? getGraphPackage();
+ method public void setGraphPackage(String?);
+ property public final String? graphPackage;
+ }
+
+ public final class DynamicIncludeNavGraphBuilderKt {
+ method @Deprecated public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String moduleName, String graphResourceName);
+ method @Deprecated public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String moduleName, String graphResourceName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicIncludeNavGraphBuilder,kotlin.Unit> builder);
+ method public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String moduleName, String graphResourceName);
+ method public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String moduleName, String graphResourceName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicIncludeNavGraphBuilder,kotlin.Unit> builder);
+ }
+
+ public class DynamicInstallManager {
+ ctor public DynamicInstallManager(android.content.Context context, com.google.android.play.core.splitinstall.SplitInstallManager splitInstallManager);
+ }
+
+ public final class DynamicInstallMonitor {
+ ctor public DynamicInstallMonitor();
+ method public void cancelInstall();
+ method public Exception? getException();
+ method public int getSessionId();
+ method public androidx.lifecycle.LiveData<com.google.android.play.core.splitinstall.SplitInstallSessionState> getStatus();
+ method public boolean isInstallRequired();
+ property public final Exception? exception;
+ property public final boolean isInstallRequired;
+ property public final int sessionId;
+ property public final androidx.lifecycle.LiveData<com.google.android.play.core.splitinstall.SplitInstallSessionState> status;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DynamicNavGraphBuilder extends androidx.navigation.NavGraphBuilder {
+ ctor @Deprecated public DynamicNavGraphBuilder(androidx.navigation.NavigatorProvider provider, @IdRes int id, @IdRes int startDestination);
+ ctor public DynamicNavGraphBuilder(androidx.navigation.NavigatorProvider provider, String startDestination, optional String? route);
+ method public String? getModuleName();
+ method public int getProgressDestination();
+ method public String? getProgressDestinationRoute();
+ method public void setModuleName(String?);
+ method public void setProgressDestination(int);
+ method public void setProgressDestinationRoute(String?);
+ property public final String? moduleName;
+ property public final int progressDestination;
+ property public final String? progressDestinationRoute;
+ }
+
+ 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);
+ }
+
+ public final class NavControllerKt {
+ method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, 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 createGraph(androidx.navigation.NavController, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
+ }
+
+ public final class NavHostKt {
+ method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, 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 createGraph(androidx.navigation.NavHost, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
+ }
+
+}
+
diff --git a/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_2.6.0-beta01.txt b/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_2.6.0-beta01.txt
new file mode 100644
index 0000000..e4c37db
--- /dev/null
+++ b/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_2.6.0-beta01.txt
@@ -0,0 +1,154 @@
+// Signature format: 4.0
+package androidx.navigation.dynamicfeatures {
+
+ @androidx.navigation.Navigator.Name("activity") public final class DynamicActivityNavigator extends androidx.navigation.ActivityNavigator {
+ ctor public DynamicActivityNavigator(android.content.Context context, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.DynamicActivityNavigator.Destination createDestination();
+ }
+
+ 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);
+ method public String? getModuleName();
+ method public void setModuleName(String?);
+ property public final String? moduleName;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DynamicActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.ActivityNavigator.Destination> {
+ ctor @Deprecated public DynamicActivityNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.DynamicActivityNavigator activityNavigator, @IdRes int id);
+ ctor public DynamicActivityNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.DynamicActivityNavigator activityNavigator, String route);
+ method public androidx.navigation.dynamicfeatures.DynamicActivityNavigator.Destination build();
+ method public String? getAction();
+ method public String? getActivityClassName();
+ method public android.net.Uri? getData();
+ method public String? getDataPattern();
+ method public String? getModuleName();
+ method public String? getTargetPackage();
+ method public void setAction(String?);
+ method public void setActivityClassName(String?);
+ method public void setData(android.net.Uri?);
+ method public void setDataPattern(String?);
+ method public void setModuleName(String?);
+ method public void setTargetPackage(String?);
+ property public final String? action;
+ property public final String? activityClassName;
+ property public final android.net.Uri? data;
+ property public final String? dataPattern;
+ property public final String? moduleName;
+ property public final String? targetPackage;
+ }
+
+ public final class DynamicActivityNavigatorDestinationBuilderKt {
+ method @Deprecated public static inline void activity(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
+ method public static inline void activity(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
+ }
+
+ 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();
+ method public androidx.navigation.Navigator.Extras? getDestinationExtras();
+ method public androidx.navigation.dynamicfeatures.DynamicInstallMonitor? getInstallMonitor();
+ property public final androidx.navigation.Navigator.Extras? destinationExtras;
+ property public final androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor;
+ }
+
+ @androidx.navigation.Navigator.Name("navigation") public final class DynamicGraphNavigator extends androidx.navigation.NavGraphNavigator {
+ ctor public DynamicGraphNavigator(androidx.navigation.NavigatorProvider navigatorProvider, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.DynamicGraphNavigator.DynamicNavGraph createDestination();
+ method public void installDefaultProgressDestination(kotlin.jvm.functions.Function0<? extends androidx.navigation.NavDestination> progressDestinationSupplier);
+ }
+
+ public static final class DynamicGraphNavigator.DynamicNavGraph extends androidx.navigation.NavGraph {
+ ctor public DynamicGraphNavigator.DynamicNavGraph(androidx.navigation.dynamicfeatures.DynamicGraphNavigator navGraphNavigator, androidx.navigation.NavigatorProvider navigatorProvider);
+ method public String? getModuleName();
+ method public int getProgressDestination();
+ method public void setModuleName(String?);
+ method public void setProgressDestination(int);
+ property public final String? moduleName;
+ property public final int progressDestination;
+ }
+
+ @androidx.navigation.Navigator.Name("include-dynamic") public final class DynamicIncludeGraphNavigator extends androidx.navigation.Navigator<androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph> {
+ ctor public DynamicIncludeGraphNavigator(android.content.Context context, androidx.navigation.NavigatorProvider navigatorProvider, androidx.navigation.NavInflater navInflater, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph createDestination();
+ }
+
+ public static final class DynamicIncludeGraphNavigator.DynamicIncludeNavGraph extends androidx.navigation.NavDestination {
+ method public String? getGraphPackage();
+ method public String? getGraphResourceName();
+ method public String? getModuleName();
+ method public void setGraphPackage(String?);
+ method public void setGraphResourceName(String?);
+ method public void setModuleName(String?);
+ property public final String? graphPackage;
+ property public final String? graphResourceName;
+ property public final String? moduleName;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DynamicIncludeNavGraphBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph> {
+ ctor @Deprecated public DynamicIncludeNavGraphBuilder(androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator dynamicIncludeGraphNavigator, @IdRes int id, String moduleName, String graphResourceName);
+ ctor public DynamicIncludeNavGraphBuilder(androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator dynamicIncludeGraphNavigator, String route, String moduleName, String graphResourceName);
+ method public androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph build();
+ method public String? getGraphPackage();
+ method public void setGraphPackage(String?);
+ property public final String? graphPackage;
+ }
+
+ public final class DynamicIncludeNavGraphBuilderKt {
+ method @Deprecated public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String moduleName, String graphResourceName);
+ method @Deprecated public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String moduleName, String graphResourceName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicIncludeNavGraphBuilder,kotlin.Unit> builder);
+ method public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String moduleName, String graphResourceName);
+ method public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String moduleName, String graphResourceName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicIncludeNavGraphBuilder,kotlin.Unit> builder);
+ }
+
+ public class DynamicInstallManager {
+ ctor public DynamicInstallManager(android.content.Context context, com.google.android.play.core.splitinstall.SplitInstallManager splitInstallManager);
+ }
+
+ public final class DynamicInstallMonitor {
+ ctor public DynamicInstallMonitor();
+ method public void cancelInstall();
+ method public Exception? getException();
+ method public int getSessionId();
+ method public androidx.lifecycle.LiveData<com.google.android.play.core.splitinstall.SplitInstallSessionState> getStatus();
+ method public boolean isInstallRequired();
+ property public final Exception? exception;
+ property public final boolean isInstallRequired;
+ property public final int sessionId;
+ property public final androidx.lifecycle.LiveData<com.google.android.play.core.splitinstall.SplitInstallSessionState> status;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DynamicNavGraphBuilder extends androidx.navigation.NavGraphBuilder {
+ ctor @Deprecated public DynamicNavGraphBuilder(androidx.navigation.NavigatorProvider provider, @IdRes int id, @IdRes int startDestination);
+ ctor public DynamicNavGraphBuilder(androidx.navigation.NavigatorProvider provider, String startDestination, optional String? route);
+ method public String? getModuleName();
+ method public int getProgressDestination();
+ method public String? getProgressDestinationRoute();
+ method public void setModuleName(String?);
+ method public void setProgressDestination(int);
+ method public void setProgressDestinationRoute(String?);
+ property public final String? moduleName;
+ property public final int progressDestination;
+ property public final String? progressDestinationRoute;
+ }
+
+ 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);
+ }
+
+ public final class NavControllerKt {
+ method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, 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 createGraph(androidx.navigation.NavController, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
+ }
+
+ public final class NavHostKt {
+ method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, 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 createGraph(androidx.navigation.NavHost, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
+ }
+
+}
+
diff --git a/navigation/navigation-dynamic-features-runtime/api/res-2.6.0-beta01.txt b/navigation/navigation-dynamic-features-runtime/api/res-2.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/navigation-dynamic-features-runtime/api/res-2.6.0-beta01.txt
diff --git a/navigation/navigation-dynamic-features-runtime/api/restricted_2.6.0-beta01.txt b/navigation/navigation-dynamic-features-runtime/api/restricted_2.6.0-beta01.txt
new file mode 100644
index 0000000..e4c37db
--- /dev/null
+++ b/navigation/navigation-dynamic-features-runtime/api/restricted_2.6.0-beta01.txt
@@ -0,0 +1,154 @@
+// Signature format: 4.0
+package androidx.navigation.dynamicfeatures {
+
+ @androidx.navigation.Navigator.Name("activity") public final class DynamicActivityNavigator extends androidx.navigation.ActivityNavigator {
+ ctor public DynamicActivityNavigator(android.content.Context context, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.DynamicActivityNavigator.Destination createDestination();
+ }
+
+ 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);
+ method public String? getModuleName();
+ method public void setModuleName(String?);
+ property public final String? moduleName;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DynamicActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.ActivityNavigator.Destination> {
+ ctor @Deprecated public DynamicActivityNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.DynamicActivityNavigator activityNavigator, @IdRes int id);
+ ctor public DynamicActivityNavigatorDestinationBuilder(androidx.navigation.dynamicfeatures.DynamicActivityNavigator activityNavigator, String route);
+ method public androidx.navigation.dynamicfeatures.DynamicActivityNavigator.Destination build();
+ method public String? getAction();
+ method public String? getActivityClassName();
+ method public android.net.Uri? getData();
+ method public String? getDataPattern();
+ method public String? getModuleName();
+ method public String? getTargetPackage();
+ method public void setAction(String?);
+ method public void setActivityClassName(String?);
+ method public void setData(android.net.Uri?);
+ method public void setDataPattern(String?);
+ method public void setModuleName(String?);
+ method public void setTargetPackage(String?);
+ property public final String? action;
+ property public final String? activityClassName;
+ property public final android.net.Uri? data;
+ property public final String? dataPattern;
+ property public final String? moduleName;
+ property public final String? targetPackage;
+ }
+
+ public final class DynamicActivityNavigatorDestinationBuilderKt {
+ method @Deprecated public static inline void activity(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
+ method public static inline void activity(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
+ }
+
+ 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();
+ method public androidx.navigation.Navigator.Extras? getDestinationExtras();
+ method public androidx.navigation.dynamicfeatures.DynamicInstallMonitor? getInstallMonitor();
+ property public final androidx.navigation.Navigator.Extras? destinationExtras;
+ property public final androidx.navigation.dynamicfeatures.DynamicInstallMonitor? installMonitor;
+ }
+
+ @androidx.navigation.Navigator.Name("navigation") public final class DynamicGraphNavigator extends androidx.navigation.NavGraphNavigator {
+ ctor public DynamicGraphNavigator(androidx.navigation.NavigatorProvider navigatorProvider, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.DynamicGraphNavigator.DynamicNavGraph createDestination();
+ method public void installDefaultProgressDestination(kotlin.jvm.functions.Function0<? extends androidx.navigation.NavDestination> progressDestinationSupplier);
+ }
+
+ public static final class DynamicGraphNavigator.DynamicNavGraph extends androidx.navigation.NavGraph {
+ ctor public DynamicGraphNavigator.DynamicNavGraph(androidx.navigation.dynamicfeatures.DynamicGraphNavigator navGraphNavigator, androidx.navigation.NavigatorProvider navigatorProvider);
+ method public String? getModuleName();
+ method public int getProgressDestination();
+ method public void setModuleName(String?);
+ method public void setProgressDestination(int);
+ property public final String? moduleName;
+ property public final int progressDestination;
+ }
+
+ @androidx.navigation.Navigator.Name("include-dynamic") public final class DynamicIncludeGraphNavigator extends androidx.navigation.Navigator<androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph> {
+ ctor public DynamicIncludeGraphNavigator(android.content.Context context, androidx.navigation.NavigatorProvider navigatorProvider, androidx.navigation.NavInflater navInflater, androidx.navigation.dynamicfeatures.DynamicInstallManager installManager);
+ method public androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph createDestination();
+ }
+
+ public static final class DynamicIncludeGraphNavigator.DynamicIncludeNavGraph extends androidx.navigation.NavDestination {
+ method public String? getGraphPackage();
+ method public String? getGraphResourceName();
+ method public String? getModuleName();
+ method public void setGraphPackage(String?);
+ method public void setGraphResourceName(String?);
+ method public void setModuleName(String?);
+ property public final String? graphPackage;
+ property public final String? graphResourceName;
+ property public final String? moduleName;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DynamicIncludeNavGraphBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph> {
+ ctor @Deprecated public DynamicIncludeNavGraphBuilder(androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator dynamicIncludeGraphNavigator, @IdRes int id, String moduleName, String graphResourceName);
+ ctor public DynamicIncludeNavGraphBuilder(androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator dynamicIncludeGraphNavigator, String route, String moduleName, String graphResourceName);
+ method public androidx.navigation.dynamicfeatures.DynamicIncludeGraphNavigator.DynamicIncludeNavGraph build();
+ method public String? getGraphPackage();
+ method public void setGraphPackage(String?);
+ property public final String? graphPackage;
+ }
+
+ public final class DynamicIncludeNavGraphBuilderKt {
+ method @Deprecated public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String moduleName, String graphResourceName);
+ method @Deprecated public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, @IdRes int id, String moduleName, String graphResourceName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicIncludeNavGraphBuilder,kotlin.Unit> builder);
+ method public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String moduleName, String graphResourceName);
+ method public static inline void includeDynamic(androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder, String route, String moduleName, String graphResourceName, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicIncludeNavGraphBuilder,kotlin.Unit> builder);
+ }
+
+ public class DynamicInstallManager {
+ ctor public DynamicInstallManager(android.content.Context context, com.google.android.play.core.splitinstall.SplitInstallManager splitInstallManager);
+ }
+
+ public final class DynamicInstallMonitor {
+ ctor public DynamicInstallMonitor();
+ method public void cancelInstall();
+ method public Exception? getException();
+ method public int getSessionId();
+ method public androidx.lifecycle.LiveData<com.google.android.play.core.splitinstall.SplitInstallSessionState> getStatus();
+ method public boolean isInstallRequired();
+ property public final Exception? exception;
+ property public final boolean isInstallRequired;
+ property public final int sessionId;
+ property public final androidx.lifecycle.LiveData<com.google.android.play.core.splitinstall.SplitInstallSessionState> status;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DynamicNavGraphBuilder extends androidx.navigation.NavGraphBuilder {
+ ctor @Deprecated public DynamicNavGraphBuilder(androidx.navigation.NavigatorProvider provider, @IdRes int id, @IdRes int startDestination);
+ ctor public DynamicNavGraphBuilder(androidx.navigation.NavigatorProvider provider, String startDestination, optional String? route);
+ method public String? getModuleName();
+ method public int getProgressDestination();
+ method public String? getProgressDestinationRoute();
+ method public void setModuleName(String?);
+ method public void setProgressDestination(int);
+ method public void setProgressDestinationRoute(String?);
+ property public final String? moduleName;
+ property public final int progressDestination;
+ property public final String? progressDestinationRoute;
+ }
+
+ 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);
+ }
+
+ public final class NavControllerKt {
+ method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, 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 createGraph(androidx.navigation.NavController, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
+ }
+
+ public final class NavHostKt {
+ method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, 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 createGraph(androidx.navigation.NavHost, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.dynamicfeatures.DynamicNavGraphBuilder,kotlin.Unit> builder);
+ }
+
+}
+
diff --git a/navigation/navigation-fragment-ktx/api/2.6.0-beta01.txt b/navigation/navigation-fragment-ktx/api/2.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/navigation/navigation-fragment-ktx/api/2.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/navigation/navigation-fragment-ktx/api/public_plus_experimental_2.6.0-beta01.txt b/navigation/navigation-fragment-ktx/api/public_plus_experimental_2.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/navigation/navigation-fragment-ktx/api/public_plus_experimental_2.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/navigation/navigation-fragment-ktx/api/res-2.6.0-beta01.txt b/navigation/navigation-fragment-ktx/api/res-2.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/navigation-fragment-ktx/api/res-2.6.0-beta01.txt
diff --git a/navigation/navigation-fragment-ktx/api/restricted_2.6.0-beta01.txt b/navigation/navigation-fragment-ktx/api/restricted_2.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/navigation/navigation-fragment-ktx/api/restricted_2.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/navigation/navigation-fragment/api/2.6.0-beta01.txt b/navigation/navigation-fragment/api/2.6.0-beta01.txt
new file mode 100644
index 0000000..97bdfe6
--- /dev/null
+++ b/navigation/navigation-fragment/api/2.6.0-beta01.txt
@@ -0,0 +1,125 @@
+// Signature format: 4.0
+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 @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);
+ }
+
+}
+
+package androidx.navigation.fragment {
+
+ public abstract class AbstractListDetailFragment extends androidx.fragment.app.Fragment {
+ ctor public AbstractListDetailFragment();
+ method public final androidx.navigation.fragment.NavHostFragment getDetailPaneNavHostFragment();
+ method public final androidx.slidingpanelayout.widget.SlidingPaneLayout getSlidingPaneLayout();
+ method public androidx.navigation.fragment.NavHostFragment onCreateDetailPaneNavHostFragment();
+ method public abstract android.view.View onCreateListPaneView(android.view.LayoutInflater inflater, android.view.ViewGroup? container, android.os.Bundle? savedInstanceState);
+ method @CallSuper public final android.view.View onCreateView(android.view.LayoutInflater inflater, android.view.ViewGroup? container, android.os.Bundle? savedInstanceState);
+ method public void onListPaneViewCreated(android.view.View view, android.os.Bundle? savedInstanceState);
+ method @CallSuper public final void onViewCreated(android.view.View view, android.os.Bundle? savedInstanceState);
+ property public final androidx.navigation.fragment.NavHostFragment detailPaneNavHostFragment;
+ property public final androidx.slidingpanelayout.widget.SlidingPaneLayout slidingPaneLayout;
+ }
+
+ @androidx.navigation.Navigator.Name("dialog") public final class DialogFragmentNavigator extends androidx.navigation.Navigator<androidx.navigation.fragment.DialogFragmentNavigator.Destination> {
+ ctor public DialogFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager);
+ method public androidx.navigation.fragment.DialogFragmentNavigator.Destination createDestination();
+ }
+
+ @androidx.navigation.NavDestination.ClassType(DialogFragment::class) public static class DialogFragmentNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow {
+ ctor public DialogFragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.DialogFragmentNavigator.Destination> fragmentNavigator);
+ ctor public DialogFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
+ method public final String getClassName();
+ method public final androidx.navigation.fragment.DialogFragmentNavigator.Destination setClassName(String className);
+ property public final String className;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DialogFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.DialogFragmentNavigator.Destination> {
+ ctor @Deprecated public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.DialogFragment> fragmentClass);
+ ctor public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, String route, kotlin.reflect.KClass<? extends androidx.fragment.app.DialogFragment> fragmentClass);
+ method public androidx.navigation.fragment.DialogFragmentNavigator.Destination build();
+ }
+
+ public final class DialogFragmentNavigatorDestinationBuilderKt {
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id);
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+ method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route);
+ method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+ }
+
+ public final class FragmentKt {
+ method public static androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment);
+ }
+
+ public final class FragmentNavArgsLazyKt {
+ method @MainThread public static inline <reified Args extends androidx.navigation.NavArgs> androidx.navigation.NavArgsLazy<Args> navArgs(androidx.fragment.app.Fragment);
+ }
+
+ @androidx.navigation.Navigator.Name("fragment") public class FragmentNavigator extends androidx.navigation.Navigator<androidx.navigation.fragment.FragmentNavigator.Destination> {
+ ctor public FragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, int containerId);
+ method public androidx.navigation.fragment.FragmentNavigator.Destination createDestination();
+ method @Deprecated public androidx.fragment.app.Fragment instantiateFragment(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, String className, android.os.Bundle? args);
+ }
+
+ @androidx.navigation.NavDestination.ClassType(Fragment::class) public static class FragmentNavigator.Destination extends androidx.navigation.NavDestination {
+ ctor public FragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> fragmentNavigator);
+ ctor public FragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
+ method public final String getClassName();
+ method public final androidx.navigation.fragment.FragmentNavigator.Destination setClassName(String className);
+ property public final String className;
+ }
+
+ public static final class FragmentNavigator.Extras implements androidx.navigation.Navigator.Extras {
+ method public java.util.Map<android.view.View,java.lang.String> getSharedElements();
+ property public final java.util.Map<android.view.View,java.lang.String> sharedElements;
+ }
+
+ public static final class FragmentNavigator.Extras.Builder {
+ ctor public FragmentNavigator.Extras.Builder();
+ method public androidx.navigation.fragment.FragmentNavigator.Extras.Builder addSharedElement(android.view.View sharedElement, String name);
+ method public androidx.navigation.fragment.FragmentNavigator.Extras.Builder addSharedElements(java.util.Map<android.view.View,java.lang.String> sharedElements);
+ method public androidx.navigation.fragment.FragmentNavigator.Extras build();
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class FragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.FragmentNavigator.Destination> {
+ ctor @Deprecated public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.Fragment> fragmentClass);
+ ctor public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, String route, kotlin.reflect.KClass<? extends androidx.fragment.app.Fragment> fragmentClass);
+ method public androidx.navigation.fragment.FragmentNavigator.Destination build();
+ }
+
+ public final class FragmentNavigatorDestinationBuilderKt {
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id);
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+ method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route);
+ method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+ }
+
+ public final class FragmentNavigatorExtrasKt {
+ method public static androidx.navigation.fragment.FragmentNavigator.Extras FragmentNavigatorExtras(kotlin.Pair<? extends android.view.View,java.lang.String>... sharedElements);
+ }
+
+ 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 @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();
+ method @Deprecated @CallSuper protected void onCreateNavController(androidx.navigation.NavController navController);
+ method @CallSuper protected void onCreateNavHostController(androidx.navigation.NavHostController navHostController);
+ property public final androidx.navigation.NavController navController;
+ field public static final androidx.navigation.fragment.NavHostFragment.Companion Companion;
+ }
+
+ 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.NavController findNavController(androidx.fragment.app.Fragment fragment);
+ }
+
+}
+
diff --git a/navigation/navigation-fragment/api/public_plus_experimental_2.6.0-beta01.txt b/navigation/navigation-fragment/api/public_plus_experimental_2.6.0-beta01.txt
new file mode 100644
index 0000000..97bdfe6
--- /dev/null
+++ b/navigation/navigation-fragment/api/public_plus_experimental_2.6.0-beta01.txt
@@ -0,0 +1,125 @@
+// Signature format: 4.0
+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 @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);
+ }
+
+}
+
+package androidx.navigation.fragment {
+
+ public abstract class AbstractListDetailFragment extends androidx.fragment.app.Fragment {
+ ctor public AbstractListDetailFragment();
+ method public final androidx.navigation.fragment.NavHostFragment getDetailPaneNavHostFragment();
+ method public final androidx.slidingpanelayout.widget.SlidingPaneLayout getSlidingPaneLayout();
+ method public androidx.navigation.fragment.NavHostFragment onCreateDetailPaneNavHostFragment();
+ method public abstract android.view.View onCreateListPaneView(android.view.LayoutInflater inflater, android.view.ViewGroup? container, android.os.Bundle? savedInstanceState);
+ method @CallSuper public final android.view.View onCreateView(android.view.LayoutInflater inflater, android.view.ViewGroup? container, android.os.Bundle? savedInstanceState);
+ method public void onListPaneViewCreated(android.view.View view, android.os.Bundle? savedInstanceState);
+ method @CallSuper public final void onViewCreated(android.view.View view, android.os.Bundle? savedInstanceState);
+ property public final androidx.navigation.fragment.NavHostFragment detailPaneNavHostFragment;
+ property public final androidx.slidingpanelayout.widget.SlidingPaneLayout slidingPaneLayout;
+ }
+
+ @androidx.navigation.Navigator.Name("dialog") public final class DialogFragmentNavigator extends androidx.navigation.Navigator<androidx.navigation.fragment.DialogFragmentNavigator.Destination> {
+ ctor public DialogFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager);
+ method public androidx.navigation.fragment.DialogFragmentNavigator.Destination createDestination();
+ }
+
+ @androidx.navigation.NavDestination.ClassType(DialogFragment::class) public static class DialogFragmentNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow {
+ ctor public DialogFragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.DialogFragmentNavigator.Destination> fragmentNavigator);
+ ctor public DialogFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
+ method public final String getClassName();
+ method public final androidx.navigation.fragment.DialogFragmentNavigator.Destination setClassName(String className);
+ property public final String className;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DialogFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.DialogFragmentNavigator.Destination> {
+ ctor @Deprecated public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.DialogFragment> fragmentClass);
+ ctor public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, String route, kotlin.reflect.KClass<? extends androidx.fragment.app.DialogFragment> fragmentClass);
+ method public androidx.navigation.fragment.DialogFragmentNavigator.Destination build();
+ }
+
+ public final class DialogFragmentNavigatorDestinationBuilderKt {
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id);
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+ method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route);
+ method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+ }
+
+ public final class FragmentKt {
+ method public static androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment);
+ }
+
+ public final class FragmentNavArgsLazyKt {
+ method @MainThread public static inline <reified Args extends androidx.navigation.NavArgs> androidx.navigation.NavArgsLazy<Args> navArgs(androidx.fragment.app.Fragment);
+ }
+
+ @androidx.navigation.Navigator.Name("fragment") public class FragmentNavigator extends androidx.navigation.Navigator<androidx.navigation.fragment.FragmentNavigator.Destination> {
+ ctor public FragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, int containerId);
+ method public androidx.navigation.fragment.FragmentNavigator.Destination createDestination();
+ method @Deprecated public androidx.fragment.app.Fragment instantiateFragment(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, String className, android.os.Bundle? args);
+ }
+
+ @androidx.navigation.NavDestination.ClassType(Fragment::class) public static class FragmentNavigator.Destination extends androidx.navigation.NavDestination {
+ ctor public FragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> fragmentNavigator);
+ ctor public FragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
+ method public final String getClassName();
+ method public final androidx.navigation.fragment.FragmentNavigator.Destination setClassName(String className);
+ property public final String className;
+ }
+
+ public static final class FragmentNavigator.Extras implements androidx.navigation.Navigator.Extras {
+ method public java.util.Map<android.view.View,java.lang.String> getSharedElements();
+ property public final java.util.Map<android.view.View,java.lang.String> sharedElements;
+ }
+
+ public static final class FragmentNavigator.Extras.Builder {
+ ctor public FragmentNavigator.Extras.Builder();
+ method public androidx.navigation.fragment.FragmentNavigator.Extras.Builder addSharedElement(android.view.View sharedElement, String name);
+ method public androidx.navigation.fragment.FragmentNavigator.Extras.Builder addSharedElements(java.util.Map<android.view.View,java.lang.String> sharedElements);
+ method public androidx.navigation.fragment.FragmentNavigator.Extras build();
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class FragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.FragmentNavigator.Destination> {
+ ctor @Deprecated public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.Fragment> fragmentClass);
+ ctor public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, String route, kotlin.reflect.KClass<? extends androidx.fragment.app.Fragment> fragmentClass);
+ method public androidx.navigation.fragment.FragmentNavigator.Destination build();
+ }
+
+ public final class FragmentNavigatorDestinationBuilderKt {
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id);
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+ method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route);
+ method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+ }
+
+ public final class FragmentNavigatorExtrasKt {
+ method public static androidx.navigation.fragment.FragmentNavigator.Extras FragmentNavigatorExtras(kotlin.Pair<? extends android.view.View,java.lang.String>... sharedElements);
+ }
+
+ 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 @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();
+ method @Deprecated @CallSuper protected void onCreateNavController(androidx.navigation.NavController navController);
+ method @CallSuper protected void onCreateNavHostController(androidx.navigation.NavHostController navHostController);
+ property public final androidx.navigation.NavController navController;
+ field public static final androidx.navigation.fragment.NavHostFragment.Companion Companion;
+ }
+
+ 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.NavController findNavController(androidx.fragment.app.Fragment fragment);
+ }
+
+}
+
diff --git a/navigation/navigation-fragment/api/res-2.6.0-beta01.txt b/navigation/navigation-fragment/api/res-2.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/navigation-fragment/api/res-2.6.0-beta01.txt
diff --git a/navigation/navigation-fragment/api/restricted_2.6.0-beta01.txt b/navigation/navigation-fragment/api/restricted_2.6.0-beta01.txt
new file mode 100644
index 0000000..97bdfe6
--- /dev/null
+++ b/navigation/navigation-fragment/api/restricted_2.6.0-beta01.txt
@@ -0,0 +1,125 @@
+// Signature format: 4.0
+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 @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);
+ }
+
+}
+
+package androidx.navigation.fragment {
+
+ public abstract class AbstractListDetailFragment extends androidx.fragment.app.Fragment {
+ ctor public AbstractListDetailFragment();
+ method public final androidx.navigation.fragment.NavHostFragment getDetailPaneNavHostFragment();
+ method public final androidx.slidingpanelayout.widget.SlidingPaneLayout getSlidingPaneLayout();
+ method public androidx.navigation.fragment.NavHostFragment onCreateDetailPaneNavHostFragment();
+ method public abstract android.view.View onCreateListPaneView(android.view.LayoutInflater inflater, android.view.ViewGroup? container, android.os.Bundle? savedInstanceState);
+ method @CallSuper public final android.view.View onCreateView(android.view.LayoutInflater inflater, android.view.ViewGroup? container, android.os.Bundle? savedInstanceState);
+ method public void onListPaneViewCreated(android.view.View view, android.os.Bundle? savedInstanceState);
+ method @CallSuper public final void onViewCreated(android.view.View view, android.os.Bundle? savedInstanceState);
+ property public final androidx.navigation.fragment.NavHostFragment detailPaneNavHostFragment;
+ property public final androidx.slidingpanelayout.widget.SlidingPaneLayout slidingPaneLayout;
+ }
+
+ @androidx.navigation.Navigator.Name("dialog") public final class DialogFragmentNavigator extends androidx.navigation.Navigator<androidx.navigation.fragment.DialogFragmentNavigator.Destination> {
+ ctor public DialogFragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager);
+ method public androidx.navigation.fragment.DialogFragmentNavigator.Destination createDestination();
+ }
+
+ @androidx.navigation.NavDestination.ClassType(DialogFragment::class) public static class DialogFragmentNavigator.Destination extends androidx.navigation.NavDestination implements androidx.navigation.FloatingWindow {
+ ctor public DialogFragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.DialogFragmentNavigator.Destination> fragmentNavigator);
+ ctor public DialogFragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
+ method public final String getClassName();
+ method public final androidx.navigation.fragment.DialogFragmentNavigator.Destination setClassName(String className);
+ property public final String className;
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class DialogFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.DialogFragmentNavigator.Destination> {
+ ctor @Deprecated public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.DialogFragment> fragmentClass);
+ ctor public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, String route, kotlin.reflect.KClass<? extends androidx.fragment.app.DialogFragment> fragmentClass);
+ method public androidx.navigation.fragment.DialogFragmentNavigator.Destination build();
+ }
+
+ public final class DialogFragmentNavigatorDestinationBuilderKt {
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id);
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+ method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route);
+ method public static inline <reified F extends androidx.fragment.app.DialogFragment> void dialog(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+ }
+
+ public final class FragmentKt {
+ method public static androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment);
+ }
+
+ public final class FragmentNavArgsLazyKt {
+ method @MainThread public static inline <reified Args extends androidx.navigation.NavArgs> androidx.navigation.NavArgsLazy<Args> navArgs(androidx.fragment.app.Fragment);
+ }
+
+ @androidx.navigation.Navigator.Name("fragment") public class FragmentNavigator extends androidx.navigation.Navigator<androidx.navigation.fragment.FragmentNavigator.Destination> {
+ ctor public FragmentNavigator(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, int containerId);
+ method public androidx.navigation.fragment.FragmentNavigator.Destination createDestination();
+ method @Deprecated public androidx.fragment.app.Fragment instantiateFragment(android.content.Context context, androidx.fragment.app.FragmentManager fragmentManager, String className, android.os.Bundle? args);
+ }
+
+ @androidx.navigation.NavDestination.ClassType(Fragment::class) public static class FragmentNavigator.Destination extends androidx.navigation.NavDestination {
+ ctor public FragmentNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.fragment.FragmentNavigator.Destination> fragmentNavigator);
+ ctor public FragmentNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
+ method public final String getClassName();
+ method public final androidx.navigation.fragment.FragmentNavigator.Destination setClassName(String className);
+ property public final String className;
+ }
+
+ public static final class FragmentNavigator.Extras implements androidx.navigation.Navigator.Extras {
+ method public java.util.Map<android.view.View,java.lang.String> getSharedElements();
+ property public final java.util.Map<android.view.View,java.lang.String> sharedElements;
+ }
+
+ public static final class FragmentNavigator.Extras.Builder {
+ ctor public FragmentNavigator.Extras.Builder();
+ method public androidx.navigation.fragment.FragmentNavigator.Extras.Builder addSharedElement(android.view.View sharedElement, String name);
+ method public androidx.navigation.fragment.FragmentNavigator.Extras.Builder addSharedElements(java.util.Map<android.view.View,java.lang.String> sharedElements);
+ method public androidx.navigation.fragment.FragmentNavigator.Extras build();
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class FragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.FragmentNavigator.Destination> {
+ ctor @Deprecated public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.Fragment> fragmentClass);
+ ctor public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, String route, kotlin.reflect.KClass<? extends androidx.fragment.app.Fragment> fragmentClass);
+ method public androidx.navigation.fragment.FragmentNavigator.Destination build();
+ }
+
+ public final class FragmentNavigatorDestinationBuilderKt {
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id);
+ method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+ method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route);
+ method public static inline <reified F extends androidx.fragment.app.Fragment> void fragment(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
+ }
+
+ public final class FragmentNavigatorExtrasKt {
+ method public static androidx.navigation.fragment.FragmentNavigator.Extras FragmentNavigatorExtras(kotlin.Pair<? extends android.view.View,java.lang.String>... sharedElements);
+ }
+
+ 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 @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();
+ method @Deprecated @CallSuper protected void onCreateNavController(androidx.navigation.NavController navController);
+ method @CallSuper protected void onCreateNavHostController(androidx.navigation.NavHostController navHostController);
+ property public final androidx.navigation.NavController navController;
+ field public static final androidx.navigation.fragment.NavHostFragment.Companion Companion;
+ }
+
+ 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.NavController findNavController(androidx.fragment.app.Fragment fragment);
+ }
+
+}
+
diff --git a/navigation/navigation-runtime-ktx/api/2.6.0-beta01.txt b/navigation/navigation-runtime-ktx/api/2.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/navigation/navigation-runtime-ktx/api/2.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/navigation/navigation-runtime-ktx/api/public_plus_experimental_2.6.0-beta01.txt b/navigation/navigation-runtime-ktx/api/public_plus_experimental_2.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/navigation/navigation-runtime-ktx/api/public_plus_experimental_2.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/navigation/navigation-runtime-ktx/api/res-2.6.0-beta01.txt b/navigation/navigation-runtime-ktx/api/res-2.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/navigation-runtime-ktx/api/res-2.6.0-beta01.txt
diff --git a/navigation/navigation-runtime-ktx/api/restricted_2.6.0-beta01.txt b/navigation/navigation-runtime-ktx/api/restricted_2.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/navigation/navigation-runtime-ktx/api/restricted_2.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/navigation/navigation-runtime/api/2.6.0-beta01.txt b/navigation/navigation-runtime/api/2.6.0-beta01.txt
new file mode 100644
index 0000000..39d9a7f
--- /dev/null
+++ b/navigation/navigation-runtime/api/2.6.0-beta01.txt
@@ -0,0 +1,224 @@
+// Signature format: 4.0
+package androidx.navigation {
+
+ public final class ActivityKt {
+ method public static androidx.navigation.NavController findNavController(android.app.Activity, @IdRes int viewId);
+ }
+
+ public final class ActivityNavArgsLazyKt {
+ method @MainThread public static inline <reified Args extends androidx.navigation.NavArgs> androidx.navigation.NavArgsLazy<Args> navArgs(android.app.Activity);
+ }
+
+ @androidx.navigation.Navigator.Name("activity") public class ActivityNavigator extends androidx.navigation.Navigator<androidx.navigation.ActivityNavigator.Destination> {
+ ctor public ActivityNavigator(android.content.Context context);
+ method public static final void applyPopAnimationsToPendingTransition(android.app.Activity activity);
+ method public androidx.navigation.ActivityNavigator.Destination createDestination();
+ method public androidx.navigation.NavDestination? navigate(androidx.navigation.ActivityNavigator.Destination destination, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
+ field public static final androidx.navigation.ActivityNavigator.Companion Companion;
+ }
+
+ public static final class ActivityNavigator.Companion {
+ method public void applyPopAnimationsToPendingTransition(android.app.Activity activity);
+ }
+
+ @androidx.navigation.NavDestination.ClassType(Activity::class) public static class ActivityNavigator.Destination extends androidx.navigation.NavDestination {
+ ctor public ActivityNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.ActivityNavigator.Destination> activityNavigator);
+ ctor public ActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
+ method public final String? getAction();
+ method public final android.content.ComponentName? getComponent();
+ method public final android.net.Uri? getData();
+ method public final String? getDataPattern();
+ method public final android.content.Intent? getIntent();
+ method public final String? getTargetPackage();
+ method public final androidx.navigation.ActivityNavigator.Destination setAction(String? action);
+ method public final androidx.navigation.ActivityNavigator.Destination setComponentName(android.content.ComponentName? name);
+ method public final androidx.navigation.ActivityNavigator.Destination setData(android.net.Uri? data);
+ method public final androidx.navigation.ActivityNavigator.Destination setDataPattern(String? dataPattern);
+ method public final androidx.navigation.ActivityNavigator.Destination setIntent(android.content.Intent? intent);
+ method public final androidx.navigation.ActivityNavigator.Destination setTargetPackage(String? packageName);
+ property public final String? action;
+ property public final android.content.ComponentName? component;
+ property public final android.net.Uri? data;
+ property public final String? dataPattern;
+ property public final android.content.Intent? intent;
+ property public final String? targetPackage;
+ }
+
+ public static final class ActivityNavigator.Extras implements androidx.navigation.Navigator.Extras {
+ method public androidx.core.app.ActivityOptionsCompat? getActivityOptions();
+ method public int getFlags();
+ property public final androidx.core.app.ActivityOptionsCompat? activityOptions;
+ property public final int flags;
+ }
+
+ public static final class ActivityNavigator.Extras.Builder {
+ ctor public ActivityNavigator.Extras.Builder();
+ method public androidx.navigation.ActivityNavigator.Extras.Builder addFlags(int flags);
+ method public androidx.navigation.ActivityNavigator.Extras build();
+ method public androidx.navigation.ActivityNavigator.Extras.Builder setActivityOptions(androidx.core.app.ActivityOptionsCompat activityOptions);
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class ActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.ActivityNavigator.Destination> {
+ ctor @Deprecated public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, @IdRes int id);
+ ctor public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, String route);
+ method public androidx.navigation.ActivityNavigator.Destination build();
+ method public String? getAction();
+ method public kotlin.reflect.KClass<? extends android.app.Activity>? getActivityClass();
+ method public android.net.Uri? getData();
+ method public String? getDataPattern();
+ method public String? getTargetPackage();
+ method public void setAction(String?);
+ method public void setActivityClass(kotlin.reflect.KClass<? extends android.app.Activity>?);
+ method public void setData(android.net.Uri?);
+ method public void setDataPattern(String?);
+ method public void setTargetPackage(String?);
+ property public final String? action;
+ property public final kotlin.reflect.KClass<? extends android.app.Activity>? activityClass;
+ property public final android.net.Uri? data;
+ property public final String? dataPattern;
+ property public final String? targetPackage;
+ }
+
+ public final class ActivityNavigatorDestinationBuilderKt {
+ method @Deprecated public static inline void activity(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.ActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
+ method public static inline void activity(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.ActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
+ }
+
+ public final class ActivityNavigatorExtrasKt {
+ method public static androidx.navigation.ActivityNavigator.Extras ActivityNavigatorExtras(optional androidx.core.app.ActivityOptionsCompat? activityOptions, optional int flags);
+ }
+
+ 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 public androidx.navigation.NavDeepLinkBuilder createDeepLink();
+ method public androidx.navigation.NavBackStackEntry getBackStackEntry(@IdRes int destinationId);
+ method public final androidx.navigation.NavBackStackEntry getBackStackEntry(String route);
+ method public androidx.navigation.NavBackStackEntry? getCurrentBackStackEntry();
+ method public final kotlinx.coroutines.flow.Flow<androidx.navigation.NavBackStackEntry> getCurrentBackStackEntryFlow();
+ method public androidx.navigation.NavDestination? getCurrentDestination();
+ method @MainThread public androidx.navigation.NavGraph getGraph();
+ method public androidx.navigation.NavInflater getNavInflater();
+ method public androidx.navigation.NavigatorProvider getNavigatorProvider();
+ method public androidx.navigation.NavBackStackEntry? getPreviousBackStackEntry();
+ 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);
+ method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request);
+ 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 final void navigate(String route);
+ 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 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(@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;
+ property @MainThread public androidx.navigation.NavGraph graph;
+ property public androidx.navigation.NavInflater navInflater;
+ property public androidx.navigation.NavigatorProvider navigatorProvider;
+ property public androidx.navigation.NavBackStackEntry? previousBackStackEntry;
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> visibleEntries;
+ field public static final androidx.navigation.NavController.Companion Companion;
+ field public static final String KEY_DEEP_LINK_INTENT = "android-support-nav:controller:deepLinkIntent";
+ }
+
+ public static final class NavController.Companion {
+ }
+
+ public static fun interface NavController.OnDestinationChangedListener {
+ method public void onDestinationChanged(androidx.navigation.NavController controller, androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
+ }
+
+ public final class NavControllerKt {
+ method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, 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 createGraph(androidx.navigation.NavController, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ }
+
+ 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(String route);
+ 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 setDestination(@IdRes int destId);
+ method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute, 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 setGraph(androidx.navigation.NavGraph navGraph);
+ }
+
+ public interface NavHost {
+ method public androidx.navigation.NavController getNavController();
+ property public abstract androidx.navigation.NavController navController;
+ }
+
+ public class NavHostController extends androidx.navigation.NavController {
+ ctor public NavHostController(android.content.Context context);
+ method public final void enableOnBackPressed(boolean enabled);
+ method public final void setLifecycleOwner(androidx.lifecycle.LifecycleOwner owner);
+ method public final void setOnBackPressedDispatcher(androidx.activity.OnBackPressedDispatcher dispatcher);
+ method public final void setViewModelStore(androidx.lifecycle.ViewModelStore viewModelStore);
+ }
+
+ public final class NavHostKt {
+ method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, 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 createGraph(androidx.navigation.NavHost, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ }
+
+ public final class NavInflater {
+ ctor public NavInflater(android.content.Context context, androidx.navigation.NavigatorProvider navigatorProvider);
+ method public androidx.navigation.NavGraph inflate(@NavigationRes int graphResId);
+ field public static final androidx.navigation.NavInflater.Companion Companion;
+ }
+
+ public static final class NavInflater.Companion {
+ }
+
+ 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 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);
+ field public static final androidx.navigation.Navigation INSTANCE;
+ }
+
+ public final class ViewKt {
+ method public static androidx.navigation.NavController findNavController(android.view.View);
+ }
+
+}
+
diff --git a/navigation/navigation-runtime/api/public_plus_experimental_2.6.0-beta01.txt b/navigation/navigation-runtime/api/public_plus_experimental_2.6.0-beta01.txt
new file mode 100644
index 0000000..6faf37c
--- /dev/null
+++ b/navigation/navigation-runtime/api/public_plus_experimental_2.6.0-beta01.txt
@@ -0,0 +1,229 @@
+// Signature format: 4.0
+package androidx.navigation {
+
+ public final class ActivityKt {
+ method public static androidx.navigation.NavController findNavController(android.app.Activity, @IdRes int viewId);
+ }
+
+ public final class ActivityNavArgsLazyKt {
+ method @MainThread public static inline <reified Args extends androidx.navigation.NavArgs> androidx.navigation.NavArgsLazy<Args> navArgs(android.app.Activity);
+ }
+
+ @androidx.navigation.Navigator.Name("activity") public class ActivityNavigator extends androidx.navigation.Navigator<androidx.navigation.ActivityNavigator.Destination> {
+ ctor public ActivityNavigator(android.content.Context context);
+ method public static final void applyPopAnimationsToPendingTransition(android.app.Activity activity);
+ method public androidx.navigation.ActivityNavigator.Destination createDestination();
+ method public androidx.navigation.NavDestination? navigate(androidx.navigation.ActivityNavigator.Destination destination, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
+ field public static final androidx.navigation.ActivityNavigator.Companion Companion;
+ }
+
+ public static final class ActivityNavigator.Companion {
+ method public void applyPopAnimationsToPendingTransition(android.app.Activity activity);
+ }
+
+ @androidx.navigation.NavDestination.ClassType(Activity::class) public static class ActivityNavigator.Destination extends androidx.navigation.NavDestination {
+ ctor public ActivityNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.ActivityNavigator.Destination> activityNavigator);
+ ctor public ActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
+ method public final String? getAction();
+ method public final android.content.ComponentName? getComponent();
+ method public final android.net.Uri? getData();
+ method public final String? getDataPattern();
+ method public final android.content.Intent? getIntent();
+ method public final String? getTargetPackage();
+ method public final androidx.navigation.ActivityNavigator.Destination setAction(String? action);
+ method public final androidx.navigation.ActivityNavigator.Destination setComponentName(android.content.ComponentName? name);
+ method public final androidx.navigation.ActivityNavigator.Destination setData(android.net.Uri? data);
+ method public final androidx.navigation.ActivityNavigator.Destination setDataPattern(String? dataPattern);
+ method public final androidx.navigation.ActivityNavigator.Destination setIntent(android.content.Intent? intent);
+ method public final androidx.navigation.ActivityNavigator.Destination setTargetPackage(String? packageName);
+ property public final String? action;
+ property public final android.content.ComponentName? component;
+ property public final android.net.Uri? data;
+ property public final String? dataPattern;
+ property public final android.content.Intent? intent;
+ property public final String? targetPackage;
+ }
+
+ public static final class ActivityNavigator.Extras implements androidx.navigation.Navigator.Extras {
+ method public androidx.core.app.ActivityOptionsCompat? getActivityOptions();
+ method public int getFlags();
+ property public final androidx.core.app.ActivityOptionsCompat? activityOptions;
+ property public final int flags;
+ }
+
+ public static final class ActivityNavigator.Extras.Builder {
+ ctor public ActivityNavigator.Extras.Builder();
+ method public androidx.navigation.ActivityNavigator.Extras.Builder addFlags(int flags);
+ method public androidx.navigation.ActivityNavigator.Extras build();
+ method public androidx.navigation.ActivityNavigator.Extras.Builder setActivityOptions(androidx.core.app.ActivityOptionsCompat activityOptions);
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class ActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.ActivityNavigator.Destination> {
+ ctor @Deprecated public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, @IdRes int id);
+ ctor public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, String route);
+ method public androidx.navigation.ActivityNavigator.Destination build();
+ method public String? getAction();
+ method public kotlin.reflect.KClass<? extends android.app.Activity>? getActivityClass();
+ method public android.net.Uri? getData();
+ method public String? getDataPattern();
+ method public String? getTargetPackage();
+ method public void setAction(String?);
+ method public void setActivityClass(kotlin.reflect.KClass<? extends android.app.Activity>?);
+ method public void setData(android.net.Uri?);
+ method public void setDataPattern(String?);
+ method public void setTargetPackage(String?);
+ property public final String? action;
+ property public final kotlin.reflect.KClass<? extends android.app.Activity>? activityClass;
+ property public final android.net.Uri? data;
+ property public final String? dataPattern;
+ property public final String? targetPackage;
+ }
+
+ public final class ActivityNavigatorDestinationBuilderKt {
+ method @Deprecated public static inline void activity(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.ActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
+ method public static inline void activity(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.ActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
+ }
+
+ public final class ActivityNavigatorExtrasKt {
+ method public static androidx.navigation.ActivityNavigator.Extras ActivityNavigatorExtras(optional androidx.core.app.ActivityOptionsCompat? activityOptions, optional int flags);
+ }
+
+ 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 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);
+ method public final androidx.navigation.NavBackStackEntry getBackStackEntry(String route);
+ method public androidx.navigation.NavBackStackEntry? getCurrentBackStackEntry();
+ method public final kotlinx.coroutines.flow.Flow<androidx.navigation.NavBackStackEntry> getCurrentBackStackEntryFlow();
+ method public androidx.navigation.NavDestination? getCurrentDestination();
+ method @MainThread public androidx.navigation.NavGraph getGraph();
+ method public androidx.navigation.NavInflater getNavInflater();
+ method public androidx.navigation.NavigatorProvider getNavigatorProvider();
+ method public androidx.navigation.NavBackStackEntry? getPreviousBackStackEntry();
+ 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);
+ method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request);
+ 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 final void navigate(String route);
+ 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 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(@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;
+ property @MainThread public androidx.navigation.NavGraph graph;
+ property public androidx.navigation.NavInflater navInflater;
+ property public androidx.navigation.NavigatorProvider navigatorProvider;
+ property public androidx.navigation.NavBackStackEntry? previousBackStackEntry;
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> visibleEntries;
+ field public static final androidx.navigation.NavController.Companion Companion;
+ field public static final String KEY_DEEP_LINK_INTENT = "android-support-nav:controller:deepLinkIntent";
+ }
+
+ public static final class NavController.Companion {
+ method @androidx.navigation.NavDeepLinkSaveStateControl public void enableDeepLinkSaveState(boolean saveState);
+ }
+
+ public static fun interface NavController.OnDestinationChangedListener {
+ method public void onDestinationChanged(androidx.navigation.NavController controller, androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
+ }
+
+ public final class NavControllerKt {
+ method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, 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 createGraph(androidx.navigation.NavController, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ }
+
+ 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(String route);
+ 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 setDestination(@IdRes int destId);
+ method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute, 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 setGraph(androidx.navigation.NavGraph navGraph);
+ }
+
+ @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 {
+ }
+
+ public interface NavHost {
+ method public androidx.navigation.NavController getNavController();
+ property public abstract androidx.navigation.NavController navController;
+ }
+
+ public class NavHostController extends androidx.navigation.NavController {
+ ctor public NavHostController(android.content.Context context);
+ method public final void enableOnBackPressed(boolean enabled);
+ method public final void setLifecycleOwner(androidx.lifecycle.LifecycleOwner owner);
+ method public final void setOnBackPressedDispatcher(androidx.activity.OnBackPressedDispatcher dispatcher);
+ method public final void setViewModelStore(androidx.lifecycle.ViewModelStore viewModelStore);
+ }
+
+ public final class NavHostKt {
+ method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, 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 createGraph(androidx.navigation.NavHost, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ }
+
+ public final class NavInflater {
+ ctor public NavInflater(android.content.Context context, androidx.navigation.NavigatorProvider navigatorProvider);
+ method public androidx.navigation.NavGraph inflate(@NavigationRes int graphResId);
+ field public static final androidx.navigation.NavInflater.Companion Companion;
+ }
+
+ public static final class NavInflater.Companion {
+ }
+
+ 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 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);
+ field public static final androidx.navigation.Navigation INSTANCE;
+ }
+
+ public final class ViewKt {
+ method public static androidx.navigation.NavController findNavController(android.view.View);
+ }
+
+}
+
diff --git a/navigation/navigation-runtime/api/res-2.6.0-beta01.txt b/navigation/navigation-runtime/api/res-2.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/navigation-runtime/api/res-2.6.0-beta01.txt
diff --git a/navigation/navigation-runtime/api/restricted_2.6.0-beta01.txt b/navigation/navigation-runtime/api/restricted_2.6.0-beta01.txt
new file mode 100644
index 0000000..39d9a7f
--- /dev/null
+++ b/navigation/navigation-runtime/api/restricted_2.6.0-beta01.txt
@@ -0,0 +1,224 @@
+// Signature format: 4.0
+package androidx.navigation {
+
+ public final class ActivityKt {
+ method public static androidx.navigation.NavController findNavController(android.app.Activity, @IdRes int viewId);
+ }
+
+ public final class ActivityNavArgsLazyKt {
+ method @MainThread public static inline <reified Args extends androidx.navigation.NavArgs> androidx.navigation.NavArgsLazy<Args> navArgs(android.app.Activity);
+ }
+
+ @androidx.navigation.Navigator.Name("activity") public class ActivityNavigator extends androidx.navigation.Navigator<androidx.navigation.ActivityNavigator.Destination> {
+ ctor public ActivityNavigator(android.content.Context context);
+ method public static final void applyPopAnimationsToPendingTransition(android.app.Activity activity);
+ method public androidx.navigation.ActivityNavigator.Destination createDestination();
+ method public androidx.navigation.NavDestination? navigate(androidx.navigation.ActivityNavigator.Destination destination, android.os.Bundle? args, androidx.navigation.NavOptions? navOptions, androidx.navigation.Navigator.Extras? navigatorExtras);
+ field public static final androidx.navigation.ActivityNavigator.Companion Companion;
+ }
+
+ public static final class ActivityNavigator.Companion {
+ method public void applyPopAnimationsToPendingTransition(android.app.Activity activity);
+ }
+
+ @androidx.navigation.NavDestination.ClassType(Activity::class) public static class ActivityNavigator.Destination extends androidx.navigation.NavDestination {
+ ctor public ActivityNavigator.Destination(androidx.navigation.Navigator<? extends androidx.navigation.ActivityNavigator.Destination> activityNavigator);
+ ctor public ActivityNavigator.Destination(androidx.navigation.NavigatorProvider navigatorProvider);
+ method public final String? getAction();
+ method public final android.content.ComponentName? getComponent();
+ method public final android.net.Uri? getData();
+ method public final String? getDataPattern();
+ method public final android.content.Intent? getIntent();
+ method public final String? getTargetPackage();
+ method public final androidx.navigation.ActivityNavigator.Destination setAction(String? action);
+ method public final androidx.navigation.ActivityNavigator.Destination setComponentName(android.content.ComponentName? name);
+ method public final androidx.navigation.ActivityNavigator.Destination setData(android.net.Uri? data);
+ method public final androidx.navigation.ActivityNavigator.Destination setDataPattern(String? dataPattern);
+ method public final androidx.navigation.ActivityNavigator.Destination setIntent(android.content.Intent? intent);
+ method public final androidx.navigation.ActivityNavigator.Destination setTargetPackage(String? packageName);
+ property public final String? action;
+ property public final android.content.ComponentName? component;
+ property public final android.net.Uri? data;
+ property public final String? dataPattern;
+ property public final android.content.Intent? intent;
+ property public final String? targetPackage;
+ }
+
+ public static final class ActivityNavigator.Extras implements androidx.navigation.Navigator.Extras {
+ method public androidx.core.app.ActivityOptionsCompat? getActivityOptions();
+ method public int getFlags();
+ property public final androidx.core.app.ActivityOptionsCompat? activityOptions;
+ property public final int flags;
+ }
+
+ public static final class ActivityNavigator.Extras.Builder {
+ ctor public ActivityNavigator.Extras.Builder();
+ method public androidx.navigation.ActivityNavigator.Extras.Builder addFlags(int flags);
+ method public androidx.navigation.ActivityNavigator.Extras build();
+ method public androidx.navigation.ActivityNavigator.Extras.Builder setActivityOptions(androidx.core.app.ActivityOptionsCompat activityOptions);
+ }
+
+ @androidx.navigation.NavDestinationDsl public final class ActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.ActivityNavigator.Destination> {
+ ctor @Deprecated public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, @IdRes int id);
+ ctor public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, String route);
+ method public androidx.navigation.ActivityNavigator.Destination build();
+ method public String? getAction();
+ method public kotlin.reflect.KClass<? extends android.app.Activity>? getActivityClass();
+ method public android.net.Uri? getData();
+ method public String? getDataPattern();
+ method public String? getTargetPackage();
+ method public void setAction(String?);
+ method public void setActivityClass(kotlin.reflect.KClass<? extends android.app.Activity>?);
+ method public void setData(android.net.Uri?);
+ method public void setDataPattern(String?);
+ method public void setTargetPackage(String?);
+ property public final String? action;
+ property public final kotlin.reflect.KClass<? extends android.app.Activity>? activityClass;
+ property public final android.net.Uri? data;
+ property public final String? dataPattern;
+ property public final String? targetPackage;
+ }
+
+ public final class ActivityNavigatorDestinationBuilderKt {
+ method @Deprecated public static inline void activity(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.ActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
+ method public static inline void activity(androidx.navigation.NavGraphBuilder, String route, kotlin.jvm.functions.Function1<? super androidx.navigation.ActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
+ }
+
+ public final class ActivityNavigatorExtrasKt {
+ method public static androidx.navigation.ActivityNavigator.Extras ActivityNavigatorExtras(optional androidx.core.app.ActivityOptionsCompat? activityOptions, optional int flags);
+ }
+
+ 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 public androidx.navigation.NavDeepLinkBuilder createDeepLink();
+ method public androidx.navigation.NavBackStackEntry getBackStackEntry(@IdRes int destinationId);
+ method public final androidx.navigation.NavBackStackEntry getBackStackEntry(String route);
+ method public androidx.navigation.NavBackStackEntry? getCurrentBackStackEntry();
+ method public final kotlinx.coroutines.flow.Flow<androidx.navigation.NavBackStackEntry> getCurrentBackStackEntryFlow();
+ method public androidx.navigation.NavDestination? getCurrentDestination();
+ method @MainThread public androidx.navigation.NavGraph getGraph();
+ method public androidx.navigation.NavInflater getNavInflater();
+ method public androidx.navigation.NavigatorProvider getNavigatorProvider();
+ method public androidx.navigation.NavBackStackEntry? getPreviousBackStackEntry();
+ 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);
+ method @MainThread public void navigate(androidx.navigation.NavDeepLinkRequest request);
+ 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 final void navigate(String route);
+ 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 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(@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;
+ property @MainThread public androidx.navigation.NavGraph graph;
+ property public androidx.navigation.NavInflater navInflater;
+ property public androidx.navigation.NavigatorProvider navigatorProvider;
+ property public androidx.navigation.NavBackStackEntry? previousBackStackEntry;
+ property public final kotlinx.coroutines.flow.StateFlow<java.util.List<androidx.navigation.NavBackStackEntry>> visibleEntries;
+ field public static final androidx.navigation.NavController.Companion Companion;
+ field public static final String KEY_DEEP_LINK_INTENT = "android-support-nav:controller:deepLinkIntent";
+ }
+
+ public static final class NavController.Companion {
+ }
+
+ public static fun interface NavController.OnDestinationChangedListener {
+ method public void onDestinationChanged(androidx.navigation.NavController controller, androidx.navigation.NavDestination destination, android.os.Bundle? arguments);
+ }
+
+ public final class NavControllerKt {
+ method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, 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 createGraph(androidx.navigation.NavController, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ }
+
+ 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(String route);
+ 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 setDestination(@IdRes int destId);
+ method public androidx.navigation.NavDeepLinkBuilder setDestination(String destRoute, 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 setGraph(androidx.navigation.NavGraph navGraph);
+ }
+
+ public interface NavHost {
+ method public androidx.navigation.NavController getNavController();
+ property public abstract androidx.navigation.NavController navController;
+ }
+
+ public class NavHostController extends androidx.navigation.NavController {
+ ctor public NavHostController(android.content.Context context);
+ method public final void enableOnBackPressed(boolean enabled);
+ method public final void setLifecycleOwner(androidx.lifecycle.LifecycleOwner owner);
+ method public final void setOnBackPressedDispatcher(androidx.activity.OnBackPressedDispatcher dispatcher);
+ method public final void setViewModelStore(androidx.lifecycle.ViewModelStore viewModelStore);
+ }
+
+ public final class NavHostKt {
+ method @Deprecated public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, 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 createGraph(androidx.navigation.NavHost, String startDestination, optional String? route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
+ }
+
+ public final class NavInflater {
+ ctor public NavInflater(android.content.Context context, androidx.navigation.NavigatorProvider navigatorProvider);
+ method public androidx.navigation.NavGraph inflate(@NavigationRes int graphResId);
+ field public static final androidx.navigation.NavInflater.Companion Companion;
+ }
+
+ public static final class NavInflater.Companion {
+ }
+
+ 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 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);
+ field public static final androidx.navigation.Navigation INSTANCE;
+ }
+
+ public final class ViewKt {
+ method public static androidx.navigation.NavController findNavController(android.view.View);
+ }
+
+}
+
diff --git a/navigation/navigation-testing/api/2.6.0-beta01.txt b/navigation/navigation-testing/api/2.6.0-beta01.txt
new file mode 100644
index 0000000..89f60a4
--- /dev/null
+++ b/navigation/navigation-testing/api/2.6.0-beta01.txt
@@ -0,0 +1,23 @@
+// Signature format: 4.0
+package androidx.navigation.testing {
+
+ 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(String destRoute);
+ 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();
+ 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_2.6.0-beta01.txt b/navigation/navigation-testing/api/public_plus_experimental_2.6.0-beta01.txt
new file mode 100644
index 0000000..89f60a4
--- /dev/null
+++ b/navigation/navigation-testing/api/public_plus_experimental_2.6.0-beta01.txt
@@ -0,0 +1,23 @@
+// Signature format: 4.0
+package androidx.navigation.testing {
+
+ 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(String destRoute);
+ 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();
+ 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/res-2.6.0-beta01.txt b/navigation/navigation-testing/api/res-2.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/navigation-testing/api/res-2.6.0-beta01.txt
diff --git a/navigation/navigation-testing/api/restricted_2.6.0-beta01.txt b/navigation/navigation-testing/api/restricted_2.6.0-beta01.txt
new file mode 100644
index 0000000..89f60a4
--- /dev/null
+++ b/navigation/navigation-testing/api/restricted_2.6.0-beta01.txt
@@ -0,0 +1,23 @@
+// Signature format: 4.0
+package androidx.navigation.testing {
+
+ 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(String destRoute);
+ 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();
+ 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-ui-ktx/api/2.6.0-beta01.txt b/navigation/navigation-ui-ktx/api/2.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/navigation/navigation-ui-ktx/api/2.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/navigation/navigation-ui-ktx/api/public_plus_experimental_2.6.0-beta01.txt b/navigation/navigation-ui-ktx/api/public_plus_experimental_2.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/navigation/navigation-ui-ktx/api/public_plus_experimental_2.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/navigation/navigation-ui-ktx/api/res-2.6.0-beta01.txt b/navigation/navigation-ui-ktx/api/res-2.6.0-beta01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/navigation-ui-ktx/api/res-2.6.0-beta01.txt
diff --git a/navigation/navigation-ui-ktx/api/restricted_2.6.0-beta01.txt b/navigation/navigation-ui-ktx/api/restricted_2.6.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/navigation/navigation-ui-ktx/api/restricted_2.6.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/navigation/navigation-ui/api/2.6.0-beta01.txt b/navigation/navigation-ui/api/2.6.0-beta01.txt
new file mode 100644
index 0000000..27e99a9
--- /dev/null
+++ b/navigation/navigation-ui/api/2.6.0-beta01.txt
@@ -0,0 +1,88 @@
+// Signature format: 4.0
+package androidx.navigation.ui {
+
+ public final class ActivityKt {
+ method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
+ method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
+ }
+
+ public final class AppBarConfiguration {
+ method @Deprecated public androidx.drawerlayout.widget.DrawerLayout? getDrawerLayout();
+ method public androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? getFallbackOnNavigateUpListener();
+ method public androidx.customview.widget.Openable? getOpenableLayout();
+ method public java.util.Set<java.lang.Integer> getTopLevelDestinations();
+ method public boolean isTopLevelDestination(androidx.navigation.NavDestination destination);
+ property @Deprecated public final androidx.drawerlayout.widget.DrawerLayout? drawerLayout;
+ property public final androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? fallbackOnNavigateUpListener;
+ property public final androidx.customview.widget.Openable? openableLayout;
+ property public final java.util.Set<java.lang.Integer> topLevelDestinations;
+ }
+
+ 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(int... topLevelDestinationIds);
+ ctor public AppBarConfiguration.Builder(java.util.Set<java.lang.Integer> topLevelDestinationIds);
+ method public androidx.navigation.ui.AppBarConfiguration build();
+ method @Deprecated public androidx.navigation.ui.AppBarConfiguration.Builder setDrawerLayout(androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
+ method public androidx.navigation.ui.AppBarConfiguration.Builder setFallbackOnNavigateUpListener(androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? fallbackOnNavigateUpListener);
+ method public androidx.navigation.ui.AppBarConfiguration.Builder setOpenableLayout(androidx.customview.widget.Openable? openableLayout);
+ }
+
+ public static fun interface AppBarConfiguration.OnNavigateUpListener {
+ method public boolean onNavigateUp();
+ }
+
+ 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(java.util.Set<java.lang.Integer> topLevelDestinationIds, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
+ }
+
+ public final class BottomNavigationViewKt {
+ method public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView, androidx.navigation.NavController navController);
+ }
+
+ public final class CollapsingToolbarLayoutKt {
+ method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
+ method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
+ }
+
+ public final class MenuItemKt {
+ method public static boolean onNavDestinationSelected(android.view.MenuItem, androidx.navigation.NavController navController);
+ }
+
+ public final class NavControllerKt {
+ method public static boolean navigateUp(androidx.navigation.NavController, androidx.customview.widget.Openable? drawerLayout);
+ method public static boolean navigateUp(androidx.navigation.NavController, androidx.navigation.ui.AppBarConfiguration appBarConfiguration);
+ }
+
+ public final class NavigationUI {
+ 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, 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, 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, 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);
+ field public static final androidx.navigation.ui.NavigationUI INSTANCE;
+ }
+
+ public final class NavigationViewKt {
+ method public static void setupWithNavController(com.google.android.material.navigation.NavigationView, androidx.navigation.NavController navController);
+ }
+
+ public final class ToolbarKt {
+ method public static void setupWithNavController(androidx.appcompat.widget.Toolbar, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
+ method public static void setupWithNavController(androidx.appcompat.widget.Toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
+ }
+
+}
+
diff --git a/navigation/navigation-ui/api/public_plus_experimental_2.6.0-beta01.txt b/navigation/navigation-ui/api/public_plus_experimental_2.6.0-beta01.txt
new file mode 100644
index 0000000..7cb97e2
--- /dev/null
+++ b/navigation/navigation-ui/api/public_plus_experimental_2.6.0-beta01.txt
@@ -0,0 +1,94 @@
+// Signature format: 4.0
+package androidx.navigation.ui {
+
+ public final class ActivityKt {
+ method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
+ method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
+ }
+
+ public final class AppBarConfiguration {
+ method @Deprecated public androidx.drawerlayout.widget.DrawerLayout? getDrawerLayout();
+ method public androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? getFallbackOnNavigateUpListener();
+ method public androidx.customview.widget.Openable? getOpenableLayout();
+ method public java.util.Set<java.lang.Integer> getTopLevelDestinations();
+ method public boolean isTopLevelDestination(androidx.navigation.NavDestination destination);
+ property @Deprecated public final androidx.drawerlayout.widget.DrawerLayout? drawerLayout;
+ property public final androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? fallbackOnNavigateUpListener;
+ property public final androidx.customview.widget.Openable? openableLayout;
+ property public final java.util.Set<java.lang.Integer> topLevelDestinations;
+ }
+
+ 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(int... topLevelDestinationIds);
+ ctor public AppBarConfiguration.Builder(java.util.Set<java.lang.Integer> topLevelDestinationIds);
+ method public androidx.navigation.ui.AppBarConfiguration build();
+ method @Deprecated public androidx.navigation.ui.AppBarConfiguration.Builder setDrawerLayout(androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
+ method public androidx.navigation.ui.AppBarConfiguration.Builder setFallbackOnNavigateUpListener(androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? fallbackOnNavigateUpListener);
+ method public androidx.navigation.ui.AppBarConfiguration.Builder setOpenableLayout(androidx.customview.widget.Openable? openableLayout);
+ }
+
+ public static fun interface AppBarConfiguration.OnNavigateUpListener {
+ method public boolean onNavigateUp();
+ }
+
+ 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(java.util.Set<java.lang.Integer> topLevelDestinationIds, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
+ }
+
+ public final class BottomNavigationViewKt {
+ method public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView, androidx.navigation.NavController navController);
+ }
+
+ public final class CollapsingToolbarLayoutKt {
+ method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
+ method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
+ }
+
+ public final class MenuItemKt {
+ method public static boolean onNavDestinationSelected(android.view.MenuItem, androidx.navigation.NavController navController);
+ }
+
+ public final class NavControllerKt {
+ method public static boolean navigateUp(androidx.navigation.NavController, androidx.customview.widget.Openable? drawerLayout);
+ method public static boolean navigateUp(androidx.navigation.NavController, androidx.navigation.ui.AppBarConfiguration appBarConfiguration);
+ }
+
+ public final class NavigationUI {
+ 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 @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, 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, 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, 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);
+ field public static final androidx.navigation.ui.NavigationUI INSTANCE;
+ }
+
+ @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING) @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public @interface NavigationUiSaveStateControl {
+ }
+
+ public final class NavigationViewKt {
+ method public static void setupWithNavController(com.google.android.material.navigation.NavigationView, androidx.navigation.NavController navController);
+ }
+
+ public final class ToolbarKt {
+ method public static void setupWithNavController(androidx.appcompat.widget.Toolbar, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
+ method public static void setupWithNavController(androidx.appcompat.widget.Toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
+ }
+
+}
+
diff --git a/navigation/navigation-ui/api/res-2.6.0-beta01.txt b/navigation/navigation-ui/api/res-2.6.0-beta01.txt
new file mode 100644
index 0000000..e65fdbe
--- /dev/null
+++ b/navigation/navigation-ui/api/res-2.6.0-beta01.txt
@@ -0,0 +1,8 @@
+anim nav_default_enter_anim
+anim nav_default_exit_anim
+anim nav_default_pop_enter_anim
+anim nav_default_pop_exit_anim
+animator nav_default_enter_anim
+animator nav_default_exit_anim
+animator nav_default_pop_enter_anim
+animator nav_default_pop_exit_anim
diff --git a/navigation/navigation-ui/api/restricted_2.6.0-beta01.txt b/navigation/navigation-ui/api/restricted_2.6.0-beta01.txt
new file mode 100644
index 0000000..27e99a9
--- /dev/null
+++ b/navigation/navigation-ui/api/restricted_2.6.0-beta01.txt
@@ -0,0 +1,88 @@
+// Signature format: 4.0
+package androidx.navigation.ui {
+
+ public final class ActivityKt {
+ method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
+ method public static void setupActionBarWithNavController(androidx.appcompat.app.AppCompatActivity, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
+ }
+
+ public final class AppBarConfiguration {
+ method @Deprecated public androidx.drawerlayout.widget.DrawerLayout? getDrawerLayout();
+ method public androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? getFallbackOnNavigateUpListener();
+ method public androidx.customview.widget.Openable? getOpenableLayout();
+ method public java.util.Set<java.lang.Integer> getTopLevelDestinations();
+ method public boolean isTopLevelDestination(androidx.navigation.NavDestination destination);
+ property @Deprecated public final androidx.drawerlayout.widget.DrawerLayout? drawerLayout;
+ property public final androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? fallbackOnNavigateUpListener;
+ property public final androidx.customview.widget.Openable? openableLayout;
+ property public final java.util.Set<java.lang.Integer> topLevelDestinations;
+ }
+
+ 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(int... topLevelDestinationIds);
+ ctor public AppBarConfiguration.Builder(java.util.Set<java.lang.Integer> topLevelDestinationIds);
+ method public androidx.navigation.ui.AppBarConfiguration build();
+ method @Deprecated public androidx.navigation.ui.AppBarConfiguration.Builder setDrawerLayout(androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
+ method public androidx.navigation.ui.AppBarConfiguration.Builder setFallbackOnNavigateUpListener(androidx.navigation.ui.AppBarConfiguration.OnNavigateUpListener? fallbackOnNavigateUpListener);
+ method public androidx.navigation.ui.AppBarConfiguration.Builder setOpenableLayout(androidx.customview.widget.Openable? openableLayout);
+ }
+
+ public static fun interface AppBarConfiguration.OnNavigateUpListener {
+ method public boolean onNavigateUp();
+ }
+
+ 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(java.util.Set<java.lang.Integer> topLevelDestinationIds, optional androidx.customview.widget.Openable? drawerLayout, optional kotlin.jvm.functions.Function0<java.lang.Boolean> fallbackOnNavigateUpListener);
+ }
+
+ public final class BottomNavigationViewKt {
+ method public static void setupWithNavController(com.google.android.material.navigation.NavigationBarView, androidx.navigation.NavController navController);
+ }
+
+ public final class CollapsingToolbarLayoutKt {
+ method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
+ method public static void setupWithNavController(com.google.android.material.appbar.CollapsingToolbarLayout, androidx.appcompat.widget.Toolbar toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
+ }
+
+ public final class MenuItemKt {
+ method public static boolean onNavDestinationSelected(android.view.MenuItem, androidx.navigation.NavController navController);
+ }
+
+ public final class NavControllerKt {
+ method public static boolean navigateUp(androidx.navigation.NavController, androidx.customview.widget.Openable? drawerLayout);
+ method public static boolean navigateUp(androidx.navigation.NavController, androidx.navigation.ui.AppBarConfiguration appBarConfiguration);
+ }
+
+ public final class NavigationUI {
+ 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, 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, 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, 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);
+ field public static final androidx.navigation.ui.NavigationUI INSTANCE;
+ }
+
+ public final class NavigationViewKt {
+ method public static void setupWithNavController(com.google.android.material.navigation.NavigationView, androidx.navigation.NavController navController);
+ }
+
+ public final class ToolbarKt {
+ method public static void setupWithNavController(androidx.appcompat.widget.Toolbar, androidx.navigation.NavController navController, androidx.drawerlayout.widget.DrawerLayout? drawerLayout);
+ method public static void setupWithNavController(androidx.appcompat.widget.Toolbar, androidx.navigation.NavController navController, optional androidx.navigation.ui.AppBarConfiguration configuration);
+ }
+
+}
+
diff --git a/playground-common/playground.properties b/playground-common/playground.properties
index 306f1ab..476ad28 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=9848933
+androidx.playground.snapshotBuildId=9912543
androidx.playground.metalavaBuildId=9883460
androidx.studio.type=playground
diff --git a/privacysandbox/tools/tools-apicompiler/build.gradle b/privacysandbox/tools/tools-apicompiler/build.gradle
index ce65d8c..c17bdce 100644
--- a/privacysandbox/tools/tools-apicompiler/build.gradle
+++ b/privacysandbox/tools/tools-apicompiler/build.gradle
@@ -46,7 +46,7 @@
include: "android.jar"
))
// Get AIDL compiler path and framework.aidl path and pass to tests for code generation.
- def aidlCompilerPath = "${SdkHelperKt.getSdkPath(project)}/build-tools/${SupportConfig.BUILD_TOOLS_VERSION}/aidl"
+ def aidlCompilerPath = "${SdkHelperKt.getSdkPath(project)}/build-tools/${SupportConfig.buildToolsVersion(project)}/aidl"
def frameworkAidlPath = "${SdkHelperKt.getSdkPath(project)}/platforms/${SupportConfig.COMPILE_SDK_VERSION}/framework.aidl"
test {
inputs.files(aidlCompilerPath)
diff --git a/privacysandbox/tools/tools-apigenerator/build.gradle b/privacysandbox/tools/tools-apigenerator/build.gradle
index b509312..afe4b88 100644
--- a/privacysandbox/tools/tools-apigenerator/build.gradle
+++ b/privacysandbox/tools/tools-apigenerator/build.gradle
@@ -53,7 +53,7 @@
include: "android.jar"
))
// Get AIDL compiler path and framework.aidl path and pass to tests for code generation.
- def aidlCompilerPath = "${SdkHelperKt.getSdkPath(project)}/build-tools/${SupportConfig.BUILD_TOOLS_VERSION}/aidl"
+ def aidlCompilerPath = "${SdkHelperKt.getSdkPath(project)}/build-tools/${SupportConfig.buildToolsVersion(project)}/aidl"
def frameworkAidlPath = "${SdkHelperKt.getSdkPath(project)}/platforms/${SupportConfig.COMPILE_SDK_VERSION}/framework.aidl"
test {
inputs.files(aidlCompilerPath)
diff --git a/privacysandbox/tools/tools-core/build.gradle b/privacysandbox/tools/tools-core/build.gradle
index a1b06db..7f2ce6b 100644
--- a/privacysandbox/tools/tools-core/build.gradle
+++ b/privacysandbox/tools/tools-core/build.gradle
@@ -43,7 +43,7 @@
include: "android.jar"
))
// Get AIDL compiler path and framework.aidl path and pass to tests for code generation.
- def aidlCompilerPath = "${SdkHelperKt.getSdkPath(project)}/build-tools/${SupportConfig.BUILD_TOOLS_VERSION}/aidl"
+ def aidlCompilerPath = "${SdkHelperKt.getSdkPath(project)}/build-tools/${SupportConfig.buildToolsVersion(project)}/aidl"
def frameworkAidlPath = "${SdkHelperKt.getSdkPath(project)}/platforms/${SupportConfig.COMPILE_SDK_VERSION}/framework.aidl"
test {
inputs.files(aidlCompilerPath)
diff --git a/profileinstaller/profileinstaller/src/main/java/androidx/profileinstaller/DeviceProfileWriter.java b/profileinstaller/profileinstaller/src/main/java/androidx/profileinstaller/DeviceProfileWriter.java
index 7543f34..4fbbfbb 100644
--- a/profileinstaller/profileinstaller/src/main/java/androidx/profileinstaller/DeviceProfileWriter.java
+++ b/profileinstaller/profileinstaller/src/main/java/androidx/profileinstaller/DeviceProfileWriter.java
@@ -117,14 +117,29 @@
return false;
}
- if (!mCurProfile.canWrite()) {
- // It's possible that some OEMs might not allow writing to this directory. If this is
- // the case, there's not really anything we can do, so we should quit before doing
- // any unnecessary work.
- result(ProfileInstaller.RESULT_NOT_WRITABLE, null);
- return false;
+ // Check if the current profile file can be written. In Android U the current profile is
+ // no more created empty at app startup, so we need to deal with both file already existing
+ // and not existing. When the file exists, we just want to make sure that it's writeable.
+ // When the file does not exist, we want to make sure that it can be created.
+ // If this is not possible on the device, there is nothing we can do. This behavior might
+ // also be customized by OEM, that could prevent writing this file.
+ if (mCurProfile.exists()) {
+ if (!mCurProfile.canWrite()) {
+ result(ProfileInstaller.RESULT_NOT_WRITABLE, null);
+ return false;
+ }
+ } else {
+ try {
+ mCurProfile.createNewFile();
+ } catch (IOException e) {
+ // If the file cannot be created it's the same of the profile file not being
+ // writeable
+ result(ProfileInstaller.RESULT_NOT_WRITABLE, null);
+ return false;
+ }
}
+
mDeviceSupportsAotProfile = true;
return true;
}
diff --git a/settings.gradle b/settings.gradle
index d9e03c2..374a6bb 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -519,6 +519,7 @@
includeProject(":compose:material", [BuildType.COMPOSE])
includeProject(":compose:material3:material3", [BuildType.COMPOSE])
includeProject(":compose:material3:benchmark", [BuildType.COMPOSE])
+includeProject(":compose:material3:material3-adaptive", [BuildType.COMPOSE])
includeProject(":compose:material3:material3-lint", [BuildType.COMPOSE])
includeProject(":compose:material3:material3-window-size-class", [BuildType.COMPOSE])
includeProject(":compose:material3:material3-window-size-class:material3-window-size-class-samples", "compose/material3/material3-window-size-class/samples", [BuildType.COMPOSE])
diff --git a/test/screenshot/screenshot/src/main/java/androidx/test/screenshot/matchers/MSSIMMatcher.kt b/test/screenshot/screenshot/src/main/java/androidx/test/screenshot/matchers/MSSIMMatcher.kt
index 915c248..ca12d74 100644
--- a/test/screenshot/screenshot/src/main/java/androidx/test/screenshot/matchers/MSSIMMatcher.kt
+++ b/test/screenshot/screenshot/src/main/java/androidx/test/screenshot/matchers/MSSIMMatcher.kt
@@ -210,6 +210,12 @@
windowWidth: Int,
windowHeight: Int
): DoubleArray {
+ if (windowHeight == 1 && windowWidth == 1) {
+ // There is only one item. The variance of a single item would be 0.
+ // Since Bessel's correction is used below, it will return NaN instead of 0.
+ return doubleArrayOf(0.0, 0.0, 0.0)
+ }
+
var var0 = 0.0
var var1 = 0.0
var varBoth = 0.0
@@ -223,9 +229,11 @@
varBoth += v0 * v1
}
}
- var0 /= windowWidth * windowHeight - 1.toDouble()
- var1 /= windowWidth * windowHeight - 1.toDouble()
- varBoth /= windowWidth * windowHeight - 1.toDouble()
+ // Using Bessel's correction. Hence, subtracting one.
+ val denominatorWithBesselsCorrection = windowWidth * windowHeight - 1.0
+ var0 /= denominatorWithBesselsCorrection
+ var1 /= denominatorWithBesselsCorrection
+ varBoth /= denominatorWithBesselsCorrection
return doubleArrayOf(var0, var1, varBoth)
}
@@ -244,4 +252,4 @@
l += 0.07f * (Color.blue(pixel) / 255f.toDouble()).pow(gamma)
return l
}
-}
\ No newline at end of file
+}
diff --git a/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/ImageDiffer.kt b/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/ImageDiffer.kt
index eabb43b..8902cb4 100644
--- a/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/ImageDiffer.kt
+++ b/testutils/testutils-paparazzi/src/main/kotlin/androidx/testutils/paparazzi/ImageDiffer.kt
@@ -273,6 +273,12 @@
windowWidth: Int,
windowHeight: Int
): DoubleArray {
+ if (windowHeight == 1 && windowWidth == 1) {
+ // There is only one item. The variance of a single item would be 0.
+ // Since Bessel's correction is used below, it will return NaN instead of 0.
+ return doubleArrayOf(0.0, 0.0, 0.0)
+ }
+
var var0 = 0.0
var var1 = 0.0
var varBoth = 0.0
@@ -286,9 +292,11 @@
varBoth += v0 * v1
}
}
- var0 /= windowWidth * windowHeight - 1.toDouble()
- var1 /= windowWidth * windowHeight - 1.toDouble()
- varBoth /= windowWidth * windowHeight - 1.toDouble()
+ // Using Bessel's correction. Hence, subtracting one.
+ val denominatorWithBesselsCorrection = windowWidth * windowHeight - 1.0
+ var0 /= denominatorWithBesselsCorrection
+ var1 /= denominatorWithBesselsCorrection
+ varBoth /= denominatorWithBesselsCorrection
return doubleArrayOf(var0, var1, varBoth)
}
@@ -358,4 +366,4 @@
private val SSIM_THRESHOLD: Double = 0.98
}
-}
\ No newline at end of file
+}
diff --git a/tv/tv-material/src/main/java/androidx/tv/material3/Text.kt b/tv/tv-material/src/main/java/androidx/tv/material3/Text.kt
index ac7c7f7..78a455a 100644
--- a/tv/tv-material/src/main/java/androidx/tv/material3/Text.kt
+++ b/tv/tv-material/src/main/java/androidx/tv/material3/Text.kt
@@ -18,6 +18,7 @@
import androidx.compose.foundation.text.BasicText
import androidx.compose.foundation.text.InlineTextContent
+import androidx.compose.foundation.text.NewTextRendering1_5
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.compositionLocalOf
@@ -105,6 +106,10 @@
onTextLayout: (TextLayoutResult) -> Unit = {},
style: TextStyle = LocalTextStyle.current
) {
+ // TODO: Remove this flag if the issue (b/277778635) is fixed or it's deprecated
+ @Suppress("DEPRECATION")
+ NewTextRendering1_5 = false
+
val textColor = color.takeOrElse {
style.color.takeOrElse {
LocalContentColor.current
@@ -206,6 +211,10 @@
onTextLayout: (TextLayoutResult) -> Unit = {},
style: TextStyle = LocalTextStyle.current
) {
+ // TODO: Remove this flag if the issue (b/277778635) is fixed or it's deprecated
+ @Suppress("DEPRECATION")
+ NewTextRendering1_5 = false
+
val textColor = color.takeOrElse {
style.color.takeOrElse {
LocalContentColor.current
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/ButtonScreenshotTest.kt b/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/ButtonScreenshotTest.kt
new file mode 100644
index 0000000..f9f368f
--- /dev/null
+++ b/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/ButtonScreenshotTest.kt
@@ -0,0 +1,175 @@
+/*
+ * 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.test
+
+import android.os.Build
+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.runtime.CompositionLocalProvider
+import androidx.compose.testutils.assertAgainstGolden
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalLayoutDirection
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.test.captureToImage
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.screenshot.AndroidXScreenshotTestRule
+import androidx.wear.compose.material3.Button
+import androidx.wear.compose.material3.ButtonDefaults
+import androidx.wear.compose.material3.CenteredText
+import androidx.wear.compose.material3.MaterialTheme
+import androidx.wear.compose.material3.OutlinedButton
+import androidx.wear.compose.material3.SCREENSHOT_GOLDEN_PATH
+import androidx.wear.compose.material3.TEST_TAG
+import androidx.wear.compose.material3.TestIcon
+import androidx.wear.compose.material3.Text
+import androidx.wear.compose.material3.setContentWithTheme
+import org.junit.Rule
+import org.junit.Test
+import org.junit.rules.TestName
+import org.junit.runner.RunWith
+
+@MediumTest
+@RunWith(AndroidJUnit4::class)
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+class ButtonScreenshotTest {
+ @get:Rule
+ val rule = createComposeRule()
+
+ @get:Rule
+ val screenshotRule = AndroidXScreenshotTestRule(SCREENSHOT_GOLDEN_PATH)
+
+ @get:Rule
+ val testName = TestName()
+
+ @Test
+ fun button_enabled() = verifyScreenshot() {
+ sampleBaseButton()
+ }
+
+ @Test
+ fun button_disabled() = verifyScreenshot() {
+ sampleBaseButton(enabled = false)
+ }
+
+ @Test
+ fun three_slot_button_ltr() = verifyScreenshot(layoutDirection = LayoutDirection.Ltr) {
+ sampleThreeSlotButton()
+ }
+
+ @Test
+ fun three_slot_button_rtl() = verifyScreenshot(layoutDirection = LayoutDirection.Rtl) {
+ sampleThreeSlotButton()
+ }
+
+ @Test
+ fun button_outlined_enabled() = verifyScreenshot() {
+ sampleOutlinedButton()
+ }
+
+ @Test
+ fun button_outlined_disabled() = verifyScreenshot() {
+ sampleOutlinedButton(enabled = false)
+ }
+
+ @Test
+ fun button_image_background_enabled() = verifyScreenshot {
+ sampleImageBackgroundButton()
+ }
+
+ @Test
+ fun button_image_background_disabled() = verifyScreenshot {
+ sampleImageBackgroundButton(enabled = false)
+ }
+
+ @Composable
+ private fun sampleBaseButton(enabled: Boolean = true) {
+ Button(
+ enabled = enabled,
+ onClick = {},
+ modifier = Modifier.testTag(TEST_TAG)
+ ) {
+ CenteredText("Base Button")
+ }
+ }
+
+ @Composable
+ private fun sampleThreeSlotButton(enabled: Boolean = true) {
+ Button(
+ enabled = enabled,
+ onClick = {},
+ label = { Text("Three Slot Button") },
+ secondaryLabel = { Text("Secondary Label") },
+ icon = { TestIcon() },
+ modifier = Modifier.testTag(TEST_TAG)
+ )
+ }
+
+ @Composable
+ private fun sampleOutlinedButton(enabled: Boolean = true) {
+ OutlinedButton(
+ enabled = enabled,
+ onClick = {},
+ modifier = Modifier.testTag(TEST_TAG)
+ ) {
+ CenteredText("Outlined Button")
+ }
+ }
+
+ @Composable
+ private fun sampleImageBackgroundButton(enabled: Boolean = true) {
+ Button(
+ enabled = enabled,
+ onClick = {},
+ label = { Text("Image Button") },
+ secondaryLabel = { Text("Secondary Label") },
+ colors = ButtonDefaults.imageBackgroundButtonColors(
+ backgroundImagePainter = painterResource(R.drawable.backgroundimage1)
+ ),
+ icon = { TestIcon() },
+ modifier = Modifier.testTag(TEST_TAG)
+ )
+ }
+
+ private fun verifyScreenshot(
+ layoutDirection: LayoutDirection = LayoutDirection.Ltr,
+ content: @Composable () -> Unit
+ ) {
+ rule.setContentWithTheme {
+ CompositionLocalProvider(LocalLayoutDirection provides layoutDirection) {
+ Box(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(MaterialTheme.colorScheme.background)
+ ) {
+ content()
+ }
+ }
+ }
+
+ rule.onNodeWithTag(TEST_TAG)
+ .captureToImage()
+ .assertAgainstGolden(screenshotRule, testName.methodName)
+ }
+}
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt b/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt
index f412e4f..6642e9a 100644
--- a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt
+++ b/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/Material3Test.kt
@@ -1,4 +1,3 @@
-
/*
* Copyright 2023 The Android Open Source Project
*
@@ -21,8 +20,11 @@
import androidx.annotation.RequiresApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.sizeIn
import androidx.compose.material.icons.Icons
@@ -35,8 +37,8 @@
import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.test.captureToImage
import androidx.compose.ui.test.SemanticsNodeInteraction
+import androidx.compose.ui.test.captureToImage
import androidx.compose.ui.test.junit4.ComposeContentTestRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.unit.Dp
@@ -61,6 +63,28 @@
)
}
+@Composable
+fun TestIcon(modifier: Modifier = Modifier, iconLabel: String = "TestIcon") {
+ val testImage = Icons.Outlined.Add
+ Icon(
+ imageVector = testImage,
+ contentDescription = iconLabel,
+ modifier = modifier.testTag(iconLabel)
+ )
+}
+
+@Composable
+fun CenteredText(
+ text: String
+) {
+ Column(
+ modifier = Modifier.fillMaxHeight(),
+ verticalArrangement = Arrangement.Center
+ ) {
+ Text(text)
+ }
+}
+
fun ComposeContentTestRule.setContentWithThemeForSizeAssertions(
parentMaxWidth: Dp = BigTestMaxWidth,
parentMaxHeight: Dp = BigTestMaxHeight,
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/Screenshot.kt b/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/Screenshot.kt
new file mode 100644
index 0000000..0b3bb8d
--- /dev/null
+++ b/wear/compose/compose-material3/src/androidAndroidTest/kotlin/androidx/wear/compose/material3/Screenshot.kt
@@ -0,0 +1,19 @@
+/*
+ * 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
+
+internal const val SCREENSHOT_GOLDEN_PATH = "wear/compose/material3"
diff --git a/wear/compose/compose-material3/src/androidAndroidTest/res/drawable/backgroundimage1.png b/wear/compose/compose-material3/src/androidAndroidTest/res/drawable/backgroundimage1.png
new file mode 100644
index 0000000..fbb9332
--- /dev/null
+++ b/wear/compose/compose-material3/src/androidAndroidTest/res/drawable/backgroundimage1.png
Binary files differ
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicDataTransformNode.java b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicDataTransformNode.java
index f52e536..160d4bc 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicDataTransformNode.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/main/java/androidx/wear/protolayout/expression/pipeline/DynamicDataTransformNode.java
@@ -17,8 +17,10 @@
package androidx.wear.protolayout.expression.pipeline;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import java.util.function.Function;
+import java.util.function.Predicate;
/**
* Dynamic data node that can perform a transformation from an upstream node. This should be created
@@ -34,8 +36,14 @@
final Function<I, O> mTransformer;
DynamicDataTransformNode(
+ DynamicTypeValueReceiverWithPreUpdate<O> downstream, Function<I, O> transformer) {
+ this(downstream, transformer, /* validator= */ null);
+ }
+
+ DynamicDataTransformNode(
DynamicTypeValueReceiverWithPreUpdate<O> downstream,
- Function<I, O> transformer) {
+ Function<I, O> transformer,
+ @Nullable Predicate<I> validator) {
this.mDownstream = downstream;
this.mTransformer = transformer;
@@ -49,6 +57,10 @@
@Override
public void onData(@NonNull I newData) {
+ if (validator != null && !validator.test(newData)) {
+ mDownstream.onInvalidated();
+ return;
+ }
O result = mTransformer.apply(newData);
mDownstream.onData(result);
}
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 3366db4..71ddbd09 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
@@ -38,8 +38,7 @@
private final DynamicTypeValueReceiverWithPreUpdate<Float> mDownstream;
FixedFloatNode(
- FixedFloat protoNode,
- DynamicTypeValueReceiverWithPreUpdate<Float> downstream) {
+ FixedFloat protoNode, DynamicTypeValueReceiverWithPreUpdate<Float> downstream) {
this.mValue = protoNode.getValue();
this.mDownstream = downstream;
}
@@ -53,7 +52,11 @@
@Override
@UiThread
public void init() {
- mDownstream.onData(mValue);
+ if (Float.isNaN(mValue)) {
+ mDownstream.onInvalidated();
+ } else {
+ mDownstream.onData(mValue);
+ }
}
@Override
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 9d3f3dd..d542928 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
@@ -47,8 +47,7 @@
private final DynamicTypeValueReceiverWithPreUpdate<Integer> mDownstream;
FixedInt32Node(
- FixedInt32 protoNode,
- DynamicTypeValueReceiverWithPreUpdate<Integer> downstream) {
+ FixedInt32 protoNode, DynamicTypeValueReceiverWithPreUpdate<Integer> downstream) {
this.mValue = protoNode.getValue();
this.mDownstream = downstream;
}
@@ -202,7 +201,8 @@
default:
throw new IllegalArgumentException("Unknown rounding mode");
}
- });
+ },
+ x -> x - 1 < Integer.MAX_VALUE && x >= Integer.MIN_VALUE);
}
}
diff --git a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluatorTest.java b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluatorTest.java
index 23ca097..a201b99 100644
--- a/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluatorTest.java
+++ b/wear/protolayout/protolayout-expression-pipeline/src/test/java/androidx/wear/protolayout/expression/pipeline/DynamicTypeEvaluatorTest.java
@@ -20,9 +20,12 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.robolectric.Shadows.shadowOf;
+
import static java.lang.Integer.MAX_VALUE;
import android.icu.util.ULocale;
+import android.os.Looper;
import androidx.annotation.NonNull;
import androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool;
@@ -50,6 +53,7 @@
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiConsumer;
@RunWith(ParameterizedRobolectricTestRunner.class)
@@ -83,13 +87,16 @@
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(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.constant(1234.567f).asInt(), 1234),
test(DynamicFloat.constant(0.967f).asInt(), 0),
test(DynamicFloat.constant(-1234.967f).asInt(), -1235),
test(DynamicFloat.constant(-0.967f).asInt(), -1),
test(DynamicFloat.constant(Float.MIN_VALUE).asInt(), 0),
- test(DynamicFloat.constant(Float.MAX_VALUE).asInt(), (int) Float.MAX_VALUE),
+ testForInvalidValue(DynamicFloat.constant(Float.MAX_VALUE).asInt()),
+ testForInvalidValue(DynamicFloat.constant(-Float.MAX_VALUE).asInt()),
test(DynamicInt32.constant(100).asFloat(), 100.0f),
test(
DynamicInt32.constant(Integer.MIN_VALUE).asFloat(),
@@ -122,10 +129,8 @@
test(DynamicFloat.constant(0.6f).gte(0.4f), true),
test(DynamicFloat.constant(0.1234568f).gte(0.1234562f), true),
test(DynamicBool.constant(true), true),
- test(DynamicBool.constant(true).isTrue(), true),
- test(DynamicBool.constant(false).isTrue(), false),
- test(DynamicBool.constant(true).isFalse(), false),
- test(DynamicBool.constant(false).isFalse(), true),
+ test(DynamicBool.constant(true).negate(), false),
+ test(DynamicBool.constant(false).negate(), true),
test(DynamicBool.constant(true).and(DynamicBool.constant(true)), true),
test(DynamicBool.constant(true).and(DynamicBool.constant(false)), false),
test(DynamicBool.constant(false).and(DynamicBool.constant(true)), false),
@@ -325,9 +330,10 @@
DynamicInstant bindUnderTest, Instant instant) {
return new DynamicTypeEvaluatorTest.TestCase<>(
bindUnderTest.toDynamicInstantProto().toString(),
- (evaluator, cb) -> {
- evaluator.bind(bindUnderTest, new MainThreadExecutor(), cb).startEvaluation();
- },
+ (evaluator, cb) ->
+ evaluator
+ .bind(bindUnderTest, new MainThreadExecutor(), cb)
+ .startEvaluation(),
instant);
}
@@ -353,6 +359,26 @@
expectedValue);
}
+ private static DynamicTypeEvaluatorTest.TestCase<Integer> testForInvalidValue(
+ DynamicInt32 bindUnderTest) {
+ return new DynamicTypeEvaluatorTest.TestCase<>(
+ bindUnderTest.toDynamicInt32Proto().toString(),
+ (evaluator, cb) ->
+ evaluator
+ .bind(bindUnderTest, new MainThreadExecutor(), cb)
+ .startEvaluation());
+ }
+
+ private static DynamicTypeEvaluatorTest.TestCase<Float> testForInvalidValue(
+ DynamicFloat bindUnderTest) {
+ return new DynamicTypeEvaluatorTest.TestCase<>(
+ bindUnderTest.toDynamicFloatProto().toString(),
+ (evaluator, cb) ->
+ evaluator
+ .bind(bindUnderTest, new MainThreadExecutor(), cb)
+ .startEvaluation());
+ }
+
private static class TestCase<T> {
private final String mName;
private final BiConsumer<DynamicTypeEvaluator, DynamicTypeValueReceiver<T>>
@@ -368,8 +394,18 @@
this.mExpectedValue = expectedValue;
}
+ /** Creates a test case for an expression which expects to result in invalid value. */
+ TestCase(
+ String name,
+ BiConsumer<DynamicTypeEvaluator, DynamicTypeValueReceiver<T>> expressionEvaluator) {
+ this.mName = name;
+ this.mExpressionEvaluator = expressionEvaluator;
+ this.mExpectedValue = null;
+ }
+
public void runTest(DynamicTypeEvaluator evaluator) {
List<T> results = new ArrayList<>();
+ AtomicInteger invalidatedCalls = new AtomicInteger(0);
DynamicTypeValueReceiver<T> callback =
new DynamicTypeValueReceiver<T>() {
@@ -379,16 +415,25 @@
}
@Override
- public void onInvalidated() {}
+ public void onInvalidated() {
+ invalidatedCalls.incrementAndGet();
+ }
};
this.mExpressionEvaluator.accept(evaluator, callback);
+ shadowOf(Looper.getMainLooper()).idle();
- assertThat(results).hasSize(1);
- assertThat(results).containsExactly(mExpectedValue);
+ if (mExpectedValue != null) {
+ // Test expects an actual value.
+ assertThat(results).hasSize(1);
+ assertThat(results).containsExactly(mExpectedValue);
+ } else {
+ // Test expects an invalid value.
+ assertThat(results).isEmpty();
+ assertThat(invalidatedCalls.get()).isEqualTo(1);
+ }
}
- @NonNull
@Override
public String toString() {
return mName + " = " + mExpectedValue;
diff --git a/wear/protolayout/protolayout-expression/api/current.txt b/wear/protolayout/protolayout-expression/api/current.txt
index 9dbad6f..9433db9 100644
--- a/wear/protolayout/protolayout-expression/api/current.txt
+++ b/wear/protolayout/protolayout-expression/api/current.txt
@@ -99,8 +99,7 @@
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool constant(boolean);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[]);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromState(String);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool isFalse();
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool isTrue();
+ 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();
}
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 6a7025c..932652c 100644
--- a/wear/protolayout/protolayout-expression/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout-expression/api/public_plus_experimental_current.txt
@@ -99,8 +99,7 @@
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool constant(boolean);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[]);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromState(String);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool isFalse();
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool isTrue();
+ 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();
}
diff --git a/wear/protolayout/protolayout-expression/api/restricted_current.txt b/wear/protolayout/protolayout-expression/api/restricted_current.txt
index 9dbad6f..9433db9 100644
--- a/wear/protolayout/protolayout-expression/api/restricted_current.txt
+++ b/wear/protolayout/protolayout-expression/api/restricted_current.txt
@@ -99,8 +99,7 @@
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool constant(boolean);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[]);
method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromState(String);
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool isFalse();
- method public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool isTrue();
+ 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();
}
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 99e784a..864a32d 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
@@ -150,7 +150,10 @@
static final int ARITHMETIC_OP_TYPE_MODULO = 5;
/**
- * Rounding mode to use when converting a float to an int32.
+ * Rounding mode to use when converting a float to an int32. If the value is larger than {@link
+ * Integer#MAX_VALUE} or smaller than {@link Integer#MIN_VALUE}, the result of this operation
+ * will be invalid and will have an invalid value delivered via
+ * {@link DynamicTypeValueReceiver<T>#onInvalidate()}.
*
* @since 1.2
*/
@@ -3101,7 +3104,7 @@
/**
* Interface defining a dynamic string type.
*
- * <p> {@link DynamicString} string value is subject to being truncated if it's too long.
+ * <p>{@link DynamicString} string value is subject to being truncated if it's too long.
*
* @since 1.2
*/
@@ -3852,7 +3855,13 @@
return toDynamicFloatProto().toByteArray();
}
- /** Creates a constant-valued {@link DynamicFloat}. */
+ /**
+ * Creates a constant-valued {@link DynamicFloat}.
+ *
+ * <p>If {@code Float.isNan(constant)} is true, the value will be invalid. And any
+ * expression that uses this {@link DynamicFloat} will have an invalid result (which will be
+ * delivered through {@link DynamicTypeValueReceiver<T>#onInvalidate()}.
+ */
@NonNull
static DynamicFloat constant(float constant) {
return new FixedFloat.Builder().setValue(constant).build();
@@ -3957,6 +3966,11 @@
/**
* Returns a {@link DynamicInt32} which holds the largest integer value that is smaller than
* or equal to this {@link DynamicFloat}, i.e. {@code int result = (int) Math.floor(this)}
+ *
+ * <p>If the float value is larger than {@link Integer#MAX_VALUE} or smaller than {@link
+ * Integer#MIN_VALUE}, the result of this operation will be invalid and any expression that
+ * uses the {@link DynamicInt32} will have an invalid result (which will be delivered
+ * through {@link DynamicTypeValueReceiver<T>#onInvalidate()}.
*/
@NonNull
default DynamicInt32 asInt() {
@@ -5366,18 +5380,12 @@
return new StateBoolSource.Builder().setSourceKey(stateKey).build();
}
- /** Returns a {@link DynamicBool} that has the same value as this {@link DynamicBool}. */
- @NonNull
- default DynamicBool isTrue() {
- return this;
- }
-
/**
* Returns a {@link DynamicBool} that has the opposite value of this {@link DynamicBool}.
* i.e. {code result = !this}
*/
@NonNull
- default DynamicBool isFalse() {
+ default DynamicBool negate() {
return new NotBoolOp.Builder().setInput(this).build();
}
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 8809e61..f9829cd 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
@@ -230,7 +230,8 @@
}
/**
- * Gets the value.
+ * Gets the value. Note that a NaN value is considered invalid and any expression with this node
+ * will have an invalid value delivered via {@link DynamicTypeValueReceiver<T>#onInvalidate()}.
*
* @since 1.2
*/
@@ -284,8 +285,11 @@
public Builder() {}
+
/**
- * Sets the value.
+ * Sets the value. Note that a NaN value is considered invalid and any expression with this
+ * node will have an invalid value delivered via
+ * {@link DynamicTypeValueReceiver<T>#onInvalidate()}.
*
* @since 1.2
*/
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 7c51d3e..b9bf7e3 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
@@ -98,14 +98,13 @@
public void negateOpBool() {
DynamicBool firstBool = DynamicBool.constant(true);
- assertThat(firstBool.isTrue().toDynamicBoolProto()).isEqualTo(firstBool.toDynamicBoolProto());
- assertThat(firstBool.isFalse().toDynamicBoolProto().getNotOp().getInput())
+ assertThat(firstBool.negate().toDynamicBoolProto().getNotOp().getInput())
.isEqualTo(firstBool.toDynamicBoolProto());
}
@Test
public void logicalToString() {
- assertThat(DynamicBool.constant(true).isFalse().toString())
+ assertThat(DynamicBool.constant(true).negate().toString())
.isEqualTo("NotBoolOp{input=FixedBool{value=true}}");
}
diff --git a/wear/protolayout/protolayout-material/build.gradle b/wear/protolayout/protolayout-material/build.gradle
index 8d0c69d7..042384d 100644
--- a/wear/protolayout/protolayout-material/build.gradle
+++ b/wear/protolayout/protolayout-material/build.gradle
@@ -25,9 +25,8 @@
dependencies {
annotationProcessor(libs.nullaway)
api("androidx.annotation:annotation:1.2.0")
- implementation(project(":wear:protolayout:protolayout"))
+ api(project(":wear:protolayout:protolayout"))
implementation(project(":wear:protolayout:protolayout-proto"))
- implementation(project(":wear:protolayout:protolayout-expression"))
implementation("androidx.annotation:annotation-experimental:1.3.0")
androidTestImplementation(libs.junit)
androidTestImplementation(libs.testCore)
diff --git a/wear/protolayout/protolayout-proto/src/main/proto/layout.proto b/wear/protolayout/protolayout-proto/src/main/proto/layout.proto
index c9e3f38..fe23db4 100644
--- a/wear/protolayout/protolayout-proto/src/main/proto/layout.proto
+++ b/wear/protolayout/protolayout-proto/src/main/proto/layout.proto
@@ -142,6 +142,15 @@
TextOverflow value = 1;
}
+// Parameters for Marquee animation. Only applies for TEXT_OVERFLOW_MARQUEE.
+message MarqueeParameters {
+ oneof optional_iterations {
+ // The number of times to repeat the Marquee animation. Set to -1 to repeat
+ // indefinitely. Defaults to repeat indefinitely.
+ int32 iterations = 1;
+ }
+}
+
// An Android platform specific text style configuration options for styling and
// compatibility.
message AndroidTextStyle {
@@ -180,6 +189,10 @@
// be truncated. If not defined, defaults to TEXT_OVERFLOW_TRUNCATE.
TextOverflowProp overflow = 6;
+ // Parameters for Marquee animation. Only applies when overflow is
+ // TEXT_OVERFLOW_MARQUEE.
+ MarqueeParameters marquee_parameters = 9;
+
// The explicit height between lines of text. This is equivalent to the
// vertical distance between subsequent baselines. If not specified, defaults
// the font's recommended interline spacing.
@@ -387,6 +400,10 @@
// TEXT_OVERFLOW_TRUNCATE.
TextOverflowProp overflow = 5;
+ // Parameters for Marquee animation. Only applies when overflow is
+ // TEXT_OVERFLOW_MARQUEE.
+ MarqueeParameters marquee_parameters = 8;
+
// Extra spacing to add between each line. This will apply to all
// spans regardless of their font size. This is in addition to original
// line heights. Note that this won't add any additional space before the
diff --git a/wear/protolayout/protolayout-renderer/build.gradle b/wear/protolayout/protolayout-renderer/build.gradle
index e7ea4bc1..f449584 100644
--- a/wear/protolayout/protolayout-renderer/build.gradle
+++ b/wear/protolayout/protolayout-renderer/build.gradle
@@ -31,7 +31,7 @@
implementation(project(path: ":wear:protolayout:protolayout-proto", configuration: "shadow"))
implementation(project(":wear:protolayout:protolayout-expression"))
- implementation(project(":wear:protolayout:protolayout-expression-pipeline"))
+ api(project(":wear:protolayout:protolayout-expression-pipeline"))
implementation "androidx.concurrent:concurrent-futures:1.1.0"
implementation("androidx.core:core:1.7.0")
implementation("androidx.vectordrawable:vectordrawable-seekable:1.0.0-beta01")
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
index bb1546e2..625a0d7 100644
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
+++ b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
@@ -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.
@@ -126,6 +126,7 @@
import androidx.wear.protolayout.proto.LayoutElementProto.Image;
import androidx.wear.protolayout.proto.LayoutElementProto.Layout;
import androidx.wear.protolayout.proto.LayoutElementProto.LayoutElement;
+import androidx.wear.protolayout.proto.LayoutElementProto.MarqueeParameters;
import androidx.wear.protolayout.proto.LayoutElementProto.Row;
import androidx.wear.protolayout.proto.LayoutElementProto.Spacer;
import androidx.wear.protolayout.proto.LayoutElementProto.Span;
@@ -2105,11 +2106,16 @@
.applyPendingChildLayoutParams(layoutParams));
}
- private static void applyTextOverflow(TextView textView, TextOverflowProp overflow) {
+ private static void applyTextOverflow(
+ TextView textView, TextOverflowProp overflow, MarqueeParameters marqueeParameters) {
textView.setEllipsize(textTruncationToEllipsize(overflow));
if (overflow.getValue() == TextOverflow.TEXT_OVERFLOW_MARQUEE
&& textView.getMaxLines() == 1) {
- textView.setMarqueeRepeatLimit(-1); // Repeat indefinitely.
+ int marqueeIterations =
+ marqueeParameters.hasIterations()
+ ? marqueeParameters.getIterations()
+ : -1; // Defaults to repeat indefinitely (-1).
+ textView.setMarqueeRepeatLimit(marqueeIterations);
textView.setSelected(true);
textView.setSingleLine();
textView.setHorizontalFadingEdgeEnabled(true);
@@ -2158,7 +2164,7 @@
} else {
textView.setMaxLines(TEXT_MAX_LINES_DEFAULT);
}
- applyTextOverflow(textView, text.getOverflow());
+ applyTextOverflow(textView, text.getOverflow(), text.getMarqueeParameters());
// Setting colours **must** go after setting the Text Appearance, otherwise it will get
// immediately overridden.
@@ -2966,7 +2972,7 @@
} else {
tv.setMaxLines(TEXT_MAX_LINES_DEFAULT);
}
- applyTextOverflow(tv, spannable.getOverflow());
+ applyTextOverflow(tv, spannable.getOverflow(), spannable.getMarqueeParameters());
if (spannable.hasLineHeight()) {
// We use a Span here instead of just calling TextViewCompat#setLineHeight.
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 3aa3e5a..5a20188 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
@@ -131,6 +131,7 @@
import androidx.wear.protolayout.proto.LayoutElementProto.Image;
import androidx.wear.protolayout.proto.LayoutElementProto.Layout;
import androidx.wear.protolayout.proto.LayoutElementProto.LayoutElement;
+import androidx.wear.protolayout.proto.LayoutElementProto.MarqueeParameters;
import androidx.wear.protolayout.proto.LayoutElementProto.Row;
import androidx.wear.protolayout.proto.LayoutElementProto.Spacer;
import androidx.wear.protolayout.proto.LayoutElementProto.Span;
@@ -1805,6 +1806,7 @@
expect.that(tv.getEllipsize()).isEqualTo(TruncateAt.MARQUEE);
expect.that(tv.isSelected()).isTrue();
expect.that(tv.isHorizontalFadingEdgeEnabled()).isTrue();
+ expect.that(tv.getMarqueeRepeatLimit()).isEqualTo(-1); // Default value.
if (VERSION.SDK_INT >= VERSION_CODES.Q) {
expect.that(tv.isSingleLine()).isTrue();
}
@@ -1837,6 +1839,37 @@
}
@Test
+ public void inflate_textView_marqueeAnimation_repeatLimit() {
+ String textContents = "Marquee Animation";
+ int marqueeIterations = 5;
+ LayoutElement root =
+ LayoutElement.newBuilder()
+ .setText(
+ Text.newBuilder()
+ .setText(string(textContents))
+ .setMaxLines(Int32Prop.newBuilder().setValue(1))
+ .setOverflow(
+ TextOverflowProp.newBuilder()
+ .setValue(
+ TextOverflow.TEXT_OVERFLOW_MARQUEE)
+ .build())
+ .setMarqueeParameters(
+ MarqueeParameters.newBuilder()
+ .setIterations(marqueeIterations)))
+ .build();
+
+ FrameLayout rootLayout = renderer(fingerprintedLayout(root)).inflate();
+ TextView tv = (TextView) rootLayout.getChildAt(0);
+ expect.that(tv.getEllipsize()).isEqualTo(TruncateAt.MARQUEE);
+ expect.that(tv.isSelected()).isTrue();
+ expect.that(tv.isHorizontalFadingEdgeEnabled()).isTrue();
+ expect.that(tv.getMarqueeRepeatLimit()).isEqualTo(marqueeIterations);
+ if (VERSION.SDK_INT >= VERSION_CODES.Q) {
+ expect.that(tv.isSingleLine()).isTrue();
+ }
+ }
+
+ @Test
public void inflate_spannable_marqueeAnimation() {
String text = "Marquee Animation";
LayoutElement root =
@@ -1860,6 +1893,41 @@
expect.that(tv.getEllipsize()).isEqualTo(TruncateAt.MARQUEE);
expect.that(tv.isSelected()).isTrue();
expect.that(tv.isHorizontalFadingEdgeEnabled()).isTrue();
+ expect.that(tv.getMarqueeRepeatLimit()).isEqualTo(-1); // Default value.
+ if (VERSION.SDK_INT >= VERSION_CODES.Q) {
+ expect.that(tv.isSingleLine()).isTrue();
+ }
+ }
+
+ @Test
+ public void inflate_spannable_marqueeAnimation_repeatLimit() {
+ String text = "Marquee Animation";
+ int marqueeIterations = 5;
+ LayoutElement root =
+ LayoutElement.newBuilder()
+ .setSpannable(
+ Spannable.newBuilder()
+ .addSpans(
+ Span.newBuilder()
+ .setText(
+ SpanText.newBuilder()
+ .setText(string(text))))
+ .setOverflow(
+ TextOverflowProp.newBuilder()
+ .setValue(
+ TextOverflow.TEXT_OVERFLOW_MARQUEE))
+ .setMarqueeParameters(
+ MarqueeParameters.newBuilder()
+ .setIterations(marqueeIterations))
+ .setMaxLines(Int32Prop.newBuilder().setValue(1)))
+ .build();
+
+ FrameLayout rootLayout = renderer(fingerprintedLayout(root)).inflate();
+ TextView tv = (TextView) rootLayout.getChildAt(0);
+ expect.that(tv.getEllipsize()).isEqualTo(TruncateAt.MARQUEE);
+ expect.that(tv.isSelected()).isTrue();
+ expect.that(tv.isHorizontalFadingEdgeEnabled()).isTrue();
+ expect.that(tv.getMarqueeRepeatLimit()).isEqualTo(marqueeIterations);
if (VERSION.SDK_INT >= VERSION_CODES.Q) {
expect.that(tv.isSingleLine()).isTrue();
}
diff --git a/wear/protolayout/protolayout/api/public_plus_experimental_current.txt b/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
index 2c913e6..56d09d9 100644
--- a/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
+++ b/wear/protolayout/protolayout/api/public_plus_experimental_current.txt
@@ -351,6 +351,7 @@
field public static final int TEXT_ALIGN_START = 1; // 0x1
field public static final int TEXT_ALIGN_UNDEFINED = 0; // 0x0
field public static final int TEXT_OVERFLOW_ELLIPSIZE_END = 2; // 0x2
+ field @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static final int TEXT_OVERFLOW_MARQUEE = 3; // 0x3
field public static final int TEXT_OVERFLOW_TRUNCATE = 1; // 0x1
field public static final int TEXT_OVERFLOW_UNDEFINED = 0; // 0x0
field public static final int VERTICAL_ALIGN_BOTTOM = 3; // 0x3
@@ -734,6 +735,7 @@
public static final class LayoutElementBuilders.Spannable implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
method public androidx.wear.protolayout.DimensionBuilders.SpProp? getLineHeight();
+ method @IntRange(from=0xffffffff) @androidx.wear.protolayout.expression.ProtoLayoutExperimental public int getMarqueeIterations();
method public androidx.wear.protolayout.TypeBuilders.Int32Prop? getMaxLines();
method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
method public androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp? getMultilineAlignment();
@@ -746,6 +748,7 @@
method public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder addSpan(androidx.wear.protolayout.LayoutElementBuilders.Span);
method public androidx.wear.protolayout.LayoutElementBuilders.Spannable build();
method public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setLineHeight(androidx.wear.protolayout.DimensionBuilders.SpProp);
+ method @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setMarqueeIterations(@IntRange(from=0xffffffff) int);
method public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setMaxLines(androidx.wear.protolayout.TypeBuilders.Int32Prop);
method public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setMaxLines(@IntRange(from=1) int);
method public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
@@ -760,6 +763,7 @@
method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle? getFontStyle();
method public androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint? getLayoutConstraintsForDynamicText();
method public androidx.wear.protolayout.DimensionBuilders.SpProp? getLineHeight();
+ method @IntRange(from=0xffffffff) @androidx.wear.protolayout.expression.ProtoLayoutExperimental public int getMarqueeIterations();
method public androidx.wear.protolayout.TypeBuilders.Int32Prop? getMaxLines();
method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
method public androidx.wear.protolayout.LayoutElementBuilders.TextAlignmentProp? getMultilineAlignment();
@@ -774,6 +778,7 @@
method public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setFontStyle(androidx.wear.protolayout.LayoutElementBuilders.FontStyle);
method public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setLayoutConstraintsForDynamicText(androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint);
method public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setLineHeight(androidx.wear.protolayout.DimensionBuilders.SpProp);
+ method @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setMarqueeIterations(@IntRange(from=0xffffffff) int);
method public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setMaxLines(androidx.wear.protolayout.TypeBuilders.Int32Prop);
method public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setMaxLines(@IntRange(from=1) int);
method public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
diff --git a/wear/protolayout/protolayout/build.gradle b/wear/protolayout/protolayout/build.gradle
index bc93416..27a9828 100644
--- a/wear/protolayout/protolayout/build.gradle
+++ b/wear/protolayout/protolayout/build.gradle
@@ -27,7 +27,7 @@
implementation("androidx.annotation:annotation-experimental:1.3.0")
implementation(project(path: ":wear:protolayout:protolayout-proto", configuration: "shadow"))
- implementation(project(":wear:protolayout:protolayout-expression"))
+ api(project(":wear:protolayout:protolayout-expression"))
compileOnly(libs.kotlinStdlib) // For annotation-experimental
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java
index 7e98f63a..ddfea03 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/LayoutElementBuilders.java
@@ -24,6 +24,7 @@
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
import androidx.annotation.RestrictTo;
import androidx.annotation.RestrictTo.Scope;
import androidx.wear.protolayout.ColorBuilders.ColorProp;
@@ -131,28 +132,55 @@
*/
public static final int SPAN_VERTICAL_ALIGN_TEXT_BASELINE = 2;
- /** How text that will not fit inside the bounds of a {@link Text} element will be handled. */
+ /**
+ * How text that will not fit inside the bounds of a {@link Text} element will be handled.
+ *
+ * @since 1.0
+ */
@RestrictTo(RestrictTo.Scope.LIBRARY)
- @IntDef({TEXT_OVERFLOW_UNDEFINED, TEXT_OVERFLOW_TRUNCATE, TEXT_OVERFLOW_ELLIPSIZE_END})
+ @IntDef({
+ TEXT_OVERFLOW_UNDEFINED,
+ TEXT_OVERFLOW_TRUNCATE,
+ TEXT_OVERFLOW_ELLIPSIZE_END,
+ TEXT_OVERFLOW_MARQUEE
+ })
@Retention(RetentionPolicy.SOURCE)
+ @OptIn(markerClass = ProtoLayoutExperimental.class)
public @interface TextOverflow {}
- /** Overflow behavior is undefined. */
+ /**
+ * Overflow behavior is undefined.
+ *
+ * @since 1.0
+ */
public static final int TEXT_OVERFLOW_UNDEFINED = 0;
/**
* Truncate the text to fit inside of the {@link Text} element's bounds. If text is truncated,
* it will be truncated on a word boundary.
+ *
+ * @since 1.0
*/
public static final int TEXT_OVERFLOW_TRUNCATE = 1;
/**
* Truncate the text to fit in the {@link Text} element's bounds, but add an ellipsis (i.e. ...)
* to the end of the text if it has been truncated.
+ *
+ * @since 1.0
*/
public static final int TEXT_OVERFLOW_ELLIPSIZE_END = 2;
/**
+ * Enable marquee animation for texts that don't fit inside the {@link Text} element. This is
+ * only applicable for single line texts; if the text has multiple lines, the behavior is
+ * equivalent to TEXT_OVERFLOW_TRUNCATE.
+ *
+ * @since 1.2
+ */
+ @ProtoLayoutExperimental public static final int TEXT_OVERFLOW_MARQUEE = 3;
+
+ /**
* How content which does not match the dimensions of its bounds (e.g. an image resource being
* drawn inside an {@link Image}) will be resized to fit its bounds.
*/
@@ -639,7 +667,11 @@
}
}
- /** An extensible {@code TextOverflow} property. */
+ /**
+ * An extensible {@code TextOverflow} property.
+ *
+ * @since 1.0
+ */
public static final class TextOverflowProp {
private final LayoutElementProto.TextOverflowProp mImpl;
@Nullable private final Fingerprint mFingerprint;
@@ -650,7 +682,11 @@
this.mFingerprint = fingerprint;
}
- /** Gets the value. Intended for testing purposes only. */
+ /**
+ * Gets the value.
+ *
+ * @since 1.0
+ */
@TextOverflow
public int getValue() {
return mImpl.getValue().getNumber();
@@ -663,25 +699,46 @@
return mFingerprint;
}
+ /** Creates a new wrapper instance from the proto. */
+ @RestrictTo(Scope.LIBRARY_GROUP)
@NonNull
- static TextOverflowProp fromProto(@NonNull LayoutElementProto.TextOverflowProp proto) {
- return new TextOverflowProp(proto, null);
+ public static TextOverflowProp fromProto(
+ @NonNull LayoutElementProto.TextOverflowProp proto,
+ @Nullable Fingerprint fingerprint) {
+ return new TextOverflowProp(proto, fingerprint);
}
@NonNull
- LayoutElementProto.TextOverflowProp toProto() {
+ static TextOverflowProp fromProto(@NonNull LayoutElementProto.TextOverflowProp proto) {
+ return fromProto(proto, null);
+ }
+
+ /** Returns the internal proto instance. */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public LayoutElementProto.TextOverflowProp toProto() {
return mImpl;
}
+ @Override
+ @NonNull
+ public String toString() {
+ return "TextOverflowProp{" + "value=" + getValue() + "}";
+ }
+
/** Builder for {@link TextOverflowProp} */
public static final class Builder {
private final LayoutElementProto.TextOverflowProp.Builder mImpl =
LayoutElementProto.TextOverflowProp.newBuilder();
- private final Fingerprint mFingerprint = new Fingerprint(1183432233);
+ private final Fingerprint mFingerprint = new Fingerprint(-1542057565);
public Builder() {}
- /** Sets the value. */
+ /**
+ * Sets the value.
+ *
+ * @since 1.0
+ */
@NonNull
public Builder setValue(@TextOverflow int value) {
mImpl.setValue(LayoutElementProto.TextOverflow.forNumber(value));
@@ -698,6 +755,97 @@
}
/**
+ * Parameters for Marquee animation. Only applies for TEXT_OVERFLOW_MARQUEE.
+ *
+ * @since 1.2
+ */
+ @ProtoLayoutExperimental
+ static final class MarqueeParameters {
+ private final LayoutElementProto.MarqueeParameters mImpl;
+ @Nullable private final Fingerprint mFingerprint;
+
+ MarqueeParameters(
+ LayoutElementProto.MarqueeParameters impl, @Nullable Fingerprint fingerprint) {
+ this.mImpl = impl;
+ this.mFingerprint = fingerprint;
+ }
+
+ /**
+ * Gets the number of times to repeat the Marquee animation. Set to -1 to repeat
+ * indefinitely. Defaults to repeat indefinitely.
+ *
+ * @since 1.2
+ */
+ @ProtoLayoutExperimental
+ public int getIterations() {
+ return mImpl.getIterations();
+ }
+
+ /** Get the fingerprint for this object, or null if unknown. */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @Nullable
+ public Fingerprint getFingerprint() {
+ return mFingerprint;
+ }
+
+ /** Creates a new wrapper instance from the proto. */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public static MarqueeParameters fromProto(
+ @NonNull LayoutElementProto.MarqueeParameters proto,
+ @Nullable Fingerprint fingerprint) {
+ return new MarqueeParameters(proto, fingerprint);
+ }
+
+ @NonNull
+ static MarqueeParameters fromProto(@NonNull LayoutElementProto.MarqueeParameters proto) {
+ return fromProto(proto, null);
+ }
+
+ /** Returns the internal proto instance. */
+ @RestrictTo(Scope.LIBRARY_GROUP)
+ @NonNull
+ public LayoutElementProto.MarqueeParameters toProto() {
+ return mImpl;
+ }
+
+ @Override
+ @NonNull
+ public String toString() {
+ return "MarqueeParameters{" + "iterations=" + getIterations() + "}";
+ }
+
+ /** Builder for {@link MarqueeParameters} */
+ public static final class Builder {
+ private final LayoutElementProto.MarqueeParameters.Builder mImpl =
+ LayoutElementProto.MarqueeParameters.newBuilder();
+ private final Fingerprint mFingerprint = new Fingerprint(1405971293);
+
+ public Builder() {}
+
+ /**
+ * Sets the number of times to repeat the Marquee animation. Set to -1 to repeat
+ * indefinitely. Defaults to repeat indefinitely.
+ *
+ * @since 1.2
+ */
+ @ProtoLayoutExperimental
+ @NonNull
+ public Builder setIterations(int iterations) {
+ mImpl.setIterations(iterations);
+ mFingerprint.recordPropertyUpdate(1, iterations);
+ return this;
+ }
+
+ /** Builds an instance from accumulated values. */
+ @NonNull
+ public MarqueeParameters build() {
+ return new MarqueeParameters(mImpl.build(), mFingerprint);
+ }
+ }
+ }
+
+ /**
* An Android platform specific text style configuration options for styling and compatibility.
*
* @since 1.2
@@ -924,6 +1072,18 @@
}
}
+ /**
+ * Gets the number of times to repeat the Marquee animation. Only applies when overflow is
+ * TEXT_OVERFLOW_MARQUEE. Set to -1 to repeat indefinitely. Defaults to repeat indefinitely.
+ *
+ * @since 1.2
+ */
+ @ProtoLayoutExperimental
+ @IntRange(from = -1)
+ public int getMarqueeIterations() {
+ return mImpl.getMarqueeParameters().getIterations();
+ }
+
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
@@ -1138,6 +1298,23 @@
return this;
}
+ /**
+ * Sets the number of times to repeat the Marquee animation. Only applies when overflow
+ * is TEXT_OVERFLOW_MARQUEE. Set to -1 to repeat indefinitely. Defaults to repeat
+ * indefinitely.
+ *
+ * @since 1.2
+ */
+ @ProtoLayoutExperimental
+ @NonNull
+ public Builder setMarqueeIterations(@IntRange(from = -1) int marqueeIterations) {
+ mImpl.setMarqueeParameters(
+ LayoutElementProto.MarqueeParameters.newBuilder()
+ .setIterations(marqueeIterations));
+ mFingerprint.recordPropertyUpdate(9, marqueeIterations);
+ return this;
+ }
+
@Override
@NonNull
public Text build() {
@@ -2466,6 +2643,18 @@
}
}
+ /**
+ * Gets the number of times to repeat the Marquee animation. Only applies when overflow is
+ * TEXT_OVERFLOW_MARQUEE. Set to -1 to repeat indefinitely. Defaults to repeat indefinitely.
+ *
+ * @since 1.2
+ */
+ @ProtoLayoutExperimental
+ @IntRange(from = -1)
+ public int getMarqueeIterations() {
+ return mImpl.getMarqueeParameters().getIterations();
+ }
+
@Override
@RestrictTo(Scope.LIBRARY_GROUP)
@Nullable
@@ -2615,6 +2804,23 @@
return this;
}
+ /**
+ * Sets the number of times to repeat the Marquee animation. Only applies when overflow
+ * is TEXT_OVERFLOW_MARQUEE. Set to -1 to repeat indefinitely. Defaults to repeat
+ * indefinitely.
+ *
+ * @since 1.2
+ */
+ @ProtoLayoutExperimental
+ @NonNull
+ public Builder setMarqueeIterations(@IntRange(from = -1) int marqueeIterations) {
+ mImpl.setMarqueeParameters(
+ LayoutElementProto.MarqueeParameters.newBuilder()
+ .setIterations(marqueeIterations));
+ mFingerprint.recordPropertyUpdate(8, marqueeIterations);
+ return this;
+ }
+
@Override
@NonNull
public Spannable build() {
diff --git a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ModifiersBuilders.java b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ModifiersBuilders.java
index 600f72d..9b854fd 100644
--- a/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ModifiersBuilders.java
+++ b/wear/protolayout/protolayout/src/main/java/androidx/wear/protolayout/ModifiersBuilders.java
@@ -196,7 +196,7 @@
public static final int SEMANTICS_ROLE_NONE = 0;
/**
- * The element is an {@link androidx.wear.protolayout.LayoutElementBuilders.Image}.
+ * The element is an image.
*
* @since 1.2
*/
diff --git a/wear/tiles/tiles-material/build.gradle b/wear/tiles/tiles-material/build.gradle
index c696e99..ac5345a 100644
--- a/wear/tiles/tiles-material/build.gradle
+++ b/wear/tiles/tiles-material/build.gradle
@@ -26,7 +26,7 @@
dependencies {
api("androidx.annotation:annotation:1.2.0")
- implementation(project(":wear:tiles:tiles"))
+ api(project(":wear:tiles:tiles"))
implementation(project(":wear:tiles:tiles-proto"))
androidTestImplementation(libs.junit)
diff --git a/wear/tiles/tiles-renderer/build.gradle b/wear/tiles/tiles-renderer/build.gradle
index 1d8a312..f7841d1 100644
--- a/wear/tiles/tiles-renderer/build.gradle
+++ b/wear/tiles/tiles-renderer/build.gradle
@@ -35,7 +35,7 @@
implementation("androidx.core:core:1.7.0")
implementation "androidx.wear:wear:1.2.0"
- implementation(project(":wear:protolayout:protolayout"))
+ api(project(":wear:protolayout:protolayout"))
implementation(project(":wear:protolayout:protolayout-expression-pipeline"))
implementation(project(":wear:protolayout:protolayout-renderer"))
implementation(project(":wear:tiles:tiles"))
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 9ec6aa3..46ae397 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
@@ -46,6 +46,7 @@
import org.junit.Assert.assertTrue
import org.junit.Assume
import org.junit.Before
+import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatcher
@@ -155,6 +156,7 @@
}
}
+ @Ignore // b/277591676
@Test
public fun testWindowLayoutUpdatesOnRecreate() {
assumeExtensionV10_V01()