Merge "Adding sunnygoyal to the owners for slices" into androidx-master-dev
diff --git a/annotations/src/main/java/androidx/annotation/ContentView.java b/annotations/src/main/java/androidx/annotation/ContentView.java
index 407763a..eee0d2f 100644
--- a/annotations/src/main/java/androidx/annotation/ContentView.java
+++ b/annotations/src/main/java/androidx/annotation/ContentView.java
@@ -25,7 +25,7 @@
/**
* Annotation that can be attached to a component such as an
- * {@link androidx.activity.ComponentActivity} or {@link androidx.fragment.app.Fragment}
+ * androidx.activity.ComponentActivity or {@link androidx.fragment.app.Fragment}
* to denote what layout the component intends to inflate and set as its content.
* <p>
* This annotation is marked as {@link Inherited} and will therefore apply to subclasses
diff --git a/appcompat/resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java b/appcompat/resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java
index 03e3203..f57aace 100644
--- a/appcompat/resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java
+++ b/appcompat/resources/src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java
@@ -85,7 +85,6 @@
* {@link android.R.attr#state_middle}
* {@link android.R.attr#state_last}
* {@link android.R.attr#state_pressed}
- * @see ResourceManagerInternal#getDrawable(Context, int)
*/
@SuppressLint("RestrictedAPI") // Temporary until we have correct restriction scopes for 1.0
public class AnimatedStateListDrawableCompat extends StateListDrawable
@@ -129,7 +128,6 @@
* @param resId the resource ID for AnimatedStateListDrawable object.
* @param theme the theme to apply, may be null.
* @return a new AnimatedStateListDrawableCompat or null if parsing error is found.
- * @see ResourceManagerInternal#getDrawable(Context, int)
*/
@Nullable
public static AnimatedStateListDrawableCompat create(
diff --git a/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java b/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java
index 92b0c67..f0a8452 100644
--- a/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java
+++ b/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java
@@ -30,6 +30,7 @@
import androidx.annotation.DrawableRes;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
+import androidx.appcompat.R;
import androidx.core.view.TintableBackgroundView;
import androidx.core.widget.ImageViewCompat;
import androidx.core.widget.TintableImageSourceView;
diff --git a/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java b/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
index 364f2cb..98d9795 100644
--- a/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
+++ b/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
@@ -434,7 +434,7 @@
* @see TextView#setImeOptions(int)
* @param imeOptions the options to set on the query text field
*
- * {@link androidx.appcompat.R.attr#android_imeOptions}
+ * {@link android.R.attr#imeOptions}
*/
public void setImeOptions(int imeOptions) {
mSearchSrcTextView.setImeOptions(imeOptions);
@@ -445,7 +445,7 @@
* @return the ime options
* @see TextView#setImeOptions(int)
*
- * {@link androidx.appcompat.R.attr#android_imeOptions}
+ * {@link android.R.attr#imeOptions}
*/
public int getImeOptions() {
return mSearchSrcTextView.getImeOptions();
@@ -457,7 +457,7 @@
* @see TextView#setInputType(int)
* @param inputType the input type to set on the query text field
*
- * {@link androidx.appcompat.R.attr#android_inputType}
+ * {@link android.R.attr#inputType}
*/
public void setInputType(int inputType) {
mSearchSrcTextView.setInputType(inputType);
@@ -467,7 +467,7 @@
* Returns the input type set on the query text field.
* @return the input type
*
- * {@link androidx.appcompat.R.attr#android_inputType}
+ * {@link android.R.attr#inputType}
*/
public int getInputType() {
return mSearchSrcTextView.getInputType();
@@ -757,7 +757,7 @@
/**
* Makes the view at most this many pixels wide
*
- * {@link androidx.appcompat.R.attr#android_maxWidth}
+ * {@link android.R.attr#maxWidth}
*/
public void setMaxWidth(int maxpixels) {
mMaxWidth = maxpixels;
@@ -770,7 +770,7 @@
* no maximum width was specified.
* @return the maximum width of the view
*
- * {@link androidx.appcompat.R.attr#android_maxWidth}
+ * {@link android.R.attr#maxWidth}
*/
public int getMaxWidth() {
return mMaxWidth;
diff --git a/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java b/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java
index 5449de0..f6964a2 100644
--- a/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java
+++ b/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java
@@ -73,12 +73,12 @@
* <p>See the <a href="{@docRoot}guide/topics/ui/controls/togglebutton.html">Toggle Buttons</a>
* guide.</p>
*
- * {@link androidx.appcompat.R.attr#android_textOn}
- * {@link androidx.appcompat.R.attr#android_textOff}
+ * {@link android.R.attr#textOn}
+ * {@link android.R.attr#textOff}
* {@link androidx.appcompat.R.attr#switchMinWidth}
* {@link androidx.appcompat.R.attr#switchPadding}
* {@link androidx.appcompat.R.attr#switchTextAppearance}
- * {@link androidx.appcompat.R.attr#android_thumb}
+ * {@link android.R.attr#thumb}
* {@link androidx.appcompat.R.attr#thumbTextPadding}
* {@link androidx.appcompat.R.attr#track}
*/
@@ -597,7 +597,7 @@
*
* @param thumb Thumb drawable
*
- * {@link androidx.appcompat.R.attr#android_thumb}
+ * {@link android.R.attr#thumb}
*/
public void setThumbDrawable(Drawable thumb) {
if (mThumbDrawable != null) {
@@ -616,7 +616,7 @@
*
* @param resId Resource ID of a thumb drawable
*
- * {@link androidx.appcompat.R.attr#android_thumb}
+ * {@link android.R.attr#thumb}
*/
public void setThumbResource(int resId) {
setThumbDrawable(AppCompatResources.getDrawable(getContext(), resId));
@@ -628,7 +628,7 @@
*
* @return Thumb drawable
*
- * {@link androidx.appcompat.R.attr#android_thumb}
+ * {@link android.R.attr#thumb}
*/
public Drawable getThumbDrawable() {
return mThumbDrawable;
@@ -740,7 +740,7 @@
/**
* Returns the text displayed when the button is in the checked state.
*
- * {@link androidx.appcompat.R.attr#android_textOn}
+ * {@link android.R.attr#textOn}
*/
public CharSequence getTextOn() {
return mTextOn;
@@ -749,7 +749,7 @@
/**
* Sets the text displayed when the button is in the checked state.
*
- * {@link androidx.appcompat.R.attr#android_textOn}
+ * {@link android.R.attr#textOn}
*/
public void setTextOn(CharSequence textOn) {
mTextOn = textOn;
@@ -759,7 +759,7 @@
/**
* Returns the text displayed when the button is not in the checked state.
*
- * {@link androidx.appcompat.R.attr#android_textOff}
+ * {@link android.R.attr#textOff}
*/
public CharSequence getTextOff() {
return mTextOff;
@@ -768,7 +768,7 @@
/**
* Sets the text displayed when the button is not in the checked state.
*
- * {@link androidx.appcompat.R.attr#android_textOff}
+ * {@link android.R.attr#textOff}
*/
public void setTextOff(CharSequence textOff) {
mTextOff = textOff;
diff --git a/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java b/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
index 2754164..9b4a11d 100644
--- a/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
+++ b/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
@@ -122,7 +122,7 @@
* {@link androidx.appcompat.R.attr#contentInsetStart}
* {@link androidx.appcompat.R.attr#contentInsetStartWithNavigation}
* {@link androidx.appcompat.R.attr#contentInsetEndWithActions}
- * {@link androidx.appcompat.R.attr#android_gravity}
+ * {@link android.R.attr#gravity}
* {@link androidx.appcompat.R.attr#logo}
* {@link androidx.appcompat.R.attr#logoDescription}
* {@link androidx.appcompat.R.attr#maxButtonHeight}
diff --git a/browser/src/main/java/androidx/browser/customtabs/CustomTabsClient.java b/browser/src/main/java/androidx/browser/customtabs/CustomTabsClient.java
index 7cb492f..a7161ce 100644
--- a/browser/src/main/java/androidx/browser/customtabs/CustomTabsClient.java
+++ b/browser/src/main/java/androidx/browser/customtabs/CustomTabsClient.java
@@ -79,7 +79,7 @@
/**
* Returns the preferred package to use for Custom Tabs, preferring the default VIEW handler.
*
- * @see #getPackageName(Context, List<String>, boolean)
+ * see getPackageName(Context, List<String>, boolean)
*/
public static String getPackageName(Context context, @Nullable List<String> packages) {
return getPackageName(context, packages, false);
diff --git a/buildSrc/src/main/kotlin/androidx/build/DiffAndDocs.kt b/buildSrc/src/main/kotlin/androidx/build/DiffAndDocs.kt
index 224130c..dd9b494 100644
--- a/buildSrc/src/main/kotlin/androidx/build/DiffAndDocs.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/DiffAndDocs.kt
@@ -20,7 +20,6 @@
import androidx.build.Strategy.TipOfTree
import androidx.build.checkapi.ApiXmlConversionTask
import androidx.build.checkapi.CheckApiTasks
-import androidx.build.checkapi.hasApiTasks
import androidx.build.checkapi.initializeApiChecksForProject
import androidx.build.doclava.ChecksConfig
import androidx.build.doclava.DEFAULT_DOCLAVA_CONFIG
@@ -323,21 +322,6 @@
}
registerJavaProjectForDocsTask(generateDiffsTask, compileJava)
- if (!hasApiTasks(project, extension)) {
- return
- }
-
- val tasks = initializeApiChecksForProject(project,
- aggregateOldApiTxtsTask, aggregateNewApiTxtsTask)
- registerJavaProjectForDocsTask(tasks.generateApi, compileJava)
- setupApiVersioningInDocsTasks(extension, tasks)
- addCheckApiTasksToGraph(tasks)
- registerJavaProjectForDocsTask(tasks.generateLocalDiffs, compileJava)
- val generateApiDiffsArchiveTask = createGenerateLocalApiDiffsArchiveTask(project,
- tasks.generateLocalDiffs)
- generateApiDiffsArchiveTask.configure {
- it.dependsOn(tasks.generateLocalDiffs)
- }
}
/**
@@ -365,21 +349,6 @@
tipOfTreeTasks(extension) { task ->
registerAndroidProjectForDocsTask(task, variant)
}
-
- if (!hasApiTasks(project, extension)) {
- return@all
- }
- val tasks = initializeApiChecksForProject(project, aggregateOldApiTxtsTask,
- aggregateNewApiTxtsTask)
- registerAndroidProjectForDocsTask(tasks.generateApi, variant)
- setupApiVersioningInDocsTasks(extension, tasks)
- addCheckApiTasksToGraph(tasks)
- registerAndroidProjectForDocsTask(tasks.generateLocalDiffs, variant)
- val generateApiDiffsArchiveTask = createGenerateLocalApiDiffsArchiveTask(project,
- tasks.generateLocalDiffs)
- generateApiDiffsArchiveTask.configure {
- it.dependsOn(tasks.generateLocalDiffs)
- }
}
}
}
diff --git a/buildSrc/src/main/kotlin/androidx/build/dokka/Dokka.kt b/buildSrc/src/main/kotlin/androidx/build/dokka/Dokka.kt
index 1ebba71..a07b6c9 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dokka/Dokka.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dokka/Dokka.kt
@@ -75,7 +75,10 @@
library: LibraryExtension,
extension: SupportLibraryExtension
) {
- DiffAndDocs.get(project).registerPrebuilts(extension)
+ if (project.name != "docs-runner") {
+ DiffAndDocs.get(project).registerAndroidProject(project, library, extension)
+ }
+
DokkaPublicDocs.registerProject(project, extension)
DokkaSourceDocs.registerAndroidProject(project, library, extension)
}
@@ -84,7 +87,9 @@
project: Project,
extension: SupportLibraryExtension
) {
- DiffAndDocs.get(project).registerPrebuilts(extension)
+ if (project.name != "docs-runner") {
+ DiffAndDocs.get(project).registerJavaProject(project, extension)
+ }
DokkaPublicDocs.registerProject(project, extension)
DokkaSourceDocs.registerJavaProject(project, extension)
}
diff --git a/docs-fake/build.gradle b/docs-fake/build.gradle
index 7b73ce0..6c7111a7 100644
--- a/docs-fake/build.gradle
+++ b/docs-fake/build.gradle
@@ -26,11 +26,11 @@
def reentrance = false
project.tasks.whenTaskAdded { task ->
if (task instanceof org.gradle.api.tasks.testing.Test
- || task.name.startsWith("assemble")
- || task.name == "transformDexArchiveWithExternalLibsDexMergerForPublicDebug"
- || task.name == "transformResourcesWithMergeJavaResForPublicDebug"
- || task.name == "checkPublicDebugDuplicateClasses") {
- if (!reentrance) {
+ || task.name.startsWith("assemble")
+ || task.name == "transformDexArchiveWithExternalLibsDexMergerForPublicDebug"
+ || task.name == "transformResourcesWithMergeJavaResForPublicDebug"
+ || task.name == "checkPublicDebugDuplicateClasses") {
+ if (!reentrance) {
reentrance = true
project.tasks.replace(task.name)
reentrance = false
diff --git a/fragment/src/main/java/androidx/fragment/app/Fragment.java b/fragment/src/main/java/androidx/fragment/app/Fragment.java
index b1cfc5f..6e52230 100644
--- a/fragment/src/main/java/androidx/fragment/app/Fragment.java
+++ b/fragment/src/main/java/androidx/fragment/app/Fragment.java
@@ -2088,7 +2088,7 @@
* @param transition The Transition to use to move Views out of the Scene when the Fragment
* is preparing to close. <code>transition</code> must be an
* {@link android.transition.Transition android.transition.Transition} or
- * {@link androidx.transition.Transition androidx.transition.Transition}.
+ * {@link androidx.transition.Transition}.
*/
public void setReturnTransition(@Nullable Object transition) {
ensureAnimationInfo().mReturnTransition = transition;
diff --git a/fragment/src/main/java/androidx/fragment/app/FragmentController.java b/fragment/src/main/java/androidx/fragment/app/FragmentController.java
index 2086392..5b5e07f 100644
--- a/fragment/src/main/java/androidx/fragment/app/FragmentController.java
+++ b/fragment/src/main/java/androidx/fragment/app/FragmentController.java
@@ -312,13 +312,13 @@
* Moves Fragments managed by the controller's FragmentManager
* into the destroy state.
* <p>
- * If the {@link FragmentHostCallback} is an instance of {@link ViewModelStoreOwner},
+ * If the {@link androidx.fragment.app.FragmentHostCallback} is an instance of {@link ViewModelStoreOwner},
* then retained Fragments and any other non configuration state such as any
* {@link androidx.lifecycle.ViewModel} attached to Fragments will only be destroyed if
* {@link androidx.lifecycle.ViewModelStore#clear()} is called prior to this method.
* <p>
* Otherwise, the FragmentManager will look to see if the
- * {@link FragmentHostCallback#getContext() host's Context} is an {@link Activity}
+ * {@link FragmentHostCallback host's} Context is an {@link Activity}
* and if {@link Activity#isChangingConfigurations()} returns true. In only that case
* will non configuration state be retained.
* <p>Call when Fragments should be destroyed.
diff --git a/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioDialogFragmentTest.kt b/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioDialogFragmentTest.kt
new file mode 100644
index 0000000..148cbd0
--- /dev/null
+++ b/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioDialogFragmentTest.kt
@@ -0,0 +1,301 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.fragment.app.testing
+
+import androidx.core.os.BuildCompat.isAtLeastQ
+import androidx.lifecycle.Lifecycle.State
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.withText
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * Tests for FragmentScenario's implementation against DialogFragment.
+ */
+@RunWith(AndroidJUnit4::class)
+@LargeTest
+class FragmentScenarioDialogFragmentTest {
+ @Test
+ fun launchFragment() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.RESUMED)
+ assertThat(fragment.dialog).isNotNull()
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ }
+ onView(withText("my button")).check(matches(isDisplayed()))
+ }
+ }
+
+ @Test
+ fun launchFragmentInContainer() {
+ with(launchFragmentInContainer<SimpleDialogFragment>()) {
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.RESUMED)
+ // We show SimpleDialogFragment in container so dialog is not created.
+ assertThat(fragment.dialog).isNull()
+ }
+ onView(withText("my button")).check(matches(isDisplayed()))
+ }
+ }
+
+ @Test
+ fun fromResumedToCreated() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ moveToState(State.CREATED)
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.CREATED)
+ assertThat(fragment.dialog).isNotNull()
+ if (isAtLeastQ()) {
+ assertThat(fragment.requireDialog().isShowing).isFalse()
+ } else {
+ // Dialog#isShowing should've returned false but it returns true due to a
+ // bug which was fixed by aosp/637304.
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ }
+ }
+ }
+ }
+
+ @Test
+ fun fromResumedToStarted() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ moveToState(State.STARTED)
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.STARTED)
+ assertThat(fragment.dialog).isNotNull()
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ }
+ }
+ }
+
+ @Test
+ fun fromResumedToResumed() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ moveToState(State.RESUMED)
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.RESUMED)
+ assertThat(fragment.dialog).isNotNull()
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ }
+ }
+ }
+
+ @Test
+ fun fromResumedToDestroyed() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ moveToState(State.DESTROYED)
+ }
+ }
+
+ @Test
+ fun fromCreatedToCreated() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ moveToState(State.CREATED)
+ moveToState(State.CREATED)
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.CREATED)
+ assertThat(fragment.dialog).isNotNull()
+ if (isAtLeastQ()) {
+ assertThat(fragment.requireDialog().isShowing).isFalse()
+ } else {
+ // Dialog#isShowing should've returned false but it returns true due to a
+ // bug which was fixed by aosp/637304.
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ }
+ }
+ }
+ }
+
+ @Test
+ fun fromCreatedToStarted() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ moveToState(State.CREATED)
+ moveToState(State.STARTED)
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.STARTED)
+ assertThat(fragment.dialog).isNotNull()
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ }
+ }
+ }
+
+ @Test
+ fun fromCreatedToResumed() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ moveToState(State.CREATED)
+ moveToState(State.RESUMED)
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.RESUMED)
+ assertThat(fragment.dialog).isNotNull()
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ }
+ }
+ }
+
+ @Test
+ fun fromCreatedToDestroyed() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ moveToState(State.CREATED)
+ moveToState(State.DESTROYED)
+ }
+ }
+
+ @Test
+ fun fromStartedToCreated() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ moveToState(State.STARTED)
+ moveToState(State.CREATED)
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.CREATED)
+ assertThat(fragment.dialog).isNotNull()
+ if (isAtLeastQ()) {
+ assertThat(fragment.requireDialog().isShowing).isFalse()
+ } else {
+ // Dialog#isShowing should've returned false but it returns true due to a
+ // bug which was fixed by aosp/637304.
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ }
+ }
+ }
+ }
+
+ @Test
+ fun fromStartedToStarted() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ moveToState(State.STARTED)
+ moveToState(State.STARTED)
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.STARTED)
+ assertThat(fragment.dialog).isNotNull()
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ }
+ }
+ }
+
+ @Test
+ fun fromStartedToResumed() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ moveToState(State.STARTED)
+ moveToState(State.RESUMED)
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.RESUMED)
+ assertThat(fragment.dialog).isNotNull()
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ }
+ }
+ }
+
+ @Test
+ fun fromStartedToDestroyed() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ moveToState(State.STARTED)
+ moveToState(State.DESTROYED)
+ }
+ }
+
+ @Test
+ fun fromDestroyedToDestroyed() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ moveToState(State.DESTROYED)
+ moveToState(State.DESTROYED)
+ }
+ }
+
+ @Test
+ fun recreateCreatedFragment() {
+ var numOfInstantiation = 0
+ with(launchFragment {
+ ++numOfInstantiation
+ SimpleDialogFragment()
+ }) {
+ assertThat(numOfInstantiation).isEqualTo(1)
+ moveToState(State.CREATED)
+ recreate()
+ assertThat(numOfInstantiation).isEqualTo(2)
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.CREATED)
+ assertThat(fragment.dialog).isNotNull()
+ if (isAtLeastQ()) {
+ assertThat(fragment.requireDialog().isShowing).isFalse()
+ } else {
+ // Dialog#isShowing should've returned false but it returns true due to a
+ // bug which was fixed by aosp/637304.
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ }
+ }
+ }
+ }
+
+ @Test
+ fun recreateStartedFragment() {
+ var numOfInstantiation = 0
+ with(launchFragment {
+ ++numOfInstantiation
+ SimpleDialogFragment()
+ }) {
+ assertThat(numOfInstantiation).isEqualTo(1)
+ moveToState(State.STARTED)
+ recreate()
+ assertThat(numOfInstantiation).isEqualTo(2)
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.STARTED)
+ assertThat(fragment.dialog).isNotNull()
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ }
+ }
+ }
+
+ @Test
+ fun recreateResumedFragment() {
+ var numOfInstantiation = 0
+ with(launchFragment {
+ ++numOfInstantiation
+ SimpleDialogFragment()
+ }) {
+ assertThat(numOfInstantiation).isEqualTo(1)
+ recreate()
+ assertThat(numOfInstantiation).isEqualTo(2)
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.RESUMED)
+ assertThat(fragment.dialog).isNotNull()
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ }
+ }
+ }
+
+ @Test
+ fun dismissDialog() {
+ with(launchFragment<SimpleDialogFragment>()) {
+ onFragment { fragment ->
+ assertThat(fragment.lifecycle.currentState).isEqualTo(State.RESUMED)
+ assertThat(fragment.dialog).isNotNull()
+ assertThat(fragment.requireDialog().isShowing).isTrue()
+ fragment.dismiss()
+ fragment.requireFragmentManager().executePendingTransactions()
+ assertThat(fragment.dialog).isNull()
+ }
+ }
+ onView(withText("my button")).check(doesNotExist())
+ }
+}
\ No newline at end of file
diff --git a/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/SimpleDialogFragment.kt b/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/SimpleDialogFragment.kt
new file mode 100644
index 0000000..f5bd569
--- /dev/null
+++ b/fragment/testing/src/androidTest/java/androidx/fragment/app/testing/SimpleDialogFragment.kt
@@ -0,0 +1,19 @@
+package androidx.fragment.app.testing
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.DialogFragment
+import androidx.fragment.testing.test.R
+
+/**
+ * A dialog fragment with a button to demonstrate unit testing.
+ */
+class SimpleDialogFragment : DialogFragment() {
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? = inflater.inflate(R.layout.fragment_simple_dialog, container, false)
+}
\ No newline at end of file
diff --git a/fragment/testing/src/androidTest/res/layout/fragment_simple_dialog.xml b/fragment/testing/src/androidTest/res/layout/fragment_simple_dialog.xml
new file mode 100644
index 0000000..32118ab
--- /dev/null
+++ b/fragment/testing/src/androidTest/res/layout/fragment_simple_dialog.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <Button
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="my button"/>
+</FrameLayout>
diff --git a/leanback/src/main/java/androidx/leanback/widget/StreamingTextView.java b/leanback/src/main/java/androidx/leanback/widget/StreamingTextView.java
index b5805eb..edbbc8f 100644
--- a/leanback/src/main/java/androidx/leanback/widget/StreamingTextView.java
+++ b/leanback/src/main/java/androidx/leanback/widget/StreamingTextView.java
@@ -301,7 +301,7 @@
/**
* See
- * {@link TextViewCompat#setCustomSelectionActionModeCallback(TextView, ActionMode.Callback)}
+ * {@link androidx.core.widget.TextViewCompat#setCustomSelectionActionModeCallback(TextView, ActionMode.Callback)}
*/
@Override
public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {
diff --git a/leanback/src/main/java/androidx/leanback/widget/picker/DatePicker.java b/leanback/src/main/java/androidx/leanback/widget/picker/DatePicker.java
index 4719107..48850f1 100644
--- a/leanback/src/main/java/androidx/leanback/widget/picker/DatePicker.java
+++ b/leanback/src/main/java/androidx/leanback/widget/picker/DatePicker.java
@@ -39,8 +39,8 @@
* can be customized. The columns can be customized by attribute "datePickerFormat" or
* {@link #setDatePickerFormat(String)}.
*
- * {@link R.attr#android_maxDate}
- * {@link R.attr#android_minDate}
+ * {@link android.R.attr#maxDate}
+ * {@link android.R.attr#minDate}
* {@link R.attr#datePickerFormat}
*/
public class DatePicker extends Picker {
@@ -522,4 +522,4 @@
}
});
}
-}
\ No newline at end of file
+}
diff --git a/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateVMFactory.java b/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateVMFactory.java
index de9a16a..fdb630b 100644
--- a/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateVMFactory.java
+++ b/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateVMFactory.java
@@ -26,9 +26,9 @@
/**
* Skeleton of androidx.lifecycle.ViewModelProvider.KeyedFactory
- * that creates {@link SavedStateHandle} for every requested {@link ViewModel}. The subclasses
+ * that creates {@link SavedStateHandle} for every requested {@link androidx.lifecycle.ViewModel}. The subclasses
* implement {@link #create(String, Class, SavedStateHandle)} to actually instantiate
- * {@code ViewModels}.
+ * {@code androidx.lifecycle.ViewModel}s.
*/
public abstract class AbstractSavedStateVMFactory extends ViewModelProvider.KeyedFactory {
static final String TAG_SAVED_STATE_HANDLE_CONTROLLER = "androidx.lifecycle.savedstate.vm.tag";
@@ -41,7 +41,7 @@
* Constructs this factory.
*
* @param owner {@link SavedStateRegistryOwner} that will provide restored state for created
- * {@link ViewModel ViewModels}
+ * {@link androidx.lifecycle.ViewModel ViewModels}
* @param defaultArgs values from this {@code Bundle} will be used as defaults by
* {@link SavedStateHandle} passed in {@link ViewModel ViewModels}
* if there is no previously saved state
diff --git a/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateHandle.java b/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateHandle.java
index 5e7f389..edf9c8c 100644
--- a/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateHandle.java
+++ b/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateHandle.java
@@ -37,7 +37,7 @@
import java.util.Set;
/**
- * A handle to saved state passed down to {@link ViewModel}. You should use
+ * A handle to saved state passed down to {@link androidx.lifecycle.ViewModel}. You should use
* {@link SavedStateVMFactory} if you want to receive this object in {@code ViewModel}'s
* constructor.
* <p>
@@ -45,11 +45,11 @@
* These values will persist after the process is killed by the system
* and remain available via the same object.
* <p>
- * You can read a value from it via {@link #get(String)} or observe it via {@link LiveData} returned
+ * You can read a value from it via {@link #get(String)} or observe it via {@link androidx.lifecycle.LiveData} returned
* by {@link #getLiveData(String)}.
* <p>
* You can write a value to it via {@link #set(String, Object)} or setting a value to
- * {@link MutableLiveData} returned by {@link #getLiveData(String)}.
+ * {@link androidx.lifecycle.MutableLiveData} returned by {@link #getLiveData(String)}.
*/
public final class SavedStateHandle {
final Map<String, Object> mRegular;
@@ -136,7 +136,7 @@
}
/**
- * Returns a {@link LiveData} that access data associated with the given key,.
+ * Returns a {@link androidx.lifecycle.LiveData} that access data associated with the given key,.
*/
@SuppressWarnings("unchecked")
@MainThread
@@ -209,7 +209,7 @@
* Removes a value associated with the given key. If there is a {@link LiveData} associated
* with the given key, it will be removed as well.
* <p>
- * All changes to {@link LiveData} previously
+ * All changes to {@link androidx.lifecycle.LiveData} previously
* returned by {@link SavedStateHandle#getLiveData(String)} won't be reflected in
* the saved state. Also that {@code LiveData} won't receive any updates about new values
* associated by the given key.
diff --git a/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateVMFactory.java b/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateVMFactory.java
index bc219de..d2457ef1 100644
--- a/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateVMFactory.java
+++ b/lifecycle/viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateVMFactory.java
@@ -31,13 +31,13 @@
import java.util.Arrays;
/**
- * {@link ViewModelProvider.Factory} that can create ViewModels accessing and contributing
+ * {@link androidx.lifecycle.ViewModelProvider.Factory} that can create ViewModels accessing and contributing
* to a saved state via {@link SavedStateHandle} received in a constructor. If {@code defaultArgs}
* bundle was passed in {@link #SavedStateVMFactory(Fragment, Bundle)}
* or {@link #SavedStateVMFactory(FragmentActivity, Bundle)}, it will provide default values in
* {@code SavedStateHandle}.
* <p>
- * If ViewModel is instance of {@link AndroidViewModel}, it looks for a constructor that
+ * If ViewModel is instance of {@link androidx.lifecycle.AndroidViewModel}, it looks for a constructor that
* receives an {@link Application} and {@link SavedStateHandle} (in this order), otherwise
* it looks for a constructor that receives {@link SavedStateHandle} only.
*/
@@ -48,7 +48,7 @@
/**
* Creates {@link SavedStateVMFactory}.
* <p>
- * {@link ViewModel} created with this factory can access to saved state scoped to
+ * {@link androidx.lifecycle.ViewModel} created with this factory can access to saved state scoped to
* the given {@code fragment}.
*
* @param fragment scope of this fragment will be used for state saving
@@ -60,7 +60,7 @@
/**
* Creates {@link SavedStateVMFactory}.
* <p>
- * {@link ViewModel} created with this factory can access to saved state scoped to
+ * {@link androidx.lifecycle.ViewModel} created with this factory can access to saved state scoped to
* the given {@code fragment}.
*
* @param fragment scope of this fragment will be used for state saving
@@ -75,7 +75,7 @@
/**
* Creates {@link SavedStateVMFactory}.
* <p>
- * {@link ViewModel} created with this factory can access to saved state scoped to
+ * {@link androidx.lifecycle.ViewModel} created with this factory can access to saved state scoped to
* the given {@code activity}.
*
* @param activity scope of this activity will be used for state saving
@@ -87,7 +87,7 @@
/**
* Creates {@link SavedStateVMFactory}.
* <p>
- * {@link ViewModel} created with this factory can access to saved state scoped to
+ * {@link androidx.lifecycle.ViewModel} created with this factory can access to saved state scoped to
* the given {@code activity}.
*
* @param activity scope of this activity will be used for state saving
@@ -102,12 +102,12 @@
/**
* Creates {@link SavedStateVMFactory}.
* <p>
- * {@link ViewModel} created with this factory can access to saved state scoped to
+ * {@link androidx.lifecycle.ViewModel} created with this factory can access to saved state scoped to
* the given {@code activity}.
*
* @param application an application
* @param owner {@link SavedStateRegistryOwner} that will provide restored state for created
- * {@link ViewModel ViewModels}
+ * {@link androidx.lifecycle.ViewModel ViewModels}
* @param defaultArgs values from this {@code Bundle} will be used as defaults by
* {@link SavedStateHandle} if there is no previously saved state or previously saved state
* misses a value by such key.
diff --git a/media/src/main/java/androidx/media/MediaSessionManager.java b/media/src/main/java/androidx/media/MediaSessionManager.java
index c8acdae..c75c47d 100644
--- a/media/src/main/java/androidx/media/MediaSessionManager.java
+++ b/media/src/main/java/androidx/media/MediaSessionManager.java
@@ -204,7 +204,7 @@
* met:
* <ol>
* <li>UID and package name are the same</li>
- * <li>One of the RemoteUserInfo's PID is {@link #UNKNOWN_PID} or both of RemoteUserInfo's
+ * <li>One of the RemoteUserInfo's PID is UNKNOWN_PID or both of RemoteUserInfo's
* PID are the same</li>
* </ol>
*
diff --git a/media2-widget/src/main/java/androidx/media2/widget/MediaControlView.java b/media2-widget/src/main/java/androidx/media2/widget/MediaControlView.java
index 4d3323b..34a1833 100644
--- a/media2-widget/src/main/java/androidx/media2/widget/MediaControlView.java
+++ b/media2-widget/src/main/java/androidx/media2/widget/MediaControlView.java
@@ -189,8 +189,8 @@
long mNextSeekPosition;
boolean mDragging;
boolean mIsFullScreen;
+ boolean mIsShowingReplayButton;
boolean mOverflowIsShowing;
- boolean mIsStopped;
boolean mSeekAvailable;
boolean mIsAdvertisement;
boolean mNeedToHideBars;
@@ -919,7 +919,7 @@
playPauseButton.setContentDescription(
mResources.getString(R.string.mcv2_play_button_desc));
} else {
- if (mIsStopped) {
+ if (mIsShowingReplayButton) {
mController.seekTo(0);
}
mController.play();
@@ -1034,8 +1034,8 @@
// Check if playback is currently stopped. In this case, update the pause button to
// show the play image instead of the replay image.
- if (mIsStopped) {
- updateForStoppedState(false);
+ if (mIsShowingReplayButton) {
+ updateReplayButton(false);
}
if (isCurrentMediaItemFromNetwork() && mController.isPlaying()) {
@@ -1101,14 +1101,13 @@
resetHideCallbacks();
removeCallbacks(mUpdateProgress);
- // If the media is currently stopped, rewinding will start the media from the
- // beginning. Instead, seek to 10 seconds before the end of the media.
- boolean stoppedWithDuration = mIsStopped && mDuration != 0;
+ // If replay button is shown, seek to 10 seconds before the end of the media.
+ boolean stoppedWithDuration = mIsShowingReplayButton && mDuration != 0;
long currentPosition = stoppedWithDuration ? mDuration : getLatestSeekPosition();
long seekPosition = Math.max(currentPosition - REWIND_TIME_MS, 0);
seekTo(seekPosition, /* shouldSeekNow= */ true);
if (stoppedWithDuration) {
- updateForStoppedState(/* isStopped= */ false);
+ updateReplayButton(/* toBeShown */ false);
}
}
};
@@ -1121,11 +1120,12 @@
long latestSeekPosition = getLatestSeekPosition();
seekTo(Math.min(latestSeekPosition + FORWARD_TIME_MS, mDuration), true);
- if (latestSeekPosition + FORWARD_TIME_MS >= mDuration) {
- // If the media is currently paused, fast-forwarding beyond the duration value will
- // not return a callback that updates the play/pause and ffwd buttons. Thus,
- // update the buttons manually here.
- updateForStoppedState(true);
+
+ // Note: In some edge cases, mDuration might be less than actual duration of
+ // the stream. If controller is in playing state, it should not show replay
+ // button even when the seekPosition >= mDuration.
+ if (latestSeekPosition + FORWARD_TIME_MS >= mDuration && !mController.isPlaying()) {
+ updateReplayButton(/* toBeShown */ true);
}
}
};
@@ -1366,9 +1366,9 @@
break;
}
- // Update play/pause and ffwd buttons based on whether the media is currently stopped or
- // not.
- updateForStoppedState(mIsStopped);
+ // Update play/pause and ffwd buttons based on whether currently the replay button is shown
+ // or not.
+ updateReplayButton(mIsShowingReplayButton);
}
private View initTransportControls(int id) {
@@ -1624,11 +1624,11 @@
mSubSettingsAdapter.setCheckPosition(mSelectedSpeedIndex);
}
- void updateForStoppedState(boolean isStopped) {
+ void updateReplayButton(boolean toBeShown) {
ImageButton playPauseButton = findControlButton(mSizeType, R.id.pause);
ImageButton ffwdButton = findControlButton(mSizeType, R.id.ffwd);
- if (isStopped) {
- mIsStopped = true;
+ if (toBeShown) {
+ mIsShowingReplayButton = true;
if (playPauseButton != null) {
playPauseButton.setImageDrawable(
mResources.getDrawable(R.drawable.ic_replay_circle_filled));
@@ -1640,7 +1640,7 @@
ffwdButton.setEnabled(false);
}
} else {
- mIsStopped = false;
+ mIsShowingReplayButton = false;
if (playPauseButton != null) {
if (mController.isPlaying()) {
playPauseButton.setImageDrawable(
@@ -2009,7 +2009,7 @@
removeCallbacks(mUpdateProgress);
post(mUpdateProgress);
resetHideCallbacks();
- updateForStoppedState(false);
+ updateReplayButton(false);
break;
case SessionPlayer.PLAYER_STATE_PAUSED:
playPauseButton.setImageDrawable(
@@ -2089,7 +2089,7 @@
if (DEBUG) {
Log.d(TAG, "onPlaybackCompleted()");
}
- updateForStoppedState(true);
+ updateReplayButton(true);
// The progress bar and current time text may not have been updated.
mProgress.setProgress(MAX_PROGRESS);
mCurrentTime.setText(stringForTime(mDuration));
diff --git a/media2/src/main/java/androidx/media2/MediaMetadata.java b/media2/src/main/java/androidx/media2/MediaMetadata.java
index c01b242..b10807e 100644
--- a/media2/src/main/java/androidx/media2/MediaMetadata.java
+++ b/media2/src/main/java/androidx/media2/MediaMetadata.java
@@ -52,7 +52,7 @@
* {@link androidx.media2.widget.MediaControlView} will show title from the metadata.
* <p>
* The {@link MediaLibrarySession} would require some metadata values when it provides
- * {@link MediaItem}s to {@link MediaBrowser}.
+ * {@link androidx.media2.MediaItem}s to {@link MediaBrowser}.
* <p>
* Topics covered here:
* <ol>
diff --git a/media2/src/main/java/androidx/media2/MediaPlayer.java b/media2/src/main/java/androidx/media2/MediaPlayer.java
index 5798508..6ad0ee2 100644
--- a/media2/src/main/java/androidx/media2/MediaPlayer.java
+++ b/media2/src/main/java/androidx/media2/MediaPlayer.java
@@ -755,7 +755,7 @@
* and video decoders.
*
* @return a {@link ListenableFuture} which represents the pending completion of the command.
- * {@link PlayerResult} will be delivered when the command completes.
+ * {@link androidx.media2.SessionPlayer.PlayerResult} will be delivered when the command completes.
*/
@Override
@NonNull
@@ -1534,7 +1534,7 @@
* @param surface The {@link Surface} to be used for the video portion of
* the media.
* @return a {@link ListenableFuture} which represents the pending completion of the command.
- * {@link PlayerResult} will be delivered when the command completes.
+ * {@link androidx.media2.SessionPlayer.PlayerResult} will be delivered when the command completes.
*/
@NonNull
public ListenableFuture<PlayerResult> setSurface(@Nullable final Surface surface) {
@@ -1569,7 +1569,7 @@
*
* @param volume a value between 0.0f and {@link #getMaxPlayerVolume()}.
* @return a {@link ListenableFuture} which represents the pending completion of the command.
- * {@link PlayerResult} will be delivered when the command completes.
+ * {@link androidx.media2.SessionPlayer.PlayerResult} will be delivered when the command completes.
*/
@NonNull
public ListenableFuture<PlayerResult> setPlayerVolume(
@@ -1640,7 +1640,7 @@
*
* @param params the playback params.
* @return a {@link ListenableFuture} which represents the pending completion of the command.
- * {@link PlayerResult} will be delivered when the command completes.
+ * {@link androidx.media2.SessionPlayer.PlayerResult} will be delivered when the command completes.
*/
@NonNull
public ListenableFuture<PlayerResult> setPlaybackParams(@NonNull final PlaybackParams params) {
@@ -1687,7 +1687,7 @@
* The value should be in the range of start and end positions defined in {@link MediaItem}.
* @param mode the mode indicating where exactly to seek to.
* @return a {@link ListenableFuture} which represents the pending completion of the command.
- * {@link PlayerResult} will be delivered when the command completes.
+ * {@link androidx.media2.SessionPlayer.PlayerResult} will be delivered when the command completes.
*/
@NonNull
public ListenableFuture<PlayerResult> seekTo(final long position, @SeekMode final int mode) {
@@ -1749,7 +1749,7 @@
* by calling this method.
* <p>This method must be called before {@link #setMediaItem} and {@link #setPlaylist} methods.
* @return a {@link ListenableFuture} which represents the pending completion of the command.
- * {@link PlayerResult} will be delivered when the command completes.
+ * {@link androidx.media2.SessionPlayer.PlayerResult} will be delivered when the command completes.
*
* @see AudioManager#generateAudioSessionId
*/
@@ -1797,7 +1797,7 @@
* <p>This method must be called before {@link #setMediaItem} and {@link #setPlaylist} methods.
* @param effectId system wide unique id of the effect to attach
* @return a {@link ListenableFuture} which represents the pending completion of the command.
- * {@link PlayerResult} will be delivered when the command completes.
+ * {@link androidx.media2.SessionPlayer.PlayerResult} will be delivered when the command completes.
*/
@NonNull
public ListenableFuture<PlayerResult> attachAuxEffect(final int effectId) {
@@ -1832,7 +1832,7 @@
* 0 < x <= R -> level = 10^(72*(x-R)/20/R)
* @param level send level scalar
* @return a {@link ListenableFuture} which represents the pending completion of the command.
- * {@link PlayerResult} will be delivered when the command completes.
+ * {@link androidx.media2.SessionPlayer.PlayerResult} will be delivered when the command completes.
*/
@NonNull
public ListenableFuture<PlayerResult> setAuxEffectSendLevel(
@@ -1894,8 +1894,8 @@
/**
* Selects a track.
* <p>
- * If the player is in invalid state, {@link PlayerResult#RESULT_ERROR_INVALID_STATE} will be
- * reported with {@link PlayerResult}.
+ * If the player is in invalid state, {@link androidx.media2.SessionPlayer.PlayerResult#RESULT_ERROR_INVALID_STATE} will be
+ * reported with {@link androidx.media2.SessionPlayer.PlayerResult}.
* If a player is in <em>Playing</em> state, the selected track is presented immediately.
* If a player is not in Playing state, it just marks the track to be played.
* </p>
@@ -1917,7 +1917,7 @@
*
* @see #getTrackInfo
* @return a {@link ListenableFuture} which represents the pending completion of the command.
- * {@link PlayerResult} will be delivered when the command completes.
+ * {@link androidx.media2.SessionPlayer.PlayerResult} will be delivered when the command completes.
*/
@NonNull
public ListenableFuture<PlayerResult> selectTrack(final int index) {
@@ -1951,7 +1951,7 @@
*
* @see #getTrackInfo
* @return a {@link ListenableFuture} which represents the pending completion of the command.
- * {@link PlayerResult} will be delivered when the command completes.
+ * {@link androidx.media2.SessionPlayer.PlayerResult} will be delivered when the command completes.
*/
@NonNull
public ListenableFuture<PlayerResult> deselectTrack(final int index) {
diff --git a/paging/common/src/main/java/androidx/paging/DataSource.java b/paging/common/src/main/java/androidx/paging/DataSource.java
index 07aad2d..2313653 100644
--- a/paging/common/src/main/java/androidx/paging/DataSource.java
+++ b/paging/common/src/main/java/androidx/paging/DataSource.java
@@ -38,7 +38,7 @@
* it loads more data, but the data loaded cannot be updated. If the underlying data set is
* modified, a new PagedList / DataSource pair must be created to represent the new data.
* <h4>Loading Pages</h4>
- * PagedList queries data from its DataSource in response to loading hints. {@link PagedListAdapter}
+ * PagedList queries data from its DataSource in response to loading hints. PagedListAdapter
* calls {@link PagedList#loadAround(int)} to load content as the user scrolls in a RecyclerView.
* <p>
* To control how and when a PagedList queries data from its DataSource, see
@@ -127,7 +127,7 @@
* DataSource becomes invalid, the only way to query more data is to create a new DataSource
* from the Factory.
* <p>
- * {@link LivePagedListBuilder} for example will construct a new PagedList and DataSource
+ * {@link androidx.paging.LivePagedListBuilder} for example will construct a new PagedList and DataSource
* when the current DataSource is invalidated, and pass the new PagedList through the
* {@code LiveData<PagedList>} to observers.
*
diff --git a/paging/common/src/main/java/androidx/paging/ListenablePageKeyedDataSource.java b/paging/common/src/main/java/androidx/paging/ListenablePageKeyedDataSource.java
index b2d87f8..f15075c 100644
--- a/paging/common/src/main/java/androidx/paging/ListenablePageKeyedDataSource.java
+++ b/paging/common/src/main/java/androidx/paging/ListenablePageKeyedDataSource.java
@@ -129,11 +129,11 @@
* This method is called first to initialize a PagedList with data. If it's possible to count
* the items that can be loaded by the DataSource, it's recommended to pass the position and
* count to the
- * {@link InitialResult#InitialResult(List, int, int, Key, Key) InitialResult constructor}. This
+ * {@link InitialResult InitialResult constructor}. This
* enables PagedLists presenting data from this source to display placeholders to represent
* unloaded items.
* <p>
- * {@link PageKeyedDataSource.LoadInitialParams#requestedLoadSize} is a hint, not a requirement,
+ * {@link LoadInitialParams#requestedLoadSize} is a hint, not a requirement,
* so it may be may be altered or ignored.
*
* @param params Parameters for initial load, including requested load size.
diff --git a/paging/common/src/main/java/androidx/paging/ListenablePositionalDataSource.java b/paging/common/src/main/java/androidx/paging/ListenablePositionalDataSource.java
index a4ba462..25c47ab 100644
--- a/paging/common/src/main/java/androidx/paging/ListenablePositionalDataSource.java
+++ b/paging/common/src/main/java/androidx/paging/ListenablePositionalDataSource.java
@@ -31,7 +31,7 @@
* positions, and provide a fixed item count. If your data source can't support loading arbitrary
* requested page sizes (e.g. when network page size constraints are only known at runtime), either
* use {@link PageKeyedDataSource} or {@link ItemKeyedDataSource}, or pass the initial result with
- * the two parameter {@link InitialResult#InitialResult(List, int)} InitialResult constructor}.
+ * the two parameter {@link InitialResult InitialResult constructor}.
*
* @see PositionalDataSource
*
diff --git a/paging/common/src/main/java/androidx/paging/PagedList.java b/paging/common/src/main/java/androidx/paging/PagedList.java
index 16533bc..2339f2b 100644
--- a/paging/common/src/main/java/androidx/paging/PagedList.java
+++ b/paging/common/src/main/java/androidx/paging/PagedList.java
@@ -41,7 +41,7 @@
* <p>
* A PagedList is a {@link List} which loads its data in chunks (pages) from a {@link DataSource}.
* Items can be accessed with {@link #get(int)}, and further loading can be triggered with
- * {@link #loadAround(int)}. To display a PagedList, see {@link PagedListAdapter}, which enables the
+ * {@link #loadAround(int)}. To display a PagedList, see {@link androidx.paging.PagedListAdapter}, which enables the
* binding of a PagedList to a {@link androidx.recyclerview.widget.RecyclerView}.
* <h4>Loading Data</h4>
* <p>
@@ -60,8 +60,8 @@
* PagedList can present data for an unbounded, infinite scrolling list, or a very large but
* countable list. Use {@link Config} to control how many items a PagedList loads, and when.
* <p>
- * If you use {@link LivePagedListBuilder} to get a
- * {@link androidx.lifecycle.LiveData}<PagedList>, it will initialize PagedLists on a
+ * If you use {@link androidx.paging.LivePagedListBuilder} to get a
+ * {@link androidx.lifecycle.LiveData}, it will initialize PagedLists on a
* background thread for you.
* <h4>Placeholders</h4>
* <p>
@@ -79,7 +79,7 @@
* Placeholders have several benefits:
* <ul>
* <li>They express the full sized list to the presentation layer (often a
- * {@link PagedListAdapter}), and so can support scrollbars (without jumping as pages are
+ * {@link androidx.paging.PagedListAdapter}), and so can support scrollbars (without jumping as pages are
* loaded or dropped) and fast-scrolling to any position, loaded or not.
* <li>They avoid the need for a loading spinner at the end of the loaded list, since the list
* is always full sized.
@@ -101,13 +101,13 @@
* <h4>Mutability and Snapshots</h4>
* A PagedList is <em>mutable</em> while loading, or ready to load from its DataSource.
* As loads succeed, a mutable PagedList will be updated via Runnables on the main thread. You can
- * listen to these updates with a {@link Callback}. (Note that {@link PagedListAdapter} will listen
+ * listen to these updates with a {@link Callback}. (Note that {@link androidx.paging.PagedListAdapter} will listen
* to these to signal RecyclerView about the updates/changes).
* <p>
* If a PagedList attempts to load from an invalid DataSource, it will {@link #detach()}
* from the DataSource, meaning that it will no longer attempt to load data. It will return true
* from {@link #isImmutable()}, and a new DataSource / PagedList pair must be created to load
- * further data. See {@link DataSource} and {@link LivePagedListBuilder} for how new PagedLists are
+ * further data. See {@link DataSource} and {@link androidx.paging.LivePagedListBuilder} for how new PagedLists are
* created to represent changed data.
* <p>
* A PagedList snapshot is simply an immutable shallow copy of the current state of the PagedList as
@@ -299,8 +299,8 @@
* {@code onError()} to signify the error as retryable.
* <p>
* You can observe loading state via {@link #addWeakLoadStateListener(LoadStateListener)},
- * though generally this is done through the {@link PagedListAdapter} or
- * {@link AsyncPagedListDiffer}.
+ * though generally this is done through the {@link androidx.paging.PagedListAdapter} or
+ * {@link androidx.paging.AsyncPagedListDiffer}.
*
* @see #addWeakLoadStateListener(LoadStateListener)
* @see #removeWeakLoadStateListener(LoadStateListener)
@@ -443,7 +443,7 @@
* so that the UI doesn't show an empty list, or placeholders for a few frames, just before
* showing initial content.
* <p>
- * {@link LivePagedListBuilder} does this creation on a background thread automatically, if you
+ * {@link androidx.paging.LivePagedListBuilder} does this creation on a background thread automatically, if you
* want to receive a {@code LiveData<PagedList<...>>}.
*
* @param <Key> Type of key used to load data from the DataSource.
@@ -552,14 +552,14 @@
/**
* Creates a {@link PagedList} with the given parameters.
* <p>
- * This call will dispatch the {@link DataSource}'s loadInitial method immediately on the
+ * This call will dispatch the {@link androidx.paging.DataSource}'s loadInitial method immediately on the
* current thread, and block the current on the result. This method should always be called
* on a worker thread to prevent blocking the main thread.
* <p>
* It's fine to create a PagedList with an async DataSource on the main thread, such as in
* the constructor of a ViewModel. An async network load won't block the initialLoad
* function. For a synchronous DataSource such as one created from a Room database, a
- * {@code LiveData<PagedList>} can be safely constructed with {@link LivePagedListBuilder}
+ * {@code LiveData<PagedList>} can be safely constructed with {@link androidx.paging.LivePagedListBuilder}
* on the main thread, since actual construction work is deferred, and done on a background
* thread.
* <p>
@@ -869,7 +869,7 @@
* <p>
* When a PagedList is invalidated, you can pass the key returned by this function to initialize
* the next PagedList. This ensures (depending on load times) that the next PagedList that
- * arrives will have data that overlaps. If you use {@link LivePagedListBuilder}, it will do
+ * arrives will have data that overlaps. If you use androidx.paging.LivePagedListBuilder, it will do
* this for you.
*
* @return Key of position most recently passed to {@link #loadAround(int)}.
@@ -962,7 +962,7 @@
* version, including any changes that may have been made.
* <p>
* The callback is internally held as weak reference, so PagedList doesn't hold a strong
- * reference to its observer, such as a {@link PagedListAdapter}. If an adapter were held with a
+ * reference to its observer, such as a {@link androidx.paging.PagedListAdapter}. If an adapter were held with a
* strong reference, it would be necessary to clear its PagedList observer before it could be
* GC'd.
*
@@ -1242,13 +1242,13 @@
* 2) placeholders are not disabled on the Config.
* <p>
* Call {@code setEnablePlaceholders(false)} to ensure the receiver of the PagedList
- * (often a {@link PagedListAdapter}) doesn't need to account for null items.
+ * (often a {@link androidx.paging.PagedListAdapter}) doesn't need to account for null items.
* <p>
* If placeholders are disabled, not-yet-loaded content will not be present in the list.
* Paging will still occur, but as items are loaded or removed, they will be signaled
* as inserts to the {@link PagedList.Callback}.
* {@link PagedList.Callback#onChanged(int, int)} will not be issued as part of loading,
- * though a {@link PagedListAdapter} may still receive change events as a result of
+ * though a {@link androidx.paging.PagedListAdapter} may still receive change events as a result of
* PagedList diffing.
*
* @param enablePlaceholders False if null placeholders should be disabled.
@@ -1370,7 +1370,7 @@
* account for the new items.
* <p>
* Note that a BoundaryCallback instance shared across multiple PagedLists (e.g. when passed to
- * {@link LivePagedListBuilder#setBoundaryCallback}), the callbacks may be issued multiple
+ * {@link androidx.paging.LivePagedListBuilder#setBoundaryCallback}, the callbacks may be issued multiple
* times. If for example {@link #onItemAtEndLoaded(Object)} triggers a network load, it should
* avoid triggering it again while the load is ongoing.
* <p>
diff --git a/preference/src/main/java/androidx/preference/Preference.java b/preference/src/main/java/androidx/preference/Preference.java
index 4254dd9..1d449d8 100644
--- a/preference/src/main/java/androidx/preference/Preference.java
+++ b/preference/src/main/java/androidx/preference/Preference.java
@@ -835,7 +835,7 @@
* the group is visible.
*
* @param visible Set false if this preference should be hidden from the user
- * {@link R.attr#isPreferenceVisible}
+ * {@link androidx.preference.R.attr#isPreferenceVisible}
* @see #isShown()
*/
public final void setVisible(boolean visible) {
@@ -997,7 +997,7 @@
* letting it wrap onto multiple lines.
*
* @param singleLineTitle Set {@code true} if the title should be constrained to one line
- * {@link R.attr#android_singleLineTitle}
+ * {@link android.R.attr#singleLineTitle}
*/
public void setSingleLineTitle(boolean singleLineTitle) {
mHasSingleLineTitleAttr = true;
@@ -1008,7 +1008,7 @@
* Gets whether the title of this preference is constrained to a single line.
*
* @return {@code true} if the title of this preference is constrained to a single line
- * {@link R.attr#android_singleLineTitle}
+ * {@link android.R.attr#singleLineTitle}
* @see #setSingleLineTitle(boolean)
*/
public boolean isSingleLineTitle() {
@@ -1021,7 +1021,7 @@
* other preferences having icons.
*
* @param iconSpaceReserved Set {@code true} if the space for the icon view should be reserved
- * {@link R.attr#android_iconSpaceReserved}
+ * {@link android.R.attr#iconSpaceReserved}
*/
public void setIconSpaceReserved(boolean iconSpaceReserved) {
if (mIconSpaceReserved != iconSpaceReserved) {
@@ -1034,7 +1034,7 @@
* Returns whether the space of this preference icon view is reserved.
*
* @return {@code true} if the space of this preference icon view is reserved
- * {@link R.attr#android_iconSpaceReserved}
+ * {@link android.R.attr#iconSpaceReserved}
* @see #setIconSpaceReserved(boolean)
*/
public boolean isIconSpaceReserved() {
diff --git a/preference/src/main/java/androidx/preference/PreferenceFragment.java b/preference/src/main/java/androidx/preference/PreferenceFragment.java
index 50ab41d..bdc6851 100644
--- a/preference/src/main/java/androidx/preference/PreferenceFragment.java
+++ b/preference/src/main/java/androidx/preference/PreferenceFragment.java
@@ -244,7 +244,7 @@
* call {@link #setDividerHeight(int)}.
*
* @param divider The drawable to use
- * {@link R.attr#android_divider}
+ * {@link android.R.attr#divider}
*
* @deprecated Use {@link PreferenceFragmentCompat} instead
*/
@@ -258,7 +258,7 @@
* this will override the intrinsic height as set by {@link #setDivider(Drawable)}.
*
* @param height The new height of the divider in pixels
- * {@link R.attr#android_dividerHeight}
+ * {@link android.R.attr#dividerHeight}
*
* @deprecated Use {@link PreferenceFragmentCompat} instead
*/
diff --git a/preference/src/main/java/androidx/preference/PreferenceFragmentCompat.java b/preference/src/main/java/androidx/preference/PreferenceFragmentCompat.java
index f490c55..26af8f8 100644
--- a/preference/src/main/java/androidx/preference/PreferenceFragmentCompat.java
+++ b/preference/src/main/java/androidx/preference/PreferenceFragmentCompat.java
@@ -237,7 +237,7 @@
* call {@link #setDividerHeight(int)}.
*
* @param divider The drawable to use
- * {@link R.attr#android_divider}
+ * {@link android.R.attr#divider}
*/
public void setDivider(Drawable divider) {
mDividerDecoration.setDivider(divider);
@@ -248,7 +248,7 @@
* this will override the intrinsic height as set by {@link #setDivider(Drawable)}.
*
* @param height The new height of the divider in pixels
- * {@link R.attr#android_dividerHeight}
+ * {@link android.R.attr#dividerHeight}
*/
public void setDividerHeight(int height) {
mDividerDecoration.setDividerHeight(height);
diff --git a/preference/src/main/java/androidx/preference/PreferenceGroup.java b/preference/src/main/java/androidx/preference/PreferenceGroup.java
index 90850b5..9c8f284 100644
--- a/preference/src/main/java/androidx/preference/PreferenceGroup.java
+++ b/preference/src/main/java/androidx/preference/PreferenceGroup.java
@@ -143,7 +143,7 @@
* correctly persist state.
*
* @param expandedCount The number of children that is initially shown
- * {@link R.attr#initialExpandedChildrenCount}
+ * {@link androidx.preference.R.attr#initialExpandedChildrenCount}
*/
public void setInitialExpandedChildrenCount(int expandedCount) {
if (expandedCount != Integer.MAX_VALUE && !hasKey()) {
@@ -157,7 +157,7 @@
* Gets the maximal number of children that are initially shown.
*
* @return The maximal number of children that are initially shown
- * {@link R.attr#initialExpandedChildrenCount}
+ * {@link androidx.preference.R.attr#initialExpandedChildrenCount}
*/
public int getInitialExpandedChildrenCount() {
return mInitialExpandedChildrenCount;
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
index 043eb89..f8e522e 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
@@ -170,7 +170,7 @@
* Constructor used when layout manager is set in XML by RecyclerView attribute
* "layoutManager". Defaults to vertical orientation.
*
- * {@link androidx.recyclerview.R.attr#android_orientation}
+ * {@link android.R.attr#orientation}
* {@link androidx.recyclerview.R.attr#reverseLayout}
* {@link androidx.recyclerview.R.attr#stackFromEnd}
*/
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
index 1ff33d9..9b29ac1 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
@@ -10491,7 +10491,7 @@
/**
* Parse the xml attributes to get the most common properties used by layout managers.
*
- * {@link androidx.recyclerview.R.attr#android_orientation}
+ * {@link android.R.attr#orientation}
* {@link androidx.recyclerview.R.attr#spanCount}
* {@link androidx.recyclerview.R.attr#reverseLayout}
* {@link androidx.recyclerview.R.attr#stackFromEnd}
@@ -10550,7 +10550,7 @@
* Some general properties that a LayoutManager may want to use.
*/
public static class Properties {
- /** {@link androidx.recyclerview.R.attr#android_orientation} */
+ /** {@link android.R.attr#orientation} */
public int orientation;
/** {@link androidx.recyclerview.R.attr#spanCount} */
public int spanCount;
diff --git a/slices/view/src/main/java/androidx/slice/widget/RowView.java b/slices/view/src/main/java/androidx/slice/widget/RowView.java
index c51c901..aa64268 100644
--- a/slices/view/src/main/java/androidx/slice/widget/RowView.java
+++ b/slices/view/src/main/java/androidx/slice/widget/RowView.java
@@ -846,6 +846,11 @@
try {
mShowActionSpinner =
mRowAction.getActionItem().fireActionInternal(getContext(), null);
+ if (mObserver != null) {
+ EventInfo info = new EventInfo(getMode(), EventInfo.ACTION_TYPE_CONTENT,
+ EventInfo.ROW_TYPE_LIST, mRowIndex);
+ mObserver.onSliceAction(info, mRowAction.getSliceItem());
+ }
if (mShowActionSpinner && mLoadingListener != null) {
mLoadingListener.onSliceActionLoading(mRowAction.getSliceItem(), mRowIndex);
mLoadingActions.add(mRowAction.getSliceItem());
diff --git a/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java b/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java
index 5c7fb00..9b3cb41 100644
--- a/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java
+++ b/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java
@@ -388,7 +388,7 @@
}
/**
- * @param orientation @{link {@link ViewPager2.Orientation}}
+ * @param orientation {@link ViewPager2.Orientation}
*/
public void setOrientation(@Orientation int orientation) {
mLayoutManager.setOrientation(orientation);
diff --git a/wear/src/main/java/androidx/wear/widget/BoxInsetLayout.java b/wear/src/main/java/androidx/wear/widget/BoxInsetLayout.java
index a838ae3..e43e2bf 100644
--- a/wear/src/main/java/androidx/wear/widget/BoxInsetLayout.java
+++ b/wear/src/main/java/androidx/wear/widget/BoxInsetLayout.java
@@ -389,7 +389,7 @@
* See {@link R.styleable#BoxInsetLayout_Layout BoxInsetLayout Layout Attributes} for a list
* of all child view attributes that this class supports.
*
- * {@link R.attr#Layout_boxedEdges}
+ * {@link androidx.wear.R.attr#boxedEdges}
*/
public static class LayoutParams extends FrameLayout.LayoutParams {
diff --git a/wear/src/main/java/androidx/wear/widget/RoundedDrawable.java b/wear/src/main/java/androidx/wear/widget/RoundedDrawable.java
index 0c65ccf..52d7151 100644
--- a/wear/src/main/java/androidx/wear/widget/RoundedDrawable.java
+++ b/wear/src/main/java/androidx/wear/widget/RoundedDrawable.java
@@ -118,7 +118,7 @@
* Sets the drawable to be rendered.
*
* @param drawable {@link Drawable} to be rendered
- * {@link androidx.wear.R.attr#android_src}
+ * {@link android.R.attr#src}
*/
public void setDrawable(@Nullable Drawable drawable) {
if (Objects.equals(mDrawable, drawable)) {
diff --git a/webkit/src/main/java/androidx/webkit/WebViewAssetLoader.java b/webkit/src/main/java/androidx/webkit/WebViewAssetLoader.java
index 59b0299..923b271 100644
--- a/webkit/src/main/java/androidx/webkit/WebViewAssetLoader.java
+++ b/webkit/src/main/java/androidx/webkit/WebViewAssetLoader.java
@@ -61,7 +61,7 @@
* WebViewAssetLoader.Builder assetLoaderBuilder = new WebViewAssetLoader.Builder(this);
* final WebViewAssetLoader assetLoader = assetLoaderBuilder.build();
* webView.setWebViewClient(new WebViewClient() {
- * @Override
+ * {@literal @}Override
* public WebResourceResponse shouldInterceptRequest(WebView view,
* WebResourceRequest request) {
* return assetLoader.shouldInterceptRequest(request);
diff --git a/webkit/src/main/java/androidx/webkit/WebViewCompat.java b/webkit/src/main/java/androidx/webkit/WebViewCompat.java
index 9c58fbb..9a1387c6 100644
--- a/webkit/src/main/java/androidx/webkit/WebViewCompat.java
+++ b/webkit/src/main/java/androidx/webkit/WebViewCompat.java
@@ -558,12 +558,12 @@
/**
* Sets the renderer client object associated with this WebView.
*
- * <p>See {@link #setWebViewRenderProcessClient(WebView,Executor,WebViewRenderProcessClient} for
+ * <p>See {@link WebViewCompat#setWebViewRenderProcessClient(WebView,Executor,WebViewRenderProcessClient)} for
* details, with the following differences:
*
* <p>Callbacks will execute directly on the thread on which this WebView was instantiated.
*
- * <p>Passing {@code null} for {@code webViewRenderProcessClien} will clear the renderer client
+ * <p>Passing {@code null} for {@code webViewRenderProcessClient} will clear the renderer client
* object for this WebView.
*
* <p>This method should only be called if
diff --git a/webkit/src/main/java/androidx/webkit/WebViewFeature.java b/webkit/src/main/java/androidx/webkit/WebViewFeature.java
index 7a244cf..c4bbc75 100644
--- a/webkit/src/main/java/androidx/webkit/WebViewFeature.java
+++ b/webkit/src/main/java/androidx/webkit/WebViewFeature.java
@@ -144,7 +144,7 @@
/**
* Feature for {@link #isFeatureSupported(String)}.
* This feature covers
- * {@link WebViewCompat#getSafeBrowsingPrivacyPolicyUrl()}.
+ * {@link androidx.webkit.WebViewCompat#getSafeBrowsingPrivacyPolicyUrl()}.
*/
public static final String SAFE_BROWSING_PRIVACY_POLICY_URL =
"SAFE_BROWSING_PRIVACY_POLICY_URL";
@@ -319,14 +319,14 @@
/**
* Feature for {@link #isFeatureSupported(String)}.
* This feature covers
- * {@link WebViewCompat#createWebMessageChannel(WebView)}.
+ * {@link androidx.webkit.WebViewCompat#createWebMessageChannel(WebView)}.
*/
public static final String CREATE_WEB_MESSAGE_CHANNEL = "CREATE_WEB_MESSAGE_CHANNEL";
/**
* Feature for {@link #isFeatureSupported(String)}.
* This feature covers
- * {@link WebViewCompat#postWebMessage(WebView, WebMessageCompat, Uri)}.
+ * {@link androidx.webkit.WebViewCompat#postWebMessage(WebView, WebMessageCompat, Uri)}.
*/
public static final String POST_WEB_MESSAGE = "POST_WEB_MESSAGE";
@@ -341,35 +341,33 @@
/**
* Feature for {@link #isFeatureSupported(String)}.
- * This feature covers {@link WebViewCompat#getWebViewClient(WebView)}
+ * This feature covers {@link androidx.webkit.WebViewCompat#getWebViewClient(WebView)}
*/
public static final String GET_WEB_VIEW_CLIENT = "GET_WEB_VIEW_CLIENT";
/**
* Feature for {@link #isFeatureSupported(String)}.
- * This feature covers {@link WebViewCompat#getWebChromeClient(WebView)}
+ * This feature covers {@link androidx.webkit.WebViewCompat#getWebChromeClient(WebView)}
*/
public static final String GET_WEB_CHROME_CLIENT = "GET_WEB_CHROME_CLIENT";
/**
* Feature for {@link #isFeatureSupported(String)}.
- * This feature covers {@link WebViewCompat#getWebViewRenderer(WebView)}
+ * This feature covers {@link androidx.webkit.WebViewCompat#getWebViewRenderProcess(WebView)}
*/
public static final String GET_WEB_VIEW_RENDERER = "GET_WEB_VIEW_RENDERER";
/**
* Feature for {@link #isFeatureSupported(String)}.
- * This feature covers {@link WebViewRenderer#terminate()}
+ * This feature covers {@link WebViewRenderProcess#terminate()}
*/
public static final String WEB_VIEW_RENDERER_TERMINATE = "WEB_VIEW_RENDERER_TERMINATE";
/**
- * Feature for {@link #isFeatureSupported(String)}.
+ i* Feature for {@link #isFeatureSupported(String)}.
* This feature covers
- * {@link WebViewCompat#getWebViewRendererClient()},
- * {@link WebViewCompat#setWebViewRendererClient(WebViewRendererClient)},
- * {@link WebViewRendererClient#onRendererUnresponsive(WebView,WebViewRenderer)},
- * {@link WebViewRendererClient#onRendererResponsive(WebView,WebViewRenderer)}
+ * {@link androidx.webkit.WebViewCompat#getWebViewRenderProcessClient(WebView)},
+ * {@link androidx.webkit.WebViewCompat#setWebViewRenderProcessClient(WebView, WebViewRenderProcessClient)},
*/
public static final String WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE =
"WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE";
@@ -378,9 +376,7 @@
* Feature for {@link #isFeatureSupported(String)}.
* This feature covers
* {@link ProxyController#setProxyOverride(ProxyConfig, Executor, Runnable)},
- * {@link ProxyController#setProxyOverride(ProxyConfig, Runnable)},
* {@link ProxyController#clearProxyOverride(Executor, Runnable)}, and
- * {@link ProxyController#clearProxyOverride(Runnable)}.
*/
public static final String PROXY_OVERRIDE = "PROXY_OVERRIDE";