Merge "Fixed documentation bug with Junction from @Junction" into androidx-main am: 0359311e8b
Original change: https://android-review.googlesource.com/c/platform/frameworks/support/+/2147269
Change-Id: I37e8beb05e65f6f9215588fac03f4825882eae34
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/activity/activity-ktx/api/1.5.0-beta01.txt b/activity/activity-ktx/api/1.5.0-beta01.txt
index 822d245..0a94311 100644
--- a/activity/activity-ktx/api/1.5.0-beta01.txt
+++ b/activity/activity-ktx/api/1.5.0-beta01.txt
@@ -18,7 +18,7 @@
package androidx.activity.contextaware {
public final class ContextAwareKt {
- method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R> p);
}
}
diff --git a/activity/activity-ktx/api/public_plus_experimental_1.5.0-beta01.txt b/activity/activity-ktx/api/public_plus_experimental_1.5.0-beta01.txt
index f690f03..0ca1317 100644
--- a/activity/activity-ktx/api/public_plus_experimental_1.5.0-beta01.txt
+++ b/activity/activity-ktx/api/public_plus_experimental_1.5.0-beta01.txt
@@ -11,7 +11,7 @@
}
public final class PipHintTrackerKt {
- method @RequiresApi(android.os.Build.VERSION_CODES.O) @kotlinx.coroutines.ExperimentalCoroutinesApi public static suspend Object? trackPipAnimationHintView(android.app.Activity, android.view.View view, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) @kotlinx.coroutines.ExperimentalCoroutinesApi public static suspend Object? trackPipAnimationHintView(android.app.Activity, android.view.View view, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
}
}
@@ -19,7 +19,7 @@
package androidx.activity.contextaware {
public final class ContextAwareKt {
- method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R> p);
}
}
diff --git a/activity/activity-ktx/api/restricted_1.5.0-beta01.txt b/activity/activity-ktx/api/restricted_1.5.0-beta01.txt
index 822d245..0a94311 100644
--- a/activity/activity-ktx/api/restricted_1.5.0-beta01.txt
+++ b/activity/activity-ktx/api/restricted_1.5.0-beta01.txt
@@ -18,7 +18,7 @@
package androidx.activity.contextaware {
public final class ContextAwareKt {
- method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend inline <R> Object? withContextAvailable(androidx.activity.contextaware.ContextAware, kotlin.jvm.functions.Function1<? super android.content.Context,? extends R> onContextAvailable, kotlin.coroutines.Continuation<? super R> p);
}
}
diff --git a/activity/activity/api/current.txt b/activity/activity/api/current.txt
index e01b95c..34caae0 100644
--- a/activity/activity/api/current.txt
+++ b/activity/activity/api/current.txt
@@ -22,6 +22,7 @@
method public androidx.lifecycle.ViewModelStore getViewModelStore();
method public void invalidateMenu();
method @Deprecated @CallSuper protected void onActivityResult(int, int, android.content.Intent?);
+ method @MainThread public void onBackPressed();
method @CallSuper public void onMultiWindowModeChanged(boolean);
method @CallSuper public void onPictureInPictureModeChanged(boolean);
method @Deprecated @CallSuper public void onRequestPermissionsResult(int, String![], int[]);
@@ -48,6 +49,7 @@
ctor public ComponentDialog(android.content.Context context);
method public final androidx.lifecycle.Lifecycle getLifecycle();
method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+ method @CallSuper public void onBackPressed();
}
public abstract class OnBackPressedCallback {
@@ -65,6 +67,7 @@
method @MainThread public void addCallback(androidx.lifecycle.LifecycleOwner, androidx.activity.OnBackPressedCallback);
method @MainThread public boolean hasEnabledCallbacks();
method @MainThread public void onBackPressed();
+ method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher);
}
public interface OnBackPressedDispatcherOwner extends androidx.lifecycle.LifecycleOwner {
@@ -163,6 +166,21 @@
method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int, int);
}
+ public final class PickVisualMediaRequest {
+ method public androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType getMediaType();
+ property public final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType;
+ }
+
+ public static final class PickVisualMediaRequest.Builder {
+ ctor public PickVisualMediaRequest.Builder();
+ method public androidx.activity.result.PickVisualMediaRequest build();
+ method public androidx.activity.result.PickVisualMediaRequest.Builder setMediaType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+ }
+
+ public final class PickVisualMediaRequestKt {
+ method public static androidx.activity.result.PickVisualMediaRequest PickVisualMediaRequest(optional androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+ }
+
}
package androidx.activity.result.contract {
@@ -239,6 +257,47 @@
method public android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
}
+ @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,java.util.List<android.net.Uri>> {
+ ctor public ActivityResultContracts.PickMultipleVisualMedia(optional int maxItems);
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+ method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,android.net.Uri> {
+ ctor public ActivityResultContracts.PickVisualMedia();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+ method public static final boolean isPhotoPickerAvailable();
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.Companion Companion;
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.Companion {
+ method public boolean isPhotoPickerAvailable();
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.ImageAndVideo implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageAndVideo INSTANCE;
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.ImageOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageOnly INSTANCE;
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.SingleMimeType implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ ctor public ActivityResultContracts.PickVisualMedia.SingleMimeType(String mimeType);
+ method public String getMimeType();
+ property public final String mimeType;
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.VideoOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VideoOnly INSTANCE;
+ }
+
+ public static sealed interface ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ }
+
public static final class ActivityResultContracts.RequestMultiplePermissions extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.Map<java.lang.String,java.lang.Boolean>> {
ctor public ActivityResultContracts.RequestMultiplePermissions();
method public android.content.Intent createIntent(android.content.Context context, String![] input);
diff --git a/activity/activity/api/public_plus_experimental_current.txt b/activity/activity/api/public_plus_experimental_current.txt
index e01b95c..34caae0 100644
--- a/activity/activity/api/public_plus_experimental_current.txt
+++ b/activity/activity/api/public_plus_experimental_current.txt
@@ -22,6 +22,7 @@
method public androidx.lifecycle.ViewModelStore getViewModelStore();
method public void invalidateMenu();
method @Deprecated @CallSuper protected void onActivityResult(int, int, android.content.Intent?);
+ method @MainThread public void onBackPressed();
method @CallSuper public void onMultiWindowModeChanged(boolean);
method @CallSuper public void onPictureInPictureModeChanged(boolean);
method @Deprecated @CallSuper public void onRequestPermissionsResult(int, String![], int[]);
@@ -48,6 +49,7 @@
ctor public ComponentDialog(android.content.Context context);
method public final androidx.lifecycle.Lifecycle getLifecycle();
method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+ method @CallSuper public void onBackPressed();
}
public abstract class OnBackPressedCallback {
@@ -65,6 +67,7 @@
method @MainThread public void addCallback(androidx.lifecycle.LifecycleOwner, androidx.activity.OnBackPressedCallback);
method @MainThread public boolean hasEnabledCallbacks();
method @MainThread public void onBackPressed();
+ method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher);
}
public interface OnBackPressedDispatcherOwner extends androidx.lifecycle.LifecycleOwner {
@@ -163,6 +166,21 @@
method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int, int);
}
+ public final class PickVisualMediaRequest {
+ method public androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType getMediaType();
+ property public final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType;
+ }
+
+ public static final class PickVisualMediaRequest.Builder {
+ ctor public PickVisualMediaRequest.Builder();
+ method public androidx.activity.result.PickVisualMediaRequest build();
+ method public androidx.activity.result.PickVisualMediaRequest.Builder setMediaType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+ }
+
+ public final class PickVisualMediaRequestKt {
+ method public static androidx.activity.result.PickVisualMediaRequest PickVisualMediaRequest(optional androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+ }
+
}
package androidx.activity.result.contract {
@@ -239,6 +257,47 @@
method public android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
}
+ @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,java.util.List<android.net.Uri>> {
+ ctor public ActivityResultContracts.PickMultipleVisualMedia(optional int maxItems);
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+ method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,android.net.Uri> {
+ ctor public ActivityResultContracts.PickVisualMedia();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+ method public static final boolean isPhotoPickerAvailable();
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.Companion Companion;
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.Companion {
+ method public boolean isPhotoPickerAvailable();
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.ImageAndVideo implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageAndVideo INSTANCE;
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.ImageOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageOnly INSTANCE;
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.SingleMimeType implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ ctor public ActivityResultContracts.PickVisualMedia.SingleMimeType(String mimeType);
+ method public String getMimeType();
+ property public final String mimeType;
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.VideoOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VideoOnly INSTANCE;
+ }
+
+ public static sealed interface ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ }
+
public static final class ActivityResultContracts.RequestMultiplePermissions extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.Map<java.lang.String,java.lang.Boolean>> {
ctor public ActivityResultContracts.RequestMultiplePermissions();
method public android.content.Intent createIntent(android.content.Context context, String![] input);
diff --git a/activity/activity/api/restricted_current.txt b/activity/activity/api/restricted_current.txt
index 5fdb966..37e460b 100644
--- a/activity/activity/api/restricted_current.txt
+++ b/activity/activity/api/restricted_current.txt
@@ -21,6 +21,7 @@
method public androidx.lifecycle.ViewModelStore getViewModelStore();
method public void invalidateMenu();
method @Deprecated @CallSuper protected void onActivityResult(int, int, android.content.Intent?);
+ method @MainThread public void onBackPressed();
method @CallSuper public void onMultiWindowModeChanged(boolean);
method @CallSuper public void onPictureInPictureModeChanged(boolean);
method @Deprecated @CallSuper public void onRequestPermissionsResult(int, String![], int[]);
@@ -47,6 +48,7 @@
ctor public ComponentDialog(android.content.Context context);
method public final androidx.lifecycle.Lifecycle getLifecycle();
method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+ method @CallSuper public void onBackPressed();
}
public abstract class OnBackPressedCallback {
@@ -64,6 +66,7 @@
method @MainThread public void addCallback(androidx.lifecycle.LifecycleOwner, androidx.activity.OnBackPressedCallback);
method @MainThread public boolean hasEnabledCallbacks();
method @MainThread public void onBackPressed();
+ method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher);
}
public interface OnBackPressedDispatcherOwner extends androidx.lifecycle.LifecycleOwner {
@@ -162,6 +165,21 @@
method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int, int);
}
+ public final class PickVisualMediaRequest {
+ method public androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType getMediaType();
+ property public final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType;
+ }
+
+ public static final class PickVisualMediaRequest.Builder {
+ ctor public PickVisualMediaRequest.Builder();
+ method public androidx.activity.result.PickVisualMediaRequest build();
+ method public androidx.activity.result.PickVisualMediaRequest.Builder setMediaType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+ }
+
+ public final class PickVisualMediaRequestKt {
+ method public static androidx.activity.result.PickVisualMediaRequest PickVisualMediaRequest(optional androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+ }
+
}
package androidx.activity.result.contract {
@@ -238,6 +256,47 @@
method public android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
}
+ @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,java.util.List<android.net.Uri>> {
+ ctor public ActivityResultContracts.PickMultipleVisualMedia(optional int maxItems);
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+ method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,android.net.Uri> {
+ ctor public ActivityResultContracts.PickVisualMedia();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+ method public static final boolean isPhotoPickerAvailable();
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.Companion Companion;
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.Companion {
+ method public boolean isPhotoPickerAvailable();
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.ImageAndVideo implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageAndVideo INSTANCE;
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.ImageOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageOnly INSTANCE;
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.SingleMimeType implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ ctor public ActivityResultContracts.PickVisualMedia.SingleMimeType(String mimeType);
+ method public String getMimeType();
+ property public final String mimeType;
+ }
+
+ public static final class ActivityResultContracts.PickVisualMedia.VideoOnly implements androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ field public static final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VideoOnly INSTANCE;
+ }
+
+ public static sealed interface ActivityResultContracts.PickVisualMedia.VisualMediaType {
+ }
+
public static final class ActivityResultContracts.RequestMultiplePermissions extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.Map<java.lang.String,java.lang.Boolean>> {
ctor public ActivityResultContracts.RequestMultiplePermissions();
method public android.content.Intent createIntent(android.content.Context context, String![] input);
diff --git a/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
index 3e7fefd..389c8bc 100644
--- a/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
+++ b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
@@ -115,6 +115,7 @@
finish()
}
}
+ @Suppress("DEPRECATION")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
launcher.launch(intent.getParcelableExtra("destinationIntent"))
diff --git a/activity/activity/src/androidTest/java/androidx/activity/OnBackPressedDispatcherInvokerTest.kt b/activity/activity/src/androidTest/java/androidx/activity/OnBackPressedDispatcherInvokerTest.kt
new file mode 100644
index 0000000..5e1790d
--- /dev/null
+++ b/activity/activity/src/androidTest/java/androidx/activity/OnBackPressedDispatcherInvokerTest.kt
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.activity
+
+import android.os.Build
+import android.window.OnBackInvokedCallback
+import android.window.OnBackInvokedDispatcher
+import androidx.annotation.RequiresApi
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.S_V2)
+class OnBackPressedDispatcherInvokerTest {
+
+ @Test
+ fun testSimpleInvoker() {
+ var registerCount = 0
+ var unregisterCount = 0
+ val invoker = object : OnBackInvokedDispatcher {
+ override fun registerOnBackInvokedCallback(p0: Int, p1: OnBackInvokedCallback) {
+ registerCount++
+ }
+
+ override fun unregisterOnBackInvokedCallback(p0: OnBackInvokedCallback) {
+ unregisterCount++
+ }
+ }
+
+ val dispatcher = OnBackPressedDispatcher()
+
+ dispatcher.setOnBackInvokedDispatcher(invoker)
+
+ val callback = object : OnBackPressedCallback(true) {
+ override fun handleOnBackPressed() { }
+ }
+
+ dispatcher.addCallback(callback)
+
+ assertThat(registerCount).isEqualTo(1)
+
+ callback.remove()
+
+ assertThat(unregisterCount).isEqualTo(1)
+ }
+
+ @Test
+ fun testInvokerEnableDisable() {
+ var registerCount = 0
+ var unregisterCount = 0
+ val invoker = object : OnBackInvokedDispatcher {
+ override fun registerOnBackInvokedCallback(p0: Int, p1: OnBackInvokedCallback) {
+ registerCount++
+ }
+
+ override fun unregisterOnBackInvokedCallback(p0: OnBackInvokedCallback) {
+ unregisterCount++
+ }
+ }
+
+ val dispatcher = OnBackPressedDispatcher()
+
+ dispatcher.setOnBackInvokedDispatcher(invoker)
+
+ val callback = object : OnBackPressedCallback(true) {
+ override fun handleOnBackPressed() { }
+ }
+
+ dispatcher.addCallback(callback)
+
+ assertThat(registerCount).isEqualTo(1)
+
+ callback.isEnabled = false
+
+ assertThat(unregisterCount).isEqualTo(1)
+
+ callback.isEnabled = true
+
+ assertThat(registerCount).isEqualTo(2)
+ }
+
+ @Test
+ fun testCallbackEnabledDisabled() {
+ val callback = object : OnBackPressedCallback(false) {
+ override fun handleOnBackPressed() {
+ TODO("Not yet implemented")
+ }
+ }
+
+ callback.isEnabled = true
+ callback.isEnabled = false
+ }
+
+ @Test
+ fun testInvokerAddDisabledCallback() {
+ var registerCount = 0
+ var unregisterCount = 0
+ val invoker = object : OnBackInvokedDispatcher {
+ override fun registerOnBackInvokedCallback(p0: Int, p1: OnBackInvokedCallback) {
+ registerCount++
+ }
+
+ override fun unregisterOnBackInvokedCallback(p0: OnBackInvokedCallback) {
+ unregisterCount++
+ }
+ }
+
+ val callback = object : OnBackPressedCallback(false) {
+ override fun handleOnBackPressed() { }
+ }
+
+ val dispatcher = OnBackPressedDispatcher()
+
+ dispatcher.setOnBackInvokedDispatcher(invoker)
+
+ dispatcher.addCallback(callback)
+
+ assertThat(registerCount).isEqualTo(0)
+
+ callback.isEnabled = true
+
+ assertThat(registerCount).isEqualTo(1)
+
+ callback.isEnabled = false
+
+ assertThat(unregisterCount).isEqualTo(1)
+ }
+
+ @Test
+ fun testInvokerAddEnabledCallbackBeforeSet() {
+ var registerCount = 0
+ var unregisterCount = 0
+ val invoker = object : OnBackInvokedDispatcher {
+ override fun registerOnBackInvokedCallback(p0: Int, p1: OnBackInvokedCallback) {
+ registerCount++
+ }
+
+ override fun unregisterOnBackInvokedCallback(p0: OnBackInvokedCallback) {
+ unregisterCount++
+ }
+ }
+
+ val callback = object : OnBackPressedCallback(true) {
+ override fun handleOnBackPressed() { }
+ }
+
+ val dispatcher = OnBackPressedDispatcher()
+ dispatcher.addCallback(callback)
+
+ dispatcher.setOnBackInvokedDispatcher(invoker)
+
+ assertThat(registerCount).isEqualTo(1)
+
+ callback.isEnabled = false
+
+ assertThat(unregisterCount).isEqualTo(1)
+ }
+}
diff --git a/activity/activity/src/androidTest/java/androidx/activity/result/PickVisualMediaRequestTest.kt b/activity/activity/src/androidTest/java/androidx/activity/result/PickVisualMediaRequestTest.kt
new file mode 100644
index 0000000..42992fb
--- /dev/null
+++ b/activity/activity/src/androidTest/java/androidx/activity/result/PickVisualMediaRequestTest.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.activity.result
+
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@MediumTest
+@RunWith(AndroidJUnit4::class)
+class PickVisualMediaRequestTest {
+
+ @Test
+ fun buildPickVisualMedia() {
+ val request = PickVisualMediaRequest.Builder().setMediaType(
+ ActivityResultContracts.PickVisualMedia.VideoOnly
+ ).build()
+ assertThat(request.mediaType).isEqualTo(ActivityResultContracts.PickVisualMedia.VideoOnly)
+ }
+
+ @Test
+ fun PickVisualMediaFun() {
+ val request = PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.VideoOnly)
+
+ assertThat(request.mediaType).isEqualTo(ActivityResultContracts.PickVisualMedia.VideoOnly)
+ }
+}
\ No newline at end of file
diff --git a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
index 02637bb..6e76941 100644
--- a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
+++ b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
@@ -65,6 +65,7 @@
import androidx.annotation.MainThread;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
import androidx.annotation.RequiresApi;
import androidx.core.app.ActivityCompat;
import androidx.core.app.ActivityOptionsCompat;
@@ -76,6 +77,7 @@
import androidx.core.content.ContextCompat;
import androidx.core.content.OnConfigurationChangedProvider;
import androidx.core.content.OnTrimMemoryProvider;
+import androidx.core.os.BuildCompat;
import androidx.core.util.Consumer;
import androidx.core.view.MenuHost;
import androidx.core.view.MenuHostHelper;
@@ -151,8 +153,8 @@
@Override
public void run() {
// Calling onBackPressed() on an Activity with its state saved can cause an
- // error on devices on API levels before 26. We catch that specific error and
- // throw all others.
+ // error on devices on API levels before 26. We catch that specific error
+ // and throw all others.
try {
ComponentActivity.super.onBackPressed();
} catch (IllegalStateException e) {
@@ -171,6 +173,7 @@
private final ActivityResultRegistry mActivityResultRegistry = new ActivityResultRegistry() {
+ @SuppressWarnings("deprecation")
@Override
public <I, O> void onLaunch(
final int requestCode,
@@ -345,6 +348,7 @@
* If your ComponentActivity is annotated with {@link ContentView}, this will
* call {@link #setContentView(int)} for you.
*/
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
// Restore the Saved State first so that it is available to
@@ -353,6 +357,9 @@
mContextAwareHelper.dispatchOnContextAvailable(this);
super.onCreate(savedInstanceState);
ReportFragment.injectIfNeededIn(this);
+ if (BuildCompat.isAtLeastT()) {
+ mOnBackPressedDispatcher.setOnBackInvokedDispatcher(getOnBackInvokedDispatcher());
+ }
if (mContentLayoutId != 0) {
setContentView(mContentLayoutId);
}
diff --git a/activity/activity/src/main/java/androidx/activity/ComponentDialog.kt b/activity/activity/src/main/java/androidx/activity/ComponentDialog.kt
index 6f85fee..e09a4a7 100644
--- a/activity/activity/src/main/java/androidx/activity/ComponentDialog.kt
+++ b/activity/activity/src/main/java/androidx/activity/ComponentDialog.kt
@@ -18,6 +18,7 @@
import android.app.Dialog
import android.content.Context
+import android.os.Build
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
@@ -46,9 +47,13 @@
final override fun getLifecycle(): Lifecycle = lifecycleRegistry
+ @Suppress("ClassVerificationFailure") // needed for onBackInvokedDispatcher call
@CallSuper
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ if (Build.VERSION.SDK_INT >= 33) {
+ onBackPressedDispatcher.setOnBackInvokedDispatcher(onBackInvokedDispatcher)
+ }
lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE)
}
diff --git a/activity/activity/src/main/java/androidx/activity/OnBackPressedCallback.java b/activity/activity/src/main/java/androidx/activity/OnBackPressedCallback.java
index 5fc26dc..afa44f3 100644
--- a/activity/activity/src/main/java/androidx/activity/OnBackPressedCallback.java
+++ b/activity/activity/src/main/java/androidx/activity/OnBackPressedCallback.java
@@ -18,6 +18,10 @@
import androidx.annotation.MainThread;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
+import androidx.core.os.BuildCompat;
+import androidx.core.util.Consumer;
import androidx.lifecycle.LifecycleOwner;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -44,6 +48,7 @@
private boolean mEnabled;
private CopyOnWriteArrayList<Cancellable> mCancellables = new CopyOnWriteArrayList<>();
+ private Consumer<Boolean> mEnabledConsumer;
/**
* Create a {@link OnBackPressedCallback}.
@@ -66,9 +71,13 @@
*
* @param enabled whether the callback should be considered enabled
*/
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
@MainThread
public final void setEnabled(boolean enabled) {
mEnabled = enabled;
+ if (mEnabledConsumer != null) {
+ mEnabledConsumer.accept(mEnabled);
+ }
}
/**
@@ -106,4 +115,8 @@
void removeCancellable(@NonNull Cancellable cancellable) {
mCancellables.remove(cancellable);
}
+
+ void setIsEnabledConsumer(@Nullable Consumer<Boolean> isEnabled) {
+ mEnabledConsumer = isEnabled;
+ }
}
diff --git a/activity/activity/src/main/java/androidx/activity/OnBackPressedDispatcher.java b/activity/activity/src/main/java/androidx/activity/OnBackPressedDispatcher.java
index 6ff39f1..e306a9b 100644
--- a/activity/activity/src/main/java/androidx/activity/OnBackPressedDispatcher.java
+++ b/activity/activity/src/main/java/androidx/activity/OnBackPressedDispatcher.java
@@ -17,10 +17,18 @@
package androidx.activity;
import android.annotation.SuppressLint;
+import android.os.Build;
+import android.window.OnBackInvokedCallback;
+import android.window.OnBackInvokedDispatcher;
+import androidx.annotation.DoNotInline;
import androidx.annotation.MainThread;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
+import androidx.annotation.RequiresApi;
+import androidx.core.os.BuildCompat;
+import androidx.core.util.Consumer;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleEventObserver;
import androidx.lifecycle.LifecycleOwner;
@@ -59,6 +67,42 @@
@SuppressWarnings("WeakerAccess") /* synthetic access */
final ArrayDeque<OnBackPressedCallback> mOnBackPressedCallbacks = new ArrayDeque<>();
+ private Consumer<Boolean> mEnabledConsumer;
+
+ private OnBackInvokedCallback mOnBackInvokedCallback;
+ private OnBackInvokedDispatcher mInvokedDispatcher;
+ private boolean mBackInvokedCallbackRegistered = false;
+
+ /**
+ * Sets the {@link OnBackInvokedDispatcher} for handling system back for Android SDK T+.
+ *
+ * @param invoker the OnBackInvokedDispatcher to be set on this dispatcher
+ */
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ public void setOnBackInvokedDispatcher(@NonNull OnBackInvokedDispatcher invoker) {
+ mInvokedDispatcher = invoker;
+ updateBackInvokedCallbackState();
+ }
+
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ void updateBackInvokedCallbackState() {
+ boolean shouldBeRegistered = hasEnabledCallbacks();
+ if (mInvokedDispatcher != null) {
+ if (shouldBeRegistered && !mBackInvokedCallbackRegistered) {
+ Api33Impl.registerOnBackInvokedCallback(
+ mInvokedDispatcher,
+ OnBackInvokedDispatcher.PRIORITY_OVERLAY,
+ mOnBackInvokedCallback
+ );
+ mBackInvokedCallbackRegistered = true;
+ } else if (!shouldBeRegistered && mBackInvokedCallbackRegistered) {
+ Api33Impl.unregisterOnBackInvokedCallback(mInvokedDispatcher,
+ mOnBackInvokedCallback);
+ mBackInvokedCallbackRegistered = false;
+ }
+ }
+ }
+
/**
* Create a new OnBackPressedDispatcher that dispatches System back button pressed events
* to one or more {@link OnBackPressedCallback} instances.
@@ -74,8 +118,22 @@
* @param fallbackOnBackPressed The Runnable that should be triggered if
* {@link #onBackPressed()} is called when {@link #hasEnabledCallbacks()} returns false.
*/
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
public OnBackPressedDispatcher(@Nullable Runnable fallbackOnBackPressed) {
mFallbackOnBackPressed = fallbackOnBackPressed;
+ if (BuildCompat.isAtLeastT()) {
+ mEnabledConsumer = aBoolean -> {
+ if (BuildCompat.isAtLeastT()) {
+ updateBackInvokedCallbackState();
+ }
+ };
+ mOnBackInvokedCallback = new OnBackInvokedCallback() {
+ @Override
+ public void onBackInvoked() {
+ onBackPressed();
+ }
+ };
+ }
}
/**
@@ -107,6 +165,7 @@
* @return a {@link Cancellable} which can be used to {@link Cancellable#cancel() cancel}
* the callback and remove it from the set of OnBackPressedCallbacks.
*/
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
@SuppressWarnings("WeakerAccess") /* synthetic access */
@MainThread
@NonNull
@@ -114,6 +173,10 @@
mOnBackPressedCallbacks.add(onBackPressedCallback);
OnBackPressedCancellable cancellable = new OnBackPressedCancellable(onBackPressedCallback);
onBackPressedCallback.addCancellable(cancellable);
+ if (BuildCompat.isAtLeastT()) {
+ updateBackInvokedCallbackState();
+ onBackPressedCallback.setIsEnabledConsumer(mEnabledConsumer);
+ }
return cancellable;
}
@@ -141,6 +204,7 @@
*
* @see #onBackPressed()
*/
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
@SuppressLint("LambdaLast")
@MainThread
public void addCallback(@NonNull LifecycleOwner owner,
@@ -152,6 +216,10 @@
onBackPressedCallback.addCancellable(
new LifecycleOnBackPressedCancellable(lifecycle, onBackPressedCallback));
+ if (BuildCompat.isAtLeastT()) {
+ updateBackInvokedCallbackState();
+ onBackPressedCallback.setIsEnabledConsumer(mEnabledConsumer);
+ }
}
/**
@@ -204,10 +272,15 @@
mOnBackPressedCallback = onBackPressedCallback;
}
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
@Override
public void cancel() {
mOnBackPressedCallbacks.remove(mOnBackPressedCallback);
mOnBackPressedCallback.removeCancellable(this);
+ if (BuildCompat.isAtLeastT()) {
+ mOnBackPressedCallback.setIsEnabledConsumer(null);
+ updateBackInvokedCallbackState();
+ }
}
}
@@ -251,4 +324,25 @@
}
}
}
+
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ static class Api33Impl {
+ private Api33Impl() { }
+
+ @DoNotInline
+ static void registerOnBackInvokedCallback(
+ OnBackInvokedDispatcher onBackInvokedDispatcher, int priority,
+ OnBackInvokedCallback onBackInvokedCallback
+ ) {
+ onBackInvokedDispatcher.registerOnBackInvokedCallback(priority, onBackInvokedCallback);
+ }
+
+ @DoNotInline
+ static void unregisterOnBackInvokedCallback(
+ OnBackInvokedDispatcher onBackInvokedDispatcher,
+ OnBackInvokedCallback onBackInvokedCallback
+ ) {
+ onBackInvokedDispatcher.unregisterOnBackInvokedCallback(onBackInvokedCallback);
+ }
+ }
}
diff --git a/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt b/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt
new file mode 100644
index 0000000..45cbfe9
--- /dev/null
+++ b/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.activity.result
+
+import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType
+import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageAndVideo
+
+/**
+ * Creates a request for a
+ * [androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia] or
+ * [androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia] Activity Contract.
+ *
+ * @param mediaType type to go into the PickVisualMediaRequest
+ *
+ * @return a PickVisualMediaRequest that contains the given input
+ */
+fun PickVisualMediaRequest(
+ mediaType: VisualMediaType = ImageAndVideo
+) = PickVisualMediaRequest.Builder().setMediaType(mediaType).build()
+
+/**
+ * A request for a
+ * [androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia] or
+ * [androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia] Activity Contract.
+ */
+class PickVisualMediaRequest internal constructor() {
+
+ var mediaType: VisualMediaType = ImageAndVideo
+ internal set
+
+ /**
+ * A builder for constructing [PickVisualMediaRequest] instances.
+ */
+ class Builder {
+
+ private var mediaType: VisualMediaType = ImageAndVideo
+
+ /**
+ * Set the media type for the [PickVisualMediaRequest].
+ *
+ * The type is the mime type to filter by, e.g. `PickVisualMedia.ImageOnly`,
+ * `PickVisualMedia.ImageAndVideo`, `PickVisualMedia.SingleMimeType("image/gif")`
+ *
+ * @param mediaType type to go into the PickVisualMediaRequest
+ * @return This builder.
+ */
+ fun setMediaType(mediaType: VisualMediaType): Builder {
+ this.mediaType = mediaType
+ return this
+ }
+
+ /**
+ * Build the PickVisualMediaRequest specified by this builder.
+ *
+ * @return the newly constructed PickVisualMediaRequest.
+ */
+ fun build(): PickVisualMediaRequest = PickVisualMediaRequest().apply {
+ this.mediaType = this@Builder.mediaType
+ }
+ }
+}
diff --git a/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt b/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt
index 9af89ed..9ccaffc 100644
--- a/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt
+++ b/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt
@@ -22,11 +22,13 @@
import android.graphics.Bitmap
import android.net.Uri
import android.os.Build
+import android.os.ext.SdkExtensions.getExtensionVersion
import android.provider.ContactsContract
import android.provider.DocumentsContract
import android.provider.MediaStore
import androidx.activity.result.ActivityResult
import androidx.activity.result.IntentSenderRequest
+import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts.GetMultipleContents.Companion.getClipDataUris
import androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion.ACTION_INTENT_SENDER_REQUEST
import androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion.EXTRA_SEND_INTENT_EXCEPTION
@@ -257,6 +259,7 @@
input: Void?
): SynchronousResult<Bitmap?>? = null
+ @Suppress("DEPRECATION")
final override fun parseResult(resultCode: Int, intent: Intent?): Bitmap? {
return intent.takeIf { resultCode == Activity.RESULT_OK }?.getParcelableExtra("data")
}
@@ -317,6 +320,7 @@
input: Uri
): SynchronousResult<Bitmap?>? = null
+ @Suppress("DEPRECATION")
final override fun parseResult(resultCode: Int, intent: Intent?): Bitmap? {
return intent.takeIf { resultCode == Activity.RESULT_OK }?.getParcelableExtra("data")
}
@@ -597,4 +601,192 @@
return intent.takeIf { resultCode == Activity.RESULT_OK }?.data
}
}
+
+ /**
+ * An [ActivityResultContract] to use the photo picker through [MediaStore.ACTION_PICK_IMAGES]
+ * when available, and else rely on ACTION_OPEN_DOCUMENT.
+ *
+ * The input is a [PickVisualMediaRequest].
+ *
+ * The output is a `Uri` when the user has selected a media or `null` when the user hasn't
+ * selected any item. Keep in mind that `Uri` returned by the photo picker isn't writable.
+ *
+ * This can be extended to override [createIntent] if you wish to pass additional
+ * extras to the Intent created by `super.createIntent()`.
+ */
+ open class PickVisualMedia : ActivityResultContract<PickVisualMediaRequest, Uri?>() {
+ companion object {
+ /**
+ * Check if the current device has support for the photo picker by checking the running
+ * Android version or the SDK extension version
+ */
+ @JvmStatic
+ fun isPhotoPickerAvailable(): Boolean {
+ return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ true
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ // getExtension is seen as part of Android Tiramisu only while the SdkExtensions
+ // have been added on Android R
+ getExtensionVersion(Build.VERSION_CODES.R) >= 2
+ } else {
+ false
+ }
+ }
+
+ internal fun getVisualMimeType(input: VisualMediaType): String? {
+ return when (input) {
+ is ImageOnly -> "image/*"
+ is VideoOnly -> "video/*"
+ is SingleMimeType -> input.mimeType
+ is ImageAndVideo -> null
+ }
+ }
+ }
+
+ /**
+ * Represents filter input type accepted by the photo picker.
+ */
+ sealed interface VisualMediaType
+
+ /**
+ * [VisualMediaType] object used to filter images only when using the photo picker.
+ */
+ object ImageOnly : VisualMediaType
+
+ /**
+ * [VisualMediaType] object used to filter video only when using the photo picker.
+ */
+ object VideoOnly : VisualMediaType
+
+ /**
+ * [VisualMediaType] object used to filter images and video when using the photo picker.
+ */
+ object ImageAndVideo : VisualMediaType
+
+ /**
+ * [VisualMediaType] class used to filter a single mime type only when using the photo
+ * picker.
+ */
+ class SingleMimeType(val mimeType: String) : VisualMediaType
+
+ @CallSuper
+ override fun createIntent(context: Context, input: PickVisualMediaRequest): Intent {
+ // Check if Photo Picker is available on the device
+ return if (isPhotoPickerAvailable()) {
+ Intent(MediaStore.ACTION_PICK_IMAGES).apply {
+ type = getVisualMimeType(input.mediaType)
+ }
+ } else {
+ // For older devices running KitKat and higher and devices running Android 12
+ // and 13 without the SDK extension that includes the Photo Picker, rely on the
+ // ACTION_OPEN_DOCUMENT intent
+ Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
+ type = getVisualMimeType(input.mediaType)
+
+ if (type == null) {
+ // ACTION_OPEN_DOCUMENT requires to set this parameter when launching the
+ // intent with multiple mime types
+ type = "*/*"
+ putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("image/*", "video/*"))
+ }
+ }
+ }
+ }
+
+ @Suppress("InvalidNullabilityOverride")
+ final override fun getSynchronousResult(
+ context: Context,
+ input: PickVisualMediaRequest
+ ): SynchronousResult<Uri?>? = null
+
+ final override fun parseResult(resultCode: Int, intent: Intent?): Uri? {
+ return intent.takeIf { resultCode == Activity.RESULT_OK }?.data
+ }
+ }
+
+ /**
+ * An [ActivityResultContract] to use the Photo Picker through [MediaStore.ACTION_PICK_IMAGES]
+ * when available, and else rely on ACTION_OPEN_DOCUMENT.
+ *
+ * The constructor accepts one parameter `maxItems` to limit the number of selectable items when
+ * using the photo picker to return. Keep in mind that this parameter isn't supported on devices
+ * when the photo picker isn't available.
+ *
+ * The input is a [PickVisualMediaRequest].
+ *
+ * The output is a list `Uri` of the selected media. It can be empty if the user hasn't selected
+ * any items. Keep in mind that `Uri` returned by the photo picker aren't writable.
+ *
+ * This can be extended to override [createIntent] if you wish to pass additional
+ * extras to the Intent created by `super.createIntent()`.
+ */
+ @RequiresApi(19)
+ open class PickMultipleVisualMedia(
+ private val maxItems: Int = getMaxItems()
+ ) : ActivityResultContract<PickVisualMediaRequest, List<@JvmSuppressWildcards Uri>>() {
+
+ init {
+ require(maxItems > 1) {
+ "Max items must be higher than 1"
+ }
+ }
+
+ @CallSuper
+ override fun createIntent(context: Context, input: PickVisualMediaRequest): Intent {
+ // Check to see if the photo picker is available
+ return if (PickVisualMedia.isPhotoPickerAvailable()) {
+ Intent(MediaStore.ACTION_PICK_IMAGES).apply {
+ type = PickVisualMedia.getVisualMimeType(input.mediaType)
+
+ require(maxItems <= MediaStore.getPickImagesMaxLimit()) {
+ "Max items must be less or equals MediaStore.getPickImagesMaxLimit()"
+ }
+
+ putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxItems)
+ }
+ } else {
+ // For older devices running KitKat and higher and devices running Android 12
+ // and 13 without the SDK extension that includes the Photo Picker, rely on the
+ // ACTION_OPEN_DOCUMENT intent
+ Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
+ type = PickVisualMedia.getVisualMimeType(input.mediaType)
+ putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
+
+ if (type == null) {
+ // ACTION_OPEN_DOCUMENT requires to set this parameter when launching the
+ // intent with multiple mime types
+ type = "*/*"
+ putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("image/*", "video/*"))
+ }
+ }
+ }
+ }
+
+ @Suppress("InvalidNullabilityOverride")
+ final override fun getSynchronousResult(
+ context: Context,
+ input: PickVisualMediaRequest
+ ): SynchronousResult<List<@JvmSuppressWildcards Uri>>? = null
+
+ final override fun parseResult(resultCode: Int, intent: Intent?): List<Uri> {
+ return intent.takeIf {
+ resultCode == Activity.RESULT_OK
+ }?.getClipDataUris() ?: emptyList()
+ }
+
+ internal companion object {
+ /**
+ * The photo picker has a maximum limit of selectable items returned by
+ * [MediaStore.getPickImagesMaxLimit()]. On devices not supporting the photo picker, the
+ * limit is ignored.
+ *
+ * @see MediaStore.EXTRA_PICK_IMAGES_MAX
+ */
+ internal fun getMaxItems() = if (PickVisualMedia.isPhotoPickerAvailable()) {
+ MediaStore.getPickImagesMaxLimit()
+ } else {
+ Integer.MAX_VALUE
+ }
+ }
+ }
}
diff --git a/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt b/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt
index 11780b3..947be53 100644
--- a/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt
+++ b/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt
@@ -36,11 +36,14 @@
import androidx.activity.ComponentActivity
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.IntentSenderRequest
+import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.result.contract.ActivityResultContracts.CaptureVideo
import androidx.activity.result.contract.ActivityResultContracts.CreateDocument
import androidx.activity.result.contract.ActivityResultContracts.GetContent
import androidx.activity.result.contract.ActivityResultContracts.OpenMultipleDocuments
+import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia
+import androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia
import androidx.activity.result.contract.ActivityResultContracts.RequestPermission
import androidx.activity.result.contract.ActivityResultContracts.TakePicture
import androidx.activity.result.contract.ActivityResultContracts.TakePicturePreview
@@ -77,6 +80,10 @@
toast("Got image: $uri")
}
+ lateinit var pickVisualMedia: ActivityResultLauncher<PickVisualMediaRequest>
+
+ lateinit var pickMultipleVisualMedia: ActivityResultLauncher<PickVisualMediaRequest>
+
lateinit var createDocument: ActivityResultLauncher<String>
lateinit var openDocuments: ActivityResultLauncher<Array<String>>
@@ -92,6 +99,17 @@
super.onCreate(savedInstanceState)
if (android.os.Build.VERSION.SDK_INT >= 19) {
+ pickVisualMedia = registerForActivityResult(PickVisualMedia()) { uri ->
+ toast("Got image: $uri")
+ }
+ pickMultipleVisualMedia =
+ registerForActivityResult(PickMultipleVisualMedia(5)) { uris ->
+ var media = ""
+ uris.forEach {
+ media += "uri: $it \n"
+ }
+ toast("Got media files: $media")
+ }
createDocument = registerForActivityResult(CreateDocument("image/png")) { uri ->
toast("Created document: $uri")
}
@@ -124,10 +142,25 @@
val uri = FileProvider.getUriForFile(this@MainActivity, packageName, file)
captureVideo.launch(uri)
}
- button("Pick an image") {
+ button("Pick an image (w/ GET_CONTENT)") {
getContent.launch("image/*")
}
if (android.os.Build.VERSION.SDK_INT >= 19) {
+ button("Pick an image (w/ photo picker)") {
+ pickVisualMedia.launch(
+ PickVisualMediaRequest(PickVisualMedia.ImageOnly)
+ )
+ }
+ button("Pick a GIF (w/ photo picker)") {
+ pickVisualMedia.launch(
+ PickVisualMediaRequest(PickVisualMedia.SingleMimeType("image/gif"))
+ )
+ }
+ button("Pick 5 visual media max (w/ photo picker)") {
+ pickMultipleVisualMedia.launch(
+ PickVisualMediaRequest(PickVisualMedia.ImageAndVideo)
+ )
+ }
button("Create document") {
createDocument.launch("Temp")
}
diff --git a/ads/ads-identifier/integration-tests/testapp/lint-baseline.xml b/ads/ads-identifier/integration-tests/testapp/lint-baseline.xml
index 9f31c6e..f924709 100644
--- a/ads/ads-identifier/integration-tests/testapp/lint-baseline.xml
+++ b/ads/ads-identifier/integration-tests/testapp/lint-baseline.xml
@@ -7,7 +7,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"/>
+ file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"
+ line="51"
+ column="29"/>
</issue>
<issue
@@ -16,7 +18,9 @@
errorLine1=" public void getId(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"/>
+ file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"
+ line="57"
+ column="23"/>
</issue>
<issue
@@ -25,7 +29,9 @@
errorLine1=" public void getIdSync(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"/>
+ file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"
+ line="76"
+ column="27"/>
</issue>
<issue
@@ -34,7 +40,9 @@
errorLine1=" public void isProviderAvailable(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"/>
+ file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"
+ line="98"
+ column="37"/>
</issue>
<issue
@@ -43,7 +51,9 @@
errorLine1=" public void listProvider(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"/>
+ file="src/main/java/androidx/ads/identifier/testapp/AdsIdentifierActivity.java"
+ line="106"
+ column="30"/>
</issue>
</issues>
diff --git a/annotation/annotation-experimental-lint/integration-tests/lint-baseline.xml b/annotation/annotation-experimental-lint/integration-tests/lint-baseline.xml
index 576720a..a4b68bb 100644
--- a/annotation/annotation-experimental-lint/integration-tests/lint-baseline.xml
+++ b/annotation/annotation-experimental-lint/integration-tests/lint-baseline.xml
@@ -241,7 +241,9 @@
errorLine1=" val dateProvider = DateProvider()"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"
+ line="29"
+ column="28"/>
</issue>
<issue
@@ -250,7 +252,9 @@
errorLine1=" return experimentalObject.field"
errorLine2=" ~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="29"
+ column="35"/>
</issue>
<issue
@@ -259,7 +263,9 @@
errorLine1=" return dateProvider.date"
errorLine2=" ~~~~">
<location
- file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"
+ line="30"
+ column="29"/>
</issue>
<issue
@@ -268,7 +274,9 @@
errorLine1=" val experimentalObject = AnnotatedJavaClass()"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="36"
+ column="34"/>
</issue>
<issue
@@ -277,7 +285,9 @@
errorLine1=" return experimentalObject.method()"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="37"
+ column="35"/>
</issue>
<issue
@@ -286,7 +296,9 @@
errorLine1=" return AnnotatedJavaClass.FIELD_STATIC"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="44"
+ column="35"/>
</issue>
<issue
@@ -295,7 +307,9 @@
errorLine1=" return AnnotatedJavaClass.methodStatic()"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="51"
+ column="35"/>
</issue>
<issue
@@ -304,7 +318,9 @@
errorLine1=" val locationProvider = LocationProvider()"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"
+ line="57"
+ column="32"/>
</issue>
<issue
@@ -313,7 +329,9 @@
errorLine1=" return dateProvider.date + locationProvider.location"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/experimental/UseJavaExperimentalFromKt.kt"
+ line="58"
+ column="53"/>
</issue>
<issue
@@ -322,7 +340,9 @@
errorLine1=" return stableObject.field"
errorLine2=" ~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="77"
+ column="29"/>
</issue>
<issue
@@ -331,7 +351,9 @@
errorLine1=" return stableObject.method()"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="85"
+ column="29"/>
</issue>
<issue
@@ -340,7 +362,9 @@
errorLine1=" return AnnotatedJavaMembers.FIELD_STATIC"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="92"
+ column="37"/>
</issue>
<issue
@@ -349,7 +373,9 @@
errorLine1=" return AnnotatedJavaMembers.methodStatic()"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="99"
+ column="37"/>
</issue>
<issue
@@ -358,7 +384,9 @@
errorLine1=" return experimentalObject.method() + AnnotatedJavaClass2.FIELD_STATIC"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="108"
+ column="66"/>
</issue>
<issue
@@ -367,7 +395,9 @@
errorLine1=" AnnotatedJavaMembers().field = -1"
errorLine2=" ~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="144"
+ column="32"/>
</issue>
<issue
@@ -376,7 +406,9 @@
errorLine1=" AnnotatedJavaMembers().field = -1"
errorLine2=" ~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="144"
+ column="40"/>
</issue>
<issue
@@ -385,7 +417,9 @@
errorLine1=" val value = AnnotatedJavaMembers().field"
errorLine2=" ~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="145"
+ column="44"/>
</issue>
<issue
@@ -394,7 +428,9 @@
errorLine1=" AnnotatedJavaMembers().fieldWithSetMarker = -1"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="146"
+ column="32"/>
</issue>
<issue
@@ -403,7 +439,9 @@
errorLine1=" AnnotatedJavaMembers().fieldWithSetMarker = -1"
errorLine2=" ~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalFromKt.kt"
+ line="146"
+ column="53"/>
</issue>
<issue
@@ -412,7 +450,9 @@
errorLine1=" return stableObject.field;"
errorLine2=" ~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+ line="30"
+ column="29"/>
</issue>
<issue
@@ -421,7 +461,9 @@
errorLine1=" return stableObject.method();"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+ line="38"
+ column="29"/>
</issue>
<issue
@@ -430,7 +472,9 @@
errorLine1=" return AnnotatedJavaMembers.FIELD_STATIC;"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+ line="45"
+ column="37"/>
</issue>
<issue
@@ -439,7 +483,9 @@
errorLine1=" return AnnotatedJavaMembers.methodStatic();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+ line="52"
+ column="37"/>
</issue>
<issue
@@ -448,7 +494,9 @@
errorLine1=" new AnnotatedJavaMembers().field = -1;"
errorLine2=" ~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+ line="59"
+ column="36"/>
</issue>
<issue
@@ -457,7 +505,9 @@
errorLine1=" new AnnotatedJavaMembers().field = -1;"
errorLine2=" ~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+ line="59"
+ column="44"/>
</issue>
<issue
@@ -466,7 +516,9 @@
errorLine1=" int value = new AnnotatedJavaMembers().field;"
errorLine2=" ~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+ line="60"
+ column="48"/>
</issue>
<issue
@@ -475,7 +527,9 @@
errorLine1=" new AnnotatedJavaMembers().setFieldWithSetMarker(-1);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalMembersFromJava.java"
+ line="61"
+ column="36"/>
</issue>
<issue
@@ -484,7 +538,9 @@
errorLine1=" AnnotatedJavaClass2 experimentalObject2 = new AnnotatedJavaClass2();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalMultipleMarkersFromJava.java"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalMultipleMarkersFromJava.java"
+ line="33"
+ column="51"/>
</issue>
<issue
@@ -493,7 +549,9 @@
errorLine1=" return experimentalObject.method() + experimentalObject2.field;"
errorLine2=" ~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaExperimentalMultipleMarkersFromJava.java"/>
+ file="src/main/java/sample/optin/UseJavaExperimentalMultipleMarkersFromJava.java"
+ line="34"
+ column="66"/>
</issue>
<issue
@@ -502,7 +560,9 @@
errorLine1=" Bar bar = new Bar();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseJavaPackageFromJava.java"/>
+ file="src/main/java/sample/experimental/UseJavaPackageFromJava.java"
+ line="28"
+ column="19"/>
</issue>
<issue
@@ -511,7 +571,9 @@
errorLine1=" bar.baz();"
errorLine2=" ~~~">
<location
- file="src/main/java/sample/experimental/UseJavaPackageFromJava.java"/>
+ file="src/main/java/sample/experimental/UseJavaPackageFromJava.java"
+ line="29"
+ column="13"/>
</issue>
<issue
@@ -520,7 +582,9 @@
errorLine1=" AnnotatedJavaPackage experimentalObject = new AnnotatedJavaPackage();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaPackageFromJava.java"/>
+ file="src/main/java/sample/optin/UseJavaPackageFromJava.java"
+ line="33"
+ column="51"/>
</issue>
<issue
@@ -529,7 +593,9 @@
errorLine1=" experimentalObject.method();"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaPackageFromJava.java"/>
+ file="src/main/java/sample/optin/UseJavaPackageFromJava.java"
+ line="34"
+ column="28"/>
</issue>
<issue
@@ -538,7 +604,9 @@
errorLine1=" callPackageExperimental();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseJavaPackageFromJava.java"/>
+ file="src/main/java/sample/experimental/UseJavaPackageFromJava.java"
+ line="52"
+ column="9"/>
</issue>
<issue
@@ -547,7 +615,9 @@
errorLine1=" safePropagateMarker();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaPackageFromJava.java"/>
+ file="src/main/java/sample/optin/UseJavaPackageFromJava.java"
+ line="67"
+ column="9"/>
</issue>
<issue
@@ -556,7 +626,9 @@
errorLine1=" val experimentalObject = AnnotatedJavaPackage()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaPackageFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaPackageFromKt.kt"
+ line="30"
+ column="34"/>
</issue>
<issue
@@ -565,7 +637,9 @@
errorLine1=" experimentalObject.method()"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaPackageFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaPackageFromKt.kt"
+ line="31"
+ column="28"/>
</issue>
<issue
@@ -574,7 +648,9 @@
errorLine1=" val bar = Bar()"
errorLine2=" ~~~">
<location
- file="src/main/java/sample/experimental/UseJavaPackageFromKt.kt"/>
+ file="src/main/java/sample/experimental/UseJavaPackageFromKt.kt"
+ line="32"
+ column="19"/>
</issue>
<issue
@@ -583,7 +659,9 @@
errorLine1=" bar.baz()"
errorLine2=" ~~~">
<location
- file="src/main/java/sample/experimental/UseJavaPackageFromKt.kt"/>
+ file="src/main/java/sample/experimental/UseJavaPackageFromKt.kt"
+ line="33"
+ column="13"/>
</issue>
<issue
@@ -592,7 +670,9 @@
errorLine1=" callPackageExperimental()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseJavaPackageFromKt.kt"/>
+ file="src/main/java/sample/experimental/UseJavaPackageFromKt.kt"
+ line="56"
+ column="9"/>
</issue>
<issue
@@ -601,7 +681,9 @@
errorLine1=" callPackageExperimental()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseJavaPackageFromKt.kt"/>
+ file="src/main/java/sample/optin/UseJavaPackageFromKt.kt"
+ line="64"
+ column="9"/>
</issue>
<issue
@@ -610,7 +692,9 @@
errorLine1=" sample.experimental.DateProviderKt dateProvider = new sample.experimental.DateProviderKt();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+ line="25"
+ column="59"/>
</issue>
<issue
@@ -619,7 +703,9 @@
errorLine1=" return dateProvider.getDate();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+ line="26"
+ column="29"/>
</issue>
<issue
@@ -628,7 +714,9 @@
errorLine1=" AnnotatedKotlinClass experimentalObject = new AnnotatedKotlinClass();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+ line="28"
+ column="51"/>
</issue>
<issue
@@ -637,7 +725,9 @@
errorLine1=" return experimentalObject.method();"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+ line="29"
+ column="35"/>
</issue>
<issue
@@ -646,7 +736,9 @@
errorLine1=" LocationProviderKt locationProvider = new LocationProviderKt();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+ line="54"
+ column="47"/>
</issue>
<issue
@@ -655,7 +747,9 @@
errorLine1=" return dateProvider.getDate() + locationProvider.getLocation();"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+ line="55"
+ column="58"/>
</issue>
<issue
@@ -664,7 +758,9 @@
errorLine1=" return experimentalObject.method() + AnnotatedKotlinClass2.fieldStatic;"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+ line="56"
+ column="68"/>
</issue>
<issue
@@ -673,7 +769,9 @@
errorLine1=" TimeProviderKt.getTimeStatically();"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+ line="88"
+ column="24"/>
</issue>
<issue
@@ -682,7 +780,9 @@
errorLine1=" TimeProviderKt.Companion.getTimeStatically();"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+ line="89"
+ column="34"/>
</issue>
<issue
@@ -691,7 +791,9 @@
errorLine1=" new TimeProviderKt().getTime();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+ line="96"
+ column="30"/>
</issue>
<issue
@@ -700,7 +802,9 @@
errorLine1=" new TimeProviderKt().getTimeJava();"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+ line="97"
+ column="30"/>
</issue>
<issue
@@ -709,7 +813,9 @@
errorLine1=" AnnotatedKotlinMembers.methodStatic();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+ line="97"
+ column="32"/>
</issue>
<issue
@@ -718,7 +824,9 @@
errorLine1=" AnnotatedKotlinMembers.Companion.methodStatic();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+ line="98"
+ column="42"/>
</issue>
<issue
@@ -727,7 +835,9 @@
errorLine1=" new AnnotatedKotlinMembers().method();"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+ line="107"
+ column="38"/>
</issue>
<issue
@@ -736,7 +846,9 @@
errorLine1=" new AnnotatedKotlinMembers().methodWithJavaMarker();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+ line="108"
+ column="38"/>
</issue>
<issue
@@ -745,7 +857,9 @@
errorLine1=" new AnnotatedKotlinMembers().setFieldWithSetMarker(-1);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"/>
+ file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+ line="117"
+ column="38"/>
</issue>
</issues>
diff --git a/appcompat/appcompat-lint/integration-tests/lint-baseline.xml b/appcompat/appcompat-lint/integration-tests/lint-baseline.xml
index 9776c1c..a4b89aa 100644
--- a/appcompat/appcompat-lint/integration-tests/lint-baseline.xml
+++ b/appcompat/appcompat-lint/integration-tests/lint-baseline.xml
@@ -52,7 +52,8 @@
errorLine1=" setActionBar(new Toolbar(this));"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/appcompat/AppCompatLintDemoExt.java"/>
+ file="src/main/java/com/example/android/appcompat/AppCompatLintDemoExt.java"
+ column="26"/>
</issue>
<issue
@@ -61,7 +62,9 @@
errorLine1=" setActionBar(new Toolbar(this));"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/appcompat/CoreActivityExt.java"/>
+ file="src/main/java/com/example/android/appcompat/CoreActivityExt.java"
+ line="34"
+ column="13"/>
</issue>
<issue
@@ -70,7 +73,9 @@
errorLine1=" setActionBar(new Toolbar(this));"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/appcompat/CoreActivityExt.java"/>
+ file="src/main/java/com/example/android/appcompat/CoreActivityExt.java"
+ line="34"
+ column="26"/>
</issue>
<issue
@@ -79,7 +84,9 @@
errorLine1=" <item app:alpha="?android:disabledAlpha""
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/res/color/color_state_list_missing_android_alpha.xml"/>
+ file="src/main/res/color/color_state_list_missing_android_alpha.xml"
+ line="19"
+ column="11"/>
</issue>
<issue
@@ -88,7 +95,9 @@
errorLine1=" android:tint="#FF0000" />"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/res/layout/image_view_using_android_tint.xml"/>
+ file="src/main/res/layout/image_view_using_android_tint.xml"
+ line="39"
+ column="9"/>
</issue>
<issue
@@ -97,7 +106,9 @@
errorLine1=" android:tint="#FF0000" />"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/res/layout/image_view_using_android_tint.xml"/>
+ file="src/main/res/layout/image_view_using_android_tint.xml"
+ line="51"
+ column="9"/>
</issue>
<issue
@@ -106,7 +117,9 @@
errorLine1=" ColorStateList csl2 = new ResourceLoader().getColorStateList("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/appcompat/AppCompatLintDemo.java"/>
+ file="src/main/java/com/example/android/appcompat/AppCompatLintDemo.java"
+ line="54"
+ column="31"/>
</issue>
<issue
@@ -115,7 +128,9 @@
errorLine1=" ColorStateList csl2 = new ResourceLoader().getColorStateList("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/appcompat/AppCompatLintDemo.java"/>
+ file="src/main/java/com/example/android/appcompat/AppCompatLintDemo.java"
+ line="54"
+ column="31"/>
</issue>
<issue
@@ -124,7 +139,9 @@
errorLine1=" public void myButtonClick(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/appcompat/ActivityWithClick.java"/>
+ file="src/main/java/com/example/android/appcompat/ActivityWithClick.java"
+ line="39"
+ column="31"/>
</issue>
<issue
@@ -133,7 +150,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/appcompat/AppCompatLintDemo.java"/>
+ file="src/main/java/com/example/android/appcompat/AppCompatLintDemo.java"
+ line="42"
+ column="26"/>
</issue>
<issue
@@ -142,7 +161,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/appcompat/AppCompatLintDemoExt.java"/>
+ file="src/main/java/com/example/android/appcompat/AppCompatLintDemoExt.java"
+ line="28"
+ column="26"/>
</issue>
<issue
@@ -151,7 +172,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/appcompat/CoreActivityExt.java"/>
+ file="src/main/java/com/example/android/appcompat/CoreActivityExt.java"
+ line="29"
+ column="26"/>
</issue>
<issue
@@ -160,7 +183,9 @@
errorLine1=" public CustomSwitch(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/appcompat/CustomSwitch.java"/>
+ file="src/main/java/com/example/android/appcompat/CustomSwitch.java"
+ line="28"
+ column="25"/>
</issue>
<issue
@@ -169,7 +194,9 @@
errorLine1=" public CustomSwitch(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/appcompat/CustomSwitch.java"/>
+ file="src/main/java/com/example/android/appcompat/CustomSwitch.java"
+ line="32"
+ column="25"/>
</issue>
<issue
@@ -178,7 +205,9 @@
errorLine1=" public CustomSwitch(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/appcompat/CustomSwitch.java"/>
+ file="src/main/java/com/example/android/appcompat/CustomSwitch.java"
+ line="32"
+ column="42"/>
</issue>
<issue
@@ -187,7 +216,9 @@
errorLine1=" public CustomSwitch(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/appcompat/CustomSwitch.java"/>
+ file="src/main/java/com/example/android/appcompat/CustomSwitch.java"
+ line="36"
+ column="25"/>
</issue>
<issue
@@ -196,7 +227,9 @@
errorLine1=" public CustomSwitch(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/appcompat/CustomSwitch.java"/>
+ file="src/main/java/com/example/android/appcompat/CustomSwitch.java"
+ line="36"
+ column="42"/>
</issue>
</issues>
diff --git a/appcompat/appcompat-resources/lint-baseline.xml b/appcompat/appcompat-resources/lint-baseline.xml
index 788b592..a35bd9e 100644
--- a/appcompat/appcompat-resources/lint-baseline.xml
+++ b/appcompat/appcompat-resources/lint-baseline.xml
@@ -208,7 +208,9 @@
errorLine1=" public void setColorFilter(ColorFilter cf) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="87"
+ column="32"/>
</issue>
<issue
@@ -217,7 +219,9 @@
errorLine1=" public boolean setState(final int[] stateSet) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="97"
+ column="35"/>
</issue>
<issue
@@ -226,7 +230,9 @@
errorLine1=" public int[] getState() {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="102"
+ column="12"/>
</issue>
<issue
@@ -235,7 +241,9 @@
errorLine1=" public Drawable getCurrent() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="112"
+ column="12"/>
</issue>
<issue
@@ -244,7 +252,9 @@
errorLine1=" public Region getTransparentRegion() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="128"
+ column="12"/>
</issue>
<issue
@@ -253,7 +263,9 @@
errorLine1=" public boolean getPadding(Rect padding) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="153"
+ column="31"/>
</issue>
<issue
@@ -262,7 +274,9 @@
errorLine1=" public void invalidateDrawable(Drawable who) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="161"
+ column="36"/>
</issue>
<issue
@@ -271,7 +285,9 @@
errorLine1=" public void scheduleDrawable(Drawable who, Runnable what, long when) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="169"
+ column="34"/>
</issue>
<issue
@@ -280,7 +296,9 @@
errorLine1=" public void scheduleDrawable(Drawable who, Runnable what, long when) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="169"
+ column="48"/>
</issue>
<issue
@@ -289,7 +307,9 @@
errorLine1=" public void unscheduleDrawable(Drawable who, Runnable what) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="177"
+ column="36"/>
</issue>
<issue
@@ -298,7 +318,9 @@
errorLine1=" public void unscheduleDrawable(Drawable who, Runnable what) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="177"
+ column="50"/>
</issue>
<issue
@@ -307,7 +329,9 @@
errorLine1=" public void setTintList(ColorStateList tint) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="202"
+ column="29"/>
</issue>
<issue
@@ -316,7 +340,9 @@
errorLine1=" public void setTintMode(PorterDuff.Mode tintMode) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="207"
+ column="29"/>
</issue>
<issue
@@ -325,7 +351,9 @@
errorLine1=" public Drawable getWrappedDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="221"
+ column="12"/>
</issue>
<issue
@@ -334,7 +362,9 @@
errorLine1=" public void setWrappedDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawableWrapper.java"
+ line="225"
+ column="36"/>
</issue>
<issue
@@ -343,7 +373,9 @@
errorLine1=" public static synchronized ResourceManagerInternal get() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
+ file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
+ line="96"
+ column="32"/>
</issue>
<issue
@@ -352,7 +384,9 @@
errorLine1=" public synchronized void setHooks(ResourceManagerHooks hooks) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
+ file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
+ line="131"
+ column="39"/>
</issue>
<issue
@@ -361,7 +395,9 @@
errorLine1=" public synchronized Drawable getDrawable(@NonNull Context context, @DrawableRes int resId) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
+ file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
+ line="135"
+ column="25"/>
</issue>
<issue
@@ -370,7 +406,9 @@
errorLine1=" public static synchronized PorterDuffColorFilter getPorterDuffColorFilter("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
+ file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
+ line="471"
+ column="32"/>
</issue>
<issue
@@ -379,7 +417,9 @@
errorLine1=" int color, PorterDuff.Mode mode) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"/>
+ file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
+ line="472"
+ column="24"/>
</issue>
<issue
@@ -388,7 +428,9 @@
errorLine1=" public static Context wrap(@NonNull final Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"
+ line="45"
+ column="19"/>
</issue>
<issue
@@ -397,7 +439,9 @@
errorLine1=" public Resources.Theme getTheme() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"
+ line="107"
+ column="12"/>
</issue>
<issue
@@ -406,7 +450,9 @@
errorLine1=" public Resources getResources() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"
+ line="121"
+ column="12"/>
</issue>
<issue
@@ -415,7 +461,9 @@
errorLine1=" public AssetManager getAssets() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintContextWrapper.java"
+ line="126"
+ column="12"/>
</issue>
<issue
@@ -424,7 +472,9 @@
errorLine1=" public ColorStateList mTintList;"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintInfo.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintInfo.java"
+ line="29"
+ column="12"/>
</issue>
<issue
@@ -433,7 +483,9 @@
errorLine1=" public PorterDuff.Mode mTintMode;"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintInfo.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintInfo.java"
+ line="30"
+ column="12"/>
</issue>
<issue
@@ -442,7 +494,9 @@
errorLine1=" public Drawable getDrawable(int id) throws NotFoundException {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java"/>
+ file="src/main/java/androidx/appcompat/widget/VectorEnabledTintResources.java"
+ line="66"
+ column="12"/>
</issue>
</issues>
diff --git a/appcompat/appcompat/api/current.txt b/appcompat/appcompat/api/current.txt
index e36516b..4882539 100644
--- a/appcompat/appcompat/api/current.txt
+++ b/appcompat/appcompat/api/current.txt
@@ -224,6 +224,7 @@
method public androidx.appcompat.app.ActionBar? getSupportActionBar();
method public android.content.Intent? getSupportParentActivityIntent();
method public void onCreateSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+ method protected void onLocalesChanged(androidx.core.os.LocaleListCompat);
method public final boolean onMenuItemSelected(int, android.view.MenuItem);
method protected void onNightModeChanged(int);
method public void onPrepareSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
@@ -261,6 +262,8 @@
method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
+ method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales();
+ method public android.content.Context? getContextForDelegate();
method public static int getDefaultNightMode();
method public abstract androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
method public int getLocalNightMode();
@@ -280,6 +283,7 @@
method public abstract void onStart();
method public abstract void onStop();
method public abstract boolean requestWindowFeature(int);
+ method public static void setApplicationLocales(androidx.core.os.LocaleListCompat);
method public static void setCompatVectorFromResourcesEnabled(boolean);
method public abstract void setContentView(android.view.View!);
method public abstract void setContentView(@LayoutRes int);
@@ -339,6 +343,12 @@
method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
}
+ public final class AppLocalesMetadataHolderService extends android.app.Service {
+ ctor public AppLocalesMetadataHolderService();
+ method public static android.content.pm.ServiceInfo getServiceInfo(android.content.Context) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public android.os.IBinder onBind(android.content.Intent);
+ }
+
}
package androidx.appcompat.graphics.drawable {
diff --git a/appcompat/appcompat/api/public_plus_experimental_current.txt b/appcompat/appcompat/api/public_plus_experimental_current.txt
index e36516b..4882539 100644
--- a/appcompat/appcompat/api/public_plus_experimental_current.txt
+++ b/appcompat/appcompat/api/public_plus_experimental_current.txt
@@ -224,6 +224,7 @@
method public androidx.appcompat.app.ActionBar? getSupportActionBar();
method public android.content.Intent? getSupportParentActivityIntent();
method public void onCreateSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+ method protected void onLocalesChanged(androidx.core.os.LocaleListCompat);
method public final boolean onMenuItemSelected(int, android.view.MenuItem);
method protected void onNightModeChanged(int);
method public void onPrepareSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
@@ -261,6 +262,8 @@
method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
+ method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales();
+ method public android.content.Context? getContextForDelegate();
method public static int getDefaultNightMode();
method public abstract androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
method public int getLocalNightMode();
@@ -280,6 +283,7 @@
method public abstract void onStart();
method public abstract void onStop();
method public abstract boolean requestWindowFeature(int);
+ method public static void setApplicationLocales(androidx.core.os.LocaleListCompat);
method public static void setCompatVectorFromResourcesEnabled(boolean);
method public abstract void setContentView(android.view.View!);
method public abstract void setContentView(@LayoutRes int);
@@ -339,6 +343,12 @@
method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
}
+ public final class AppLocalesMetadataHolderService extends android.app.Service {
+ ctor public AppLocalesMetadataHolderService();
+ method public static android.content.pm.ServiceInfo getServiceInfo(android.content.Context) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public android.os.IBinder onBind(android.content.Intent);
+ }
+
}
package androidx.appcompat.graphics.drawable {
diff --git a/appcompat/appcompat/api/restricted_current.txt b/appcompat/appcompat/api/restricted_current.txt
index cfb6629..53c0cb0 100644
--- a/appcompat/appcompat/api/restricted_current.txt
+++ b/appcompat/appcompat/api/restricted_current.txt
@@ -245,6 +245,7 @@
method public androidx.appcompat.app.ActionBar? getSupportActionBar();
method public android.content.Intent? getSupportParentActivityIntent();
method public void onCreateSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+ method protected void onLocalesChanged(androidx.core.os.LocaleListCompat);
method public final boolean onMenuItemSelected(int, android.view.MenuItem);
method protected void onNightModeChanged(@androidx.appcompat.app.AppCompatDelegate.NightMode int);
method public void onPrepareSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
@@ -282,6 +283,8 @@
method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
+ method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales();
+ method public android.content.Context? getContextForDelegate();
method @androidx.appcompat.app.AppCompatDelegate.NightMode public static int getDefaultNightMode();
method public abstract androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
method @androidx.appcompat.app.AppCompatDelegate.NightMode public int getLocalNightMode();
@@ -301,6 +304,7 @@
method public abstract void onStart();
method public abstract void onStop();
method public abstract boolean requestWindowFeature(int);
+ method public static void setApplicationLocales(androidx.core.os.LocaleListCompat);
method public static void setCompatVectorFromResourcesEnabled(boolean);
method public abstract void setContentView(android.view.View!);
method public abstract void setContentView(@LayoutRes int);
@@ -363,6 +367,12 @@
method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
}
+ public final class AppLocalesMetadataHolderService extends android.app.Service {
+ ctor public AppLocalesMetadataHolderService();
+ method public static android.content.pm.ServiceInfo getServiceInfo(android.content.Context) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public android.os.IBinder onBind(android.content.Intent);
+ }
+
@RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class WindowDecorActionBar extends androidx.appcompat.app.ActionBar implements androidx.appcompat.widget.ActionBarOverlayLayout.ActionBarVisibilityCallback {
ctor public WindowDecorActionBar(android.app.Activity!, boolean);
ctor public WindowDecorActionBar(android.app.Dialog!);
diff --git a/appcompat/appcompat/build.gradle b/appcompat/appcompat/build.gradle
index 81f3292..055d51c 100644
--- a/appcompat/appcompat/build.gradle
+++ b/appcompat/appcompat/build.gradle
@@ -14,7 +14,7 @@
}
api("androidx.annotation:annotation:1.3.0")
- api("androidx.core:core:1.8.0")
+ api(projectOrArtifact(":core:core"))
// Required to make activity 1.5.0-rc01 dependencies resolve.
implementation("androidx.core:core-ktx:1.8.0")
@@ -24,7 +24,7 @@
implementation(projectOrArtifact(":emoji2:emoji2-views-helper"))
implementation("androidx.collection:collection:1.0.0")
api("androidx.cursoradapter:cursoradapter:1.0.0")
- api("androidx.activity:activity:1.5.0")
+ api(projectOrArtifact(":activity:activity"))
api("androidx.fragment:fragment:1.3.6")
api(project(":appcompat:appcompat-resources"))
api("androidx.drawerlayout:drawerlayout:1.0.0")
diff --git a/appcompat/appcompat/lint-baseline.xml b/appcompat/appcompat/lint-baseline.xml
index 857ba3e..991b490 100644
--- a/appcompat/appcompat/lint-baseline.xml
+++ b/appcompat/appcompat/lint-baseline.xml
@@ -250,7 +250,9 @@
errorLine1=" result = (T) method.invoke(object);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatTextViewAutoSizeHelper.java"
+ line="814"
+ column="26"/>
</issue>
<issue
@@ -259,7 +261,9 @@
errorLine1=" mResolvedMethod.invoke(mResolvedContext, v);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="441"
+ column="17"/>
</issue>
<issue
@@ -268,7 +272,9 @@
errorLine1=" mSetExclusiveCheckableMethod.invoke(mWrappedObject, checkable);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="391"
+ column="13"/>
</issue>
<issue
@@ -277,7 +283,9 @@
errorLine1=" mDoBeforeTextChanged.invoke(view);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="2084"
+ column="21"/>
</issue>
<issue
@@ -286,7 +294,9 @@
errorLine1=" mDoAfterTextChanged.invoke(view);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="2094"
+ column="21"/>
</issue>
<issue
@@ -295,7 +305,9 @@
errorLine1=" mEnsureImeVisible.invoke(view, /* visible = */ true);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="2104"
+ column="21"/>
</issue>
<issue
@@ -304,7 +316,9 @@
errorLine1=" return (Boolean) mMethod.invoke(mRealOwner, item);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"
+ line="265"
+ column="38"/>
</issue>
<issue
@@ -313,7 +327,9 @@
errorLine1=" mMethod.invoke(mRealOwner, item);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"
+ line="267"
+ column="21"/>
</issue>
<issue
@@ -322,7 +338,9 @@
errorLine1=" sComputeFitSystemWindowsMethod.invoke(view, inoutInsets, outLocalInsets);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewUtils.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewUtils.java"
+ line="68"
+ column="17"/>
</issue>
<issue
@@ -331,7 +349,9 @@
errorLine1=" fun testTileifyLayerDrawable() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/appcompat/widget/AppCompatProgressBarHelperTest.kt"/>
+ file="src/androidTest/java/androidx/appcompat/widget/AppCompatProgressBarHelperTest.kt"
+ line="35"
+ column="9"/>
</issue>
<issue
@@ -340,9 +360,13 @@
errorLine1=" public View getTabContainer() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="243"
+ column="17"/>
<location
file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="229"
+ column="17"
message="Setter here"/>
</issue>
@@ -352,7 +376,9 @@
errorLine1=" public boolean isInOverlayMode() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarOverlayLayout.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarOverlayLayout.java"
+ line="210"
+ column="20"/>
</issue>
<issue
@@ -361,9 +387,13 @@
errorLine1=" public ActionBar getSupportActionBar() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+ line="162"
+ column="22"/>
<location
file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+ line="182"
+ column="17"
message="Setter here"/>
</issue>
@@ -373,9 +403,13 @@
errorLine1=" public abstract ActionBar getSupportActionBar();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="279"
+ column="31"/>
<location
file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="296"
+ column="26"
message="Setter here"/>
</issue>
@@ -385,9 +419,13 @@
errorLine1=" public Resources.Theme getTheme() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+ line="149"
+ column="28"/>
<location
file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+ line="133"
+ column="17"
message="Setter here"/>
</issue>
@@ -397,7 +435,9 @@
errorLine1=" int getItemIndexOffset() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="160"
+ column="9"/>
</issue>
<issue
@@ -406,7 +446,9 @@
errorLine1=" boolean isQwertyMode() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="791"
+ column="13"/>
</issue>
<issue
@@ -415,7 +457,9 @@
errorLine1=" boolean getOptionalIconsVisible() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1346"
+ column="13"/>
</issue>
<issue
@@ -424,7 +468,9 @@
errorLine1=" Runnable getCallback() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="232"
+ column="14"/>
</issue>
<issue
@@ -433,9 +479,13 @@
errorLine1=" public SubMenu getSubMenu() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="418"
+ column="20"/>
<location
file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="427"
+ column="17"
message="Setter here"/>
</issue>
@@ -445,7 +495,9 @@
errorLine1=" public void setIsActionButton(boolean isActionButton) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="719"
+ column="17"/>
</issue>
<issue
@@ -454,7 +506,9 @@
errorLine1=" String labelColumn) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="677"
+ column="17"/>
</issue>
<issue
@@ -463,7 +517,9 @@
errorLine1=" void setDropdownParams(SpinnerAdapter adapter, AdapterView.OnItemSelectedListener listener);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="83"
+ column="52"/>
</issue>
<issue
@@ -472,7 +528,9 @@
errorLine1=" AdapterView.OnItemSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="516"
+ column="13"/>
</issue>
<issue
@@ -481,7 +539,9 @@
errorLine1=" public abstract void setCustomView(View view);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="217"
+ column="40"/>
</issue>
<issue
@@ -490,7 +550,9 @@
errorLine1=" public abstract void setCustomView(View view, LayoutParams layoutParams);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="237"
+ column="40"/>
</issue>
<issue
@@ -499,7 +561,9 @@
errorLine1=" public abstract void setCustomView(View view, LayoutParams layoutParams);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="237"
+ column="51"/>
</issue>
<issue
@@ -508,7 +572,9 @@
errorLine1=" public abstract void setIcon(Drawable icon);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="286"
+ column="34"/>
</issue>
<issue
@@ -517,7 +583,9 @@
errorLine1=" public abstract void setLogo(Drawable logo);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="316"
+ column="34"/>
</issue>
<issue
@@ -526,7 +594,9 @@
errorLine1=" public abstract void setTitle(CharSequence title);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="390"
+ column="35"/>
</issue>
<issue
@@ -535,7 +605,9 @@
errorLine1=" public abstract void setSubtitle(CharSequence subtitle);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="413"
+ column="38"/>
</issue>
<issue
@@ -544,7 +616,9 @@
errorLine1=" public void setStackedBackgroundDrawable(Drawable d) { }"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="530"
+ column="46"/>
</issue>
<issue
@@ -553,7 +627,9 @@
errorLine1=" public void setSplitBackgroundDrawable(Drawable d) { }"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="540"
+ column="44"/>
</issue>
<issue
@@ -562,7 +638,9 @@
errorLine1=" public abstract View getCustomView();"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="545"
+ column="21"/>
</issue>
<issue
@@ -571,7 +649,9 @@
errorLine1=" public abstract void addOnMenuVisibilityListener(OnMenuVisibilityListener listener);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="823"
+ column="54"/>
</issue>
<issue
@@ -580,7 +660,9 @@
errorLine1=" public abstract void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="831"
+ column="57"/>
</issue>
<issue
@@ -589,7 +671,9 @@
errorLine1=" public Context getThemedContext() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="858"
+ column="12"/>
</issue>
<issue
@@ -598,7 +682,9 @@
errorLine1=" public void onConfigurationChanged(Configuration config) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="1051"
+ column="40"/>
</issue>
<issue
@@ -607,7 +693,9 @@
errorLine1=" public ActionMode startActionMode(ActionMode.Callback callback) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="1061"
+ column="12"/>
</issue>
<issue
@@ -616,7 +704,9 @@
errorLine1=" public ActionMode startActionMode(ActionMode.Callback callback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="1061"
+ column="39"/>
</issue>
<issue
@@ -625,7 +715,9 @@
errorLine1=" public boolean onMenuKeyEvent(KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="1085"
+ column="35"/>
</issue>
<issue
@@ -634,7 +726,9 @@
errorLine1=" public boolean onKeyShortcut(int keyCode, KeyEvent ev) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="1091"
+ column="47"/>
</issue>
<issue
@@ -643,7 +737,9 @@
errorLine1=" public void setWindowTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="1103"
+ column="32"/>
</issue>
<issue
@@ -652,7 +748,9 @@
errorLine1=" public LayoutParams(@NonNull Context c, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="1376"
+ column="49"/>
</issue>
<issue
@@ -661,7 +759,9 @@
errorLine1=" public LayoutParams(LayoutParams source) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="1398"
+ column="29"/>
</issue>
<issue
@@ -670,7 +770,9 @@
errorLine1=" public LayoutParams(ViewGroup.LayoutParams source) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBar.java"
+ line="1404"
+ column="29"/>
</issue>
<issue
@@ -679,7 +781,9 @@
errorLine1=" public ActionBarContainer(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="55"
+ column="31"/>
</issue>
<issue
@@ -688,7 +792,9 @@
errorLine1=" public ActionBarContainer(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="59"
+ column="31"/>
</issue>
<issue
@@ -697,7 +803,9 @@
errorLine1=" public ActionBarContainer(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="59"
+ column="48"/>
</issue>
<issue
@@ -706,7 +814,9 @@
errorLine1=" public void setPrimaryBackground(Drawable bg) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="90"
+ column="38"/>
</issue>
<issue
@@ -715,7 +825,9 @@
errorLine1=" public void setStackedBackground(Drawable bg) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="111"
+ column="38"/>
</issue>
<issue
@@ -724,7 +836,9 @@
errorLine1=" public void setSplitBackground(Drawable bg) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="132"
+ column="36"/>
</issue>
<issue
@@ -733,7 +847,9 @@
errorLine1=" protected boolean verifyDrawable(Drawable who) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="162"
+ column="38"/>
</issue>
<issue
@@ -742,7 +858,9 @@
errorLine1=" public boolean onInterceptTouchEvent(MotionEvent ev) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="209"
+ column="42"/>
</issue>
<issue
@@ -751,7 +869,9 @@
errorLine1=" public boolean onTouchEvent(MotionEvent ev) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="214"
+ column="33"/>
</issue>
<issue
@@ -760,7 +880,9 @@
errorLine1=" public boolean onHoverEvent(MotionEvent ev) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="222"
+ column="33"/>
</issue>
<issue
@@ -769,7 +891,9 @@
errorLine1=" public void setTabContainer(ScrollingTabContainerView tabView) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="229"
+ column="33"/>
</issue>
<issue
@@ -778,7 +902,9 @@
errorLine1=" public View getTabContainer() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="243"
+ column="12"/>
</issue>
<issue
@@ -787,7 +913,9 @@
errorLine1=" public android.view.ActionMode startActionModeForChild(View child,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="248"
+ column="12"/>
</issue>
<issue
@@ -796,7 +924,9 @@
errorLine1=" public android.view.ActionMode startActionModeForChild(View child,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="248"
+ column="60"/>
</issue>
<issue
@@ -805,7 +935,9 @@
errorLine1=" android.view.ActionMode.Callback callback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="249"
+ column="13"/>
</issue>
<issue
@@ -814,7 +946,9 @@
errorLine1=" public android.view.ActionMode startActionModeForChild(View child,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="255"
+ column="12"/>
</issue>
<issue
@@ -823,7 +957,9 @@
errorLine1=" public android.view.ActionMode startActionModeForChild(View child,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="255"
+ column="60"/>
</issue>
<issue
@@ -832,7 +968,9 @@
errorLine1=" android.view.ActionMode.Callback callback, int type) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContainer.java"
+ line="256"
+ column="13"/>
</issue>
<issue
@@ -841,7 +979,9 @@
errorLine1=" public void setCustomView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+ line="101"
+ column="31"/>
</issue>
<issue
@@ -850,7 +990,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+ line="116"
+ column="26"/>
</issue>
<issue
@@ -859,7 +1001,9 @@
errorLine1=" public void setSubtitle(CharSequence subtitle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+ line="122"
+ column="29"/>
</issue>
<issue
@@ -868,7 +1012,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+ line="127"
+ column="12"/>
</issue>
<issue
@@ -877,7 +1023,9 @@
errorLine1=" public CharSequence getSubtitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+ line="131"
+ column="12"/>
</issue>
<issue
@@ -886,7 +1034,9 @@
errorLine1=" public void initForMode(final ActionMode mode) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+ line="162"
+ column="35"/>
</issue>
<issue
@@ -895,7 +1045,9 @@
errorLine1=" protected ViewGroup.LayoutParams generateDefaultLayoutParams() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+ line="236"
+ column="15"/>
</issue>
<issue
@@ -904,7 +1056,9 @@
errorLine1=" public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+ line="243"
+ column="12"/>
</issue>
<issue
@@ -913,7 +1067,9 @@
errorLine1=" public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionBarContextView.java"
+ line="243"
+ column="56"/>
</issue>
<issue
@@ -922,7 +1078,9 @@
errorLine1=" void setActionBarUpIndicator(Drawable upDrawable, @StringRes int contentDescRes);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="92"
+ column="38"/>
</issue>
<issue
@@ -931,7 +1089,9 @@
errorLine1=" Drawable getThemeUpIndicator();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="104"
+ column="9"/>
</issue>
<issue
@@ -940,7 +1100,9 @@
errorLine1=" Context getActionBarThemedContext();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="109"
+ column="9"/>
</issue>
<issue
@@ -949,7 +1111,9 @@
errorLine1=" public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="152"
+ column="34"/>
</issue>
<issue
@@ -958,7 +1122,9 @@
errorLine1=" public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="152"
+ column="53"/>
</issue>
<issue
@@ -967,7 +1133,9 @@
errorLine1=" public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="183"
+ column="34"/>
</issue>
<issue
@@ -976,7 +1144,9 @@
errorLine1=" public ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="183"
+ column="53"/>
</issue>
<issue
@@ -985,7 +1155,9 @@
errorLine1=" Toolbar toolbar, @StringRes int openDrawerContentDescRes,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="184"
+ column="13"/>
</issue>
<issue
@@ -994,7 +1166,9 @@
errorLine1=" public void onConfigurationChanged(Configuration newConfig) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="258"
+ column="40"/>
</issue>
<issue
@@ -1003,7 +1177,9 @@
errorLine1=" public boolean onOptionsItemSelected(MenuItem item) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="275"
+ column="42"/>
</issue>
<issue
@@ -1012,7 +1188,9 @@
errorLine1=" public void setHomeAsUpIndicator(Drawable indicator) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="304"
+ column="38"/>
</issue>
<issue
@@ -1021,7 +1199,9 @@
errorLine1=" public void onDrawerSlide(View drawerView, float slideOffset) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="414"
+ column="31"/>
</issue>
<issue
@@ -1030,7 +1210,9 @@
errorLine1=" public void onDrawerOpened(View drawerView) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="430"
+ column="32"/>
</issue>
<issue
@@ -1039,7 +1221,9 @@
errorLine1=" public void onDrawerClosed(View drawerView) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="445"
+ column="32"/>
</issue>
<issue
@@ -1048,7 +1232,9 @@
errorLine1=" public View.OnClickListener getToolbarNavigationClickListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="472"
+ column="12"/>
</issue>
<issue
@@ -1057,7 +1243,9 @@
errorLine1=" View.OnClickListener onToolbarNavigationClickListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"/>
+ file="src/main/java/androidx/appcompat/app/ActionBarDrawerToggle.java"
+ line="486"
+ column="13"/>
</issue>
<issue
@@ -1066,7 +1254,9 @@
errorLine1=" public static ActionBarPolicy get(Context context) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionBarPolicy.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionBarPolicy.java"
+ line="42"
+ column="19"/>
</issue>
<issue
@@ -1075,7 +1265,9 @@
errorLine1=" public static ActionBarPolicy get(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionBarPolicy.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionBarPolicy.java"
+ line="42"
+ column="39"/>
</issue>
<issue
@@ -1084,7 +1276,9 @@
errorLine1=" public ActionMenuItem(Context context, int group, int id, int categoryOrder, int ordering,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="78"
+ column="27"/>
</issue>
<issue
@@ -1093,7 +1287,9 @@
errorLine1=" CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="79"
+ column="13"/>
</issue>
<issue
@@ -1102,7 +1298,9 @@
errorLine1=" public Drawable getIcon() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="103"
+ column="12"/>
</issue>
<issue
@@ -1111,7 +1309,9 @@
errorLine1=" public Intent getIntent() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="108"
+ column="12"/>
</issue>
<issue
@@ -1120,7 +1320,9 @@
errorLine1=" public ContextMenuInfo getMenuInfo() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="118"
+ column="12"/>
</issue>
<issue
@@ -1129,7 +1331,9 @@
errorLine1=" public SubMenu getSubMenu() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="138"
+ column="12"/>
</issue>
<issue
@@ -1138,7 +1342,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="143"
+ column="12"/>
</issue>
<issue
@@ -1147,7 +1353,9 @@
errorLine1=" public CharSequence getTitleCondensed() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="148"
+ column="12"/>
</issue>
<issue
@@ -1156,7 +1364,9 @@
errorLine1=" public MenuItem setAlphabeticShortcut(char alphaChar) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="178"
+ column="12"/>
</issue>
<issue
@@ -1165,7 +1375,9 @@
errorLine1=" public MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="184"
+ column="12"/>
</issue>
<issue
@@ -1174,7 +1386,9 @@
errorLine1=" public MenuItem setCheckable(boolean checkable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="191"
+ column="12"/>
</issue>
<issue
@@ -1183,7 +1397,9 @@
errorLine1=" public ActionMenuItem setExclusiveCheckable(boolean exclusive) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="196"
+ column="12"/>
</issue>
<issue
@@ -1192,7 +1408,9 @@
errorLine1=" public MenuItem setChecked(boolean checked) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="202"
+ column="12"/>
</issue>
<issue
@@ -1201,7 +1419,9 @@
errorLine1=" public MenuItem setEnabled(boolean enabled) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="208"
+ column="12"/>
</issue>
<issue
@@ -1210,7 +1430,9 @@
errorLine1=" public MenuItem setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="214"
+ column="12"/>
</issue>
<issue
@@ -1219,7 +1441,9 @@
errorLine1=" public MenuItem setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="214"
+ column="29"/>
</issue>
<issue
@@ -1228,7 +1452,9 @@
errorLine1=" public MenuItem setIcon(int iconRes) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="222"
+ column="12"/>
</issue>
<issue
@@ -1237,7 +1463,9 @@
errorLine1=" public MenuItem setIntent(Intent intent) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="230"
+ column="12"/>
</issue>
<issue
@@ -1246,7 +1474,9 @@
errorLine1=" public MenuItem setIntent(Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="230"
+ column="31"/>
</issue>
<issue
@@ -1255,7 +1485,9 @@
errorLine1=" public MenuItem setNumericShortcut(char numericChar) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="236"
+ column="12"/>
</issue>
<issue
@@ -1264,7 +1496,9 @@
errorLine1=" public MenuItem setNumericShortcut(char numericChar, int numericModifiers) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="242"
+ column="12"/>
</issue>
<issue
@@ -1273,7 +1507,9 @@
errorLine1=" public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="249"
+ column="12"/>
</issue>
<issue
@@ -1282,7 +1518,9 @@
errorLine1=" public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="249"
+ column="48"/>
</issue>
<issue
@@ -1291,7 +1529,9 @@
errorLine1=" public MenuItem setShortcut(char numericChar, char alphaChar) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="255"
+ column="12"/>
</issue>
<issue
@@ -1300,7 +1540,9 @@
errorLine1=" public MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="262"
+ column="12"/>
</issue>
<issue
@@ -1309,7 +1551,9 @@
errorLine1=" public MenuItem setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="272"
+ column="12"/>
</issue>
<issue
@@ -1318,7 +1562,9 @@
errorLine1=" public MenuItem setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="272"
+ column="30"/>
</issue>
<issue
@@ -1327,7 +1573,9 @@
errorLine1=" public MenuItem setTitle(int title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="278"
+ column="12"/>
</issue>
<issue
@@ -1336,7 +1584,9 @@
errorLine1=" public MenuItem setTitleCondensed(CharSequence title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="284"
+ column="12"/>
</issue>
<issue
@@ -1345,7 +1595,9 @@
errorLine1=" public MenuItem setTitleCondensed(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="284"
+ column="39"/>
</issue>
<issue
@@ -1354,7 +1606,9 @@
errorLine1=" public MenuItem setVisible(boolean visible) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="290"
+ column="12"/>
</issue>
<issue
@@ -1363,7 +1617,9 @@
errorLine1=" public SupportMenuItem setActionView(View actionView) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="324"
+ column="12"/>
</issue>
<issue
@@ -1372,7 +1628,9 @@
errorLine1=" public SupportMenuItem setActionView(View actionView) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="324"
+ column="42"/>
</issue>
<issue
@@ -1381,7 +1639,9 @@
errorLine1=" public View getActionView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="329"
+ column="12"/>
</issue>
<issue
@@ -1390,7 +1650,9 @@
errorLine1=" public MenuItem setActionProvider(android.view.ActionProvider actionProvider) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="334"
+ column="12"/>
</issue>
<issue
@@ -1399,7 +1661,9 @@
errorLine1=" public MenuItem setActionProvider(android.view.ActionProvider actionProvider) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="334"
+ column="39"/>
</issue>
<issue
@@ -1408,7 +1672,9 @@
errorLine1=" public android.view.ActionProvider getActionProvider() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="339"
+ column="12"/>
</issue>
<issue
@@ -1417,7 +1683,9 @@
errorLine1=" public SupportMenuItem setActionView(int resId) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="344"
+ column="12"/>
</issue>
<issue
@@ -1426,7 +1694,9 @@
errorLine1=" public ActionProvider getSupportActionProvider() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="349"
+ column="12"/>
</issue>
<issue
@@ -1435,7 +1705,9 @@
errorLine1=" public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="354"
+ column="12"/>
</issue>
<issue
@@ -1444,7 +1716,9 @@
errorLine1=" public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="354"
+ column="53"/>
</issue>
<issue
@@ -1453,7 +1727,9 @@
errorLine1=" public SupportMenuItem setShowAsActionFlags(int actionEnum) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="359"
+ column="12"/>
</issue>
<issue
@@ -1462,7 +1738,9 @@
errorLine1=" public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="380"
+ column="12"/>
</issue>
<issue
@@ -1471,7 +1749,9 @@
errorLine1=" public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="380"
+ column="47"/>
</issue>
<issue
@@ -1480,7 +1760,9 @@
errorLine1=" public SupportMenuItem setContentDescription(CharSequence contentDescription) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="385"
+ column="12"/>
</issue>
<issue
@@ -1489,7 +1771,9 @@
errorLine1=" public SupportMenuItem setContentDescription(CharSequence contentDescription) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="385"
+ column="50"/>
</issue>
<issue
@@ -1498,7 +1782,9 @@
errorLine1=" public CharSequence getContentDescription() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="391"
+ column="12"/>
</issue>
<issue
@@ -1507,7 +1793,9 @@
errorLine1=" public SupportMenuItem setTooltipText(CharSequence tooltipText) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="396"
+ column="12"/>
</issue>
<issue
@@ -1516,7 +1804,9 @@
errorLine1=" public SupportMenuItem setTooltipText(CharSequence tooltipText) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="396"
+ column="43"/>
</issue>
<issue
@@ -1525,7 +1815,9 @@
errorLine1=" public CharSequence getTooltipText() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="402"
+ column="12"/>
</issue>
<issue
@@ -1534,7 +1826,9 @@
errorLine1=" public MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="407"
+ column="12"/>
</issue>
<issue
@@ -1543,7 +1837,9 @@
errorLine1=" public ColorStateList getIconTintList() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="417"
+ column="12"/>
</issue>
<issue
@@ -1552,7 +1848,9 @@
errorLine1=" public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="422"
+ column="12"/>
</issue>
<issue
@@ -1561,7 +1859,9 @@
errorLine1=" public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="422"
+ column="37"/>
</issue>
<issue
@@ -1570,7 +1870,9 @@
errorLine1=" public PorterDuff.Mode getIconTintMode() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItem.java"
+ line="432"
+ column="12"/>
</issue>
<issue
@@ -1579,7 +1881,9 @@
errorLine1=" public ActionMenuItemView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="63"
+ column="31"/>
</issue>
<issue
@@ -1588,7 +1892,9 @@
errorLine1=" public ActionMenuItemView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="67"
+ column="31"/>
</issue>
<issue
@@ -1597,7 +1903,9 @@
errorLine1=" public ActionMenuItemView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="67"
+ column="48"/>
</issue>
<issue
@@ -1606,7 +1914,9 @@
errorLine1=" public ActionMenuItemView(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="71"
+ column="31"/>
</issue>
<issue
@@ -1615,7 +1925,9 @@
errorLine1=" public ActionMenuItemView(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="71"
+ column="48"/>
</issue>
<issue
@@ -1624,7 +1936,9 @@
errorLine1=" public void onConfigurationChanged(Configuration newConfig) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="91"
+ column="40"/>
</issue>
<issue
@@ -1633,7 +1947,9 @@
errorLine1=" public MenuItemImpl getItemData() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="118"
+ column="12"/>
</issue>
<issue
@@ -1642,7 +1958,9 @@
errorLine1=" public void initialize(MenuItemImpl itemData, int menuType) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="123"
+ column="28"/>
</issue>
<issue
@@ -1651,7 +1969,9 @@
errorLine1=" public boolean onTouchEvent(MotionEvent e) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="140"
+ column="33"/>
</issue>
<issue
@@ -1660,7 +1980,9 @@
errorLine1=" public void onClick(View v) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="149"
+ column="25"/>
</issue>
<issue
@@ -1669,7 +1991,9 @@
errorLine1=" public void setItemInvoker(MenuBuilder.ItemInvoker invoker) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="155"
+ column="32"/>
</issue>
<issue
@@ -1678,7 +2002,9 @@
errorLine1=" public void setPopupCallback(PopupCallback popupCallback) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="159"
+ column="34"/>
</issue>
<issue
@@ -1687,7 +2013,9 @@
errorLine1=" public void setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="214"
+ column="25"/>
</issue>
<issue
@@ -1696,7 +2024,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="246"
+ column="26"/>
</issue>
<issue
@@ -1705,7 +2035,9 @@
errorLine1=" public void onRestoreInstanceState(Parcelable state) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="330"
+ column="40"/>
</issue>
<issue
@@ -1714,7 +2046,9 @@
errorLine1=" public abstract ShowableListMenu getPopup();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ActionMenuItemView.java"
+ line="337"
+ column="25"/>
</issue>
<issue
@@ -1723,7 +2057,9 @@
errorLine1=" public void setPresenter(ActionMenuPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="124"
+ column="30"/>
</issue>
<issue
@@ -1732,7 +2068,9 @@
errorLine1=" public void onConfigurationChanged(Configuration newConfig) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="130"
+ column="40"/>
</issue>
<issue
@@ -1741,7 +2079,9 @@
errorLine1=" public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="143"
+ column="44"/>
</issue>
<issue
@@ -1750,7 +2090,9 @@
errorLine1=" protected LayoutParams generateDefaultLayoutParams() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="582"
+ column="15"/>
</issue>
<issue
@@ -1759,7 +2101,9 @@
errorLine1=" public LayoutParams generateLayoutParams(AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="590"
+ column="12"/>
</issue>
<issue
@@ -1768,7 +2112,9 @@
errorLine1=" public LayoutParams generateLayoutParams(AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="590"
+ column="46"/>
</issue>
<issue
@@ -1777,7 +2123,9 @@
errorLine1=" protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="595"
+ column="15"/>
</issue>
<issue
@@ -1786,7 +2134,9 @@
errorLine1=" protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="595"
+ column="49"/>
</issue>
<issue
@@ -1795,7 +2145,9 @@
errorLine1=" protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="609"
+ column="41"/>
</issue>
<issue
@@ -1804,7 +2156,9 @@
errorLine1=" public LayoutParams generateOverflowButtonLayoutParams() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="615"
+ column="12"/>
</issue>
<issue
@@ -1813,7 +2167,9 @@
errorLine1=" public boolean invokeItem(MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="624"
+ column="31"/>
</issue>
<issue
@@ -1822,7 +2178,9 @@
errorLine1=" public void initialize(MenuBuilder menu) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="638"
+ column="28"/>
</issue>
<issue
@@ -1831,7 +2189,9 @@
errorLine1=" public Menu getMenu() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="650"
+ column="12"/>
</issue>
<issue
@@ -1840,7 +2200,9 @@
errorLine1=" public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="671"
+ column="34"/>
</issue>
<issue
@@ -1849,7 +2211,9 @@
errorLine1=" public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="671"
+ column="62"/>
</issue>
<issue
@@ -1858,7 +2222,9 @@
errorLine1=" public MenuBuilder peekMenu() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="681"
+ column="12"/>
</issue>
<issue
@@ -1867,7 +2233,9 @@
errorLine1=" public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="749"
+ column="55"/>
</issue>
<issue
@@ -1876,7 +2244,9 @@
errorLine1=" public boolean onMenuItemClick(MenuItem item);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="771"
+ column="40"/>
</issue>
<issue
@@ -1885,7 +2255,9 @@
errorLine1=" public LayoutParams(Context c, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="832"
+ column="29"/>
</issue>
<issue
@@ -1894,7 +2266,9 @@
errorLine1=" public LayoutParams(Context c, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="832"
+ column="40"/>
</issue>
<issue
@@ -1903,7 +2277,9 @@
errorLine1=" public LayoutParams(ViewGroup.LayoutParams other) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="836"
+ column="29"/>
</issue>
<issue
@@ -1912,7 +2288,9 @@
errorLine1=" public LayoutParams(LayoutParams other) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActionMenuView.java"
+ line="840"
+ column="29"/>
</issue>
<issue
@@ -1921,7 +2299,9 @@
errorLine1=" public void setTag(Object tag) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="56"
+ column="24"/>
</issue>
<issue
@@ -1930,7 +2310,9 @@
errorLine1=" public Object getTag() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="70"
+ column="12"/>
</issue>
<issue
@@ -1939,7 +2321,9 @@
errorLine1=" public abstract void setTitle(CharSequence title);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="83"
+ column="35"/>
</issue>
<issue
@@ -1948,7 +2332,9 @@
errorLine1=" public abstract void setSubtitle(CharSequence subtitle);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="105"
+ column="38"/>
</issue>
<issue
@@ -1957,7 +2343,9 @@
errorLine1=" public abstract void setCustomView(View view);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="165"
+ column="40"/>
</issue>
<issue
@@ -1966,7 +2354,9 @@
errorLine1=" public abstract Menu getMenu();"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="187"
+ column="21"/>
</issue>
<issue
@@ -1975,7 +2365,9 @@
errorLine1=" public abstract CharSequence getTitle();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="194"
+ column="21"/>
</issue>
<issue
@@ -1984,7 +2376,9 @@
errorLine1=" public abstract CharSequence getSubtitle();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="201"
+ column="21"/>
</issue>
<issue
@@ -1993,7 +2387,9 @@
errorLine1=" public abstract View getCustomView();"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="208"
+ column="21"/>
</issue>
<issue
@@ -2002,7 +2398,9 @@
errorLine1=" public abstract MenuInflater getMenuInflater();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="213"
+ column="21"/>
</issue>
<issue
@@ -2011,7 +2409,9 @@
errorLine1=" public boolean onCreateActionMode(ActionMode mode, Menu menu);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="256"
+ column="43"/>
</issue>
<issue
@@ -2020,7 +2420,9 @@
errorLine1=" public boolean onCreateActionMode(ActionMode mode, Menu menu);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="256"
+ column="60"/>
</issue>
<issue
@@ -2029,7 +2431,9 @@
errorLine1=" public boolean onPrepareActionMode(ActionMode mode, Menu menu);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="265"
+ column="44"/>
</issue>
<issue
@@ -2038,7 +2442,9 @@
errorLine1=" public boolean onPrepareActionMode(ActionMode mode, Menu menu);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="265"
+ column="61"/>
</issue>
<issue
@@ -2047,7 +2453,9 @@
errorLine1=" public boolean onActionItemClicked(ActionMode mode, MenuItem item);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="275"
+ column="44"/>
</issue>
<issue
@@ -2056,7 +2464,9 @@
errorLine1=" public boolean onActionItemClicked(ActionMode mode, MenuItem item);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="275"
+ column="61"/>
</issue>
<issue
@@ -2065,7 +2475,9 @@
errorLine1=" public void onDestroyActionMode(ActionMode mode);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/ActionMode.java"
+ line="282"
+ column="41"/>
</issue>
<issue
@@ -2074,7 +2486,9 @@
errorLine1=" public void setActivityChooserModel(ActivityChooserModel dataModel);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+ line="101"
+ column="45"/>
</issue>
<issue
@@ -2083,7 +2497,9 @@
errorLine1=" public void sort(Intent intent, List<ActivityResolveInfo> activities,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+ line="120"
+ column="26"/>
</issue>
<issue
@@ -2092,7 +2508,9 @@
errorLine1=" public void sort(Intent intent, List<ActivityResolveInfo> activities,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+ line="120"
+ column="41"/>
</issue>
<issue
@@ -2101,7 +2519,9 @@
errorLine1=" List<HistoricalRecord> historicalRecords);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+ line="121"
+ column="17"/>
</issue>
<issue
@@ -2110,7 +2530,9 @@
errorLine1=" public boolean onChooseActivity(ActivityChooserModel host, Intent intent);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+ line="145"
+ column="41"/>
</issue>
<issue
@@ -2119,7 +2541,9 @@
errorLine1=" public boolean onChooseActivity(ActivityChooserModel host, Intent intent);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+ line="145"
+ column="68"/>
</issue>
<issue
@@ -2128,7 +2552,9 @@
errorLine1=" public HistoricalRecord(String activityName, long time, float weight) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+ line="782"
+ column="33"/>
</issue>
<issue
@@ -2137,7 +2563,9 @@
errorLine1=" public HistoricalRecord(ComponentName activityName, long time, float weight) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+ line="793"
+ column="33"/>
</issue>
<issue
@@ -2146,7 +2574,9 @@
errorLine1=" public ActivityResolveInfo(ResolveInfo resolveInfo) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+ line="869"
+ column="36"/>
</issue>
<issue
@@ -2155,7 +2585,9 @@
errorLine1=" public int compareTo(ActivityResolveInfo another) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserModel.java"
+ line="897"
+ column="30"/>
</issue>
<issue
@@ -2164,7 +2596,9 @@
errorLine1=" public void setActivityChooserModel(ActivityChooserModel dataModel) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+ line="304"
+ column="41"/>
</issue>
<issue
@@ -2173,7 +2607,9 @@
errorLine1=" public void setExpandActivityOverflowButtonDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+ line="323"
+ column="57"/>
</issue>
<issue
@@ -2182,7 +2618,9 @@
errorLine1=" public void setProvider(ActionProvider provider) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+ line="347"
+ column="29"/>
</issue>
<issue
@@ -2191,7 +2629,9 @@
errorLine1=" public ActivityChooserModel getDataModel() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+ line="488"
+ column="12"/>
</issue>
<issue
@@ -2200,7 +2640,9 @@
errorLine1=" public void setOnDismissListener(PopupWindow.OnDismissListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+ line="497"
+ column="38"/>
</issue>
<issue
@@ -2209,7 +2651,9 @@
errorLine1=" public InnerLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+ line="877"
+ column="28"/>
</issue>
<issue
@@ -2218,7 +2662,9 @@
errorLine1=" public InnerLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ActivityChooserView.java"
+ line="877"
+ column="45"/>
</issue>
<issue
@@ -2227,7 +2673,9 @@
errorLine1=" public RecycleListView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="839"
+ column="32"/>
</issue>
<issue
@@ -2236,7 +2684,9 @@
errorLine1=" public RecycleListView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="843"
+ column="32"/>
</issue>
<issue
@@ -2245,7 +2695,9 @@
errorLine1=" public RecycleListView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="843"
+ column="49"/>
</issue>
<issue
@@ -2254,7 +2706,9 @@
errorLine1=" public Drawable mIcon;"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="870"
+ column="16"/>
</issue>
<issue
@@ -2263,7 +2717,9 @@
errorLine1=" public CharSequence mTitle;"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="872"
+ column="16"/>
</issue>
<issue
@@ -2272,7 +2728,9 @@
errorLine1=" public View mCustomTitleView;"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="873"
+ column="16"/>
</issue>
<issue
@@ -2281,7 +2739,9 @@
errorLine1=" public CharSequence mMessage;"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="874"
+ column="16"/>
</issue>
<issue
@@ -2290,7 +2750,9 @@
errorLine1=" public CharSequence mPositiveButtonText;"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="875"
+ column="16"/>
</issue>
<issue
@@ -2299,7 +2761,9 @@
errorLine1=" public Drawable mPositiveButtonIcon;"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="876"
+ column="16"/>
</issue>
<issue
@@ -2308,7 +2772,9 @@
errorLine1=" public DialogInterface.OnClickListener mPositiveButtonListener;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="877"
+ column="16"/>
</issue>
<issue
@@ -2317,7 +2783,9 @@
errorLine1=" public CharSequence mNegativeButtonText;"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="878"
+ column="16"/>
</issue>
<issue
@@ -2326,7 +2794,9 @@
errorLine1=" public Drawable mNegativeButtonIcon;"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="879"
+ column="16"/>
</issue>
<issue
@@ -2335,7 +2805,9 @@
errorLine1=" public DialogInterface.OnClickListener mNegativeButtonListener;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="880"
+ column="16"/>
</issue>
<issue
@@ -2344,7 +2816,9 @@
errorLine1=" public CharSequence mNeutralButtonText;"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="881"
+ column="16"/>
</issue>
<issue
@@ -2353,7 +2827,9 @@
errorLine1=" public Drawable mNeutralButtonIcon;"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="882"
+ column="16"/>
</issue>
<issue
@@ -2362,7 +2838,9 @@
errorLine1=" public DialogInterface.OnClickListener mNeutralButtonListener;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="883"
+ column="16"/>
</issue>
<issue
@@ -2371,7 +2849,9 @@
errorLine1=" public DialogInterface.OnCancelListener mOnCancelListener;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="885"
+ column="16"/>
</issue>
<issue
@@ -2380,7 +2860,9 @@
errorLine1=" public DialogInterface.OnDismissListener mOnDismissListener;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="886"
+ column="16"/>
</issue>
<issue
@@ -2389,7 +2871,9 @@
errorLine1=" public DialogInterface.OnKeyListener mOnKeyListener;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="887"
+ column="16"/>
</issue>
<issue
@@ -2398,7 +2882,9 @@
errorLine1=" public CharSequence[] mItems;"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="888"
+ column="16"/>
</issue>
<issue
@@ -2407,7 +2893,9 @@
errorLine1=" public ListAdapter mAdapter;"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="889"
+ column="16"/>
</issue>
<issue
@@ -2416,7 +2904,9 @@
errorLine1=" public DialogInterface.OnClickListener mOnClickListener;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="890"
+ column="16"/>
</issue>
<issue
@@ -2425,7 +2915,9 @@
errorLine1=" public View mView;"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="892"
+ column="16"/>
</issue>
<issue
@@ -2434,7 +2926,9 @@
errorLine1=" public boolean[] mCheckedItems;"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="898"
+ column="16"/>
</issue>
<issue
@@ -2443,7 +2937,9 @@
errorLine1=" public DialogInterface.OnMultiChoiceClickListener mOnCheckboxClickListener;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="902"
+ column="16"/>
</issue>
<issue
@@ -2452,7 +2948,9 @@
errorLine1=" public Cursor mCursor;"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="903"
+ column="16"/>
</issue>
<issue
@@ -2461,7 +2959,9 @@
errorLine1=" public String mLabelColumn;"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="904"
+ column="16"/>
</issue>
<issue
@@ -2470,7 +2970,9 @@
errorLine1=" public String mIsCheckedColumn;"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="905"
+ column="16"/>
</issue>
<issue
@@ -2479,7 +2981,9 @@
errorLine1=" public AdapterView.OnItemSelectedListener mOnItemSelectedListener;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="907"
+ column="16"/>
</issue>
<issue
@@ -2488,7 +2992,9 @@
errorLine1=" public OnPrepareListViewListener mOnPrepareListViewListener;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="908"
+ column="16"/>
</issue>
<issue
@@ -2497,7 +3003,9 @@
errorLine1=" void onPrepareListView(ListView listView);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="921"
+ column="36"/>
</issue>
<issue
@@ -2506,7 +3014,9 @@
errorLine1=" public AlertParams(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="924"
+ column="28"/>
</issue>
<issue
@@ -2515,7 +3025,9 @@
errorLine1=" public void apply(AlertController dialog) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertController.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertController.java"
+ line="930"
+ column="27"/>
</issue>
<issue
@@ -2524,7 +3036,9 @@
errorLine1=" public Button getButton(int whichButton) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="130"
+ column="12"/>
</issue>
<issue
@@ -2533,7 +3047,9 @@
errorLine1=" public ListView getListView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="139"
+ column="12"/>
</issue>
<issue
@@ -2542,7 +3058,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="144"
+ column="26"/>
</issue>
<issue
@@ -2551,7 +3069,9 @@
errorLine1=" public void setCustomTitle(View customTitleView) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="154"
+ column="32"/>
</issue>
<issue
@@ -2560,7 +3080,9 @@
errorLine1=" public void setMessage(CharSequence message) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="163"
+ column="28"/>
</issue>
<issue
@@ -2569,7 +3091,9 @@
errorLine1=" public void setView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="171"
+ column="25"/>
</issue>
<issue
@@ -2578,7 +3102,9 @@
errorLine1=" public void setView(View view, int viewSpacingLeft, int viewSpacingTop, int viewSpacingRight,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="185"
+ column="25"/>
</issue>
<issue
@@ -2587,7 +3113,9 @@
errorLine1=" public void setButton(int whichButton, CharSequence text, Message msg) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="210"
+ column="44"/>
</issue>
<issue
@@ -2596,7 +3124,9 @@
errorLine1=" public void setButton(int whichButton, CharSequence text, Message msg) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="210"
+ column="63"/>
</issue>
<issue
@@ -2605,7 +3135,9 @@
errorLine1=" public void setButton(int whichButton, CharSequence text, OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="225"
+ column="44"/>
</issue>
<issue
@@ -2614,7 +3146,9 @@
errorLine1=" public void setButton(int whichButton, CharSequence text, OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="225"
+ column="63"/>
</issue>
<issue
@@ -2623,7 +3157,9 @@
errorLine1=" public void setButton(int whichButton, CharSequence text, Drawable icon,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="242"
+ column="44"/>
</issue>
<issue
@@ -2632,7 +3168,9 @@
errorLine1=" public void setButton(int whichButton, CharSequence text, Drawable icon,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="242"
+ column="63"/>
</issue>
<issue
@@ -2641,7 +3179,9 @@
errorLine1=" OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="243"
+ column="13"/>
</issue>
<issue
@@ -2650,7 +3190,9 @@
errorLine1=" public void setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="261"
+ column="25"/>
</issue>
<issue
@@ -2659,7 +3201,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="277"
+ column="29"/>
</issue>
<issue
@@ -2668,7 +3212,9 @@
errorLine1=" public boolean onKeyDown(int keyCode, KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="283"
+ column="43"/>
</issue>
<issue
@@ -2677,7 +3223,9 @@
errorLine1=" public boolean onKeyUp(int keyCode, KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="291"
+ column="41"/>
</issue>
<issue
@@ -2686,7 +3234,9 @@
errorLine1=" public Builder setTitle(@StringRes int titleId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="366"
+ column="16"/>
</issue>
<issue
@@ -2695,7 +3245,9 @@
errorLine1=" public Builder setTitle(@Nullable CharSequence title) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="376"
+ column="16"/>
</issue>
<issue
@@ -2704,7 +3256,9 @@
errorLine1=" public Builder setCustomTitle(@Nullable View customTitleView) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="397"
+ column="16"/>
</issue>
<issue
@@ -2713,7 +3267,9 @@
errorLine1=" public Builder setMessage(@StringRes int messageId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="407"
+ column="16"/>
</issue>
<issue
@@ -2722,7 +3278,9 @@
errorLine1=" public Builder setMessage(@Nullable CharSequence message) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="417"
+ column="16"/>
</issue>
<issue
@@ -2731,7 +3289,9 @@
errorLine1=" public Builder setIcon(@DrawableRes int iconId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="429"
+ column="16"/>
</issue>
<issue
@@ -2740,7 +3300,9 @@
errorLine1=" public Builder setIcon(@Nullable Drawable icon) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="444"
+ column="16"/>
</issue>
<issue
@@ -2749,7 +3311,9 @@
errorLine1=" public Builder setIconAttribute(@AttrRes int attrId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="458"
+ column="16"/>
</issue>
<issue
@@ -2758,7 +3322,9 @@
errorLine1=" public Builder setPositiveButton(@StringRes int textId, final OnClickListener listener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="472"
+ column="16"/>
</issue>
<issue
@@ -2767,7 +3333,9 @@
errorLine1=" public Builder setPositiveButton(@StringRes int textId, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="472"
+ column="71"/>
</issue>
<issue
@@ -2776,7 +3344,9 @@
errorLine1=" public Builder setPositiveButton(CharSequence text, final OnClickListener listener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="485"
+ column="16"/>
</issue>
<issue
@@ -2785,7 +3355,9 @@
errorLine1=" public Builder setPositiveButton(CharSequence text, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="485"
+ column="42"/>
</issue>
<issue
@@ -2794,7 +3366,9 @@
errorLine1=" public Builder setPositiveButton(CharSequence text, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="485"
+ column="67"/>
</issue>
<issue
@@ -2803,7 +3377,9 @@
errorLine1=" public Builder setPositiveButtonIcon(Drawable icon) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="496"
+ column="16"/>
</issue>
<issue
@@ -2812,7 +3388,9 @@
errorLine1=" public Builder setPositiveButtonIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="496"
+ column="46"/>
</issue>
<issue
@@ -2821,7 +3399,9 @@
errorLine1=" public Builder setNegativeButton(@StringRes int textId, final OnClickListener listener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="508"
+ column="16"/>
</issue>
<issue
@@ -2830,7 +3410,9 @@
errorLine1=" public Builder setNegativeButton(@StringRes int textId, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="508"
+ column="71"/>
</issue>
<issue
@@ -2839,7 +3421,9 @@
errorLine1=" public Builder setNegativeButton(CharSequence text, final OnClickListener listener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="521"
+ column="16"/>
</issue>
<issue
@@ -2848,7 +3432,9 @@
errorLine1=" public Builder setNegativeButton(CharSequence text, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="521"
+ column="42"/>
</issue>
<issue
@@ -2857,7 +3443,9 @@
errorLine1=" public Builder setNegativeButton(CharSequence text, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="521"
+ column="67"/>
</issue>
<issue
@@ -2866,7 +3454,9 @@
errorLine1=" public Builder setNegativeButtonIcon(Drawable icon) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="532"
+ column="16"/>
</issue>
<issue
@@ -2875,7 +3465,9 @@
errorLine1=" public Builder setNegativeButtonIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="532"
+ column="46"/>
</issue>
<issue
@@ -2884,7 +3476,9 @@
errorLine1=" public Builder setNeutralButton(@StringRes int textId, final OnClickListener listener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="544"
+ column="16"/>
</issue>
<issue
@@ -2893,7 +3487,9 @@
errorLine1=" public Builder setNeutralButton(@StringRes int textId, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="544"
+ column="70"/>
</issue>
<issue
@@ -2902,7 +3498,9 @@
errorLine1=" public Builder setNeutralButton(CharSequence text, final OnClickListener listener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="557"
+ column="16"/>
</issue>
<issue
@@ -2911,7 +3509,9 @@
errorLine1=" public Builder setNeutralButton(CharSequence text, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="557"
+ column="41"/>
</issue>
<issue
@@ -2920,7 +3520,9 @@
errorLine1=" public Builder setNeutralButton(CharSequence text, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="557"
+ column="66"/>
</issue>
<issue
@@ -2929,7 +3531,9 @@
errorLine1=" public Builder setNeutralButtonIcon(Drawable icon) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="568"
+ column="16"/>
</issue>
<issue
@@ -2938,7 +3542,9 @@
errorLine1=" public Builder setNeutralButtonIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="568"
+ column="45"/>
</issue>
<issue
@@ -2947,7 +3553,9 @@
errorLine1=" public Builder setCancelable(boolean cancelable) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="578"
+ column="16"/>
</issue>
<issue
@@ -2956,7 +3564,9 @@
errorLine1=" public Builder setOnCancelListener(OnCancelListener onCancelListener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="599"
+ column="16"/>
</issue>
<issue
@@ -2965,7 +3575,9 @@
errorLine1=" public Builder setOnCancelListener(OnCancelListener onCancelListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="599"
+ column="44"/>
</issue>
<issue
@@ -2974,7 +3586,9 @@
errorLine1=" public Builder setOnDismissListener(OnDismissListener onDismissListener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="609"
+ column="16"/>
</issue>
<issue
@@ -2983,7 +3597,9 @@
errorLine1=" public Builder setOnDismissListener(OnDismissListener onDismissListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="609"
+ column="45"/>
</issue>
<issue
@@ -2992,7 +3608,9 @@
errorLine1=" public Builder setOnKeyListener(OnKeyListener onKeyListener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="619"
+ column="16"/>
</issue>
<issue
@@ -3001,7 +3619,9 @@
errorLine1=" public Builder setOnKeyListener(OnKeyListener onKeyListener) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="619"
+ column="41"/>
</issue>
<issue
@@ -3010,7 +3630,9 @@
errorLine1=" public Builder setItems(@ArrayRes int itemsId, final OnClickListener listener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="630"
+ column="16"/>
</issue>
<issue
@@ -3019,7 +3641,9 @@
errorLine1=" public Builder setItems(@ArrayRes int itemsId, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="630"
+ column="62"/>
</issue>
<issue
@@ -3028,7 +3652,9 @@
errorLine1=" public Builder setItems(CharSequence[] items, final OnClickListener listener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="642"
+ column="16"/>
</issue>
<issue
@@ -3037,7 +3663,9 @@
errorLine1=" public Builder setItems(CharSequence[] items, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="642"
+ column="33"/>
</issue>
<issue
@@ -3046,7 +3674,9 @@
errorLine1=" public Builder setItems(CharSequence[] items, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="642"
+ column="61"/>
</issue>
<issue
@@ -3055,7 +3685,9 @@
errorLine1=" public Builder setAdapter(final ListAdapter adapter, final OnClickListener listener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="658"
+ column="16"/>
</issue>
<issue
@@ -3064,7 +3696,9 @@
errorLine1=" public Builder setAdapter(final ListAdapter adapter, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="658"
+ column="41"/>
</issue>
<issue
@@ -3073,7 +3707,9 @@
errorLine1=" public Builder setAdapter(final ListAdapter adapter, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="658"
+ column="68"/>
</issue>
<issue
@@ -3082,7 +3718,9 @@
errorLine1=" public Builder setCursor(final Cursor cursor, final OnClickListener listener,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="676"
+ column="16"/>
</issue>
<issue
@@ -3091,7 +3729,9 @@
errorLine1=" public Builder setCursor(final Cursor cursor, final OnClickListener listener,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="676"
+ column="40"/>
</issue>
<issue
@@ -3100,7 +3740,9 @@
errorLine1=" public Builder setCursor(final Cursor cursor, final OnClickListener listener,"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="676"
+ column="61"/>
</issue>
<issue
@@ -3109,7 +3751,9 @@
errorLine1=" String labelColumn) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="677"
+ column="17"/>
</issue>
<issue
@@ -3118,7 +3762,9 @@
errorLine1=" public Builder setMultiChoiceItems(@ArrayRes int itemsId, boolean[] checkedItems,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="702"
+ column="16"/>
</issue>
<issue
@@ -3127,7 +3773,9 @@
errorLine1=" public Builder setMultiChoiceItems(@ArrayRes int itemsId, boolean[] checkedItems,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="702"
+ column="67"/>
</issue>
<issue
@@ -3136,7 +3784,9 @@
errorLine1=" final OnMultiChoiceClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="703"
+ column="23"/>
</issue>
<issue
@@ -3145,7 +3795,9 @@
errorLine1=" public Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="728"
+ column="16"/>
</issue>
<issue
@@ -3154,7 +3806,9 @@
errorLine1=" public Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="728"
+ column="44"/>
</issue>
<issue
@@ -3163,7 +3817,9 @@
errorLine1=" public Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="728"
+ column="66"/>
</issue>
<issue
@@ -3172,7 +3828,9 @@
errorLine1=" final OnMultiChoiceClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="729"
+ column="23"/>
</issue>
<issue
@@ -3181,7 +3839,9 @@
errorLine1=" public Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="756"
+ column="16"/>
</issue>
<issue
@@ -3190,7 +3850,9 @@
errorLine1=" public Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="756"
+ column="44"/>
</issue>
<issue
@@ -3199,7 +3861,9 @@
errorLine1=" public Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="756"
+ column="59"/>
</issue>
<issue
@@ -3208,7 +3872,9 @@
errorLine1=" public Builder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="756"
+ column="83"/>
</issue>
<issue
@@ -3217,7 +3883,9 @@
errorLine1=" final OnMultiChoiceClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="757"
+ column="23"/>
</issue>
<issue
@@ -3226,7 +3894,9 @@
errorLine1=" public Builder setSingleChoiceItems(@ArrayRes int itemsId, int checkedItem,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="781"
+ column="16"/>
</issue>
<issue
@@ -3235,7 +3905,9 @@
errorLine1=" final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="782"
+ column="23"/>
</issue>
<issue
@@ -3244,7 +3916,9 @@
errorLine1=" public Builder setSingleChoiceItems(Cursor cursor, int checkedItem, String labelColumn,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="806"
+ column="16"/>
</issue>
<issue
@@ -3253,7 +3927,9 @@
errorLine1=" public Builder setSingleChoiceItems(Cursor cursor, int checkedItem, String labelColumn,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="806"
+ column="45"/>
</issue>
<issue
@@ -3262,7 +3938,9 @@
errorLine1=" public Builder setSingleChoiceItems(Cursor cursor, int checkedItem, String labelColumn,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="806"
+ column="77"/>
</issue>
<issue
@@ -3271,7 +3949,9 @@
errorLine1=" final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="807"
+ column="23"/>
</issue>
<issue
@@ -3280,7 +3960,9 @@
errorLine1=" public Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="830"
+ column="16"/>
</issue>
<issue
@@ -3289,7 +3971,9 @@
errorLine1=" public Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="830"
+ column="45"/>
</issue>
<issue
@@ -3298,7 +3982,9 @@
errorLine1=" public Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="830"
+ column="90"/>
</issue>
<issue
@@ -3307,7 +3993,9 @@
errorLine1=" public Builder setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener listener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="852"
+ column="16"/>
</issue>
<issue
@@ -3316,7 +4004,9 @@
errorLine1=" public Builder setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="852"
+ column="45"/>
</issue>
<issue
@@ -3325,7 +4015,9 @@
errorLine1=" public Builder setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="852"
+ column="89"/>
</issue>
<issue
@@ -3334,7 +4026,9 @@
errorLine1=" public Builder setOnItemSelectedListener(final AdapterView.OnItemSelectedListener listener) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="867"
+ column="16"/>
</issue>
<issue
@@ -3343,7 +4037,9 @@
errorLine1=" public Builder setOnItemSelectedListener(final AdapterView.OnItemSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="867"
+ column="56"/>
</issue>
<issue
@@ -3352,7 +4048,9 @@
errorLine1=" public Builder setView(int layoutResId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="880"
+ column="16"/>
</issue>
<issue
@@ -3361,7 +4059,9 @@
errorLine1=" public Builder setView(View view) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="901"
+ column="16"/>
</issue>
<issue
@@ -3370,7 +4070,9 @@
errorLine1=" public Builder setView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="901"
+ column="32"/>
</issue>
<issue
@@ -3379,7 +4081,9 @@
errorLine1=" public Builder setRecycleOnMeasureEnabled(boolean enabled) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="965"
+ column="16"/>
</issue>
<issue
@@ -3388,7 +4092,9 @@
errorLine1=" public AlertDialog show() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AlertDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AlertDialog.java"
+ line="1007"
+ column="16"/>
</issue>
<issue
@@ -3397,7 +4103,9 @@
errorLine1=" public AllCapsTransformationMethod(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+ file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+ line="37"
+ column="40"/>
</issue>
<issue
@@ -3406,7 +4114,9 @@
errorLine1=" public CharSequence getTransformation(CharSequence source, View view) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+ file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+ line="42"
+ column="12"/>
</issue>
<issue
@@ -3415,7 +4125,9 @@
errorLine1=" public CharSequence getTransformation(CharSequence source, View view) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+ file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+ line="42"
+ column="43"/>
</issue>
<issue
@@ -3424,7 +4136,9 @@
errorLine1=" public CharSequence getTransformation(CharSequence source, View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+ file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+ line="42"
+ column="64"/>
</issue>
<issue
@@ -3433,7 +4147,9 @@
errorLine1=" public void onFocusChanged(View view, CharSequence sourceText, boolean focused,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+ file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+ line="47"
+ column="32"/>
</issue>
<issue
@@ -3442,7 +4158,9 @@
errorLine1=" public void onFocusChanged(View view, CharSequence sourceText, boolean focused,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+ file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+ line="47"
+ column="43"/>
</issue>
<issue
@@ -3451,7 +4169,9 @@
errorLine1=" int direction, Rect previouslyFocusedRect) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"/>
+ file="src/main/java/androidx/appcompat/text/AllCapsTransformationMethod.java"
+ line="48"
+ column="28"/>
</issue>
<issue
@@ -3460,7 +4180,9 @@
errorLine1=" protected void attachBaseContext(Context newBase) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+ line="138"
+ column="38"/>
</issue>
<issue
@@ -3469,7 +4191,9 @@
errorLine1=" public void setContentView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+ line="199"
+ column="32"/>
</issue>
<issue
@@ -3478,7 +4202,9 @@
errorLine1=" public void setContentView(View view, ViewGroup.LayoutParams params) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+ line="205"
+ column="32"/>
</issue>
<issue
@@ -3487,7 +4213,9 @@
errorLine1=" public void setContentView(View view, ViewGroup.LayoutParams params) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+ line="205"
+ column="43"/>
</issue>
<issue
@@ -3496,7 +4224,9 @@
errorLine1=" public void addContentView(View view, ViewGroup.LayoutParams params) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+ line="211"
+ column="32"/>
</issue>
<issue
@@ -3505,7 +4235,9 @@
errorLine1=" public void addContentView(View view, ViewGroup.LayoutParams params) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+ line="211"
+ column="43"/>
</issue>
<issue
@@ -3514,7 +4246,9 @@
errorLine1=" protected void onTitleChanged(CharSequence title, int color) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+ line="283"
+ column="35"/>
</issue>
<issue
@@ -3523,7 +4257,9 @@
errorLine1=" public boolean onMenuOpened(int featureId, Menu menu) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+ line="563"
+ column="48"/>
</issue>
<issue
@@ -3532,7 +4268,9 @@
errorLine1=" public boolean dispatchKeyEvent(KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+ line="590"
+ column="37"/>
</issue>
<issue
@@ -3541,7 +4279,9 @@
errorLine1=" public Resources getResources() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+ line="603"
+ column="12"/>
</issue>
<issue
@@ -3550,7 +4290,9 @@
errorLine1=" public boolean onKeyDown(int keyCode, KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatActivity.java"
+ line="632"
+ column="43"/>
</issue>
<issue
@@ -3559,7 +4301,9 @@
errorLine1=" public void setTextAppearance(Context context, int resId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"
+ line="193"
+ column="35"/>
</issue>
<issue
@@ -3568,7 +4312,9 @@
errorLine1=" public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"
+ line="201"
+ column="12"/>
</issue>
<issue
@@ -3577,7 +4323,9 @@
errorLine1=" public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"
+ line="201"
+ column="52"/>
</issue>
<issue
@@ -3586,7 +4334,9 @@
errorLine1=" public void setTextAppearance(Context context, int resId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
+ line="179"
+ column="35"/>
</issue>
<issue
@@ -3595,7 +4345,9 @@
errorLine1=" public void onInitializeAccessibilityEvent(AccessibilityEvent event) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
+ line="187"
+ column="48"/>
</issue>
<issue
@@ -3604,7 +4356,9 @@
errorLine1=" public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
+ line="193"
+ column="51"/>
</issue>
<issue
@@ -3613,7 +4367,9 @@
errorLine1=" protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
+ line="218"
+ column="34"/>
</issue>
<issue
@@ -3622,7 +4378,9 @@
errorLine1=" public int[] getAutoSizeTextAvailableSizes() {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
+ line="352"
+ column="12"/>
</issue>
<issue
@@ -3631,7 +4389,9 @@
errorLine1=" void onSupportActionModeStarted(ActionMode mode);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatCallback.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatCallback.java"
+ line="35"
+ column="37"/>
</issue>
<issue
@@ -3640,7 +4400,9 @@
errorLine1=" void onSupportActionModeFinished(ActionMode mode);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatCallback.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatCallback.java"
+ line="42"
+ column="38"/>
</issue>
<issue
@@ -3649,7 +4411,9 @@
errorLine1=" ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatCallback.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatCallback.java"
+ line="54"
+ column="50"/>
</issue>
<issue
@@ -3658,7 +4422,9 @@
errorLine1=" public void setButtonDrawable(Drawable buttonDrawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java"
+ line="104"
+ column="35"/>
</issue>
<issue
@@ -3667,7 +4433,9 @@
errorLine1=" public abstract MenuInflater getMenuInflater();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="301"
+ column="21"/>
</issue>
<issue
@@ -3676,7 +4444,9 @@
errorLine1=" public abstract void onCreate(Bundle savedInstanceState);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="315"
+ column="35"/>
</issue>
<issue
@@ -3685,7 +4455,9 @@
errorLine1=" public abstract void onPostCreate(Bundle savedInstanceState);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="320"
+ column="39"/>
</issue>
<issue
@@ -3694,7 +4466,9 @@
errorLine1=" public abstract void onConfigurationChanged(Configuration newConfig);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="326"
+ column="49"/>
</issue>
<issue
@@ -3703,7 +4477,9 @@
errorLine1=" public abstract void setContentView(View v);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="363"
+ column="41"/>
</issue>
<issue
@@ -3712,7 +4488,9 @@
errorLine1=" public abstract void setContentView(View v, ViewGroup.LayoutParams lp);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="374"
+ column="41"/>
</issue>
<issue
@@ -3721,7 +4499,9 @@
errorLine1=" public abstract void setContentView(View v, ViewGroup.LayoutParams lp);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="374"
+ column="49"/>
</issue>
<issue
@@ -3730,7 +4510,9 @@
errorLine1=" public abstract void addContentView(View v, ViewGroup.LayoutParams lp);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="380"
+ column="41"/>
</issue>
<issue
@@ -3739,7 +4521,9 @@
errorLine1=" public abstract void addContentView(View v, ViewGroup.LayoutParams lp);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="380"
+ column="49"/>
</issue>
<issue
@@ -3748,7 +4532,9 @@
errorLine1=" public abstract View createView(@Nullable View parent, String name, @NonNull Context context,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="481"
+ column="21"/>
</issue>
<issue
@@ -3757,7 +4543,9 @@
errorLine1=" public abstract View createView(@Nullable View parent, String name, @NonNull Context context,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="481"
+ column="60"/>
</issue>
<issue
@@ -3766,7 +4554,9 @@
errorLine1=" public abstract void onSaveInstanceState(Bundle outState);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDelegate.java"
+ line="503"
+ column="46"/>
</issue>
<issue
@@ -3775,7 +4565,9 @@
errorLine1=" public AppCompatDialog(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="52"
+ column="28"/>
</issue>
<issue
@@ -3784,7 +4576,9 @@
errorLine1=" public AppCompatDialog(Context context, int theme) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="56"
+ column="28"/>
</issue>
<issue
@@ -3793,7 +4587,9 @@
errorLine1=" protected AppCompatDialog(Context context, boolean cancelable,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="70"
+ column="31"/>
</issue>
<issue
@@ -3802,7 +4598,9 @@
errorLine1=" OnCancelListener cancelListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="71"
+ column="13"/>
</issue>
<issue
@@ -3811,7 +4609,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="76"
+ column="29"/>
</issue>
<issue
@@ -3820,7 +4620,9 @@
errorLine1=" public ActionBar getSupportActionBar() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="89"
+ column="12"/>
</issue>
<issue
@@ -3829,7 +4631,9 @@
errorLine1=" public void setContentView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="99"
+ column="32"/>
</issue>
<issue
@@ -3838,7 +4642,9 @@
errorLine1=" public void setContentView(View view, ViewGroup.LayoutParams params) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="104"
+ column="32"/>
</issue>
<issue
@@ -3847,7 +4653,9 @@
errorLine1=" public void setContentView(View view, ViewGroup.LayoutParams params) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="104"
+ column="43"/>
</issue>
<issue
@@ -3856,7 +4664,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="116"
+ column="26"/>
</issue>
<issue
@@ -3865,7 +4675,9 @@
errorLine1=" public void addContentView(View view, ViewGroup.LayoutParams params) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="128"
+ column="32"/>
</issue>
<issue
@@ -3874,7 +4686,9 @@
errorLine1=" public void addContentView(View view, ViewGroup.LayoutParams params) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="128"
+ column="43"/>
</issue>
<issue
@@ -3883,7 +4697,9 @@
errorLine1=" public AppCompatDelegate getDelegate() {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="175"
+ column="12"/>
</issue>
<issue
@@ -3892,7 +4708,9 @@
errorLine1=" public void onSupportActionModeStarted(ActionMode mode) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="193"
+ column="44"/>
</issue>
<issue
@@ -3901,7 +4719,9 @@
errorLine1=" public void onSupportActionModeFinished(ActionMode mode) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="197"
+ column="45"/>
</issue>
<issue
@@ -3910,7 +4730,9 @@
errorLine1=" public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="202"
+ column="57"/>
</issue>
<issue
@@ -3919,7 +4741,9 @@
errorLine1=" public boolean dispatchKeyEvent(KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatDialog.java"
+ line="212"
+ column="37"/>
</issue>
<issue
@@ -3928,7 +4752,9 @@
errorLine1=" public static synchronized AppCompatDrawableManager get() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"
+ line="465"
+ column="32"/>
</issue>
<issue
@@ -3937,7 +4763,9 @@
errorLine1=" public synchronized Drawable getDrawable(@NonNull Context context, @DrawableRes int resId) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"
+ line="474"
+ column="25"/>
</issue>
<issue
@@ -3946,7 +4774,9 @@
errorLine1=" public static synchronized PorterDuffColorFilter getPorterDuffColorFilter("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"
+ line="505"
+ column="32"/>
</issue>
<issue
@@ -3955,7 +4785,9 @@
errorLine1=" int color, PorterDuff.Mode mode) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatDrawableManager.java"
+ line="506"
+ column="24"/>
</issue>
<issue
@@ -3964,7 +4796,9 @@
errorLine1=" public void setTextAppearance(Context context, int resId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatEditText.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatEditText.java"
+ line="213"
+ column="35"/>
</issue>
<issue
@@ -3973,7 +4807,9 @@
errorLine1=" public boolean onDragEvent(@SuppressWarnings("MissingNullability") DragEvent event) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatEditText.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatEditText.java"
+ line="295"
+ column="72"/>
</issue>
<issue
@@ -3982,7 +4818,9 @@
errorLine1=" public void setImageBitmap(Bitmap bm) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatImageButton.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatImageButton.java"
+ line="112"
+ column="32"/>
</issue>
<issue
@@ -3991,7 +4829,9 @@
errorLine1=" public void loadFromAttributes(AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatImageHelper.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatImageHelper.java"
+ line="52"
+ column="36"/>
</issue>
<issue
@@ -4000,7 +4840,9 @@
errorLine1=" public void setImageBitmap(Bitmap bm) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatImageView.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatImageView.java"
+ line="123"
+ column="32"/>
</issue>
<issue
@@ -4009,7 +4851,9 @@
errorLine1=" public void setTextAppearance(Context context, int resId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"
+ line="191"
+ column="35"/>
</issue>
<issue
@@ -4018,7 +4862,9 @@
errorLine1=" public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"
+ line="199"
+ column="12"/>
</issue>
<issue
@@ -4027,7 +4873,9 @@
errorLine1=" public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"
+ line="199"
+ column="52"/>
</issue>
<issue
@@ -4036,7 +4884,9 @@
errorLine1=" public AppCompatRadioButton(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"
+ line="65"
+ column="33"/>
</issue>
<issue
@@ -4045,7 +4895,9 @@
errorLine1=" public AppCompatRadioButton(Context context, @Nullable AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"
+ line="69"
+ column="33"/>
</issue>
<issue
@@ -4054,7 +4906,9 @@
errorLine1=" public AppCompatRadioButton(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"
+ line="73"
+ column="33"/>
</issue>
<issue
@@ -4063,7 +4917,9 @@
errorLine1=" public void setButtonDrawable(Drawable buttonDrawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"
+ line="102"
+ column="35"/>
</issue>
<issue
@@ -4072,7 +4928,9 @@
errorLine1=" protected synchronized void onDraw(Canvas canvas) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatSeekBar.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatSeekBar.java"
+ line="59"
+ column="40"/>
</issue>
<issue
@@ -4081,7 +4939,9 @@
errorLine1=" int defStyleAttr, int mode, Resources.Theme popupTheme) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+ line="212"
+ column="41"/>
</issue>
<issue
@@ -4090,7 +4950,9 @@
errorLine1=" public Context getPopupContext() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+ line="312"
+ column="12"/>
</issue>
<issue
@@ -4099,7 +4961,9 @@
errorLine1=" public void setPopupBackgroundDrawable(Drawable background) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+ line="317"
+ column="44"/>
</issue>
<issue
@@ -4108,7 +4972,9 @@
errorLine1=" public Drawable getPopupBackground() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+ line="331"
+ column="12"/>
</issue>
<issue
@@ -4117,7 +4983,9 @@
errorLine1=" public void setAdapter(SpinnerAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+ line="405"
+ column="28"/>
</issue>
<issue
@@ -4126,7 +4994,9 @@
errorLine1=" public boolean onTouchEvent(MotionEvent event) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+ line="431"
+ column="33"/>
</issue>
<issue
@@ -4135,7 +5005,9 @@
errorLine1=" public void setPrompt(CharSequence prompt) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+ line="466"
+ column="27"/>
</issue>
<issue
@@ -4144,7 +5016,9 @@
errorLine1=" public CharSequence getPrompt() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+ line="475"
+ column="12"/>
</issue>
<issue
@@ -4153,7 +5027,9 @@
errorLine1=" public Parcelable onSaveInstanceState() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+ line="620"
+ column="12"/>
</issue>
<issue
@@ -4162,7 +5038,9 @@
errorLine1=" public void onRestoreInstanceState(Parcelable state) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
+ line="628"
+ column="40"/>
</issue>
<issue
@@ -4171,7 +5049,9 @@
errorLine1=" public void setTextAppearance(Context context, int resId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
+ line="210"
+ column="35"/>
</issue>
<issue
@@ -4180,7 +5060,9 @@
errorLine1=" protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
+ line="269"
+ column="34"/>
</issue>
<issue
@@ -4189,7 +5071,9 @@
errorLine1=" public int[] getAutoSizeTextAvailableSizes() {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
+ line="430"
+ column="12"/>
</issue>
<issue
@@ -4198,7 +5082,9 @@
errorLine1=" public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
+ line="442"
+ column="12"/>
</issue>
<issue
@@ -4207,7 +5093,9 @@
errorLine1=" public InputConnection onCreateInputConnection(EditorInfo outAttrs) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
+ line="442"
+ column="52"/>
</issue>
<issue
@@ -4216,7 +5104,9 @@
errorLine1=" public CharSequence getText() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"/>
+ file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
+ line="550"
+ column="12"/>
</issue>
<issue
@@ -4225,7 +5115,9 @@
errorLine1=" protected AppCompatTextView createTextView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="200"
+ column="48"/>
</issue>
<issue
@@ -4234,7 +5126,9 @@
errorLine1=" protected AppCompatTextView createTextView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="200"
+ column="65"/>
</issue>
<issue
@@ -4243,7 +5137,9 @@
errorLine1=" protected AppCompatImageView createImageView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="205"
+ column="50"/>
</issue>
<issue
@@ -4252,7 +5148,9 @@
errorLine1=" protected AppCompatImageView createImageView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="205"
+ column="67"/>
</issue>
<issue
@@ -4261,7 +5159,9 @@
errorLine1=" protected AppCompatButton createButton(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="210"
+ column="44"/>
</issue>
<issue
@@ -4270,7 +5170,9 @@
errorLine1=" protected AppCompatButton createButton(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="210"
+ column="61"/>
</issue>
<issue
@@ -4279,7 +5181,9 @@
errorLine1=" protected AppCompatEditText createEditText(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="215"
+ column="48"/>
</issue>
<issue
@@ -4288,7 +5192,9 @@
errorLine1=" protected AppCompatEditText createEditText(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="215"
+ column="65"/>
</issue>
<issue
@@ -4297,7 +5203,9 @@
errorLine1=" protected AppCompatSpinner createSpinner(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="220"
+ column="46"/>
</issue>
<issue
@@ -4306,7 +5214,9 @@
errorLine1=" protected AppCompatSpinner createSpinner(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="220"
+ column="63"/>
</issue>
<issue
@@ -4315,7 +5225,9 @@
errorLine1=" protected AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="225"
+ column="54"/>
</issue>
<issue
@@ -4324,7 +5236,9 @@
errorLine1=" protected AppCompatImageButton createImageButton(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="225"
+ column="71"/>
</issue>
<issue
@@ -4333,7 +5247,9 @@
errorLine1=" protected AppCompatCheckBox createCheckBox(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="230"
+ column="48"/>
</issue>
<issue
@@ -4342,7 +5258,9 @@
errorLine1=" protected AppCompatCheckBox createCheckBox(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="230"
+ column="65"/>
</issue>
<issue
@@ -4351,7 +5269,9 @@
errorLine1=" protected AppCompatRadioButton createRadioButton(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="235"
+ column="54"/>
</issue>
<issue
@@ -4360,7 +5280,9 @@
errorLine1=" protected AppCompatRadioButton createRadioButton(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="235"
+ column="71"/>
</issue>
<issue
@@ -4369,7 +5291,9 @@
errorLine1=" protected AppCompatCheckedTextView createCheckedTextView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="240"
+ column="62"/>
</issue>
<issue
@@ -4378,7 +5302,9 @@
errorLine1=" protected AppCompatCheckedTextView createCheckedTextView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="240"
+ column="79"/>
</issue>
<issue
@@ -4387,7 +5313,9 @@
errorLine1=" protected AppCompatAutoCompleteTextView createAutoCompleteTextView(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="245"
+ column="72"/>
</issue>
<issue
@@ -4396,7 +5324,9 @@
errorLine1=" AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="246"
+ column="13"/>
</issue>
<issue
@@ -4405,7 +5335,9 @@
errorLine1=" protected AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="251"
+ column="82"/>
</issue>
<issue
@@ -4414,7 +5346,9 @@
errorLine1=" AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="252"
+ column="13"/>
</issue>
<issue
@@ -4423,7 +5357,9 @@
errorLine1=" protected AppCompatRatingBar createRatingBar(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="257"
+ column="50"/>
</issue>
<issue
@@ -4432,7 +5368,9 @@
errorLine1=" protected AppCompatRatingBar createRatingBar(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="257"
+ column="67"/>
</issue>
<issue
@@ -4441,7 +5379,9 @@
errorLine1=" protected AppCompatSeekBar createSeekBar(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="262"
+ column="46"/>
</issue>
<issue
@@ -4450,7 +5390,9 @@
errorLine1=" protected AppCompatSeekBar createSeekBar(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="262"
+ column="63"/>
</issue>
<issue
@@ -4459,7 +5401,9 @@
errorLine1=" protected AppCompatToggleButton createToggleButton(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="267"
+ column="56"/>
</issue>
<issue
@@ -4468,7 +5412,9 @@
errorLine1=" protected AppCompatToggleButton createToggleButton(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="267"
+ column="73"/>
</issue>
<issue
@@ -4477,7 +5423,9 @@
errorLine1=" protected View createView(Context context, String name, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="279"
+ column="31"/>
</issue>
<issue
@@ -4486,7 +5434,9 @@
errorLine1=" protected View createView(Context context, String name, AttributeSet attrs) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="279"
+ column="48"/>
</issue>
<issue
@@ -4495,7 +5445,9 @@
errorLine1=" protected View createView(Context context, String name, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"/>
+ file="src/main/java/androidx/appcompat/app/AppCompatViewInflater.java"
+ line="279"
+ column="61"/>
</issue>
<issue
@@ -4504,7 +5456,9 @@
errorLine1=" protected Context mSystemContext;"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="40"
+ column="15"/>
</issue>
<issue
@@ -4513,7 +5467,9 @@
errorLine1=" protected Context mContext;"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="41"
+ column="15"/>
</issue>
<issue
@@ -4522,7 +5478,9 @@
errorLine1=" protected MenuBuilder mMenu;"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="42"
+ column="15"/>
</issue>
<issue
@@ -4531,7 +5489,9 @@
errorLine1=" protected LayoutInflater mSystemInflater;"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="43"
+ column="15"/>
</issue>
<issue
@@ -4540,7 +5500,9 @@
errorLine1=" protected LayoutInflater mInflater;"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="44"
+ column="15"/>
</issue>
<issue
@@ -4549,7 +5511,9 @@
errorLine1=" protected MenuView mMenuView;"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="50"
+ column="15"/>
</issue>
<issue
@@ -4558,7 +5522,9 @@
errorLine1=" public BaseMenuPresenter(Context context, int menuLayoutRes, int itemLayoutRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="61"
+ column="30"/>
</issue>
<issue
@@ -4567,7 +5533,9 @@
errorLine1=" public void initForMenu(Context context, MenuBuilder menu) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="69"
+ column="29"/>
</issue>
<issue
@@ -4576,7 +5544,9 @@
errorLine1=" public void initForMenu(Context context, MenuBuilder menu) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="69"
+ column="46"/>
</issue>
<issue
@@ -4585,7 +5555,9 @@
errorLine1=" public MenuView getMenuView(ViewGroup root) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="76"
+ column="12"/>
</issue>
<issue
@@ -4594,7 +5566,9 @@
errorLine1=" public MenuView getMenuView(ViewGroup root) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="76"
+ column="33"/>
</issue>
<issue
@@ -4603,7 +5577,9 @@
errorLine1=" protected void addItemView(View itemView, int childIndex) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="133"
+ column="32"/>
</issue>
<issue
@@ -4612,7 +5588,9 @@
errorLine1=" protected boolean filterLeftoverView(ViewGroup parent, int childIndex) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="147"
+ column="42"/>
</issue>
<issue
@@ -4621,7 +5599,9 @@
errorLine1=" public void setCallback(Callback cb) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="153"
+ column="29"/>
</issue>
<issue
@@ -4630,7 +5610,9 @@
errorLine1=" public Callback getCallback() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="157"
+ column="12"/>
</issue>
<issue
@@ -4639,7 +5621,9 @@
errorLine1=" public MenuView.ItemView createItemView(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="166"
+ column="12"/>
</issue>
<issue
@@ -4648,7 +5632,9 @@
errorLine1=" public MenuView.ItemView createItemView(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="166"
+ column="45"/>
</issue>
<issue
@@ -4657,7 +5643,9 @@
errorLine1=" public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="181"
+ column="12"/>
</issue>
<issue
@@ -4666,7 +5654,9 @@
errorLine1=" public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="181"
+ column="29"/>
</issue>
<issue
@@ -4675,7 +5665,9 @@
errorLine1=" public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="181"
+ column="48"/>
</issue>
<issue
@@ -4684,7 +5676,9 @@
errorLine1=" public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="181"
+ column="66"/>
</issue>
<issue
@@ -4693,7 +5687,9 @@
errorLine1=" public abstract void bindItemView(MenuItemImpl item, MenuView.ItemView itemView);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="198"
+ column="39"/>
</issue>
<issue
@@ -4702,7 +5698,9 @@
errorLine1=" public abstract void bindItemView(MenuItemImpl item, MenuView.ItemView itemView);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="198"
+ column="58"/>
</issue>
<issue
@@ -4711,7 +5709,9 @@
errorLine1=" public boolean shouldIncludeItem(int childIndex, MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="207"
+ column="54"/>
</issue>
<issue
@@ -4720,7 +5720,9 @@
errorLine1=" public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="212"
+ column="29"/>
</issue>
<issue
@@ -4729,7 +5731,9 @@
errorLine1=" public boolean onSubMenuSelected(SubMenuBuilder menu) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="219"
+ column="38"/>
</issue>
<issue
@@ -4738,7 +5742,9 @@
errorLine1=" public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="233"
+ column="41"/>
</issue>
<issue
@@ -4747,7 +5753,9 @@
errorLine1=" public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="233"
+ column="59"/>
</issue>
<issue
@@ -4756,7 +5764,9 @@
errorLine1=" public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="238"
+ column="43"/>
</issue>
<issue
@@ -4765,7 +5775,9 @@
errorLine1=" public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/BaseMenuPresenter.java"
+ line="238"
+ column="61"/>
</issue>
<issue
@@ -4774,7 +5786,9 @@
errorLine1=" public void dispatchFitSystemWindows(Rect insets) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+ file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+ line="77"
+ column="42"/>
</issue>
<issue
@@ -4783,7 +5797,9 @@
errorLine1=" public void setAttachListener(OnAttachListener attachListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+ file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+ line="81"
+ column="35"/>
</issue>
<issue
@@ -4792,7 +5808,9 @@
errorLine1=" public TypedValue getMinWidthMajor() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+ file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+ line="176"
+ column="12"/>
</issue>
<issue
@@ -4801,7 +5819,9 @@
errorLine1=" public TypedValue getMinWidthMinor() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+ file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+ line="181"
+ column="12"/>
</issue>
<issue
@@ -4810,7 +5830,9 @@
errorLine1=" public TypedValue getFixedWidthMajor() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+ file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+ line="186"
+ column="12"/>
</issue>
<issue
@@ -4819,7 +5841,9 @@
errorLine1=" public TypedValue getFixedWidthMinor() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+ file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+ line="191"
+ column="12"/>
</issue>
<issue
@@ -4828,7 +5852,9 @@
errorLine1=" public TypedValue getFixedHeightMajor() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+ file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+ line="196"
+ column="12"/>
</issue>
<issue
@@ -4837,7 +5863,9 @@
errorLine1=" public TypedValue getFixedHeightMinor() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"/>
+ file="src/main/java/androidx/appcompat/widget/ContentFrameLayout.java"
+ line="201"
+ column="12"/>
</issue>
<issue
@@ -4846,7 +5874,9 @@
errorLine1=" public ContextThemeWrapper(Context base, @StyleRes int themeResId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+ line="64"
+ column="32"/>
</issue>
<issue
@@ -4855,7 +5885,9 @@
errorLine1=" public ContextThemeWrapper(Context base, Resources.Theme theme) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+ line="78"
+ column="32"/>
</issue>
<issue
@@ -4864,7 +5896,9 @@
errorLine1=" public ContextThemeWrapper(Context base, Resources.Theme theme) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+ line="78"
+ column="46"/>
</issue>
<issue
@@ -4873,7 +5907,9 @@
errorLine1=" protected void attachBaseContext(Context newBase) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+ line="84"
+ column="38"/>
</issue>
<issue
@@ -4882,7 +5918,9 @@
errorLine1=" public void applyOverrideConfiguration(Configuration overrideConfiguration) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+ line="98"
+ column="44"/>
</issue>
<issue
@@ -4891,7 +5929,9 @@
errorLine1=" public Resources getResources() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+ line="110"
+ column="12"/>
</issue>
<issue
@@ -4900,7 +5940,9 @@
errorLine1=" public Resources.Theme getTheme() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+ line="149"
+ column="12"/>
</issue>
<issue
@@ -4909,7 +5951,9 @@
errorLine1=" public Object getSystemService(String name) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+ line="163"
+ column="12"/>
</issue>
<issue
@@ -4918,7 +5962,9 @@
errorLine1=" public Object getSystemService(String name) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+ line="163"
+ column="36"/>
</issue>
<issue
@@ -4927,7 +5973,9 @@
errorLine1=" protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+ line="184"
+ column="41"/>
</issue>
<issue
@@ -4936,7 +5984,9 @@
errorLine1=" public AssetManager getAssets() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/ContextThemeWrapper.java"
+ line="201"
+ column="12"/>
</issue>
<issue
@@ -4945,7 +5995,9 @@
errorLine1=" void setWindowCallback(Window.Callback cb);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+ line="39"
+ column="28"/>
</issue>
<issue
@@ -4954,7 +6006,9 @@
errorLine1=" void setWindowTitle(CharSequence title);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+ line="40"
+ column="25"/>
</issue>
<issue
@@ -4963,7 +6017,9 @@
errorLine1=" CharSequence getTitle();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+ line="41"
+ column="5"/>
</issue>
<issue
@@ -4972,7 +6028,9 @@
errorLine1=" void setIcon(Drawable d);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+ line="47"
+ column="18"/>
</issue>
<issue
@@ -4981,7 +6039,9 @@
errorLine1=" void setMenu(Menu menu, MenuPresenter.Callback cb);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+ line="55"
+ column="18"/>
</issue>
<issue
@@ -4990,7 +6050,9 @@
errorLine1=" void setMenu(Menu menu, MenuPresenter.Callback cb);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+ line="55"
+ column="29"/>
</issue>
<issue
@@ -4999,7 +6061,9 @@
errorLine1=" void saveToolbarHierarchyState(SparseArray<Parcelable> toolbarStates);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+ line="56"
+ column="36"/>
</issue>
<issue
@@ -5008,7 +6072,9 @@
errorLine1=" void restoreToolbarHierarchyState(SparseArray<Parcelable> toolbarStates);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorContentParent.java"
+ line="57"
+ column="39"/>
</issue>
<issue
@@ -5017,7 +6083,9 @@
errorLine1=" ViewGroup getViewGroup();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="47"
+ column="5"/>
</issue>
<issue
@@ -5026,7 +6094,9 @@
errorLine1=" Context getContext();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="48"
+ column="5"/>
</issue>
<issue
@@ -5035,7 +6105,9 @@
errorLine1=" void setWindowCallback(Window.Callback cb);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="51"
+ column="28"/>
</issue>
<issue
@@ -5044,7 +6116,9 @@
errorLine1=" void setWindowTitle(CharSequence title);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="52"
+ column="25"/>
</issue>
<issue
@@ -5053,7 +6127,9 @@
errorLine1=" CharSequence getTitle();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="53"
+ column="5"/>
</issue>
<issue
@@ -5062,7 +6138,9 @@
errorLine1=" void setTitle(CharSequence title);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="54"
+ column="19"/>
</issue>
<issue
@@ -5071,7 +6149,9 @@
errorLine1=" CharSequence getSubtitle();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="55"
+ column="5"/>
</issue>
<issue
@@ -5080,7 +6160,9 @@
errorLine1=" void setSubtitle(CharSequence subtitle);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="56"
+ column="22"/>
</issue>
<issue
@@ -5089,7 +6171,9 @@
errorLine1=" void setIcon(Drawable d);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="62"
+ column="18"/>
</issue>
<issue
@@ -5098,7 +6182,9 @@
errorLine1=" void setLogo(Drawable d);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="64"
+ column="18"/>
</issue>
<issue
@@ -5107,7 +6193,9 @@
errorLine1=" void setMenu(Menu menu, MenuPresenter.Callback cb);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="71"
+ column="18"/>
</issue>
<issue
@@ -5116,7 +6204,9 @@
errorLine1=" void setMenu(Menu menu, MenuPresenter.Callback cb);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="71"
+ column="29"/>
</issue>
<issue
@@ -5125,7 +6215,9 @@
errorLine1=" void setEmbeddedTabView(ScrollingTabContainerView tabView);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="76"
+ column="29"/>
</issue>
<issue
@@ -5134,7 +6226,9 @@
errorLine1=" void setDropdownParams(SpinnerAdapter adapter, AdapterView.OnItemSelectedListener listener);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="83"
+ column="28"/>
</issue>
<issue
@@ -5143,7 +6237,9 @@
errorLine1=" void setDropdownParams(SpinnerAdapter adapter, AdapterView.OnItemSelectedListener listener);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="83"
+ column="52"/>
</issue>
<issue
@@ -5152,7 +6248,9 @@
errorLine1=" void setCustomView(View view);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="87"
+ column="24"/>
</issue>
<issue
@@ -5161,7 +6259,9 @@
errorLine1=" View getCustomView();"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="88"
+ column="5"/>
</issue>
<issue
@@ -5170,7 +6270,9 @@
errorLine1=" ViewPropertyAnimatorCompat setupAnimatorToVisibility(int visibility, long duration);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="90"
+ column="5"/>
</issue>
<issue
@@ -5179,7 +6281,9 @@
errorLine1=" void setNavigationIcon(Drawable icon);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="91"
+ column="28"/>
</issue>
<issue
@@ -5188,7 +6292,9 @@
errorLine1=" void setNavigationContentDescription(CharSequence description);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="93"
+ column="42"/>
</issue>
<issue
@@ -5197,7 +6303,9 @@
errorLine1=" void setDefaultNavigationIcon(Drawable icon);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="96"
+ column="35"/>
</issue>
<issue
@@ -5206,7 +6314,9 @@
errorLine1=" void saveHierarchyState(SparseArray<Parcelable> toolbarStates);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="97"
+ column="29"/>
</issue>
<issue
@@ -5215,7 +6325,9 @@
errorLine1=" void restoreHierarchyState(SparseArray<Parcelable> toolbarStates);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="98"
+ column="32"/>
</issue>
<issue
@@ -5224,7 +6336,9 @@
errorLine1=" void setBackgroundDrawable(Drawable d);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="99"
+ column="32"/>
</issue>
<issue
@@ -5233,7 +6347,9 @@
errorLine1=" void setMenuCallbacks(MenuPresenter.Callback presenterCallback,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="103"
+ column="27"/>
</issue>
<issue
@@ -5242,7 +6358,9 @@
errorLine1=" MenuBuilder.Callback menuBuilderCallback);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="104"
+ column="13"/>
</issue>
<issue
@@ -5251,7 +6369,9 @@
errorLine1=" Menu getMenu();"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/DecorToolbar.java"
+ line="105"
+ column="5"/>
</issue>
<issue
@@ -5260,7 +6380,9 @@
errorLine1=" public DrawerArrowDrawable(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"
+ line="128"
+ column="32"/>
</issue>
<issue
@@ -5269,7 +6391,9 @@
errorLine1=" public void draw(Canvas canvas) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"
+ line="325"
+ column="22"/>
</issue>
<issue
@@ -5278,7 +6402,9 @@
errorLine1=" public void setColorFilter(ColorFilter colorFilter) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"
+ line="412"
+ column="32"/>
</issue>
<issue
@@ -5287,7 +6413,9 @@
errorLine1=" public final Paint getPaint() {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"/>
+ file="src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java"
+ line="457"
+ column="18"/>
</issue>
<issue
@@ -5296,7 +6424,9 @@
errorLine1=" public ExpandedMenuView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+ line="52"
+ column="29"/>
</issue>
<issue
@@ -5305,7 +6435,9 @@
errorLine1=" public ExpandedMenuView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+ line="52"
+ column="46"/>
</issue>
<issue
@@ -5314,7 +6446,9 @@
errorLine1=" public ExpandedMenuView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+ line="56"
+ column="29"/>
</issue>
<issue
@@ -5323,7 +6457,9 @@
errorLine1=" public ExpandedMenuView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+ line="56"
+ column="46"/>
</issue>
<issue
@@ -5332,7 +6468,9 @@
errorLine1=" public void initialize(MenuBuilder menu) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+ line="72"
+ column="28"/>
</issue>
<issue
@@ -5341,7 +6479,9 @@
errorLine1=" public boolean invokeItem(MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+ line="85"
+ column="31"/>
</issue>
<issue
@@ -5350,7 +6490,9 @@
errorLine1=" public void onItemClick(AdapterView parent, View v, int position, long id) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+ line="91"
+ column="29"/>
</issue>
<issue
@@ -5359,7 +6501,9 @@
errorLine1=" public void onItemClick(AdapterView parent, View v, int position, long id) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ExpandedMenuView.java"
+ line="91"
+ column="49"/>
</issue>
<issue
@@ -5368,7 +6512,9 @@
errorLine1=" public void setOnFitSystemWindowsListener(OnFitSystemWindowsListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java"/>
+ file="src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java"
+ line="47"
+ column="47"/>
</issue>
<issue
@@ -5377,7 +6523,9 @@
errorLine1=" protected boolean fitSystemWindows(Rect insets) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java"/>
+ file="src/main/java/androidx/appcompat/widget/FitWindowsFrameLayout.java"
+ line="52"
+ column="40"/>
</issue>
<issue
@@ -5386,7 +6534,9 @@
errorLine1=" public void setOnFitSystemWindowsListener(OnFitSystemWindowsListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java"/>
+ file="src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java"
+ line="47"
+ column="47"/>
</issue>
<issue
@@ -5395,7 +6545,9 @@
errorLine1=" protected boolean fitSystemWindows(Rect insets) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java"/>
+ file="src/main/java/androidx/appcompat/widget/FitWindowsLinearLayout.java"
+ line="52"
+ column="40"/>
</issue>
<issue
@@ -5404,7 +6556,9 @@
errorLine1=" void onFitSystemWindows(Rect insets);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/FitWindowsViewGroup.java"/>
+ file="src/main/java/androidx/appcompat/widget/FitWindowsViewGroup.java"
+ line="32"
+ column="33"/>
</issue>
<issue
@@ -5413,7 +6567,9 @@
errorLine1=" void setOnFitSystemWindowsListener(OnFitSystemWindowsListener listener);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/FitWindowsViewGroup.java"/>
+ file="src/main/java/androidx/appcompat/widget/FitWindowsViewGroup.java"
+ line="35"
+ column="40"/>
</issue>
<issue
@@ -5422,7 +6578,9 @@
errorLine1=" public ForwardingListener(View src) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
+ file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"
+ line="68"
+ column="31"/>
</issue>
<issue
@@ -5431,7 +6589,9 @@
errorLine1=" public abstract ShowableListMenu getPopup();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
+ file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"
+ line="90"
+ column="21"/>
</issue>
<issue
@@ -5440,7 +6600,9 @@
errorLine1=" public boolean onTouch(View v, MotionEvent event) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
+ file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"
+ line="93"
+ column="28"/>
</issue>
<issue
@@ -5449,7 +6611,9 @@
errorLine1=" public boolean onTouch(View v, MotionEvent event) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
+ file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"
+ line="93"
+ column="36"/>
</issue>
<issue
@@ -5458,7 +6622,9 @@
errorLine1=" public void onViewAttachedToWindow(View v) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
+ file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"
+ line="116"
+ column="40"/>
</issue>
<issue
@@ -5467,7 +6633,9 @@
errorLine1=" public void onViewDetachedFromWindow(View v) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"/>
+ file="src/main/java/androidx/appcompat/widget/ForwardingListener.java"
+ line="120"
+ column="42"/>
</issue>
<issue
@@ -5476,7 +6644,9 @@
errorLine1=" public Drawable getDividerDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="239"
+ column="12"/>
</issue>
<issue
@@ -5485,7 +6655,9 @@
errorLine1=" public void setDividerDrawable(Drawable divider) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="250"
+ column="36"/>
</issue>
<issue
@@ -5494,7 +6666,9 @@
errorLine1=" protected void onDraw(Canvas canvas) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="302"
+ column="27"/>
</issue>
<issue
@@ -5503,7 +6677,9 @@
errorLine1=" public LayoutParams generateLayoutParams(AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="1750"
+ column="12"/>
</issue>
<issue
@@ -5512,7 +6688,9 @@
errorLine1=" public LayoutParams generateLayoutParams(AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="1750"
+ column="46"/>
</issue>
<issue
@@ -5521,7 +6699,9 @@
errorLine1=" protected LayoutParams generateDefaultLayoutParams() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="1763"
+ column="15"/>
</issue>
<issue
@@ -5530,7 +6710,9 @@
errorLine1=" protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="1773"
+ column="15"/>
</issue>
<issue
@@ -5539,7 +6721,9 @@
errorLine1=" protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="1773"
+ column="49"/>
</issue>
<issue
@@ -5548,7 +6732,9 @@
errorLine1=" protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="1780"
+ column="41"/>
</issue>
<issue
@@ -5557,7 +6743,9 @@
errorLine1=" public void onInitializeAccessibilityEvent(AccessibilityEvent event) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="1785"
+ column="48"/>
</issue>
<issue
@@ -5566,7 +6754,9 @@
errorLine1=" public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="1791"
+ column="51"/>
</issue>
<issue
@@ -5575,7 +6765,9 @@
errorLine1=" public LayoutParams(Context c, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="1804"
+ column="29"/>
</issue>
<issue
@@ -5584,7 +6776,9 @@
errorLine1=" public LayoutParams(Context c, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="1804"
+ column="40"/>
</issue>
<issue
@@ -5593,7 +6787,9 @@
errorLine1=" public LayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="1832"
+ column="29"/>
</issue>
<issue
@@ -5602,7 +6798,9 @@
errorLine1=" public LayoutParams(ViewGroup.MarginLayoutParams source) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
+ line="1839"
+ column="29"/>
</issue>
<issue
@@ -5611,7 +6809,9 @@
errorLine1=" public ListMenuItemView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+ line="73"
+ column="29"/>
</issue>
<issue
@@ -5620,7 +6820,9 @@
errorLine1=" public ListMenuItemView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+ line="73"
+ column="46"/>
</issue>
<issue
@@ -5629,7 +6831,9 @@
errorLine1=" public ListMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+ line="77"
+ column="29"/>
</issue>
<issue
@@ -5638,7 +6842,9 @@
errorLine1=" public ListMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+ line="77"
+ column="46"/>
</issue>
<issue
@@ -5647,7 +6853,9 @@
errorLine1=" public void initialize(MenuItemImpl itemData, int menuType) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+ line="123"
+ column="28"/>
</issue>
<issue
@@ -5656,7 +6864,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+ line="154"
+ column="26"/>
</issue>
<issue
@@ -5665,7 +6875,9 @@
errorLine1=" public MenuItemImpl getItemData() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+ line="165"
+ column="12"/>
</issue>
<issue
@@ -5674,7 +6886,9 @@
errorLine1=" public void setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+ line="255"
+ column="25"/>
</issue>
<issue
@@ -5683,7 +6897,9 @@
errorLine1=" public void adjustListItemSelectionBounds(Rect rect) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java"
+ line="346"
+ column="47"/>
</issue>
<issue
@@ -5692,7 +6908,9 @@
errorLine1=" public ListMenuPresenter(Context context, int itemLayoutRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="70"
+ column="30"/>
</issue>
<issue
@@ -5701,7 +6919,9 @@
errorLine1=" public void initForMenu(Context context, MenuBuilder menu) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="87"
+ column="29"/>
</issue>
<issue
@@ -5710,7 +6930,9 @@
errorLine1=" public void initForMenu(Context context, MenuBuilder menu) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="87"
+ column="46"/>
</issue>
<issue
@@ -5719,7 +6941,9 @@
errorLine1=" public MenuView getMenuView(ViewGroup root) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="104"
+ column="12"/>
</issue>
<issue
@@ -5728,7 +6952,9 @@
errorLine1=" public MenuView getMenuView(ViewGroup root) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="104"
+ column="33"/>
</issue>
<issue
@@ -5737,7 +6963,9 @@
errorLine1=" public ListAdapter getAdapter() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="124"
+ column="12"/>
</issue>
<issue
@@ -5746,7 +6974,9 @@
errorLine1=" public void setCallback(Callback cb) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="137"
+ column="29"/>
</issue>
<issue
@@ -5755,7 +6985,9 @@
errorLine1=" public boolean onSubMenuSelected(SubMenuBuilder subMenu) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="142"
+ column="38"/>
</issue>
<issue
@@ -5764,7 +6996,9 @@
errorLine1=" public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="154"
+ column="29"/>
</issue>
<issue
@@ -5773,7 +7007,9 @@
errorLine1=" public void onItemClick(AdapterView<?> parent, View view, int position, long id) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="172"
+ column="29"/>
</issue>
<issue
@@ -5782,7 +7018,9 @@
errorLine1=" public void onItemClick(AdapterView<?> parent, View view, int position, long id) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="172"
+ column="52"/>
</issue>
<issue
@@ -5791,7 +7029,9 @@
errorLine1=" public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="182"
+ column="41"/>
</issue>
<issue
@@ -5800,7 +7040,9 @@
errorLine1=" public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="182"
+ column="59"/>
</issue>
<issue
@@ -5809,7 +7051,9 @@
errorLine1=" public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="187"
+ column="43"/>
</issue>
<issue
@@ -5818,7 +7062,9 @@
errorLine1=" public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="187"
+ column="61"/>
</issue>
<issue
@@ -5827,7 +7073,9 @@
errorLine1=" public void saveHierarchyState(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="191"
+ column="36"/>
</issue>
<issue
@@ -5836,7 +7084,9 @@
errorLine1=" public void restoreHierarchyState(Bundle inState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="199"
+ column="39"/>
</issue>
<issue
@@ -5845,7 +7095,9 @@
errorLine1=" public Parcelable onSaveInstanceState() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="216"
+ column="12"/>
</issue>
<issue
@@ -5854,7 +7106,9 @@
errorLine1=" public void onRestoreInstanceState(Parcelable state) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ListMenuPresenter.java"
+ line="227"
+ column="40"/>
</issue>
<issue
@@ -5863,7 +7117,9 @@
errorLine1=" public void setListSelector(Drawable selector) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ListPopupWindow.java"/>
+ file="src/main/java/androidx/appcompat/widget/ListPopupWindow.java"
+ line="418"
+ column="33"/>
</issue>
<issue
@@ -5872,7 +7128,9 @@
errorLine1=" public OnTouchListener createDragToOpenListener(View src) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ListPopupWindow.java"/>
+ file="src/main/java/androidx/appcompat/widget/ListPopupWindow.java"
+ line="1142"
+ column="12"/>
</issue>
<issue
@@ -5881,7 +7139,9 @@
errorLine1=" public OnTouchListener createDragToOpenListener(View src) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ListPopupWindow.java"/>
+ file="src/main/java/androidx/appcompat/widget/ListPopupWindow.java"
+ line="1142"
+ column="53"/>
</issue>
<issue
@@ -5890,7 +7150,9 @@
errorLine1=" public MenuAdapter(MenuBuilder menu, LayoutInflater inflater, boolean overflowOnly,"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+ line="43"
+ column="24"/>
</issue>
<issue
@@ -5899,7 +7161,9 @@
errorLine1=" public MenuAdapter(MenuBuilder menu, LayoutInflater inflater, boolean overflowOnly,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+ line="43"
+ column="42"/>
</issue>
<issue
@@ -5908,7 +7172,9 @@
errorLine1=" public MenuBuilder getAdapterMenu() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+ line="70"
+ column="12"/>
</issue>
<issue
@@ -5917,7 +7183,9 @@
errorLine1=" public MenuItemImpl getItem(int position) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+ line="75"
+ column="12"/>
</issue>
<issue
@@ -5926,7 +7194,9 @@
errorLine1=" public View getView(int position, View convertView, ViewGroup parent) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+ line="92"
+ column="12"/>
</issue>
<issue
@@ -5935,7 +7205,9 @@
errorLine1=" public View getView(int position, View convertView, ViewGroup parent) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+ line="92"
+ column="39"/>
</issue>
<issue
@@ -5944,7 +7216,9 @@
errorLine1=" public View getView(int position, View convertView, ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuAdapter.java"
+ line="92"
+ column="57"/>
</issue>
<issue
@@ -5953,7 +7227,9 @@
errorLine1=" boolean invokeItem(MenuItemImpl item);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="220"
+ column="28"/>
</issue>
<issue
@@ -5962,7 +7238,9 @@
errorLine1=" public MenuBuilder(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="223"
+ column="24"/>
</issue>
<issue
@@ -5971,7 +7249,9 @@
errorLine1=" public MenuBuilder setDefaultShowAsAction(int defaultShowAsAction) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="238"
+ column="12"/>
</issue>
<issue
@@ -5980,7 +7260,9 @@
errorLine1=" public void addMenuPresenter(MenuPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="249"
+ column="34"/>
</issue>
<issue
@@ -5989,7 +7271,9 @@
errorLine1=" public void addMenuPresenter(MenuPresenter presenter, Context menuContext) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="262"
+ column="34"/>
</issue>
<issue
@@ -5998,7 +7282,9 @@
errorLine1=" public void addMenuPresenter(MenuPresenter presenter, Context menuContext) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="262"
+ column="59"/>
</issue>
<issue
@@ -6007,7 +7293,9 @@
errorLine1=" public void removeMenuPresenter(MenuPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="274"
+ column="37"/>
</issue>
<issue
@@ -6016,7 +7304,9 @@
errorLine1=" public void savePresenterStates(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="364"
+ column="37"/>
</issue>
<issue
@@ -6025,7 +7315,9 @@
errorLine1=" public void restorePresenterStates(Bundle state) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="368"
+ column="40"/>
</issue>
<issue
@@ -6034,7 +7326,9 @@
errorLine1=" public void saveActionViewStates(Bundle outStates) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="372"
+ column="38"/>
</issue>
<issue
@@ -6043,7 +7337,9 @@
errorLine1=" public void restoreActionViewStates(Bundle states) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="399"
+ column="41"/>
</issue>
<issue
@@ -6052,7 +7348,9 @@
errorLine1=" protected String getActionViewStatesKey() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="429"
+ column="15"/>
</issue>
<issue
@@ -6061,7 +7359,9 @@
errorLine1=" public void setCallback(Callback cb) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="433"
+ column="29"/>
</issue>
<issue
@@ -6070,7 +7370,9 @@
errorLine1=" protected MenuItem addInternal(int group, int id, int categoryOrder, CharSequence title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="440"
+ column="15"/>
</issue>
<issue
@@ -6079,7 +7381,9 @@
errorLine1=" protected MenuItem addInternal(int group, int id, int categoryOrder, CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="440"
+ column="74"/>
</issue>
<issue
@@ -6088,7 +7392,9 @@
errorLine1=" public MenuItem add(CharSequence title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="465"
+ column="12"/>
</issue>
<issue
@@ -6097,7 +7403,9 @@
errorLine1=" public MenuItem add(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="465"
+ column="25"/>
</issue>
<issue
@@ -6106,7 +7414,9 @@
errorLine1=" public MenuItem add(int titleRes) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="470"
+ column="12"/>
</issue>
<issue
@@ -6115,7 +7425,9 @@
errorLine1=" public MenuItem add(int group, int id, int categoryOrder, CharSequence title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="475"
+ column="12"/>
</issue>
<issue
@@ -6124,7 +7436,9 @@
errorLine1=" public MenuItem add(int group, int id, int categoryOrder, CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="475"
+ column="63"/>
</issue>
<issue
@@ -6133,7 +7447,9 @@
errorLine1=" public MenuItem add(int group, int id, int categoryOrder, int title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="480"
+ column="12"/>
</issue>
<issue
@@ -6142,7 +7458,9 @@
errorLine1=" public SubMenu addSubMenu(CharSequence title) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="485"
+ column="12"/>
</issue>
<issue
@@ -6151,7 +7469,9 @@
errorLine1=" public SubMenu addSubMenu(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="485"
+ column="31"/>
</issue>
<issue
@@ -6160,7 +7480,9 @@
errorLine1=" public SubMenu addSubMenu(int titleRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="490"
+ column="12"/>
</issue>
<issue
@@ -6169,7 +7491,9 @@
errorLine1=" public SubMenu addSubMenu(int group, int id, int categoryOrder, CharSequence title) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="495"
+ column="12"/>
</issue>
<issue
@@ -6178,7 +7502,9 @@
errorLine1=" public SubMenu addSubMenu(int group, int id, int categoryOrder, CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="495"
+ column="69"/>
</issue>
<issue
@@ -6187,7 +7513,9 @@
errorLine1=" public SubMenu addSubMenu(int group, int id, int categoryOrder, int title) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="504"
+ column="12"/>
</issue>
<issue
@@ -6196,7 +7524,9 @@
errorLine1=" public int addIntentOptions(int group, int id, int categoryOrder, ComponentName caller,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="518"
+ column="71"/>
</issue>
<issue
@@ -6205,7 +7535,9 @@
errorLine1=" Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="519"
+ column="13"/>
</issue>
<issue
@@ -6214,7 +7546,9 @@
errorLine1=" Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="519"
+ column="33"/>
</issue>
<issue
@@ -6223,7 +7557,9 @@
errorLine1=" Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="519"
+ column="59"/>
</issue>
<issue
@@ -6232,7 +7568,9 @@
errorLine1=" public MenuItem findItem(int id) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="692"
+ column="12"/>
</issue>
<issue
@@ -6241,7 +7579,9 @@
errorLine1=" public MenuItem getItem(int index) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="751"
+ column="12"/>
</issue>
<issue
@@ -6250,7 +7590,9 @@
errorLine1=" public boolean isShortcutKey(int keyCode, KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="756"
+ column="47"/>
</issue>
<issue
@@ -6259,7 +7601,9 @@
errorLine1=" public Context getContext() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="829"
+ column="12"/>
</issue>
<issue
@@ -6268,7 +7612,9 @@
errorLine1=" public boolean performShortcut(int keyCode, KeyEvent event, int flags) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="858"
+ column="49"/>
</issue>
<issue
@@ -6277,7 +7623,9 @@
errorLine1=" public boolean performItemAction(MenuItem item, int flags) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="974"
+ column="38"/>
</issue>
<issue
@@ -6286,7 +7634,9 @@
errorLine1=" public boolean performItemAction(MenuItem item, MenuPresenter preferredPresenter, int flags) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="978"
+ column="38"/>
</issue>
<issue
@@ -6295,7 +7645,9 @@
errorLine1=" public boolean performItemAction(MenuItem item, MenuPresenter preferredPresenter, int flags) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="978"
+ column="53"/>
</issue>
<issue
@@ -6304,7 +7656,9 @@
errorLine1=" public ArrayList<MenuItemImpl> getActionItems() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1202"
+ column="12"/>
</issue>
<issue
@@ -6313,7 +7667,9 @@
errorLine1=" public ArrayList<MenuItemImpl> getNonActionItems() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1207"
+ column="12"/>
</issue>
<issue
@@ -6322,7 +7678,9 @@
errorLine1=" protected MenuBuilder setHeaderTitleInt(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1258"
+ column="15"/>
</issue>
<issue
@@ -6331,7 +7689,9 @@
errorLine1=" protected MenuBuilder setHeaderTitleInt(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1258"
+ column="45"/>
</issue>
<issue
@@ -6340,7 +7700,9 @@
errorLine1=" protected MenuBuilder setHeaderTitleInt(int titleRes) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1270"
+ column="15"/>
</issue>
<issue
@@ -6349,7 +7711,9 @@
errorLine1=" protected MenuBuilder setHeaderIconInt(Drawable icon) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1282"
+ column="15"/>
</issue>
<issue
@@ -6358,7 +7722,9 @@
errorLine1=" protected MenuBuilder setHeaderIconInt(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1282"
+ column="44"/>
</issue>
<issue
@@ -6367,7 +7733,9 @@
errorLine1=" protected MenuBuilder setHeaderIconInt(int iconRes) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1294"
+ column="15"/>
</issue>
<issue
@@ -6376,7 +7744,9 @@
errorLine1=" protected MenuBuilder setHeaderViewInt(View view) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1306"
+ column="15"/>
</issue>
<issue
@@ -6385,7 +7755,9 @@
errorLine1=" protected MenuBuilder setHeaderViewInt(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1306"
+ column="44"/>
</issue>
<issue
@@ -6394,7 +7766,9 @@
errorLine1=" public CharSequence getHeaderTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1311"
+ column="12"/>
</issue>
<issue
@@ -6403,7 +7777,9 @@
errorLine1=" public Drawable getHeaderIcon() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1315"
+ column="12"/>
</issue>
<issue
@@ -6412,7 +7788,9 @@
errorLine1=" public View getHeaderView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1319"
+ column="12"/>
</issue>
<issue
@@ -6421,7 +7799,9 @@
errorLine1=" public MenuBuilder getRootMenu() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1327"
+ column="12"/>
</issue>
<issue
@@ -6430,7 +7810,9 @@
errorLine1=" public void setCurrentMenuInfo(ContextMenu.ContextMenuInfo menuInfo) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1338"
+ column="36"/>
</issue>
<issue
@@ -6439,7 +7821,9 @@
errorLine1=" public boolean expandItemActionView(MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1350"
+ column="41"/>
</issue>
<issue
@@ -6448,7 +7832,9 @@
errorLine1=" public boolean collapseItemActionView(MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1372"
+ column="43"/>
</issue>
<issue
@@ -6457,7 +7843,9 @@
errorLine1=" public MenuItemImpl getExpandedItem() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuBuilder.java"
+ line="1394"
+ column="12"/>
</issue>
<issue
@@ -6466,7 +7854,9 @@
errorLine1=" public MenuItem setEnabled(boolean enabled) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="189"
+ column="12"/>
</issue>
<issue
@@ -6475,7 +7865,9 @@
errorLine1=" public Intent getIntent() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="222"
+ column="12"/>
</issue>
<issue
@@ -6484,7 +7876,9 @@
errorLine1=" public MenuItem setIntent(Intent intent) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="227"
+ column="12"/>
</issue>
<issue
@@ -6493,7 +7887,9 @@
errorLine1=" public MenuItem setIntent(Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="227"
+ column="31"/>
</issue>
<issue
@@ -6502,7 +7898,9 @@
errorLine1=" public MenuItem setCallback(Runnable callback) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="236"
+ column="12"/>
</issue>
<issue
@@ -6511,7 +7909,9 @@
errorLine1=" public MenuItem setCallback(Runnable callback) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="236"
+ column="33"/>
</issue>
<issue
@@ -6520,7 +7920,9 @@
errorLine1=" public MenuItem setAlphabeticShortcut(char alphaChar) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="247"
+ column="12"/>
</issue>
<issue
@@ -6529,7 +7931,9 @@
errorLine1=" public MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="260"
+ column="12"/>
</issue>
<issue
@@ -6538,7 +7942,9 @@
errorLine1=" public MenuItem setNumericShortcut(char numericChar) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="289"
+ column="12"/>
</issue>
<issue
@@ -6547,7 +7953,9 @@
errorLine1=" public MenuItem setNumericShortcut(char numericChar, int numericModifiers) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="302"
+ column="12"/>
</issue>
<issue
@@ -6556,7 +7964,9 @@
errorLine1=" public MenuItem setShortcut(char numericChar, char alphaChar) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="316"
+ column="12"/>
</issue>
<issue
@@ -6565,7 +7975,9 @@
errorLine1=" public MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="326"
+ column="12"/>
</issue>
<issue
@@ -6574,7 +7986,9 @@
errorLine1=" public SubMenu getSubMenu() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="418"
+ column="12"/>
</issue>
<issue
@@ -6583,7 +7997,9 @@
errorLine1=" public void setSubMenu(SubMenuBuilder subMenu) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="427"
+ column="28"/>
</issue>
<issue
@@ -6592,7 +8008,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="435"
+ column="12"/>
</issue>
<issue
@@ -6601,7 +8019,9 @@
errorLine1=" public MenuItem setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="452"
+ column="12"/>
</issue>
<issue
@@ -6610,7 +8030,9 @@
errorLine1=" public MenuItem setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="452"
+ column="30"/>
</issue>
<issue
@@ -6619,7 +8041,9 @@
errorLine1=" public MenuItem setTitle(int title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="465"
+ column="12"/>
</issue>
<issue
@@ -6628,7 +8052,9 @@
errorLine1=" public CharSequence getTitleCondensed() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="470"
+ column="12"/>
</issue>
<issue
@@ -6637,7 +8063,9 @@
errorLine1=" public MenuItem setTitleCondensed(CharSequence title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="485"
+ column="12"/>
</issue>
<issue
@@ -6646,7 +8074,9 @@
errorLine1=" public MenuItem setTitleCondensed(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="485"
+ column="39"/>
</issue>
<issue
@@ -6655,7 +8085,9 @@
errorLine1=" public Drawable getIcon() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="499"
+ column="12"/>
</issue>
<issue
@@ -6664,7 +8096,9 @@
errorLine1=" public MenuItem setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="515"
+ column="12"/>
</issue>
<issue
@@ -6673,7 +8107,9 @@
errorLine1=" public MenuItem setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="515"
+ column="29"/>
</issue>
<issue
@@ -6682,7 +8118,9 @@
errorLine1=" public MenuItem setIcon(int iconResId) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="525"
+ column="12"/>
</issue>
<issue
@@ -6691,7 +8129,9 @@
errorLine1=" public MenuItem setIconTintList(@Nullable ColorStateList iconTintList) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="538"
+ column="12"/>
</issue>
<issue
@@ -6700,7 +8140,9 @@
errorLine1=" public ColorStateList getIconTintList() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="549"
+ column="12"/>
</issue>
<issue
@@ -6709,7 +8151,9 @@
errorLine1=" public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="554"
+ column="12"/>
</issue>
<issue
@@ -6718,7 +8162,9 @@
errorLine1=" public MenuItem setIconTintMode(PorterDuff.Mode iconTintMode) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="554"
+ column="37"/>
</issue>
<issue
@@ -6727,7 +8173,9 @@
errorLine1=" public PorterDuff.Mode getIconTintMode() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="565"
+ column="12"/>
</issue>
<issue
@@ -6736,7 +8184,9 @@
errorLine1=" public MenuItem setCheckable(boolean checkable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="594"
+ column="12"/>
</issue>
<issue
@@ -6745,7 +8195,9 @@
errorLine1=" public MenuItem setChecked(boolean checked) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="618"
+ column="12"/>
</issue>
<issue
@@ -6754,7 +8206,9 @@
errorLine1=" public MenuItem setVisible(boolean shown) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="661"
+ column="12"/>
</issue>
<issue
@@ -6763,7 +8217,9 @@
errorLine1=" public MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener clickListener) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="671"
+ column="12"/>
</issue>
<issue
@@ -6772,7 +8228,9 @@
errorLine1=" public MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener clickListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="671"
+ column="48"/>
</issue>
<issue
@@ -6781,7 +8239,9 @@
errorLine1=" public ContextMenuInfo getMenuInfo() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="686"
+ column="12"/>
</issue>
<issue
@@ -6790,7 +8250,9 @@
errorLine1=" public SupportMenuItem setActionView(View view) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="750"
+ column="12"/>
</issue>
<issue
@@ -6799,7 +8261,9 @@
errorLine1=" public SupportMenuItem setActionView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="750"
+ column="42"/>
</issue>
<issue
@@ -6808,7 +8272,9 @@
errorLine1=" public SupportMenuItem setActionView(int resId) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="761"
+ column="12"/>
</issue>
<issue
@@ -6817,7 +8283,9 @@
errorLine1=" public View getActionView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="769"
+ column="12"/>
</issue>
<issue
@@ -6826,7 +8294,9 @@
errorLine1=" public MenuItem setActionProvider(android.view.ActionProvider actionProvider) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="781"
+ column="12"/>
</issue>
<issue
@@ -6835,7 +8305,9 @@
errorLine1=" public MenuItem setActionProvider(android.view.ActionProvider actionProvider) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="781"
+ column="39"/>
</issue>
<issue
@@ -6844,7 +8316,9 @@
errorLine1=" public android.view.ActionProvider getActionProvider() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="787"
+ column="12"/>
</issue>
<issue
@@ -6853,7 +8327,9 @@
errorLine1=" public ActionProvider getSupportActionProvider() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="793"
+ column="12"/>
</issue>
<issue
@@ -6862,7 +8338,9 @@
errorLine1=" public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="798"
+ column="12"/>
</issue>
<issue
@@ -6871,7 +8349,9 @@
errorLine1=" public SupportMenuItem setSupportActionProvider(ActionProvider actionProvider) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="798"
+ column="53"/>
</issue>
<issue
@@ -6880,7 +8360,9 @@
errorLine1=" public SupportMenuItem setShowAsActionFlags(int actionEnum) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="817"
+ column="12"/>
</issue>
<issue
@@ -6889,7 +8371,9 @@
errorLine1=" public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="875"
+ column="12"/>
</issue>
<issue
@@ -6898,7 +8382,9 @@
errorLine1=" public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="875"
+ column="47"/>
</issue>
<issue
@@ -6907,7 +8393,9 @@
errorLine1=" public SupportMenuItem setContentDescription(CharSequence contentDescription) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="881"
+ column="12"/>
</issue>
<issue
@@ -6916,7 +8404,9 @@
errorLine1=" public SupportMenuItem setContentDescription(CharSequence contentDescription) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="881"
+ column="50"/>
</issue>
<issue
@@ -6925,7 +8415,9 @@
errorLine1=" public CharSequence getContentDescription() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="890"
+ column="12"/>
</issue>
<issue
@@ -6934,7 +8426,9 @@
errorLine1=" public SupportMenuItem setTooltipText(CharSequence tooltipText) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="895"
+ column="12"/>
</issue>
<issue
@@ -6943,7 +8437,9 @@
errorLine1=" public SupportMenuItem setTooltipText(CharSequence tooltipText) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="895"
+ column="43"/>
</issue>
<issue
@@ -6952,7 +8448,9 @@
errorLine1=" public CharSequence getTooltipText() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemImpl.java"
+ line="904"
+ column="12"/>
</issue>
<issue
@@ -6961,7 +8459,9 @@
errorLine1=" public MenuItemWrapperICS(Context context, SupportMenuItem object) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="55"
+ column="31"/>
</issue>
<issue
@@ -6970,7 +8470,9 @@
errorLine1=" public MenuItemWrapperICS(Context context, SupportMenuItem object) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="55"
+ column="48"/>
</issue>
<issue
@@ -6979,7 +8481,9 @@
errorLine1=" public MenuItem setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="79"
+ column="12"/>
</issue>
<issue
@@ -6988,7 +8492,9 @@
errorLine1=" public MenuItem setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="79"
+ column="30"/>
</issue>
<issue
@@ -6997,7 +8503,9 @@
errorLine1=" public MenuItem setTitle(int title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="85"
+ column="12"/>
</issue>
<issue
@@ -7006,7 +8514,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="91"
+ column="12"/>
</issue>
<issue
@@ -7015,7 +8525,9 @@
errorLine1=" public MenuItem setTitleCondensed(CharSequence title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="96"
+ column="12"/>
</issue>
<issue
@@ -7024,7 +8536,9 @@
errorLine1=" public MenuItem setTitleCondensed(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="96"
+ column="39"/>
</issue>
<issue
@@ -7033,7 +8547,9 @@
errorLine1=" public CharSequence getTitleCondensed() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="102"
+ column="12"/>
</issue>
<issue
@@ -7042,7 +8558,9 @@
errorLine1=" public MenuItem setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="107"
+ column="12"/>
</issue>
<issue
@@ -7051,7 +8569,9 @@
errorLine1=" public MenuItem setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="107"
+ column="29"/>
</issue>
<issue
@@ -7060,7 +8580,9 @@
errorLine1=" public MenuItem setIcon(int iconRes) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="113"
+ column="12"/>
</issue>
<issue
@@ -7069,7 +8591,9 @@
errorLine1=" public Drawable getIcon() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="119"
+ column="12"/>
</issue>
<issue
@@ -7078,7 +8602,9 @@
errorLine1=" public MenuItem setIntent(Intent intent) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="124"
+ column="12"/>
</issue>
<issue
@@ -7087,7 +8613,9 @@
errorLine1=" public MenuItem setIntent(Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="124"
+ column="31"/>
</issue>
<issue
@@ -7096,7 +8624,9 @@
errorLine1=" public Intent getIntent() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="130"
+ column="12"/>
</issue>
<issue
@@ -7105,7 +8635,9 @@
errorLine1=" public MenuItem setShortcut(char numericChar, char alphaChar) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="135"
+ column="12"/>
</issue>
<issue
@@ -7114,7 +8646,9 @@
errorLine1=" public MenuItem setShortcut(char numericChar, char alphaChar, int numericModifiers,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="141"
+ column="12"/>
</issue>
<issue
@@ -7123,7 +8657,9 @@
errorLine1=" public MenuItem setNumericShortcut(char numericChar) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="148"
+ column="12"/>
</issue>
<issue
@@ -7132,7 +8668,9 @@
errorLine1=" public MenuItem setNumericShortcut(char numericChar, int numericModifiers) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="154"
+ column="12"/>
</issue>
<issue
@@ -7141,7 +8679,9 @@
errorLine1=" public MenuItem setAlphabeticShortcut(char alphaChar) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="170"
+ column="12"/>
</issue>
<issue
@@ -7150,7 +8690,9 @@
errorLine1=" public MenuItem setAlphabeticShortcut(char alphaChar, int alphaModifiers) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="176"
+ column="12"/>
</issue>
<issue
@@ -7159,7 +8701,9 @@
errorLine1=" public MenuItem setCheckable(boolean checkable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="192"
+ column="12"/>
</issue>
<issue
@@ -7168,7 +8712,9 @@
errorLine1=" public MenuItem setChecked(boolean checked) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="203"
+ column="12"/>
</issue>
<issue
@@ -7177,7 +8723,9 @@
errorLine1=" public MenuItem setVisible(boolean visible) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="214"
+ column="12"/>
</issue>
<issue
@@ -7186,7 +8734,9 @@
errorLine1=" public MenuItem setEnabled(boolean enabled) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="224"
+ column="12"/>
</issue>
<issue
@@ -7195,7 +8745,9 @@
errorLine1=" public SubMenu getSubMenu() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="240"
+ column="12"/>
</issue>
<issue
@@ -7204,7 +8756,9 @@
errorLine1=" public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="245"
+ column="12"/>
</issue>
<issue
@@ -7213,7 +8767,9 @@
errorLine1=" public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="245"
+ column="48"/>
</issue>
<issue
@@ -7222,7 +8778,9 @@
errorLine1=" public ContextMenu.ContextMenuInfo getMenuInfo() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="252"
+ column="12"/>
</issue>
<issue
@@ -7231,7 +8789,9 @@
errorLine1=" public MenuItem setShowAsActionFlags(int actionEnum) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="262"
+ column="12"/>
</issue>
<issue
@@ -7240,7 +8800,9 @@
errorLine1=" public MenuItem setActionView(View view) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="268"
+ column="12"/>
</issue>
<issue
@@ -7249,7 +8811,9 @@
errorLine1=" public MenuItem setActionView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="268"
+ column="35"/>
</issue>
<issue
@@ -7258,7 +8822,9 @@
errorLine1=" public MenuItem setActionView(int resId) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="277"
+ column="12"/>
</issue>
<issue
@@ -7267,7 +8833,9 @@
errorLine1=" public View getActionView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="290"
+ column="12"/>
</issue>
<issue
@@ -7276,7 +8844,9 @@
errorLine1=" public MenuItem setActionProvider(android.view.ActionProvider provider) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="299"
+ column="12"/>
</issue>
<issue
@@ -7285,7 +8855,9 @@
errorLine1=" public MenuItem setActionProvider(android.view.ActionProvider provider) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="299"
+ column="39"/>
</issue>
<issue
@@ -7294,7 +8866,9 @@
errorLine1=" public android.view.ActionProvider getActionProvider() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="311"
+ column="12"/>
</issue>
<issue
@@ -7303,7 +8877,9 @@
errorLine1=" public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="335"
+ column="12"/>
</issue>
<issue
@@ -7312,7 +8888,9 @@
errorLine1=" public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="335"
+ column="47"/>
</issue>
<issue
@@ -7321,7 +8899,9 @@
errorLine1=" public MenuItem setContentDescription(CharSequence contentDescription) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="342"
+ column="12"/>
</issue>
<issue
@@ -7330,7 +8910,9 @@
errorLine1=" public MenuItem setContentDescription(CharSequence contentDescription) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="342"
+ column="43"/>
</issue>
<issue
@@ -7339,7 +8921,9 @@
errorLine1=" public CharSequence getContentDescription() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="348"
+ column="12"/>
</issue>
<issue
@@ -7348,7 +8932,9 @@
errorLine1=" public MenuItem setTooltipText(CharSequence tooltipText) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="353"
+ column="12"/>
</issue>
<issue
@@ -7357,7 +8943,9 @@
errorLine1=" public MenuItem setTooltipText(CharSequence tooltipText) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="353"
+ column="36"/>
</issue>
<issue
@@ -7366,7 +8954,9 @@
errorLine1=" public CharSequence getTooltipText() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="359"
+ column="12"/>
</issue>
<issue
@@ -7375,7 +8965,9 @@
errorLine1=" public MenuItem setIconTintList(ColorStateList tint) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="364"
+ column="12"/>
</issue>
<issue
@@ -7384,7 +8976,9 @@
errorLine1=" public MenuItem setIconTintList(ColorStateList tint) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="364"
+ column="37"/>
</issue>
<issue
@@ -7393,7 +8987,9 @@
errorLine1=" public ColorStateList getIconTintList() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="370"
+ column="12"/>
</issue>
<issue
@@ -7402,7 +8998,9 @@
errorLine1=" public MenuItem setIconTintMode(PorterDuff.Mode tintMode) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="375"
+ column="12"/>
</issue>
<issue
@@ -7411,7 +9009,9 @@
errorLine1=" public MenuItem setIconTintMode(PorterDuff.Mode tintMode) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="375"
+ column="37"/>
</issue>
<issue
@@ -7420,7 +9020,9 @@
errorLine1=" public PorterDuff.Mode getIconTintMode() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuItemWrapperICS.java"
+ line="381"
+ column="12"/>
</issue>
<issue
@@ -7429,7 +9031,9 @@
errorLine1=" public ListView getListView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java"
+ line="353"
+ column="12"/>
</issue>
<issue
@@ -7438,7 +9042,9 @@
errorLine1=" public void setEnterTransition(Object enterTransition) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+ file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+ line="87"
+ column="36"/>
</issue>
<issue
@@ -7447,7 +9053,9 @@
errorLine1=" public void setExitTransition(Object exitTransition) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+ file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+ line="93"
+ column="35"/>
</issue>
<issue
@@ -7456,7 +9064,9 @@
errorLine1=" public void setHoverListener(MenuItemHoverListener hoverListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+ file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+ line="99"
+ column="34"/>
</issue>
<issue
@@ -7465,7 +9075,9 @@
errorLine1=" public MenuDropDownListView(Context context, boolean hijackFocus) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+ file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+ line="148"
+ column="37"/>
</issue>
<issue
@@ -7474,7 +9086,9 @@
errorLine1=" public void setHoverListener(MenuItemHoverListener hoverListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+ file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+ line="163"
+ column="38"/>
</issue>
<issue
@@ -7483,7 +9097,9 @@
errorLine1=" public boolean onKeyDown(int keyCode, KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+ file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+ line="172"
+ column="47"/>
</issue>
<issue
@@ -7492,7 +9108,9 @@
errorLine1=" public boolean onHoverEvent(MotionEvent ev) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"/>
+ file="src/main/java/androidx/appcompat/widget/MenuPopupWindow.java"
+ line="201"
+ column="37"/>
</issue>
<issue
@@ -7501,7 +9119,9 @@
errorLine1=" void initForMenu(Context context, MenuBuilder menu);"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+ line="70"
+ column="22"/>
</issue>
<issue
@@ -7510,7 +9130,9 @@
errorLine1=" void initForMenu(Context context, MenuBuilder menu);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+ line="70"
+ column="39"/>
</issue>
<issue
@@ -7519,7 +9141,9 @@
errorLine1=" MenuView getMenuView(ViewGroup root);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+ line="79"
+ column="5"/>
</issue>
<issue
@@ -7528,7 +9152,9 @@
errorLine1=" MenuView getMenuView(ViewGroup root);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+ line="79"
+ column="26"/>
</issue>
<issue
@@ -7537,7 +9163,9 @@
errorLine1=" void setCallback(Callback cb);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+ line="94"
+ column="22"/>
</issue>
<issue
@@ -7546,7 +9174,9 @@
errorLine1=" boolean onSubMenuSelected(SubMenuBuilder subMenu);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+ line="104"
+ column="31"/>
</issue>
<issue
@@ -7555,7 +9185,9 @@
errorLine1=" void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+ line="116"
+ column="22"/>
</issue>
<issue
@@ -7564,7 +9196,9 @@
errorLine1=" boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+ line="131"
+ column="34"/>
</issue>
<issue
@@ -7573,7 +9207,9 @@
errorLine1=" boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+ line="131"
+ column="52"/>
</issue>
<issue
@@ -7582,7 +9218,9 @@
errorLine1=" boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+ line="140"
+ column="36"/>
</issue>
<issue
@@ -7591,7 +9229,9 @@
errorLine1=" boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+ line="140"
+ column="54"/>
</issue>
<issue
@@ -7600,7 +9240,9 @@
errorLine1=" Parcelable onSaveInstanceState();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+ line="154"
+ column="5"/>
</issue>
<issue
@@ -7609,7 +9251,9 @@
errorLine1=" void onRestoreInstanceState(Parcelable state);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuPresenter.java"
+ line="160"
+ column="33"/>
</issue>
<issue
@@ -7618,7 +9262,9 @@
errorLine1=" void initialize(MenuBuilder menu);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuView.java"
+ line="39"
+ column="21"/>
</issue>
<issue
@@ -7627,7 +9273,9 @@
errorLine1=" void initialize(MenuItemImpl itemData, int menuType);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuView.java"
+ line="60"
+ column="25"/>
</issue>
<issue
@@ -7636,7 +9284,9 @@
errorLine1=" MenuItemImpl getItemData();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuView.java"
+ line="66"
+ column="9"/>
</issue>
<issue
@@ -7645,7 +9295,9 @@
errorLine1=" void setTitle(CharSequence title);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuView.java"
+ line="72"
+ column="23"/>
</issue>
<issue
@@ -7654,7 +9306,9 @@
errorLine1=" void setIcon(Drawable icon);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuView.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuView.java"
+ line="106"
+ column="22"/>
</issue>
<issue
@@ -7663,7 +9317,9 @@
errorLine1=" public MenuWrapperICS(Context context, SupportMenu object) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="40"
+ column="27"/>
</issue>
<issue
@@ -7672,7 +9328,9 @@
errorLine1=" public MenuWrapperICS(Context context, SupportMenu object) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="40"
+ column="44"/>
</issue>
<issue
@@ -7681,7 +9339,9 @@
errorLine1=" public MenuItem add(CharSequence title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="49"
+ column="12"/>
</issue>
<issue
@@ -7690,7 +9350,9 @@
errorLine1=" public MenuItem add(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="49"
+ column="25"/>
</issue>
<issue
@@ -7699,7 +9361,9 @@
errorLine1=" public MenuItem add(int titleRes) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="54"
+ column="12"/>
</issue>
<issue
@@ -7708,7 +9372,9 @@
errorLine1=" public MenuItem add(int groupId, int itemId, int order, CharSequence title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="59"
+ column="12"/>
</issue>
<issue
@@ -7717,7 +9383,9 @@
errorLine1=" public MenuItem add(int groupId, int itemId, int order, CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="59"
+ column="61"/>
</issue>
<issue
@@ -7726,7 +9394,9 @@
errorLine1=" public MenuItem add(int groupId, int itemId, int order, int titleRes) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="64"
+ column="12"/>
</issue>
<issue
@@ -7735,7 +9405,9 @@
errorLine1=" public SubMenu addSubMenu(CharSequence title) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="69"
+ column="12"/>
</issue>
<issue
@@ -7744,7 +9416,9 @@
errorLine1=" public SubMenu addSubMenu(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="69"
+ column="31"/>
</issue>
<issue
@@ -7753,7 +9427,9 @@
errorLine1=" public SubMenu addSubMenu(int titleRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="74"
+ column="12"/>
</issue>
<issue
@@ -7762,7 +9438,9 @@
errorLine1=" public SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="79"
+ column="12"/>
</issue>
<issue
@@ -7771,7 +9449,9 @@
errorLine1=" public SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="79"
+ column="67"/>
</issue>
<issue
@@ -7780,7 +9460,9 @@
errorLine1=" public SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="84"
+ column="12"/>
</issue>
<issue
@@ -7789,7 +9471,9 @@
errorLine1=" public int addIntentOptions(int groupId, int itemId, int order, ComponentName caller,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="90"
+ column="69"/>
</issue>
<issue
@@ -7798,7 +9482,9 @@
errorLine1=" Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="91"
+ column="13"/>
</issue>
<issue
@@ -7807,7 +9493,9 @@
errorLine1=" Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="91"
+ column="33"/>
</issue>
<issue
@@ -7816,7 +9504,9 @@
errorLine1=" Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="91"
+ column="59"/>
</issue>
<issue
@@ -7825,7 +9515,9 @@
errorLine1=" public MenuItem findItem(int id) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="148"
+ column="12"/>
</issue>
<issue
@@ -7834,7 +9526,9 @@
errorLine1=" public MenuItem getItem(int index) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="158"
+ column="12"/>
</issue>
<issue
@@ -7843,7 +9537,9 @@
errorLine1=" public boolean performShortcut(int keyCode, KeyEvent event, int flags) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="168"
+ column="49"/>
</issue>
<issue
@@ -7852,7 +9548,9 @@
errorLine1=" public boolean isShortcutKey(int keyCode, KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/MenuWrapperICS.java"
+ line="173"
+ column="47"/>
</issue>
<issue
@@ -7861,7 +9559,9 @@
errorLine1=" boolean onMenuItemClick(MenuItem item);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/PopupMenu.java"/>
+ file="src/main/java/androidx/appcompat/widget/PopupMenu.java"
+ line="295"
+ column="33"/>
</issue>
<issue
@@ -7870,7 +9570,9 @@
errorLine1=" void onDismiss(PopupMenu menu);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/PopupMenu.java"/>
+ file="src/main/java/androidx/appcompat/widget/PopupMenu.java"
+ line="307"
+ column="24"/>
</issue>
<issue
@@ -7879,7 +9581,9 @@
errorLine1=" protected ViewPropertyAnimator mVisibilityAnim;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+ line="75"
+ column="15"/>
</issue>
<issue
@@ -7888,7 +9592,9 @@
errorLine1=" protected void onConfigurationChanged(Configuration newConfig) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+ line="225"
+ column="43"/>
</issue>
<issue
@@ -7897,7 +9603,9 @@
errorLine1=" public void addTab(ActionBar.Tab tab, boolean setSelected) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+ line="310"
+ column="24"/>
</issue>
<issue
@@ -7906,7 +9614,9 @@
errorLine1=" public void addTab(ActionBar.Tab tab, int position, boolean setSelected) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+ line="325"
+ column="24"/>
</issue>
<issue
@@ -7915,7 +9625,9 @@
errorLine1=" public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+ line="371"
+ column="32"/>
</issue>
<issue
@@ -7924,7 +9636,9 @@
errorLine1=" public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+ line="371"
+ column="60"/>
</issue>
<issue
@@ -7933,7 +9647,9 @@
errorLine1=" public void onNothingSelected(AdapterView<?> adapterView) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"/>
+ file="src/main/java/androidx/appcompat/widget/ScrollingTabContainerView.java"
+ line="377"
+ column="35"/>
</issue>
<issue
@@ -7942,7 +9658,9 @@
errorLine1=" boolean onQueryTextSubmit(String query);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="221"
+ column="35"/>
</issue>
<issue
@@ -7951,7 +9669,9 @@
errorLine1=" boolean onQueryTextChange(String newText);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="231"
+ column="35"/>
</issue>
<issue
@@ -7960,7 +9680,9 @@
errorLine1=" public void setSearchableInfo(SearchableInfo searchable) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="412"
+ column="35"/>
</issue>
<issue
@@ -7969,7 +9691,9 @@
errorLine1=" public void setAppSearchData(Bundle appSearchData) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="435"
+ column="34"/>
</issue>
<issue
@@ -7978,7 +9702,9 @@
errorLine1=" public boolean requestFocus(int direction, Rect previouslyFocusedRect) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="486"
+ column="48"/>
</issue>
<issue
@@ -7987,7 +9713,9 @@
errorLine1=" public void setOnQueryTextListener(OnQueryTextListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="518"
+ column="40"/>
</issue>
<issue
@@ -7996,7 +9724,9 @@
errorLine1=" public void setOnCloseListener(OnCloseListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="527"
+ column="36"/>
</issue>
<issue
@@ -8005,7 +9735,9 @@
errorLine1=" public void setOnQueryTextFocusChangeListener(OnFocusChangeListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="536"
+ column="51"/>
</issue>
<issue
@@ -8014,7 +9746,9 @@
errorLine1=" public void setOnSuggestionListener(OnSuggestionListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="545"
+ column="41"/>
</issue>
<issue
@@ -8023,7 +9757,9 @@
errorLine1=" public void setOnSearchClickListener(OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="557"
+ column="42"/>
</issue>
<issue
@@ -8032,7 +9768,9 @@
errorLine1=" public CharSequence getQuery() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="566"
+ column="12"/>
</issue>
<issue
@@ -8041,7 +9779,9 @@
errorLine1=" public void setQuery(CharSequence query, boolean submit) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="578"
+ column="26"/>
</issue>
<issue
@@ -8050,7 +9790,9 @@
errorLine1=" public void setSuggestionsAdapter(CursorAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="754"
+ column="39"/>
</issue>
<issue
@@ -8059,7 +9801,9 @@
errorLine1=" public CursorAdapter getSuggestionsAdapter() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="764"
+ column="12"/>
</issue>
<issue
@@ -8068,7 +9812,9 @@
errorLine1=" protected Parcelable onSaveInstanceState() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="1355"
+ column="15"/>
</issue>
<issue
@@ -8077,7 +9823,9 @@
errorLine1=" protected void onRestoreInstanceState(Parcelable state) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="1363"
+ column="43"/>
</issue>
<issue
@@ -8086,7 +9834,9 @@
errorLine1=" public SearchAutoComplete(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="1852"
+ column="35"/>
</issue>
<issue
@@ -8095,7 +9845,9 @@
errorLine1=" public SearchAutoComplete(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="1856"
+ column="35"/>
</issue>
<issue
@@ -8104,7 +9856,9 @@
errorLine1=" public SearchAutoComplete(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="1856"
+ column="52"/>
</issue>
<issue
@@ -8113,7 +9867,9 @@
errorLine1=" public SearchAutoComplete(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="1860"
+ column="35"/>
</issue>
<issue
@@ -8122,7 +9878,9 @@
errorLine1=" public SearchAutoComplete(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="1860"
+ column="52"/>
</issue>
<issue
@@ -8131,7 +9889,9 @@
errorLine1=" protected void replaceText(CharSequence text) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="1895"
+ column="36"/>
</issue>
<issue
@@ -8140,7 +9900,9 @@
errorLine1=" protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="1931"
+ column="71"/>
</issue>
<issue
@@ -8149,7 +9911,9 @@
errorLine1=" public boolean onKeyPreIme(int keyCode, KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="1946"
+ column="49"/>
</issue>
<issue
@@ -8158,7 +9922,9 @@
errorLine1=" public InputConnection onCreateInputConnection(EditorInfo editorInfo) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="1993"
+ column="16"/>
</issue>
<issue
@@ -8167,7 +9933,9 @@
errorLine1=" public InputConnection onCreateInputConnection(EditorInfo editorInfo) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SearchView.java"/>
+ file="src/main/java/androidx/appcompat/widget/SearchView.java"
+ line="1993"
+ column="56"/>
</issue>
<issue
@@ -8176,7 +9944,9 @@
errorLine1=" public boolean onShareTargetSelected(ShareActionProvider source, Intent intent);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+ file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+ line="153"
+ column="46"/>
</issue>
<issue
@@ -8185,7 +9955,9 @@
errorLine1=" public boolean onShareTargetSelected(ShareActionProvider source, Intent intent);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+ file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+ line="153"
+ column="74"/>
</issue>
<issue
@@ -8194,7 +9966,9 @@
errorLine1=" public ShareActionProvider(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+ file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+ line="196"
+ column="32"/>
</issue>
<issue
@@ -8203,7 +9977,9 @@
errorLine1=" public void setOnShareTargetSelectedListener(OnShareTargetSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+ file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+ line="211"
+ column="50"/>
</issue>
<issue
@@ -8212,7 +9988,9 @@
errorLine1=" public View onCreateActionView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+ file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+ line="220"
+ column="12"/>
</issue>
<issue
@@ -8221,7 +9999,9 @@
errorLine1=" public void onPrepareSubMenu(SubMenu subMenu) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+ file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+ line="256"
+ column="34"/>
</issue>
<issue
@@ -8230,7 +10010,9 @@
errorLine1=" public void setShareHistoryFileName(String shareHistoryFile) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+ file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+ line="320"
+ column="41"/>
</issue>
<issue
@@ -8239,7 +10021,9 @@
errorLine1=" public void setShareIntent(Intent shareIntent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"/>
+ file="src/main/java/androidx/appcompat/widget/ShareActionProvider.java"
+ line="341"
+ column="32"/>
</issue>
<issue
@@ -8248,7 +10032,9 @@
errorLine1=" ListView getListView();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/ShowableListMenu.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/ShowableListMenu.java"
+ line="41"
+ column="5"/>
</issue>
<issue
@@ -8257,7 +10043,9 @@
errorLine1=" public StandaloneActionMode(Context context, ActionBarContextView view,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="49"
+ column="33"/>
</issue>
<issue
@@ -8266,7 +10054,9 @@
errorLine1=" public StandaloneActionMode(Context context, ActionBarContextView view,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="49"
+ column="50"/>
</issue>
<issue
@@ -8275,7 +10065,9 @@
errorLine1=" ActionMode.Callback callback, boolean isFocusable) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="50"
+ column="13"/>
</issue>
<issue
@@ -8284,7 +10076,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="62"
+ column="26"/>
</issue>
<issue
@@ -8293,7 +10087,9 @@
errorLine1=" public void setSubtitle(CharSequence subtitle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="67"
+ column="29"/>
</issue>
<issue
@@ -8302,7 +10098,9 @@
errorLine1=" public void setCustomView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="93"
+ column="31"/>
</issue>
<issue
@@ -8311,7 +10109,9 @@
errorLine1=" public Menu getMenu() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="114"
+ column="12"/>
</issue>
<issue
@@ -8320,7 +10120,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="119"
+ column="12"/>
</issue>
<issue
@@ -8329,7 +10131,9 @@
errorLine1=" public CharSequence getSubtitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="124"
+ column="12"/>
</issue>
<issue
@@ -8338,7 +10142,9 @@
errorLine1=" public View getCustomView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="129"
+ column="12"/>
</issue>
<issue
@@ -8347,7 +10153,9 @@
errorLine1=" public MenuInflater getMenuInflater() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="134"
+ column="12"/>
</issue>
<issue
@@ -8356,7 +10164,9 @@
errorLine1=" public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="143"
+ column="29"/>
</issue>
<issue
@@ -8365,7 +10175,9 @@
errorLine1=" public boolean onSubMenuSelected(SubMenuBuilder subMenu) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="146"
+ column="38"/>
</issue>
<issue
@@ -8374,7 +10186,9 @@
errorLine1=" public void onCloseSubMenu(SubMenuBuilder menu) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"/>
+ file="src/main/java/androidx/appcompat/view/StandaloneActionMode.java"
+ line="155"
+ column="32"/>
</issue>
<issue
@@ -8383,7 +10197,9 @@
errorLine1=" public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="42"
+ column="27"/>
</issue>
<issue
@@ -8392,7 +10208,9 @@
errorLine1=" public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="42"
+ column="44"/>
</issue>
<issue
@@ -8401,7 +10219,9 @@
errorLine1=" public SubMenuBuilder(Context context, MenuBuilder parentMenu, MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="42"
+ column="68"/>
</issue>
<issue
@@ -8410,7 +10230,9 @@
errorLine1=" public Menu getParentMenu() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="69"
+ column="12"/>
</issue>
<issue
@@ -8419,7 +10241,9 @@
errorLine1=" public MenuItem getItem() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="74"
+ column="12"/>
</issue>
<issue
@@ -8428,7 +10252,9 @@
errorLine1=" public void setCallback(Callback callback) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="79"
+ column="29"/>
</issue>
<issue
@@ -8437,7 +10263,9 @@
errorLine1=" public MenuBuilder getRootMenu() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="84"
+ column="12"/>
</issue>
<issue
@@ -8446,7 +10274,9 @@
errorLine1=" public SubMenu setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="95"
+ column="12"/>
</issue>
<issue
@@ -8455,7 +10285,9 @@
errorLine1=" public SubMenu setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="95"
+ column="28"/>
</issue>
<issue
@@ -8464,7 +10296,9 @@
errorLine1=" public SubMenu setIcon(int iconRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="101"
+ column="12"/>
</issue>
<issue
@@ -8473,7 +10307,9 @@
errorLine1=" public SubMenu setHeaderIcon(Drawable icon) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="107"
+ column="12"/>
</issue>
<issue
@@ -8482,7 +10318,9 @@
errorLine1=" public SubMenu setHeaderIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="107"
+ column="34"/>
</issue>
<issue
@@ -8491,7 +10329,9 @@
errorLine1=" public SubMenu setHeaderIcon(int iconRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="112"
+ column="12"/>
</issue>
<issue
@@ -8500,7 +10340,9 @@
errorLine1=" public SubMenu setHeaderTitle(CharSequence title) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="117"
+ column="12"/>
</issue>
<issue
@@ -8509,7 +10351,9 @@
errorLine1=" public SubMenu setHeaderTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="117"
+ column="35"/>
</issue>
<issue
@@ -8518,7 +10362,9 @@
errorLine1=" public SubMenu setHeaderTitle(int titleRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="122"
+ column="12"/>
</issue>
<issue
@@ -8527,7 +10373,9 @@
errorLine1=" public SubMenu setHeaderView(View view) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="127"
+ column="12"/>
</issue>
<issue
@@ -8536,7 +10384,9 @@
errorLine1=" public SubMenu setHeaderView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="127"
+ column="34"/>
</issue>
<issue
@@ -8545,7 +10395,9 @@
errorLine1=" public boolean expandItemActionView(MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="132"
+ column="41"/>
</issue>
<issue
@@ -8554,7 +10406,9 @@
errorLine1=" public boolean collapseItemActionView(MenuItemImpl item) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="137"
+ column="43"/>
</issue>
<issue
@@ -8563,7 +10417,9 @@
errorLine1=" public String getActionViewStatesKey() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"/>
+ file="src/main/java/androidx/appcompat/view/menu/SubMenuBuilder.java"
+ line="142"
+ column="12"/>
</issue>
<issue
@@ -8572,7 +10428,9 @@
errorLine1=" public SupportActionModeWrapper(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="48"
+ column="37"/>
</issue>
<issue
@@ -8581,7 +10439,9 @@
errorLine1=" androidx.appcompat.view.ActionMode supportActionMode) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="49"
+ column="13"/>
</issue>
<issue
@@ -8590,7 +10450,9 @@
errorLine1=" public Object getTag() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="55"
+ column="12"/>
</issue>
<issue
@@ -8599,7 +10461,9 @@
errorLine1=" public void setTag(Object tag) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="60"
+ column="24"/>
</issue>
<issue
@@ -8608,7 +10472,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="65"
+ column="26"/>
</issue>
<issue
@@ -8617,7 +10483,9 @@
errorLine1=" public void setSubtitle(CharSequence subtitle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="70"
+ column="29"/>
</issue>
<issue
@@ -8626,7 +10494,9 @@
errorLine1=" public Menu getMenu() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="85"
+ column="12"/>
</issue>
<issue
@@ -8635,7 +10505,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="90"
+ column="12"/>
</issue>
<issue
@@ -8644,7 +10516,9 @@
errorLine1=" public CharSequence getSubtitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="100"
+ column="12"/>
</issue>
<issue
@@ -8653,7 +10527,9 @@
errorLine1=" public View getCustomView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="110"
+ column="12"/>
</issue>
<issue
@@ -8662,7 +10538,9 @@
errorLine1=" public void setCustomView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="115"
+ column="31"/>
</issue>
<issue
@@ -8671,7 +10549,9 @@
errorLine1=" public MenuInflater getMenuInflater() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="120"
+ column="12"/>
</issue>
<issue
@@ -8680,7 +10560,9 @@
errorLine1=" public CallbackWrapper(Context context, Callback supportCallback) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="150"
+ column="32"/>
</issue>
<issue
@@ -8689,7 +10571,9 @@
errorLine1=" public CallbackWrapper(Context context, Callback supportCallback) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="150"
+ column="49"/>
</issue>
<issue
@@ -8698,7 +10582,9 @@
errorLine1=" public boolean onCreateActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="158"
+ column="43"/>
</issue>
<issue
@@ -8707,7 +10593,9 @@
errorLine1=" public boolean onCreateActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="158"
+ column="84"/>
</issue>
<issue
@@ -8716,7 +10604,9 @@
errorLine1=" public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="164"
+ column="44"/>
</issue>
<issue
@@ -8725,7 +10615,9 @@
errorLine1=" public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode mode, Menu menu) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="164"
+ column="85"/>
</issue>
<issue
@@ -8734,7 +10626,9 @@
errorLine1=" public boolean onActionItemClicked(androidx.appcompat.view.ActionMode mode,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="170"
+ column="44"/>
</issue>
<issue
@@ -8743,7 +10637,9 @@
errorLine1=" android.view.MenuItem item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="171"
+ column="17"/>
</issue>
<issue
@@ -8752,7 +10648,9 @@
errorLine1=" public void onDestroyActionMode(androidx.appcompat.view.ActionMode mode) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="177"
+ column="41"/>
</issue>
<issue
@@ -8761,7 +10659,9 @@
errorLine1=" public ActionMode getActionModeWrapper(androidx.appcompat.view.ActionMode mode) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="190"
+ column="16"/>
</issue>
<issue
@@ -8770,7 +10670,9 @@
errorLine1=" public ActionMode getActionModeWrapper(androidx.appcompat.view.ActionMode mode) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportActionModeWrapper.java"
+ line="190"
+ column="48"/>
</issue>
<issue
@@ -8779,7 +10681,9 @@
errorLine1=" public SupportMenuInflater(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"
+ line="100"
+ column="32"/>
</issue>
<issue
@@ -8788,7 +10692,9 @@
errorLine1=" public void inflate(@LayoutRes int menuRes, Menu menu) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"/>
+ file="src/main/java/androidx/appcompat/view/SupportMenuInflater.java"
+ line="117"
+ column="49"/>
</issue>
<issue
@@ -8797,7 +10703,9 @@
errorLine1=" public void setSwitchTextAppearance(Context context, int resid) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="343"
+ column="41"/>
</issue>
<issue
@@ -8806,7 +10714,9 @@
errorLine1=" public void setSwitchTypeface(Typeface tf, int style) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="410"
+ column="35"/>
</issue>
<issue
@@ -8815,7 +10725,9 @@
errorLine1=" public void setSwitchTypeface(Typeface typeface) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="438"
+ column="35"/>
</issue>
<issue
@@ -8824,7 +10736,9 @@
errorLine1=" public void setTrackDrawable(Drawable track) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="529"
+ column="34"/>
</issue>
<issue
@@ -8833,7 +10747,9 @@
errorLine1=" public Drawable getTrackDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="559"
+ column="12"/>
</issue>
<issue
@@ -8842,7 +10758,9 @@
errorLine1=" public void setThumbDrawable(Drawable thumb) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="651"
+ column="34"/>
</issue>
<issue
@@ -8851,7 +10769,9 @@
errorLine1=" public Drawable getThumbDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="683"
+ column="12"/>
</issue>
<issue
@@ -8860,7 +10780,9 @@
errorLine1=" public CharSequence getTextOn() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="799"
+ column="12"/>
</issue>
<issue
@@ -8869,7 +10791,9 @@
errorLine1=" public void setTextOn(CharSequence textOn) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="822"
+ column="27"/>
</issue>
<issue
@@ -8878,7 +10802,9 @@
errorLine1=" public CharSequence getTextOff() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="838"
+ column="12"/>
</issue>
<issue
@@ -8887,7 +10813,9 @@
errorLine1=" public void setTextOff(CharSequence textOff) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="860"
+ column="28"/>
</issue>
<issue
@@ -8896,7 +10824,9 @@
errorLine1=" public void onPopulateAccessibilityEvent(AccessibilityEvent event) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="973"
+ column="46"/>
</issue>
<issue
@@ -8905,7 +10835,9 @@
errorLine1=" public boolean onTouchEvent(MotionEvent ev) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="1010"
+ column="33"/>
</issue>
<issue
@@ -8914,7 +10846,9 @@
errorLine1=" public void draw(Canvas c) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="1243"
+ column="22"/>
</issue>
<issue
@@ -8923,7 +10857,9 @@
errorLine1=" protected void onDraw(Canvas canvas) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="1308"
+ column="27"/>
</issue>
<issue
@@ -8932,7 +10868,9 @@
errorLine1=" protected int[] onCreateDrawableState(int extraSpace) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="1432"
+ column="15"/>
</issue>
<issue
@@ -8941,7 +10879,9 @@
errorLine1=" protected boolean verifyDrawable(Drawable who) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="1478"
+ column="38"/>
</issue>
<issue
@@ -8950,7 +10890,9 @@
errorLine1=" public void onInitializeAccessibilityEvent(AccessibilityEvent event) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="1501"
+ column="48"/>
</issue>
<issue
@@ -8959,7 +10901,9 @@
errorLine1=" public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
+ line="1507"
+ column="51"/>
</issue>
<issue
@@ -8968,7 +10912,9 @@
errorLine1=" public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="53"
+ column="19"/>
</issue>
<issue
@@ -8977,7 +10923,9 @@
errorLine1=" public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="53"
+ column="57"/>
</issue>
<issue
@@ -8986,7 +10934,9 @@
errorLine1=" public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="53"
+ column="74"/>
</issue>
<issue
@@ -8995,7 +10945,9 @@
errorLine1=" int[] attrs) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="54"
+ column="13"/>
</issue>
<issue
@@ -9004,7 +10956,9 @@
errorLine1=" public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="58"
+ column="19"/>
</issue>
<issue
@@ -9013,7 +10967,9 @@
errorLine1=" public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="58"
+ column="57"/>
</issue>
<issue
@@ -9022,7 +10978,9 @@
errorLine1=" public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="58"
+ column="74"/>
</issue>
<issue
@@ -9031,7 +10989,9 @@
errorLine1=" int[] attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="59"
+ column="13"/>
</issue>
<issue
@@ -9040,7 +11000,9 @@
errorLine1=" public static TintTypedArray obtainStyledAttributes(Context context, int resid, int[] attrs) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="64"
+ column="19"/>
</issue>
<issue
@@ -9049,7 +11011,9 @@
errorLine1=" public static TintTypedArray obtainStyledAttributes(Context context, int resid, int[] attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="64"
+ column="57"/>
</issue>
<issue
@@ -9058,7 +11022,9 @@
errorLine1=" public static TintTypedArray obtainStyledAttributes(Context context, int resid, int[] attrs) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="64"
+ column="85"/>
</issue>
<issue
@@ -9067,7 +11033,9 @@
errorLine1=" public TypedArray getWrappedTypeArray() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="76"
+ column="12"/>
</issue>
<issue
@@ -9076,7 +11044,9 @@
errorLine1=" public Drawable getDrawable(int index) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="80"
+ column="12"/>
</issue>
<issue
@@ -9085,7 +11055,9 @@
errorLine1=" public Drawable getDrawableIfKnown(int index) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="90"
+ column="12"/>
</issue>
<issue
@@ -9094,7 +11066,9 @@
errorLine1=" public Resources getResources() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="142"
+ column="12"/>
</issue>
<issue
@@ -9103,7 +11077,9 @@
errorLine1=" public CharSequence getText(int index) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="146"
+ column="12"/>
</issue>
<issue
@@ -9112,7 +11088,9 @@
errorLine1=" public String getString(int index) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="150"
+ column="12"/>
</issue>
<issue
@@ -9121,7 +11099,9 @@
errorLine1=" public String getNonResourceString(int index) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="154"
+ column="12"/>
</issue>
<issue
@@ -9130,7 +11110,9 @@
errorLine1=" public ColorStateList getColorStateList(int index) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="174"
+ column="12"/>
</issue>
<issue
@@ -9139,7 +11121,9 @@
errorLine1=" public int getLayoutDimension(int index, String name) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="204"
+ column="46"/>
</issue>
<issue
@@ -9148,7 +11132,9 @@
errorLine1=" public CharSequence[] getTextArray(int index) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="220"
+ column="12"/>
</issue>
<issue
@@ -9157,7 +11143,9 @@
errorLine1=" public boolean getValue(int index, TypedValue outValue) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="224"
+ column="40"/>
</issue>
<issue
@@ -9166,7 +11154,9 @@
errorLine1=" public TypedValue peekValue(int index) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="244"
+ column="12"/>
</issue>
<issue
@@ -9175,7 +11165,9 @@
errorLine1=" public String getPositionDescription() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"/>
+ file="src/main/java/androidx/appcompat/widget/TintTypedArray.java"
+ line="248"
+ column="12"/>
</issue>
<issue
@@ -9184,7 +11176,9 @@
errorLine1=" public void setMenu(MenuBuilder menu, ActionMenuPresenter outerPresenter) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="576"
+ column="25"/>
</issue>
<issue
@@ -9193,7 +11187,9 @@
errorLine1=" public void setMenu(MenuBuilder menu, ActionMenuPresenter outerPresenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="576"
+ column="43"/>
</issue>
<issue
@@ -9202,7 +11198,9 @@
errorLine1=" public void setLogo(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="650"
+ column="25"/>
</issue>
<issue
@@ -9211,7 +11209,9 @@
errorLine1=" public Drawable getLogo() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="673"
+ column="12"/>
</issue>
<issue
@@ -9220,7 +11220,9 @@
errorLine1=" public void setLogoDescription(CharSequence description) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="697"
+ column="36"/>
</issue>
<issue
@@ -9229,7 +11231,9 @@
errorLine1=" public CharSequence getLogoDescription() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="712"
+ column="12"/>
</issue>
<issue
@@ -9238,7 +11242,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="760"
+ column="12"/>
</issue>
<issue
@@ -9247,7 +11253,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="784"
+ column="26"/>
</issue>
<issue
@@ -9256,7 +11264,9 @@
errorLine1=" public CharSequence getSubtitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="817"
+ column="12"/>
</issue>
<issue
@@ -9265,7 +11275,9 @@
errorLine1=" public void setSubtitle(CharSequence subtitle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="839"
+ column="29"/>
</issue>
<issue
@@ -9274,7 +11286,9 @@
errorLine1=" public void setTitleTextAppearance(Context context, @StyleRes int resId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="870"
+ column="40"/>
</issue>
<issue
@@ -9283,7 +11297,9 @@
errorLine1=" public void setSubtitleTextAppearance(Context context, @StyleRes int resId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="881"
+ column="43"/>
</issue>
<issue
@@ -9292,7 +11308,9 @@
errorLine1=" public void setNavigationOnClickListener(OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="1048"
+ column="46"/>
</issue>
<issue
@@ -9301,7 +11319,9 @@
errorLine1=" public Menu getMenu() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="1157"
+ column="12"/>
</issue>
<issue
@@ -9310,7 +11330,9 @@
errorLine1=" public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="1234"
+ column="44"/>
</issue>
<issue
@@ -9319,7 +11341,9 @@
errorLine1=" protected Parcelable onSaveInstanceState() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="1579"
+ column="15"/>
</issue>
<issue
@@ -9328,7 +11352,9 @@
errorLine1=" protected void onRestoreInstanceState(Parcelable state) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="1591"
+ column="43"/>
</issue>
<issue
@@ -9337,7 +11363,9 @@
errorLine1=" public boolean onTouchEvent(MotionEvent ev) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="1625"
+ column="33"/>
</issue>
<issue
@@ -9346,7 +11374,9 @@
errorLine1=" public boolean onHoverEvent(MotionEvent ev) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="1651"
+ column="33"/>
</issue>
<issue
@@ -9355,7 +11385,9 @@
errorLine1=" public LayoutParams generateLayoutParams(AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2246"
+ column="12"/>
</issue>
<issue
@@ -9364,7 +11396,9 @@
errorLine1=" public LayoutParams generateLayoutParams(AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2246"
+ column="46"/>
</issue>
<issue
@@ -9373,7 +11407,9 @@
errorLine1=" protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2251"
+ column="15"/>
</issue>
<issue
@@ -9382,7 +11418,9 @@
errorLine1=" protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2251"
+ column="49"/>
</issue>
<issue
@@ -9391,7 +11429,9 @@
errorLine1=" protected LayoutParams generateDefaultLayoutParams() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2264"
+ column="15"/>
</issue>
<issue
@@ -9400,7 +11440,9 @@
errorLine1=" protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2269"
+ column="41"/>
</issue>
<issue
@@ -9409,7 +11451,9 @@
errorLine1=" public DecorToolbar getWrapper() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2275"
+ column="12"/>
</issue>
<issue
@@ -9418,7 +11462,9 @@
errorLine1=" public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2324"
+ column="34"/>
</issue>
<issue
@@ -9427,7 +11473,9 @@
errorLine1=" public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2324"
+ column="62"/>
</issue>
<issue
@@ -9436,7 +11484,9 @@
errorLine1=" public boolean onMenuItemClick(MenuItem item);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2441"
+ column="40"/>
</issue>
<issue
@@ -9445,7 +11495,9 @@
errorLine1=" public LayoutParams(@NonNull Context c, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2460"
+ column="49"/>
</issue>
<issue
@@ -9454,7 +11506,9 @@
errorLine1=" public LayoutParams(LayoutParams source) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2478"
+ column="29"/>
</issue>
<issue
@@ -9463,7 +11517,9 @@
errorLine1=" public LayoutParams(ActionBar.LayoutParams source) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2484"
+ column="29"/>
</issue>
<issue
@@ -9472,7 +11528,9 @@
errorLine1=" public LayoutParams(MarginLayoutParams source) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2488"
+ column="29"/>
</issue>
<issue
@@ -9481,7 +11539,9 @@
errorLine1=" public LayoutParams(ViewGroup.LayoutParams source) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2495"
+ column="29"/>
</issue>
<issue
@@ -9490,7 +11550,9 @@
errorLine1=" public SavedState(Parcel source) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2511"
+ column="27"/>
</issue>
<issue
@@ -9499,7 +11561,9 @@
errorLine1=" public SavedState(Parcel source, ClassLoader loader) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2515"
+ column="27"/>
</issue>
<issue
@@ -9508,7 +11572,9 @@
errorLine1=" public SavedState(Parcel source, ClassLoader loader) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2515"
+ column="42"/>
</issue>
<issue
@@ -9517,7 +11583,9 @@
errorLine1=" public SavedState(Parcelable superState) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2521"
+ column="27"/>
</issue>
<issue
@@ -9526,7 +11594,9 @@
errorLine1=" public void writeToParcel(Parcel out, int flags) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/Toolbar.java"/>
+ file="src/main/java/androidx/appcompat/widget/Toolbar.java"
+ line="2526"
+ column="35"/>
</issue>
<issue
@@ -9535,7 +11605,9 @@
errorLine1=" public ToolbarWidgetWrapper(Toolbar toolbar, boolean style) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="95"
+ column="33"/>
</issue>
<issue
@@ -9544,7 +11616,9 @@
errorLine1=" public ToolbarWidgetWrapper(Toolbar toolbar, boolean style,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="100"
+ column="33"/>
</issue>
<issue
@@ -9553,7 +11627,9 @@
errorLine1=" public ViewGroup getViewGroup() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="216"
+ column="12"/>
</issue>
<issue
@@ -9562,7 +11638,9 @@
errorLine1=" public Context getContext() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="221"
+ column="12"/>
</issue>
<issue
@@ -9571,7 +11649,9 @@
errorLine1=" public void setWindowCallback(Window.Callback cb) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="236"
+ column="35"/>
</issue>
<issue
@@ -9580,7 +11660,9 @@
errorLine1=" public void setWindowTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="241"
+ column="32"/>
</issue>
<issue
@@ -9589,7 +11671,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="249"
+ column="12"/>
</issue>
<issue
@@ -9598,7 +11682,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="254"
+ column="26"/>
</issue>
<issue
@@ -9607,7 +11693,9 @@
errorLine1=" public CharSequence getSubtitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="270"
+ column="12"/>
</issue>
<issue
@@ -9616,7 +11704,9 @@
errorLine1=" public void setSubtitle(CharSequence subtitle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="275"
+ column="29"/>
</issue>
<issue
@@ -9625,7 +11715,9 @@
errorLine1=" public void setIcon(Drawable d) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="308"
+ column="25"/>
</issue>
<issue
@@ -9634,7 +11726,9 @@
errorLine1=" public void setLogo(Drawable d) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="319"
+ column="25"/>
</issue>
<issue
@@ -9643,7 +11737,9 @@
errorLine1=" public void setMenu(Menu menu, MenuPresenter.Callback cb) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="367"
+ column="25"/>
</issue>
<issue
@@ -9652,7 +11748,9 @@
errorLine1=" public void setMenu(Menu menu, MenuPresenter.Callback cb) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="367"
+ column="36"/>
</issue>
<issue
@@ -9661,7 +11759,9 @@
errorLine1=" public void setEmbeddedTabView(ScrollingTabContainerView tabView) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="424"
+ column="36"/>
</issue>
<issue
@@ -9670,7 +11770,9 @@
errorLine1=" public void setDropdownParams(SpinnerAdapter adapter,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="515"
+ column="35"/>
</issue>
<issue
@@ -9679,7 +11781,9 @@
errorLine1=" AdapterView.OnItemSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="516"
+ column="13"/>
</issue>
<issue
@@ -9688,7 +11792,9 @@
errorLine1=" public void setCustomView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="542"
+ column="31"/>
</issue>
<issue
@@ -9697,7 +11803,9 @@
errorLine1=" public View getCustomView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="553"
+ column="12"/>
</issue>
<issue
@@ -9706,7 +11814,9 @@
errorLine1=" public ViewPropertyAnimatorCompat setupAnimatorToVisibility(final int visibility,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="567"
+ column="12"/>
</issue>
<issue
@@ -9715,7 +11825,9 @@
errorLine1=" public void setNavigationIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="595"
+ column="35"/>
</issue>
<issue
@@ -9724,7 +11836,9 @@
errorLine1=" public void setDefaultNavigationIcon(Drawable defaultNavigationIcon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="606"
+ column="42"/>
</issue>
<issue
@@ -9733,7 +11847,9 @@
errorLine1=" public void setNavigationContentDescription(CharSequence description) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="622"
+ column="49"/>
</issue>
<issue
@@ -9742,7 +11858,9 @@
errorLine1=" public void saveHierarchyState(SparseArray<Parcelable> toolbarStates) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="643"
+ column="36"/>
</issue>
<issue
@@ -9751,7 +11869,9 @@
errorLine1=" public void restoreHierarchyState(SparseArray<Parcelable> toolbarStates) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="648"
+ column="39"/>
</issue>
<issue
@@ -9760,7 +11880,9 @@
errorLine1=" public void setBackgroundDrawable(Drawable d) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="653"
+ column="39"/>
</issue>
<issue
@@ -9769,7 +11891,9 @@
errorLine1=" public void setMenuCallbacks(MenuPresenter.Callback actionMenuPresenterCallback,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="673"
+ column="34"/>
</issue>
<issue
@@ -9778,7 +11902,9 @@
errorLine1=" MenuBuilder.Callback menuBuilderCallback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="674"
+ column="13"/>
</issue>
<issue
@@ -9787,7 +11913,9 @@
errorLine1=" public Menu getMenu() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"/>
+ file="src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java"
+ line="679"
+ column="12"/>
</issue>
<issue
@@ -9796,7 +11924,9 @@
errorLine1=" public ViewPropertyAnimatorCompatSet play(ViewPropertyAnimatorCompat animator) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+ file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+ line="52"
+ column="12"/>
</issue>
<issue
@@ -9805,7 +11935,9 @@
errorLine1=" public ViewPropertyAnimatorCompatSet play(ViewPropertyAnimatorCompat animator) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+ file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+ line="52"
+ column="47"/>
</issue>
<issue
@@ -9814,7 +11946,9 @@
errorLine1=" public ViewPropertyAnimatorCompatSet playSequentially(ViewPropertyAnimatorCompat anim1,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+ file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+ line="59"
+ column="12"/>
</issue>
<issue
@@ -9823,7 +11957,9 @@
errorLine1=" public ViewPropertyAnimatorCompatSet playSequentially(ViewPropertyAnimatorCompat anim1,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+ file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+ line="59"
+ column="59"/>
</issue>
<issue
@@ -9832,7 +11968,9 @@
errorLine1=" ViewPropertyAnimatorCompat anim2) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+ file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+ line="60"
+ column="13"/>
</issue>
<issue
@@ -9841,7 +11979,9 @@
errorLine1=" public ViewPropertyAnimatorCompatSet setDuration(long duration) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+ file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+ line="99"
+ column="12"/>
</issue>
<issue
@@ -9850,7 +11990,9 @@
errorLine1=" public ViewPropertyAnimatorCompatSet setInterpolator(Interpolator interpolator) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+ file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+ line="106"
+ column="12"/>
</issue>
<issue
@@ -9859,7 +12001,9 @@
errorLine1=" public ViewPropertyAnimatorCompatSet setInterpolator(Interpolator interpolator) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+ file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+ line="106"
+ column="58"/>
</issue>
<issue
@@ -9868,7 +12012,9 @@
errorLine1=" public ViewPropertyAnimatorCompatSet setListener(ViewPropertyAnimatorListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+ file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+ line="113"
+ column="12"/>
</issue>
<issue
@@ -9877,7 +12023,9 @@
errorLine1=" public ViewPropertyAnimatorCompatSet setListener(ViewPropertyAnimatorListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"/>
+ file="src/main/java/androidx/appcompat/view/ViewPropertyAnimatorCompatSet.java"
+ line="113"
+ column="54"/>
</issue>
<issue
@@ -9886,7 +12034,9 @@
errorLine1=" public void setLayoutInflater(LayoutInflater inflater) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+ line="138"
+ column="35"/>
</issue>
<issue
@@ -9895,7 +12045,9 @@
errorLine1=" public LayoutInflater getLayoutInflater() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+ line="145"
+ column="12"/>
</issue>
<issue
@@ -9904,7 +12056,9 @@
errorLine1=" public void draw(Canvas canvas) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+ line="156"
+ column="22"/>
</issue>
<issue
@@ -9913,7 +12067,9 @@
errorLine1=" protected void dispatchDraw(Canvas canvas) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+ line="160"
+ column="33"/>
</issue>
<issue
@@ -9922,7 +12078,9 @@
errorLine1=" public View inflate() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+ line="197"
+ column="12"/>
</issue>
<issue
@@ -9931,7 +12089,9 @@
errorLine1=" public void setOnInflateListener(OnInflateListener inflateListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+ line="249"
+ column="38"/>
</issue>
<issue
@@ -9940,7 +12100,9 @@
errorLine1=" void onInflate(ViewStubCompat stub, View inflated);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+ line="268"
+ column="24"/>
</issue>
<issue
@@ -9949,7 +12111,9 @@
errorLine1=" void onInflate(ViewStubCompat stub, View inflated);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewStubCompat.java"
+ line="268"
+ column="45"/>
</issue>
<issue
@@ -9958,7 +12122,9 @@
errorLine1=" public static boolean isLayoutRtl(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewUtils.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewUtils.java"
+ line="57"
+ column="39"/>
</issue>
<issue
@@ -9967,7 +12133,9 @@
errorLine1=" public static void computeFitSystemWindows(View view, Rect inoutInsets, Rect outLocalInsets) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewUtils.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewUtils.java"
+ line="65"
+ column="48"/>
</issue>
<issue
@@ -9976,7 +12144,9 @@
errorLine1=" public static void computeFitSystemWindows(View view, Rect inoutInsets, Rect outLocalInsets) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewUtils.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewUtils.java"
+ line="65"
+ column="59"/>
</issue>
<issue
@@ -9985,7 +12155,9 @@
errorLine1=" public static void computeFitSystemWindows(View view, Rect inoutInsets, Rect outLocalInsets) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewUtils.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewUtils.java"
+ line="65"
+ column="77"/>
</issue>
<issue
@@ -9994,7 +12166,9 @@
errorLine1=" public static void makeOptionalFitsSystemWindows(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/widget/ViewUtils.java"/>
+ file="src/main/java/androidx/appcompat/widget/ViewUtils.java"
+ line="79"
+ column="54"/>
</issue>
<issue
@@ -10003,7 +12177,9 @@
errorLine1=" public WindowCallbackWrapper(Window.Callback wrapped) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="51"
+ column="34"/>
</issue>
<issue
@@ -10012,7 +12188,9 @@
errorLine1=" public boolean dispatchKeyEvent(KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="59"
+ column="37"/>
</issue>
<issue
@@ -10021,7 +12199,9 @@
errorLine1=" public boolean dispatchKeyShortcutEvent(KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="64"
+ column="45"/>
</issue>
<issue
@@ -10030,7 +12210,9 @@
errorLine1=" public boolean dispatchTouchEvent(MotionEvent event) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="69"
+ column="39"/>
</issue>
<issue
@@ -10039,7 +12221,9 @@
errorLine1=" public boolean dispatchTrackballEvent(MotionEvent event) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="74"
+ column="43"/>
</issue>
<issue
@@ -10048,7 +12232,9 @@
errorLine1=" public boolean dispatchGenericMotionEvent(MotionEvent event) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="79"
+ column="47"/>
</issue>
<issue
@@ -10057,7 +12243,9 @@
errorLine1=" public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="84"
+ column="55"/>
</issue>
<issue
@@ -10066,7 +12254,9 @@
errorLine1=" public View onCreatePanelView(int featureId) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="89"
+ column="12"/>
</issue>
<issue
@@ -10075,7 +12265,9 @@
errorLine1=" public boolean onCreatePanelMenu(int featureId, Menu menu) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="94"
+ column="53"/>
</issue>
<issue
@@ -10084,7 +12276,9 @@
errorLine1=" public boolean onPreparePanel(int featureId, View view, Menu menu) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="99"
+ column="50"/>
</issue>
<issue
@@ -10093,7 +12287,9 @@
errorLine1=" public boolean onPreparePanel(int featureId, View view, Menu menu) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="99"
+ column="61"/>
</issue>
<issue
@@ -10102,7 +12298,9 @@
errorLine1=" public boolean onMenuOpened(int featureId, Menu menu) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="104"
+ column="48"/>
</issue>
<issue
@@ -10111,7 +12309,9 @@
errorLine1=" public boolean onMenuItemSelected(int featureId, MenuItem item) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="109"
+ column="54"/>
</issue>
<issue
@@ -10120,7 +12320,9 @@
errorLine1=" public void onWindowAttributesChanged(WindowManager.LayoutParams attrs) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="114"
+ column="43"/>
</issue>
<issue
@@ -10129,7 +12331,9 @@
errorLine1=" public void onPanelClosed(int featureId, Menu menu) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="139"
+ column="46"/>
</issue>
<issue
@@ -10138,7 +12342,9 @@
errorLine1=" public boolean onSearchRequested(SearchEvent searchEvent) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="145"
+ column="38"/>
</issue>
<issue
@@ -10147,7 +12353,9 @@
errorLine1=" public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="155"
+ column="12"/>
</issue>
<issue
@@ -10156,7 +12364,9 @@
errorLine1=" public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="155"
+ column="50"/>
</issue>
<issue
@@ -10165,7 +12375,9 @@
errorLine1=" public ActionMode onWindowStartingActionMode(ActionMode.Callback callback, int type) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="161"
+ column="12"/>
</issue>
<issue
@@ -10174,7 +12386,9 @@
errorLine1=" public ActionMode onWindowStartingActionMode(ActionMode.Callback callback, int type) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="161"
+ column="50"/>
</issue>
<issue
@@ -10183,7 +12397,9 @@
errorLine1=" public void onActionModeStarted(ActionMode mode) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="166"
+ column="37"/>
</issue>
<issue
@@ -10192,7 +12408,9 @@
errorLine1=" public void onActionModeFinished(ActionMode mode) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="171"
+ column="38"/>
</issue>
<issue
@@ -10201,7 +12419,9 @@
errorLine1=" List<KeyboardShortcutGroup> data, Menu menu, int deviceId) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="178"
+ column="13"/>
</issue>
<issue
@@ -10210,7 +12430,9 @@
errorLine1=" List<KeyboardShortcutGroup> data, Menu menu, int deviceId) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="178"
+ column="47"/>
</issue>
<issue
@@ -10219,7 +12441,9 @@
errorLine1=" public final Window.Callback getWrapped() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"/>
+ file="src/main/java/androidx/appcompat/view/WindowCallbackWrapper.java"
+ line="188"
+ column="18"/>
</issue>
<issue
@@ -10228,7 +12452,9 @@
errorLine1=" public WindowDecorActionBar(Activity activity, boolean overlayMode) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="168"
+ column="33"/>
</issue>
<issue
@@ -10237,7 +12463,9 @@
errorLine1=" public WindowDecorActionBar(Dialog dialog) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="178"
+ column="33"/>
</issue>
<issue
@@ -10246,7 +12474,9 @@
errorLine1=" public WindowDecorActionBar(View layout) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="187"
+ column="33"/>
</issue>
<issue
@@ -10255,7 +12485,9 @@
errorLine1=" public void onConfigurationChanged(Configuration newConfig) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="255"
+ column="40"/>
</issue>
<issue
@@ -10264,7 +12496,9 @@
errorLine1=" public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="337"
+ column="45"/>
</issue>
<issue
@@ -10273,7 +12507,9 @@
errorLine1=" public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="342"
+ column="48"/>
</issue>
<issue
@@ -10282,7 +12518,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="437"
+ column="26"/>
</issue>
<issue
@@ -10291,7 +12529,9 @@
errorLine1=" public void setWindowTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="442"
+ column="32"/>
</issue>
<issue
@@ -10300,7 +12540,9 @@
errorLine1=" public void setSubtitle(CharSequence subtitle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="457"
+ column="29"/>
</issue>
<issue
@@ -10309,7 +12551,9 @@
errorLine1=" public void setBackgroundDrawable(Drawable d) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="479"
+ column="39"/>
</issue>
<issue
@@ -10318,7 +12562,9 @@
errorLine1=" public void setStackedBackgroundDrawable(Drawable d) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="484"
+ column="46"/>
</issue>
<issue
@@ -10327,7 +12573,9 @@
errorLine1=" public void setSplitBackgroundDrawable(Drawable d) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="489"
+ column="44"/>
</issue>
<issue
@@ -10336,7 +12584,9 @@
errorLine1=" public View getCustomView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="494"
+ column="12"/>
</issue>
<issue
@@ -10345,7 +12595,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="499"
+ column="12"/>
</issue>
<issue
@@ -10354,7 +12606,9 @@
errorLine1=" public CharSequence getSubtitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="504"
+ column="12"/>
</issue>
<issue
@@ -10363,7 +12617,9 @@
errorLine1=" public ActionMode startActionMode(ActionMode.Callback callback) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="519"
+ column="12"/>
</issue>
<issue
@@ -10372,7 +12628,9 @@
errorLine1=" public ActionMode startActionMode(ActionMode.Callback callback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="519"
+ column="39"/>
</issue>
<issue
@@ -10381,7 +12639,9 @@
errorLine1=" public void addTab(Tab tab) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="557"
+ column="24"/>
</issue>
<issue
@@ -10390,7 +12650,9 @@
errorLine1=" public void addTab(Tab tab, int position) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="562"
+ column="24"/>
</issue>
<issue
@@ -10399,7 +12661,9 @@
errorLine1=" public void addTab(Tab tab, boolean setSelected) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="567"
+ column="24"/>
</issue>
<issue
@@ -10408,7 +12672,9 @@
errorLine1=" public void addTab(Tab tab, int position, boolean setSelected) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="577"
+ column="24"/>
</issue>
<issue
@@ -10417,7 +12683,9 @@
errorLine1=" public Tab newTab() {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="587"
+ column="12"/>
</issue>
<issue
@@ -10426,7 +12694,9 @@
errorLine1=" public void removeTab(Tab tab) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="592"
+ column="27"/>
</issue>
<issue
@@ -10435,7 +12705,9 @@
errorLine1=" public void selectTab(Tab tab) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="622"
+ column="27"/>
</issue>
<issue
@@ -10444,7 +12716,9 @@
errorLine1=" public Tab getSelectedTab() {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="659"
+ column="12"/>
</issue>
<issue
@@ -10453,7 +12727,9 @@
errorLine1=" public Context getThemedContext() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="916"
+ column="12"/>
</issue>
<issue
@@ -10462,7 +12738,9 @@
errorLine1=" public void setHomeAsUpIndicator(Drawable indicator) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="938"
+ column="38"/>
</issue>
<issue
@@ -10471,7 +12749,9 @@
errorLine1=" public void setHomeActionContentDescription(CharSequence description) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="948"
+ column="49"/>
</issue>
<issue
@@ -10480,7 +12760,9 @@
errorLine1=" public ActionModeImpl(Context context, ActionMode.Callback callback) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="989"
+ column="31"/>
</issue>
<issue
@@ -10489,7 +12771,9 @@
errorLine1=" public ActionModeImpl(Context context, ActionMode.Callback callback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="989"
+ column="48"/>
</issue>
<issue
@@ -10498,7 +12782,9 @@
errorLine1=" public MenuInflater getMenuInflater() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="998"
+ column="16"/>
</issue>
<issue
@@ -10507,7 +12793,9 @@
errorLine1=" public Menu getMenu() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1003"
+ column="16"/>
</issue>
<issue
@@ -10516,7 +12804,9 @@
errorLine1=" public void setCustomView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1063"
+ column="35"/>
</issue>
<issue
@@ -10525,7 +12815,9 @@
errorLine1=" public void setSubtitle(CharSequence subtitle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1069"
+ column="33"/>
</issue>
<issue
@@ -10534,7 +12826,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1074"
+ column="30"/>
</issue>
<issue
@@ -10543,7 +12837,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1089"
+ column="16"/>
</issue>
<issue
@@ -10552,7 +12848,9 @@
errorLine1=" public CharSequence getSubtitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1094"
+ column="16"/>
</issue>
<issue
@@ -10561,7 +12859,9 @@
errorLine1=" public View getCustomView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1110"
+ column="16"/>
</issue>
<issue
@@ -10570,7 +12870,9 @@
errorLine1=" public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1123"
+ column="33"/>
</issue>
<issue
@@ -10579,7 +12881,9 @@
errorLine1=" public boolean onSubMenuSelected(SubMenuBuilder subMenu) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1126"
+ column="42"/>
</issue>
<issue
@@ -10588,7 +12892,9 @@
errorLine1=" public void onCloseSubMenu(SubMenuBuilder menu) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1139"
+ column="36"/>
</issue>
<issue
@@ -10597,7 +12903,9 @@
errorLine1=" public Object getTag() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1166"
+ column="16"/>
</issue>
<issue
@@ -10606,7 +12914,9 @@
errorLine1=" public Tab setTag(Object tag) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1171"
+ column="16"/>
</issue>
<issue
@@ -10615,7 +12925,9 @@
errorLine1=" public Tab setTag(Object tag) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1171"
+ column="27"/>
</issue>
<issue
@@ -10624,7 +12936,9 @@
errorLine1=" public ActionBar.TabListener getCallback() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1176"
+ column="16"/>
</issue>
<issue
@@ -10633,7 +12947,9 @@
errorLine1=" public Tab setTabListener(ActionBar.TabListener callback) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1181"
+ column="16"/>
</issue>
<issue
@@ -10642,7 +12958,9 @@
errorLine1=" public Tab setTabListener(ActionBar.TabListener callback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1181"
+ column="35"/>
</issue>
<issue
@@ -10651,7 +12969,9 @@
errorLine1=" public View getCustomView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1187"
+ column="16"/>
</issue>
<issue
@@ -10660,7 +12980,9 @@
errorLine1=" public Tab setCustomView(View view) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1192"
+ column="16"/>
</issue>
<issue
@@ -10669,7 +12991,9 @@
errorLine1=" public Tab setCustomView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1192"
+ column="34"/>
</issue>
<issue
@@ -10678,7 +13002,9 @@
errorLine1=" public Tab setCustomView(int layoutResId) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1201"
+ column="16"/>
</issue>
<issue
@@ -10687,7 +13013,9 @@
errorLine1=" public Drawable getIcon() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1207"
+ column="16"/>
</issue>
<issue
@@ -10696,7 +13024,9 @@
errorLine1=" public CharSequence getText() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1221"
+ column="16"/>
</issue>
<issue
@@ -10705,7 +13035,9 @@
errorLine1=" public Tab setIcon(Drawable icon) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1226"
+ column="16"/>
</issue>
<issue
@@ -10714,7 +13046,9 @@
errorLine1=" public Tab setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1226"
+ column="28"/>
</issue>
<issue
@@ -10723,7 +13057,9 @@
errorLine1=" public Tab setIcon(int resId) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1235"
+ column="16"/>
</issue>
<issue
@@ -10732,7 +13068,9 @@
errorLine1=" public Tab setText(CharSequence text) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1240"
+ column="16"/>
</issue>
<issue
@@ -10741,7 +13079,9 @@
errorLine1=" public Tab setText(CharSequence text) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1240"
+ column="28"/>
</issue>
<issue
@@ -10750,7 +13090,9 @@
errorLine1=" public Tab setText(int resId) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1249"
+ column="16"/>
</issue>
<issue
@@ -10759,7 +13101,9 @@
errorLine1=" public Tab setContentDescription(int resId) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1259"
+ column="16"/>
</issue>
<issue
@@ -10768,7 +13112,9 @@
errorLine1=" public Tab setContentDescription(CharSequence contentDesc) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1264"
+ column="16"/>
</issue>
<issue
@@ -10777,7 +13123,9 @@
errorLine1=" public Tab setContentDescription(CharSequence contentDesc) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1264"
+ column="42"/>
</issue>
<issue
@@ -10786,7 +13134,9 @@
errorLine1=" public CharSequence getContentDescription() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1273"
+ column="16"/>
</issue>
<issue
@@ -10795,7 +13145,9 @@
errorLine1=" public void setCustomView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1279"
+ column="31"/>
</issue>
<issue
@@ -10804,7 +13156,9 @@
errorLine1=" public void setCustomView(View view, LayoutParams layoutParams) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1284"
+ column="31"/>
</issue>
<issue
@@ -10813,7 +13167,9 @@
errorLine1=" public void setCustomView(View view, LayoutParams layoutParams) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1284"
+ column="42"/>
</issue>
<issue
@@ -10822,7 +13178,9 @@
errorLine1=" public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1290"
+ column="44"/>
</issue>
<issue
@@ -10831,7 +13189,9 @@
errorLine1=" public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1290"
+ column="68"/>
</issue>
<issue
@@ -10840,7 +13200,9 @@
errorLine1=" public Tab getTabAt(int index) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1354"
+ column="12"/>
</issue>
<issue
@@ -10849,7 +13211,9 @@
errorLine1=" public void setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1365"
+ column="25"/>
</issue>
<issue
@@ -10858,7 +13222,9 @@
errorLine1=" public void setLogo(Drawable logo) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1379"
+ column="25"/>
</issue>
<issue
@@ -10867,7 +13233,9 @@
errorLine1=" public boolean onKeyShortcut(int keyCode, KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"/>
+ file="src/main/java/androidx/appcompat/app/WindowDecorActionBar.java"
+ line="1395"
+ column="47"/>
</issue>
</issues>
diff --git a/appcompat/appcompat/src/androidTest/AndroidManifest.xml b/appcompat/appcompat/src/androidTest/AndroidManifest.xml
index d128244..f58db92 100644
--- a/appcompat/appcompat/src/androidTest/AndroidManifest.xml
+++ b/appcompat/appcompat/src/androidTest/AndroidManifest.xml
@@ -26,6 +26,15 @@
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat">
+ <service
+ android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
+ android:enabled="false"
+ android:exported="false">
+ <meta-data
+ android:name="autoStoreLocales"
+ android:value="false" />
+ </service>
+
<activity
android:name="androidx.appcompat.app.AppCompatActivity"/>
@@ -242,6 +251,10 @@
android:configChanges="orientation|screenSize|keyboardHidden"/>
<activity
+ android:name="androidx.appcompat.app.g3.FilternatorActivityWithCustomDefault"
+ android:configChanges="orientation|screenSize|keyboardHidden"/>
+
+ <activity
android:name="androidx.appcompat.app.g3.OldTranslateActivity"
android:configChanges="screenSize|keyboardHidden|orientation|smallestScreenSize|screenLayout"
android:recreateOnConfigChanges="mcc|mnc"
@@ -335,6 +348,40 @@
<activity
android:name="androidx.appcompat.widget.TooltipCompatTestActivity" />
+ <activity android:name="androidx.appcompat.app.LocalesUpdateActivity"/>
+
+ <activity
+ android:name="androidx.appcompat.app.LocalesConfigChangesActivity"
+ android:configChanges="locale|layoutDirection"/>
+
+ <activity
+ android:name="androidx.appcompat.app.LocalesCustomApplyOverrideConfigurationActivity" />
+
+ <activity android:name="androidx.appcompat.app.LocalesDialogFragment"/>
+
+ <activity android:name="androidx.appcompat.app.LocalesCustomAttachBaseContextActivity"/>
+
+ <activity
+ android:name="androidx.appcompat.app.LocalesRotateDoesNotRecreateActivity"
+ android:configChanges="orientation|screenSize"/>
+
+ <activity android:name="androidx.appcompat.app.LocalesActivityA"/>
+
+ <activity android:name="androidx.appcompat.app.LocalesActivityB"/>
+
+ <activity
+ android:name="androidx.appcompat.app.LocalesConfigChangesActivityA"
+ android:configChanges="locale|layoutDirection"/>
+
+ <activity
+ android:name="androidx.appcompat.app.LocalesConfigChangesActivityB"
+ android:configChanges="locale|layoutDirection"/>
+
+ <activity
+ android:name="androidx.appcompat.app.LocalesConfigChangesActivityWithoutLayoutDirection"
+ android:configChanges="locale"/>
+
+ <activity android:name="androidx.appcompat.app.LocalesLateOnCreateActivity"/>
</application>
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityA.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityA.java
new file mode 100644
index 0000000..5719451
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityA.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+/**
+ * An activity for locales with a unique class name.
+ */
+public class LocalesActivityA extends LocalesUpdateActivity {}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityB.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityB.java
new file mode 100644
index 0000000..b327efb
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesActivityB.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+/**
+ * An activity for locales with a unique class name.
+ */
+public class LocalesActivityB extends LocalesUpdateActivity {}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesChangeWhenInBackground.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesChangeWhenInBackground.kt
new file mode 100644
index 0000000..9ae3adda
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesChangeWhenInBackground.kt
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app
+
+import android.content.Intent
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.testutils.LifecycleOwnerUtils.waitUntilState
+import junit.framework.TestCase.assertNotSame
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesChangeWhenInBackground {
+ @get:Rule
+ val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+ private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+
+ @Before
+ fun setUp() {
+ // Since no locales are applied as of now, current configuration will have system
+ // locales.
+ systemLocales = LocalesUpdateActivity.getConfigLocales(
+ rule.activity.resources.configuration)
+ }
+
+ @Test
+ fun testLocalesChangeWhenInBackground() {
+
+ val instrumentation = InstrumentationRegistry.getInstrumentation()
+ val firstActivity = rule.activity
+ assertConfigurationLocalesEquals(systemLocales, firstActivity)
+
+ // Start a new Activity, so that the original Activity goes into the background
+ val intent = Intent(firstActivity, AppCompatActivity::class.java).apply {
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ }
+ val secondActivity = instrumentation.startActivitySync(intent) as AppCompatActivity
+ assertConfigurationLocalesEquals(systemLocales, secondActivity)
+
+ // Now change the locales for the foreground activity
+ val recreatedSecond = setLocalesAndWaitForRecreate(
+ secondActivity,
+ CUSTOM_LOCALE_LIST
+ )
+
+ // Now finish the foreground activity and wait until it is destroyed,
+ // allowing the recreated activity to come to the foreground
+ instrumentation.runOnMainSync { recreatedSecond.finish() }
+ waitUntilState(recreatedSecond, Lifecycle.State.DESTROYED)
+
+ // Assert that the recreated Activity becomes resumed
+ instrumentation.waitForIdleSync()
+ assertNotSame(rule.activity, firstActivity)
+ waitUntilState(rule.activity, Lifecycle.State.RESUMED)
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivity.java
new file mode 100644
index 0000000..d7c757e
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivity.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+/**
+ * An activity that handles locales configuration changes.
+ */
+public class LocalesConfigChangesActivity extends LocalesUpdateActivity { }
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityA.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityA.java
new file mode 100644
index 0000000..c6b0d8b
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityA.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+/**
+ * An activity that handles locales configuration changes.
+ */
+public class LocalesConfigChangesActivityA extends LocalesUpdateActivity {}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityB.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityB.java
new file mode 100644
index 0000000..c59c33b
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityB.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+/**
+ * An activity that handles locales configuration changes.
+ */
+public class LocalesConfigChangesActivityB extends LocalesUpdateActivity {}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityWithoutLayoutDirection.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityWithoutLayoutDirection.java
new file mode 100644
index 0000000..77d7bfb
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesActivityWithoutLayoutDirection.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+/**
+ * An activity that handles locales configuration changes and does not handle layoutDirection
+ * configChanges.
+ */
+public class LocalesConfigChangesActivityWithoutLayoutDirection extends LocalesUpdateActivity { }
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesTestCase.kt
new file mode 100644
index 0000000..a4aff79
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesTestCase.kt
@@ -0,0 +1,183 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app
+
+import androidx.appcompat.testutils.LocalesUtils
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocales
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.core.app.ActivityScenario
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.testutils.withActivity
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNull
+import org.junit.Before
+import org.junit.Test
+
+@LargeTest
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesConfigChangesTestCase() {
+ private lateinit var scenario: ActivityScenario<LocalesConfigChangesActivity>
+ private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+ private var expectedLocales = LocaleListCompat.getEmptyLocaleList()
+
+ @Before
+ fun setup() {
+ LocalesUtils.initCustomLocaleList()
+ // By default we'll set the apps to use system locales, which allows us to make better
+ // assumptions in the tests below.
+ // Launch the test activity.
+ scenario = ActivityScenario.launch(LocalesConfigChangesActivity::class.java)
+ scenario.onActivity {
+ // Since no locales are applied as of now, current configuration will have system
+ // locales.
+ systemLocales = LocalesUpdateActivity.getConfigLocales(it.resources.configuration)
+ // expected locales is an overlay of custom and system locales.
+ expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+ CUSTOM_LOCALE_LIST, systemLocales)
+ }
+ }
+
+ @Test
+ fun testOnConfigurationChangeCalledWhileStarted() {
+ scenario.moveToState(Lifecycle.State.RESUMED)
+
+ // Set locales to CUSTOM_LOCALE_LIST.
+ scenario.onActivity { setLocales(CUSTOM_LOCALE_LIST) }
+ // Assert that the onConfigurationChange was called with a new correct config.
+ scenario.onActivity {
+ val lastConfig = it.lastConfigurationChangeAndClear
+ assertConfigurationLocalesEquals(
+ expectedLocales,
+ lastConfig!!
+ )
+ }
+
+ // Set locales back to system locales.
+ scenario.onActivity { setLocales(LocaleListCompat.getEmptyLocaleList()) }
+ // Assert that the onConfigurationChange was called with a new correct config.
+ scenario.onActivity {
+ val lastConfig = it.lastConfigurationChangeAndClear
+ assertConfigurationLocalesEquals(
+ systemLocales, lastConfig!!
+ )
+ }
+ }
+
+ @Test
+ fun testOnConfigurationChangeCalledWhileStopped() {
+ scenario.moveToState(Lifecycle.State.RESUMED)
+ scenario.moveToState(Lifecycle.State.CREATED)
+
+ // Set locales to CUSTOM_LOCALE_LIST.
+ scenario.onActivity { setLocales(CUSTOM_LOCALE_LIST) }
+ // Assert that the onConfigurationChange was called with a new correct config.
+ scenario.onActivity {
+ val lastConfig = it.lastConfigurationChangeAndClear
+ assertConfigurationLocalesEquals(
+ expectedLocales,
+ lastConfig!!
+ )
+ }
+
+ // Set locales back to system locales.
+ scenario.onActivity { setLocales(LocaleListCompat.getEmptyLocaleList()) }
+ // Assert that the onConfigurationChange was called with a new correct config.
+ scenario.onActivity {
+ val lastConfig = it.lastConfigurationChangeAndClear
+ assertConfigurationLocalesEquals(
+ systemLocales, lastConfig!!
+ )
+ }
+ }
+
+ @Test
+ fun testOnConfigurationChangeNotCalledWhileDestroyed() {
+ scenario.moveToState(Lifecycle.State.RESUMED)
+
+ lateinit var activity: LocalesConfigChangesActivity
+ scenario.onActivity { activity = it }
+
+ scenario.moveToState(Lifecycle.State.DESTROYED)
+
+ // Clear any previous config changes.
+ activity.lastConfigurationChangeAndClear
+
+ // Set locales to CUSTOM_LOCALE_LIST.
+ setLocales(CUSTOM_LOCALE_LIST)
+ // Assert that the onConfigurationChange was not called with a new correct config.
+ assertNull(activity.lastConfigurationChangeAndClear)
+
+ // Set locales back to system locales.
+ setLocales(LocaleListCompat.getEmptyLocaleList())
+ // Assert that the onConfigurationChange was not called with a new correct config.
+ assertNull(activity.lastConfigurationChangeAndClear)
+ }
+
+ @Test
+ fun testResourcesUpdated() {
+ // Set locales to CUSTOM_LOCALE_LIST.
+ scenario.onActivity { setLocales(CUSTOM_LOCALE_LIST) }
+
+ // Assert that the Activity resources configuration was updated.
+ assertConfigurationLocalesEquals(
+ expectedLocales,
+ scenario.withActivity { this }
+ )
+
+ // Set locales back to system locales.
+ scenario.onActivity { setLocales(LocaleListCompat.getEmptyLocaleList()) }
+
+ // Assert that the Activity resources configuration was updated.
+ assertConfigurationLocalesEquals(
+ systemLocales,
+ scenario.withActivity { this }
+ )
+ }
+
+ @Test
+ fun testOnLocalesChangedCalled() {
+ // Set locales to CUSTOM_LOCALE_LIST.
+ scenario.onActivity { setLocales(CUSTOM_LOCALE_LIST) }
+ // Assert that the Activity received a new value.
+ assertEquals(
+ expectedLocales,
+ scenario.withActivity { lastLocalesAndReset }
+ )
+
+ // Set locales back to system locales.
+ scenario.onActivity { setLocales(LocaleListCompat.getEmptyLocaleList()) }
+ // Assert that the Activity received a new value.
+ assertEquals(systemLocales, scenario.withActivity { lastLocalesAndReset })
+ }
+
+ @After
+ fun cleanup() {
+ // Reset the system locales.
+ if (scenario.state != Lifecycle.State.DESTROYED) {
+ scenario.onActivity { setLocales(LocaleListCompat.getEmptyLocaleList()) }
+ }
+ LocalesUpdateActivity.teardown()
+ scenario.close()
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesWithoutLayoutDirectionTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesWithoutLayoutDirectionTestCase.kt
new file mode 100644
index 0000000..c20886a
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesConfigChangesWithoutLayoutDirectionTestCase.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@file:Suppress("deprecation")
+
+package androidx.appcompat.app
+
+import androidx.appcompat.testutils.LocalesUtils
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.core.app.ActivityScenario
+import androidx.test.filters.SdkSuppress
+import junit.framework.Assert.assertNull
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesConfigChangesWithoutLayoutDirectionTestCase {
+ private lateinit var scenario: ActivityScenario<
+ LocalesConfigChangesActivityWithoutLayoutDirection>
+ private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+ private var expectedLocales = LocaleListCompat.getEmptyLocaleList()
+
+ @Before
+ fun setup() {
+ LocalesUtils.initCustomLocaleList()
+ // By default we'll set the apps to use system locales, which allows us to make better
+ // assumptions in the tests below.
+ // Launch the test activity.
+ scenario =
+ ActivityScenario.launch(LocalesConfigChangesActivityWithoutLayoutDirection::class.java)
+ scenario.onActivity {
+ // Since no locales are applied as of now, current configuration will have system
+ // locales.
+ systemLocales = LocalesUpdateActivity.getConfigLocales(it.resources.configuration)
+ // expected locales is an overlay of custom and system locales.
+ expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+ LocalesUtils.CUSTOM_LOCALE_LIST, systemLocales
+ )
+ }
+ }
+
+ @Test
+ fun testOnConfigurationChangeNotCalledWhileStarted() {
+ scenario.moveToState(Lifecycle.State.RESUMED)
+
+ // Set locales to CUSTOM_LOCALE_LIST.
+ scenario.onActivity { LocalesUtils.setLocales(LocalesUtils.CUSTOM_LOCALE_LIST) }
+ // Assert that the onConfigurationChange was called with a new correct config.
+ scenario.onActivity {
+ // the call should not have reached the LocalesUpdateActivity.onConfigurationChange()
+ // because the manifest entry for LocalesConfigChangesActivityWithoutLayoutDirection
+ // only handles locale and not layoutDir.
+ assertNull(it.lastConfigurationChangeAndClear)
+ LocalesUtils.assertConfigurationLocalesEquals(
+ expectedLocales,
+ it.resources.configuration!!
+ )
+ }
+ }
+
+ @After
+ fun teardown() {
+ LocalesUpdateActivity.teardown()
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomApplyOverrideConfigurationActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomApplyOverrideConfigurationActivity.java
new file mode 100644
index 0000000..e39c081
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomApplyOverrideConfigurationActivity.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+import android.content.Context;
+import android.content.res.Configuration;
+
+import androidx.annotation.RequiresApi;
+
+/**
+ * An activity that has a customized fontScale, set before onCreate().
+ */
+@RequiresApi(17)
+public class LocalesCustomApplyOverrideConfigurationActivity extends LocalesUpdateActivity {
+ public static final float CUSTOM_FONT_SCALE = 4.24f;
+
+ @Override
+ protected void attachBaseContext(Context newBase) {
+ super.attachBaseContext(newBase);
+
+ Configuration config = new Configuration();
+ config.fontScale = CUSTOM_FONT_SCALE;
+ super.applyOverrideConfiguration(config);
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomApplyOverrideConfigurationTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomApplyOverrideConfigurationTestCase.kt
new file mode 100644
index 0000000..27c3d16
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomApplyOverrideConfigurationTestCase.kt
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app
+
+import android.content.res.Configuration
+import androidx.appcompat.app.LocalesCustomApplyOverrideConfigurationActivity.CUSTOM_FONT_SCALE
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.appcompat.testutils.NightModeUtils
+import androidx.appcompat.testutils.NightModeUtils.assertConfigurationNightModeEquals
+import androidx.core.os.LocaleListCompat
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import org.junit.Assert.assertEquals
+import org.junit.Rule
+import org.junit.Test
+
+/**
+ * This is one approach to customize Activity's configuration that's used in google3.
+ */
+@LargeTest
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(minSdkVersion = 17, maxSdkVersion = 31)
+class LocalesCustomApplyOverrideConfigurationTestCase() {
+
+ @get:Rule
+ val activityRule = LocalesActivityTestRule(
+ LocalesCustomApplyOverrideConfigurationActivity::class.java
+ )
+
+ @Test
+ @Suppress("DEPRECATION")
+ fun testNightModeIsMaintainedOnLocalesChange() {
+ NightModeUtils.setNightModeAndWaitForRecreate(
+ activityRule,
+ AppCompatDelegate.MODE_NIGHT_YES,
+ NightModeUtils.NightSetMode.LOCAL
+ )
+ assertConfigurationNightModeEquals(
+ Configuration.UI_MODE_NIGHT_YES,
+ activityRule.activity.resources.configuration
+ )
+ setLocalesAndWaitForRecreate(activityRule, CUSTOM_LOCALE_LIST)
+ // Check that the custom configuration properties are maintained
+ assertConfigurationNightModeEquals(
+ Configuration.UI_MODE_NIGHT_YES,
+ activityRule.activity.resources.configuration
+ )
+ setLocalesAndWaitForRecreate(activityRule, LocaleListCompat.getEmptyLocaleList())
+ }
+
+ @Test
+ fun testFontScaleIsMaintained() {
+ // Check that the custom configuration properties are maintained
+ val config = activityRule.activity.resources.configuration
+ assertEquals(CUSTOM_FONT_SCALE, config.fontScale)
+ }
+
+ @Test
+ fun testFontScaleIsMaintainedOnLocalesChange() {
+ // Set locales to CUSTOM_LOCALE_LIST.
+ setLocalesAndWaitForRecreate(activityRule, CUSTOM_LOCALE_LIST)
+ // Check that the custom configuration properties are maintained.
+ val config = activityRule.activity.resources.configuration
+ assertEquals(CUSTOM_FONT_SCALE, config.fontScale)
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextActivity.java
new file mode 100644
index 0000000..9f929e5
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextActivity.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.os.Build;
+
+/**
+ * An activity with customized configuration.
+ */
+public class LocalesCustomAttachBaseContextActivity extends LocalesUpdateActivity {
+ public static final float CUSTOM_FONT_SCALE = 4.24f;
+
+ @Override
+ protected void attachBaseContext(Context newBase) {
+ super.attachBaseContext(useCustomConfig(newBase));
+ }
+
+ private Context useCustomConfig(Context context) {
+ if (Build.VERSION.SDK_INT >= 24) {
+ Configuration config = new Configuration();
+ config.fontScale = CUSTOM_FONT_SCALE;
+ return context.createConfigurationContext(config);
+ } else {
+ Resources res = context.getResources();
+ Configuration config = new Configuration(res.getConfiguration());
+ config.fontScale = CUSTOM_FONT_SCALE;
+ res.updateConfiguration(config, res.getDisplayMetrics());
+ return context;
+ }
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextTestCase.kt
new file mode 100644
index 0000000..9215bf4
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesCustomAttachBaseContextTestCase.kt
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app
+
+import android.content.res.Configuration
+import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
+import androidx.appcompat.app.NightModeCustomAttachBaseContextActivity.CUSTOM_FONT_SCALE
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.appcompat.testutils.NightModeUtils.NightSetMode
+import androidx.appcompat.testutils.NightModeUtils.assertConfigurationNightModeEquals
+import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWaitForRecreate
+import androidx.core.os.LocaleListCompat
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+
+@LargeTest
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesCustomAttachBaseContextTestCase() {
+
+ @get:Rule
+ val activityRule = LocalesActivityTestRule(
+ LocalesCustomAttachBaseContextActivity::class.java
+ )
+
+ @Before
+ fun setUp() {
+ AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+ }
+
+ @Test
+ @Suppress("DEPRECATION")
+ fun testNightModeIsMaintainedOnLocalesChange() {
+ setNightModeAndWaitForRecreate(
+ activityRule,
+ MODE_NIGHT_YES,
+ NightSetMode.LOCAL
+ )
+ assertConfigurationNightModeEquals(
+ Configuration.UI_MODE_NIGHT_YES,
+ activityRule.activity.resources.configuration
+ )
+ setLocalesAndWaitForRecreate(activityRule, CUSTOM_LOCALE_LIST)
+ // Check that the custom configuration properties are maintained
+ assertConfigurationNightModeEquals(
+ Configuration.UI_MODE_NIGHT_YES,
+ activityRule.activity.resources.configuration
+ )
+ }
+
+ @Test
+ fun testFontScaleIsMaintained() {
+ // Check that the custom configuration properties are maintained.
+ val config = activityRule.activity.resources.configuration
+ assertEquals(CUSTOM_FONT_SCALE, config.fontScale)
+ }
+
+ @Test
+ fun testFontScaleIsMaintainedOnLocalesChange() {
+ // Set locales to CUSTOM_LOCALE_LIST.
+ setLocalesAndWaitForRecreate(activityRule, CUSTOM_LOCALE_LIST)
+ // Check that the custom configuration properties are maintained.
+ val config = activityRule.activity.resources.configuration
+ assertEquals(CUSTOM_FONT_SCALE, config.fontScale)
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesForegroundDialogTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesForegroundDialogTestCase.kt
new file mode 100644
index 0000000..7ced0ff
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesForegroundDialogTestCase.kt
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app
+
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.testutils.LifecycleOwnerUtils.waitUntilState
+import junit.framework.TestCase.assertNotSame
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesForegroundDialogTestCase {
+ @get:Rule
+ val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+ private var baseLocales = LocaleListCompat.getEmptyLocaleList()
+
+ @Before
+ fun setUp() {
+ AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+ baseLocales = LocalesUpdateActivity.getConfigLocales(rule.activity.resources.configuration)
+ }
+
+ @Test
+ fun testLocalesChangeWithForegroundDialog() {
+ val firstActivity = rule.activity
+ assertConfigurationLocalesEquals(baseLocales, firstActivity)
+
+ // Open a dialog on top of the activity.
+ rule.runOnUiThread {
+ val frag = TestDialogFragment.newInstance()
+ frag.show(firstActivity.supportFragmentManager, "dialog")
+ }
+
+ // Now change the locales for the foreground activity.
+ setLocalesAndWaitForRecreate(
+ firstActivity,
+ CUSTOM_LOCALE_LIST
+ )
+
+ // Ensure that it was recreated.
+ assertNotSame(rule.activity, firstActivity)
+ waitUntilState(rule.activity, Lifecycle.State.RESUMED)
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesLateOnCreateActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesLateOnCreateActivity.java
new file mode 100644
index 0000000..6466e41
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesLateOnCreateActivity.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.LocaleList;
+
+import androidx.core.os.LocaleListCompat;
+
+import java.util.Locale;
+
+/**
+ * An activity with systemLocales replaced with some customised locales for testing.
+ */
+public class LocalesLateOnCreateActivity extends LocalesUpdateActivity {
+
+ public static LocaleListCompat DEFAULT_LOCALE_LIST;
+ public static LocaleListCompat TEST_LOCALE_LIST;
+ public static LocaleListCompat EXPECTED_LOCALE_LIST;
+
+ @Override
+ public void onCreate(Bundle bundle) {
+ // Override locales so that AppCompat attempts to re-apply during onCreate().
+
+ if (Build.VERSION.SDK_INT >= 21) {
+ DEFAULT_LOCALE_LIST = LocaleListCompat.forLanguageTags(
+ Locale.US.toLanguageTag() + "," + Locale.CHINESE.toLanguageTag());
+ TEST_LOCALE_LIST = LocaleListCompat.forLanguageTags(
+ Locale.CANADA_FRENCH.toLanguageTag() + ","
+ + Locale.US.toLanguageTag());
+ EXPECTED_LOCALE_LIST = LocaleListCompat.forLanguageTags(
+ Locale.CANADA_FRENCH.toLanguageTag() + ","
+ + Locale.US.toLanguageTag() + "," + Locale.CHINESE.toLanguageTag());
+ } else {
+ DEFAULT_LOCALE_LIST = LocaleListCompat.create(Locale.US);
+ TEST_LOCALE_LIST = LocaleListCompat.create(Locale.CANADA_FRENCH);
+ EXPECTED_LOCALE_LIST = LocaleListCompat.create(Locale.CANADA_FRENCH);
+ }
+ disableAutomaticLocales(getApplicationContext());
+
+ super.onCreate(bundle);
+ }
+
+ private static void setLocales(LocaleListCompat locales, Context context) {
+ Configuration conf = context.getResources().getConfiguration();
+ if (Build.VERSION.SDK_INT >= 24) {
+ conf.setLocales(LocaleList.forLanguageTags(locales.toLanguageTags()));
+ } else if (Build.VERSION.SDK_INT >= 17) {
+ conf.setLocale(locales.get(0));
+ } else {
+ conf.locale = locales.get(0);
+ }
+ // updateConfiguration is required to make the configuration change stick.
+ // updateConfiguration must be called before any use of the actual Resources.
+ context.getResources().updateConfiguration(conf,
+ context.getResources().getDisplayMetrics());
+ }
+
+ /**
+ * Ensures the context does not use system locales, instead uses the DEFAULT_LOCALE_LIST
+ *
+ * <p>This must be called before a Context's Resources are used for the first time. {@code
+ * Activity.onCreate} is a great place to call {@code disableAutomaticLocales(this)}
+ */
+ public static void disableAutomaticLocales(Context context) {
+ setLocales(DEFAULT_LOCALE_LIST, context);
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesLateOnCreateTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesLateOnCreateTestCase.kt
new file mode 100644
index 0000000..13968ee
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesLateOnCreateTestCase.kt
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app
+
+import androidx.appcompat.app.LocalesLateOnCreateActivity.DEFAULT_LOCALE_LIST
+import androidx.appcompat.app.LocalesLateOnCreateActivity.EXPECTED_LOCALE_LIST
+import androidx.appcompat.app.LocalesLateOnCreateActivity.TEST_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.lifecycle.Lifecycle
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.testutils.LifecycleOwnerUtils.waitUntilState
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesLateOnCreateTestCase {
+
+ @get:Rule
+ val activityRule = LocalesActivityTestRule(LocalesLateOnCreateActivity::class.java)
+
+ @Test
+ fun testActivityRecreateLoop() {
+ // Activity should be able to reach fully resumed state in default locales.
+ waitUntilState(activityRule.activity, Lifecycle.State.RESUMED)
+ assertConfigurationLocalesEquals(
+ DEFAULT_LOCALE_LIST,
+ activityRule.activity.resources.configuration
+ )
+
+ // Simulate the user set locales, which should force an activity recreate().
+ setLocalesAndWaitForRecreate(
+ activityRule,
+ TEST_LOCALE_LIST
+ )
+
+ // Activity should be able to reach fully resumed state again.
+ waitUntilState(activityRule.activity, Lifecycle.State.RESUMED)
+
+ // The requested locales should have been set during attachBaseContext().
+ assertConfigurationLocalesEquals(
+ EXPECTED_LOCALE_LIST,
+ activityRule.activity.resources.configuration
+ )
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesPersistTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesPersistTestCase.kt
new file mode 100644
index 0000000..0470ce5f
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesPersistTestCase.kt
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@file:Suppress("deprecation")
+
+package androidx.appcompat.app
+
+import android.content.Intent
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.core.os.LocaleListCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import junit.framework.Assert.assertNull
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesPersistTestCase() {
+ @get:Rule
+ val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+ private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+ private var expectedLocales = LocaleListCompat.getEmptyLocaleList()
+
+ @Before
+ fun setUp() {
+ // Since no locales are applied as of now, current configuration will have system
+ // locales.
+ systemLocales = LocalesUpdateActivity.getConfigLocales(
+ rule.activity.resources.configuration
+ )
+ expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+ CUSTOM_LOCALE_LIST, systemLocales
+ )
+ }
+
+ /**
+ * This test verifies that the locales persist in storage when a metadata entry for
+ * "autoStoreLocale" is provided as an opt-in.
+ * To replicate the scenario of app-startup a method resetStaticRequestedAndStoredLocales()
+ * is called to clear out the static storage of locales. The flow of the test is:
+ * setApplicationLocales is called on the firstActivity and it is recreated as recreatedFirst.
+ * Now the locales must have been stored and the static storage would also hold these. Then
+ * we clear out the static storage and create a new activity secondActivity by using an intent
+ * and because the static storage was already clear the activity should sync locales from
+ * storage and start up in the app-specific locales.
+ */
+ @Test
+ fun testLocalesAppliedInNewActivityAfterStaticStorageCleared() {
+ // mimics opting in to "autoStoreLocales"
+ AppCompatDelegate.setIsAutoStoreLocalesOptedIn(true)
+
+ val instrumentation = InstrumentationRegistry.getInstrumentation()
+ val firstActivity = rule.activity
+ assertConfigurationLocalesEquals(systemLocales, firstActivity)
+
+ // Now change the locales for the activity
+ val recreatedFirst = setLocalesAndWaitForRecreate(
+ firstActivity,
+ CUSTOM_LOCALE_LIST
+ )
+
+ assertConfigurationLocalesEquals(expectedLocales, recreatedFirst)
+
+ // clear out static storage so that, when a new activity starts it syncs locales
+ // from storage.
+ AppCompatDelegate.resetStaticRequestedAndStoredLocales()
+ // verify that the static locales were cleared out.
+ assertNull(AppCompatDelegate.getRequestedAppLocales())
+
+ // Start a new Activity, so that the original Activity goes into the background
+ val intent = Intent(recreatedFirst, AppCompatActivity::class.java).apply {
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ }
+ val secondActivity = instrumentation.startActivitySync(intent) as AppCompatActivity
+
+ // assert that the new activity started with the app-specific locales after reading them
+ // from storage.
+ assertConfigurationLocalesEquals(expectedLocales, secondActivity)
+ }
+
+ @Test
+ fun testNewActivityCreatedWhenNoAppLocalesExist() {
+ val instrumentation = InstrumentationRegistry.getInstrumentation()
+ val firstActivity = rule.activity
+ assertConfigurationLocalesEquals(systemLocales, firstActivity)
+
+ // Start a new Activity, so that the original Activity goes into the background
+ val intent = Intent(firstActivity, AppCompatActivity::class.java).apply {
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ }
+ val secondActivity = instrumentation.startActivitySync(intent) as AppCompatActivity
+
+ // assert that the new activity started with the systemLocales.
+ assertConfigurationLocalesEquals(systemLocales, secondActivity)
+ }
+
+ @After
+ fun teardown() {
+ rule.runOnUiThread {
+ // clean-up
+ AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+ // setting auto storage opt-in to false
+ AppCompatDelegate.setIsAutoStoreLocalesOptedIn(false)
+ }
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivity.java
new file mode 100644
index 0000000..14efcde
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivity.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+public class LocalesRotateDoesNotRecreateActivity extends LocalesUpdateActivity {}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivityTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivityTestCase.kt
new file mode 100644
index 0000000..ef28708
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateDoesNotRecreateActivityTestCase.kt
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app
+
+import androidx.appcompat.Orientation
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.appcompat.withOrientation
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.uiautomator.UiDevice
+import androidx.testutils.LifecycleOwnerUtils
+import org.junit.After
+import org.junit.Assert.assertNotSame
+import org.junit.Assert.assertSame
+import org.junit.Rule
+import org.junit.Test
+
+@LargeTest
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(minSdkVersion = 18, maxSdkVersion = 31)
+class LocalesRotateDoesNotRecreateActivityTestCase() {
+
+ private val instrumentation = InstrumentationRegistry.getInstrumentation()
+ private val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
+
+ @get:Rule
+ val activityRule: LocalesActivityTestRule<LocalesRotateDoesNotRecreateActivity> =
+ LocalesActivityTestRule(
+ LocalesRotateDoesNotRecreateActivity::class.java,
+ initialTouchMode = false,
+ // Let the test method launch its own activity so that we can ensure it's RESUMED.
+ launchActivity = false
+ )
+
+ @Test
+ fun testRotateDoesNotRecreateActivity() {
+ // Set locales to CUSTOM_LOCALE_LIST and wait for state RESUMED.
+ val initialActivity = activityRule.launchActivity(null)
+ var systemLocales = LocalesUpdateActivity.getConfigLocales(
+ initialActivity.resources.configuration)
+ LifecycleOwnerUtils.waitUntilState(initialActivity, Lifecycle.State.RESUMED)
+ setLocalesAndWaitForRecreate(initialActivity, CUSTOM_LOCALE_LIST)
+
+ val localesActivity = activityRule.activity
+ val config = localesActivity.resources.configuration
+
+ // On API level 26 and below, the configuration object is going to be identical
+ // across configuration changes, so we need to pull the orientation value now.
+ val orientation = config.orientation
+ val expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+ CUSTOM_LOCALE_LIST, systemLocales)
+ // Assert that the current Activity has the new locales.
+ assertConfigurationLocalesEquals(expectedLocales, config)
+
+ // Now rotate the device. This should NOT result in a lifecycle event, just a call to
+ // onConfigurationChanged.
+ localesActivity.resetOnConfigurationChange()
+ device.withOrientation(Orientation.LEFT) {
+ instrumentation.waitForIdleSync()
+ localesActivity.expectOnConfigurationChange(5000)
+
+ // Assert that we got the same activity and thus it was not recreated.
+ val rotatedLocalesActivity = activityRule.activity
+ val rotatedConfig = rotatedLocalesActivity.resources.configuration
+ assertSame(localesActivity, rotatedLocalesActivity)
+ assertConfigurationLocalesEquals(expectedLocales, rotatedConfig)
+
+ // On API level 26 and below, the configuration object is going to be identical
+ // across configuration changes, so we need to compare against the cached value.
+ assertNotSame(orientation, rotatedConfig.orientation)
+ }
+ }
+
+ @After
+ fun teardown() {
+ device.setOrientationNatural()
+ // setOrientationNatural may need some time rotate orientation to natural, so we wait for
+ // the operation to end for 5000ms.
+ device.waitForIdle(/* timeout= */5000)
+
+ // Clean up
+ activityRule.runOnUiThread {
+ AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+ }
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateRecreatesActivityWithConfigTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateRecreatesActivityWithConfigTestCase.kt
new file mode 100644
index 0000000..d5f5fa1
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesRotateRecreatesActivityWithConfigTestCase.kt
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app
+
+import android.app.Activity
+import android.app.Instrumentation
+import androidx.appcompat.Orientation
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.appcompat.withOrientation
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.uiautomator.UiDevice
+import androidx.testutils.LifecycleOwnerUtils
+import org.junit.After
+import org.junit.Assert.assertNotEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNotSame
+import org.junit.Rule
+import org.junit.Test
+
+@LargeTest
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(minSdkVersion = 18, maxSdkVersion = 31)
+class LocalesRotateRecreatesActivityWithConfigTestCase() {
+
+ private val instrumentation = InstrumentationRegistry.getInstrumentation()
+ private val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
+ private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+ @get:Rule
+ public val activityRule: LocalesActivityTestRule<LocalesUpdateActivity> =
+ LocalesActivityTestRule(
+ LocalesUpdateActivity::class.java,
+ initialTouchMode = false,
+ // Let the test method launch its own activity so that we can ensure it's RESUMED.
+ launchActivity = false
+ )
+
+ @After
+ public fun teardown() {
+ device.setOrientationNatural()
+ device.waitForIdle(/* timeout= */5000)
+
+ // Clean up after the default mode test.
+
+ activityRule.runOnUiThread {
+ AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+ }
+ }
+
+ @Test
+ public fun testRotateRecreatesActivityWithConfig() {
+ // Set locales to CUSTOM_LOCALE_LIST and wait for state RESUMED.
+ val initialActivity = activityRule.launchActivity(null)
+ LifecycleOwnerUtils.waitUntilState(initialActivity, Lifecycle.State.RESUMED)
+ systemLocales = LocalesUpdateActivity.getConfigLocales(activityRule.activity.resources
+ .configuration)
+
+ setLocalesAndWaitForRecreate(initialActivity, CUSTOM_LOCALE_LIST)
+
+ val localesActivity = activityRule.activity
+ val config = localesActivity.resources.configuration
+
+ // On API level 26 and below, the configuration object is going to be identical
+ // across configuration changes, so we need to pull the orientation value now.
+ val orientation = config.orientation
+
+ // Assert that the current Activity has the expected locales.
+ assertConfigurationLocalesEquals(LocalesUpdateActivity.overlayCustomAndSystemLocales(
+ CUSTOM_LOCALE_LIST, systemLocales), config)
+
+ // Now rotate the device. This should result in an onDestroy lifecycle event.
+ localesActivity.resetOnDestroy()
+ rotateDeviceAndWaitForRecreate(localesActivity) {
+ localesActivity.expectOnDestroy(/* timeout= */ 5000)
+
+ // Assert that we got a different activity and thus it was recreated.
+ val rotatedLocalesActivity = activityRule.activity
+ val rotatedConfig = rotatedLocalesActivity.resources.configuration
+ assertNotSame(localesActivity, rotatedLocalesActivity)
+ assertConfigurationLocalesEquals(
+ LocalesUpdateActivity.overlayCustomAndSystemLocales(CUSTOM_LOCALE_LIST,
+ systemLocales),
+ rotatedConfig
+ )
+
+ // On API level 26 and below, the configuration object is going to be identical
+ // across configuration changes, so we need to compare against the cached value.
+ assertNotSame(orientation, rotatedConfig.orientation)
+ }
+ }
+
+ private fun rotateDeviceAndWaitForRecreate(activity: Activity, doThis: () -> Unit) {
+ val monitor = Instrumentation.ActivityMonitor(activity::class.java.name, /* result= */
+ null, /* block= */false)
+ instrumentation.addMonitor(monitor)
+
+ device.withOrientation(Orientation.LEFT) {
+ // Wait for the activity to be recreated after rotation
+ var count = 0
+ var lastActivity: Activity? = activity
+ while ((lastActivity == null || activity == lastActivity) && count < 5) {
+ // If this times out, it will return null.
+ lastActivity = monitor.waitForActivityWithTimeout(/* timeout= */ 1000L)
+ count++
+ }
+ instrumentation.waitForIdleSync()
+
+ // Ensure that we didn't time out
+ assertNotNull("Activity was not recreated within 5000ms", lastActivity)
+ assertNotEquals(
+ "Activity was not recreated within 5000ms", activity, lastActivity
+ )
+ doThis()
+ }
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSetUsingFrameworkApiTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSetUsingFrameworkApiTestCase.kt
new file mode 100644
index 0000000..82fd8e4
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSetUsingFrameworkApiTestCase.kt
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@file:Suppress("deprecation")
+
+package androidx.appcompat.app
+
+import android.os.LocaleList
+import androidx.annotation.RequiresApi
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.core.os.BuildCompat
+import androidx.core.os.LocaleListCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import junit.framework.Assert.assertEquals
+import junit.framework.Assert.assertNull
+import org.junit.After
+import org.junit.Assume.assumeTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales. The minSdkVersion should be set to 33 after API bump.
+@SdkSuppress(minSdkVersion = 32)
+class LocalesSetUsingFrameworkApiTestCase {
+ @get:Rule
+ val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+ private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+ private var expectedLocales = LocaleListCompat.getEmptyLocaleList()
+
+ @RequiresApi(33)
+ @Before
+ fun setUp() {
+ // TODO(b/223775393): Remove BuildCompat.isAtLeastT() checks after API version is
+ // bumped to 33
+ assumeTrue(
+ "Requires API version >=T", BuildCompat.isAtLeastT()
+ )
+
+ // setting the app to follow system.
+ AppCompatDelegate.Api33Impl.localeManagerSetApplicationLocales(
+ AppCompatDelegate.getLocaleManagerForApplication(),
+ LocaleList.getEmptyLocaleList()
+ )
+ // Since no locales are applied as of now, current configuration will have system
+ // locales.
+ systemLocales = LocalesUpdateActivity.getConfigLocales(
+ rule.activity.resources.configuration
+ )
+ expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+ LocalesUtils.CUSTOM_LOCALE_LIST, systemLocales
+ )
+ }
+
+ /**
+ * Verifies that for API version >=T the AppCompatDelegate.setApplicationLocales() call
+ * is redirected to the framework API and the locales are applied successfully.
+ */
+ @Test
+ @RequiresApi(33)
+ fun testSetApplicationLocales_postT_frameworkApiCalled() {
+ val firstActivity = rule.activity
+ assertConfigurationLocalesEquals(systemLocales, firstActivity)
+
+ assertEquals(
+ LocaleListCompat.getEmptyLocaleList(),
+ AppCompatDelegate.getApplicationLocales()
+ )
+ assertNull(AppCompatDelegate.getRequestedAppLocales())
+
+ // Now change the locales for the activity
+ val recreatedFirst = LocalesUtils.setLocalesAndWaitForRecreate(
+ firstActivity,
+ CUSTOM_LOCALE_LIST
+ )
+
+ assertEquals(
+ CUSTOM_LOCALE_LIST,
+ AppCompatDelegate.getApplicationLocales()
+ )
+ // check that the locales were set using the framework API
+ assertEquals(
+ CUSTOM_LOCALE_LIST.toLanguageTags(),
+ AppCompatDelegate.Api33Impl.localeManagerGetApplicationLocales(
+ AppCompatDelegate.getLocaleManagerForApplication()
+ ).toLanguageTags()
+ )
+ // check locales are applied successfully
+ assertConfigurationLocalesEquals(expectedLocales, recreatedFirst)
+ // check that the override was not done by AndroidX, but by the framework
+ assertNull(AppCompatDelegate.getRequestedAppLocales())
+ }
+
+ @RequiresApi(33)
+ @After
+ fun teardown() {
+ // TODO(b/223775393): Remove BuildCompat.isAtLeastT() checks after API version is
+ // bumped to 33
+ if (!BuildCompat.isAtLeastT()) {
+ return
+ }
+ // clearing locales from framework. setting the app to follow system.
+ AppCompatDelegate.Api33Impl.localeManagerSetApplicationLocales(
+ AppCompatDelegate.getLocaleManagerForApplication(),
+ LocaleList.getEmptyLocaleList()
+ )
+ }
+}
\ No newline at end of file
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesStackedHandlingTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesStackedHandlingTestCase.kt
new file mode 100644
index 0000000..a8cb155
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesStackedHandlingTestCase.kt
@@ -0,0 +1,367 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@file:Suppress("deprecation")
+
+package androidx.appcompat.app
+
+import android.app.Activity
+import android.app.Instrumentation
+import android.app.Instrumentation.ActivityMonitor
+import android.content.Intent
+import android.os.Handler
+import android.os.Looper
+import androidx.appcompat.testutils.LocalesUtils
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.testutils.LifecycleOwnerUtils.waitUntilState
+import junit.framework.Assert.assertNotNull
+import junit.framework.Assert.assertNotSame
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesStackedHandlingTestCase {
+
+ @Before
+ fun setUp() {
+ LocalesUtils.initCustomLocaleList()
+ }
+
+ /**
+ * Regression test for the following scenario:
+ *
+ * If you have a stack of activities which includes one with android:configChanges="locale" and
+ * android:configChanges="layoutDirection" and you call AppCompatDelegate.setApplicationLocales
+ * it can cause other activities to not be recreated.
+ *
+ * Eg:
+ * - Activity A DOESN'T intercept locales changes and layoutDirection changes in manifest
+ * - Activity B DOESN'T intercept locales changes and layoutDirection changes in manifest
+ * - Activity C DOES intercept both locales and layoutDirection changes in manifest
+ *
+ * Here is your stack : A > B > C (C on top)
+ *
+ * Call AppCompatDelegate.setApplicationLocales with a new mode on activity C. Activity C
+ * receives the change in onConfigurationChanged but there is a good chance that activity A
+ * and/or B were not recreated.
+ */
+ @Test
+ fun testLocalesWithStackedActivities() {
+ val instr = InstrumentationRegistry.getInstrumentation()
+ val result = Instrumentation.ActivityResult(0, Intent())
+ val monitorA = ActivityMonitor(LocalesActivityA::class.java.name, result, false)
+ val monitorB = ActivityMonitor(LocalesActivityB::class.java.name, result, false)
+ val monitorC = ActivityMonitor(
+ LocalesConfigChangesActivity::class.java.name,
+ result, false
+ )
+ instr.addMonitor(monitorA)
+ instr.addMonitor(monitorB)
+ instr.addMonitor(monitorC)
+
+ instr.runOnMainSync {
+ AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+ }
+
+ // Start activity A.
+ instr.startActivitySync(
+ Intent(instr.context, LocalesActivityA::class.java).apply {
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ putExtra(LocalesUpdateActivity.KEY_TITLE, "A")
+ }
+ )
+
+ // From activity A, start activity B.
+ val activityA = monitorA.waitForActivityWithTimeout(/* timeout= */ 3000)
+ as LocalesUpdateActivity
+ assertNotNull(activityA)
+ activityA.startActivity(
+ Intent(instr.context, LocalesActivityB::class.java).apply {
+ putExtra(LocalesUpdateActivity.KEY_TITLE, "B")
+ }
+ )
+
+ var systemLocales = LocalesUpdateActivity.getConfigLocales(
+ activityA.resources.configuration
+ )
+
+ // Activity A is hidden, wait for it to stop.
+ waitUntilState(activityA, Lifecycle.State.CREATED)
+
+ // From activity B, start activity C.
+ val activityB =
+ monitorB.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+ assertNotNull(activityB)
+ activityB.startActivity(
+ Intent(instr.context, LocalesConfigChangesActivity::class.java).apply {
+ putExtra(LocalesUpdateActivity.KEY_TITLE, "C")
+ }
+ )
+
+ // Activity B is hidden, wait for it to stop.
+ waitUntilState(activityB, Lifecycle.State.CREATED)
+
+ // apply CUSTOM_LOCALE_LIST
+ val activityC =
+ monitorC.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+ assertNotNull(activityC)
+ activityC.runOnUiThread {
+ AppCompatDelegate.setApplicationLocales(CUSTOM_LOCALE_LIST)
+ }
+
+ // Activity C should receive a configuration change.
+ activityC.expectOnConfigurationChange(/* timeout= */ 3000)
+
+ // Activities A and B should recreate() in the background.
+ val activityA2 = expectRecreate(monitorA, activityA) as LocalesUpdateActivity
+ val activityB2 = expectRecreate(monitorB, activityB) as LocalesUpdateActivity
+
+ var expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+ CUSTOM_LOCALE_LIST, systemLocales
+ )
+ // Activity C should have received a locales configuration change.
+ listOf(activityC, activityA2, activityB2).forEach { activity ->
+ activityC.runOnUiThread {
+ assertConfigurationLocalesEquals(
+ "Activity ${activity.title}'s effective configuration has locales set",
+ expectedLocales,
+ activityC.effectiveConfiguration!!
+ )
+ }
+ }
+ }
+
+ /**
+ * Regression test for the following scenario:
+ *
+ * If you have a stack of activities where every activity has `android:configChanges="locale"`
+ * and android:configChanges="layoutDirection" and you call
+ * [AppCompatDelegate.setApplicationLocales] from thread other than the top activity,
+ * then it can cause the bottom activity to not receive `onConfigurationChanged`.
+ *
+ * Eg:
+ * - Activity A DOES intercept locales and layoutDirection changes in manifest
+ * - Activity B DOES intercept locales and layoutDirection changes in manifest
+ * - Activity C DOES intercept locales and layoutDirection changes in manifest
+ *
+ * Here is your stack : A > B > C (C on top)
+ *
+ * Call [AppCompatDelegate.setApplicationLocales] with a new mode on activity C (but not
+ * directly
+ * from this activity, ex with RX AndroidSchedulers.mainThread or an handler). Activity C
+ * receives both `onConfigurationChanged` and `onLocalesChanged`, but activities A and B
+ * may not receive either callback or change their configurations.
+ *
+ * Process:
+ * 1. A > B > C > setApplicationLocales YES
+ * 2. Go back to A (B & C destroyed) > B > C > setApplicationLocales NO (wrong config for A)
+ * 3. repeat (YES/NO/YES/NO...)
+ */
+ @Test
+ fun testLocalesWithStackedActivitiesAndNavigation() {
+ val instr = InstrumentationRegistry.getInstrumentation()
+ val result = Instrumentation.ActivityResult(0, Intent())
+ val monitorA = ActivityMonitor(
+ LocalesConfigChangesActivity::class.java.name,
+ result, false
+ )
+ val monitorB = ActivityMonitor(
+ LocalesConfigChangesActivityA::class.java.name,
+ result, false
+ )
+ val monitorC = ActivityMonitor(
+ LocalesConfigChangesActivityB::class.java.name,
+ result, false
+ )
+ instr.addMonitor(monitorA)
+ instr.addMonitor(monitorB)
+ instr.addMonitor(monitorC)
+
+ instr.runOnMainSync {
+ AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+ }
+
+ // Start activity A.
+ instr.startActivitySync(
+ Intent(instr.context, LocalesConfigChangesActivity::class.java).apply {
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ putExtra(LocalesUpdateActivity.KEY_TITLE, "A")
+ }
+ )
+
+ // From activity A, start activity B.
+ val activityA =
+ monitorA.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+ assertNotNull("Activity A started within 3000ms", activityA)
+ activityA.startActivity(
+ Intent(instr.context, LocalesConfigChangesActivityA::class.java).apply {
+ putExtra(LocalesUpdateActivity.KEY_TITLE, "B")
+ }
+ )
+
+ var systemLocales = LocalesUpdateActivity.getConfigLocales(
+ activityA.resources.configuration
+ )
+
+ // Activity A is hidden, wait for it to stop.
+ waitUntilState(activityA, Lifecycle.State.CREATED)
+
+ // From activity B, start activity C.
+ val activityB =
+ monitorB.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+ assertNotNull("Activity B started within 3000ms", activityB)
+ activityB.startActivity(
+ Intent(instr.context, LocalesConfigChangesActivityB::class.java).apply {
+ putExtra(LocalesUpdateActivity.KEY_TITLE, "C")
+ }
+ )
+
+ // Activity B is hidden, wait for it to stop.
+ waitUntilState(activityB, Lifecycle.State.CREATED)
+
+ // Wait for activity C to start.
+ val activityC =
+ monitorC.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+ assertNotNull("Activity C started within 3000ms", activityC)
+
+ // Change locales from a non-UI thread.
+ Handler(Looper.getMainLooper()).post {
+ AppCompatDelegate.setApplicationLocales(CUSTOM_LOCALE_LIST)
+ }
+
+ // Activities A, B, and C should all receive configuration changes.
+ listOf(activityA, activityB, activityC).forEach { activity ->
+ activity.expectOnConfigurationChange(/* timeout= */ 3000)
+ }
+
+ var expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+ CUSTOM_LOCALE_LIST, systemLocales
+ )
+
+ // Activities A, B, and C should have all received the new configuration.
+ listOf(activityA, activityB, activityC).forEach { activity ->
+ activity.runOnUiThread {
+ assertConfigurationLocalesEquals(
+ "Activity ${activity.title}'s effective configuration has locales set",
+ expectedLocales,
+ activity.effectiveConfiguration!!
+ )
+ }
+ }
+
+ // Tear down activities C and B, in that order.
+ listOf(activityC, activityB).forEach { activity ->
+ activity.runOnUiThread {
+ activity.finish()
+ }
+ waitUntilState(activity, Lifecycle.State.DESTROYED)
+ }
+
+ // Activity A is in the foreground, wait for it to resume.
+ waitUntilState(activityA, Lifecycle.State.RESUMED)
+
+ // From activity A, start activity B again.
+ activityA.startActivity(
+ Intent(instr.context, LocalesConfigChangesActivityA::class.java).apply {
+ putExtra(LocalesUpdateActivity.KEY_TITLE, "B2")
+ }
+ )
+
+ // Activity A is hidden, wait for it to stop.
+ waitUntilState(activityA, Lifecycle.State.CREATED)
+
+ // From activity B, start activity C. Double-check the return, since the monitor could
+ // trigger on Activity B's lifecycle if the platform does something unexpected.
+ val activityB2 =
+ monitorB.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+ assertNotSame("Monitor responded to activity B2 lifecycle", activityB, activityB2)
+ assertNotNull("Activity B2 started within 3000ms", activityB2)
+ activityB2.startActivity(
+ Intent(instr.context, LocalesConfigChangesActivityB::class.java).apply {
+ putExtra(LocalesUpdateActivity.KEY_TITLE, "C2")
+ }
+ )
+
+ // Activity B is hidden, wait for it to stop.
+ waitUntilState(activityB2, Lifecycle.State.CREATED)
+
+ // Wait for activity C to start. Double-check the return.
+ val activityC2 =
+ monitorC.waitForActivityWithTimeout(/* timeout= */ 3000) as LocalesUpdateActivity
+ assertNotSame("Monitor responded to Activity C2 lifecycle", activityC, activityC2)
+ assertNotNull("Activity C2 started within 3000ms", activityC2)
+
+ // Prepare activities A, B, and C to track configuration changes.
+ listOf(activityA, activityB2, activityC2).forEach { activity ->
+ activity.resetOnConfigurationChange()
+ }
+
+ // Change locales again from a non-UI thread.
+ Handler(Looper.getMainLooper()).post {
+ AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+ }
+
+ // Activities A, B, and C should all receive configuration changes.
+ listOf(activityA, activityB2, activityC2).forEach { activity ->
+ activity.expectOnConfigurationChange(/* timeout= */ 3000)
+ }
+
+ // Activities A, B, and C should have all received the new configuration.
+ listOf(activityA, activityB2, activityC2).forEach { activity ->
+ activity.runOnUiThread {
+ assertConfigurationLocalesEquals(
+ "Activity ${activity.title}'s effective configuration has locales set",
+ systemLocales,
+ activity.effectiveConfiguration!!
+ )
+ }
+ }
+ }
+
+ private fun expectRecreate(monitor: ActivityMonitor, activity: Activity): Activity {
+ // The documentation says "Block until an Activity is created that matches this monitor."
+ // This statement is true, but there are some other true statements like: "Block until an
+ // Activity is destroyed" or "Block until an Activity is resumed"...
+ var activityResult: Activity?
+ synchronized(monitor) {
+ do {
+ // this call will release synchronization monitor's monitor
+ activityResult = monitor.waitForActivityWithTimeout(/* timeout= */ 3000)
+ } while (activityResult != null && activityResult == activity)
+ }
+
+ assertNotNull("Recreated activity " + activity.title, activityResult)
+ return activityResult!!
+ }
+
+ @After
+ fun teardown() {
+ LocalesUpdateActivity.teardown()
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSyncToFrameworkTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSyncToFrameworkTestCase.kt
new file mode 100644
index 0000000..7c51c8b
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesSyncToFrameworkTestCase.kt
@@ -0,0 +1,177 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@file:Suppress("deprecation")
+
+package androidx.appcompat.app
+
+import android.content.ComponentName
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.os.LocaleList
+import androidx.annotation.RequiresApi
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.core.os.BuildCompat
+import androidx.core.os.LocaleListCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import junit.framework.Assert.assertEquals
+import junit.framework.Assert.assertNull
+import org.junit.After
+import org.junit.Assume.assumeTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * Test case to verify app-locales sync to framework on Version upgrade from Pre T to T.
+ */
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+// This test should only be run for API version T and hence after API bump both
+// minSdkVersion and maxSdkVersion should be set to 33.
+@SdkSuppress(minSdkVersion = 32, maxSdkVersion = 33)
+class LocalesSyncToFrameworkTestCase {
+ @get:Rule
+ val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+ private var systemLocales = LocaleListCompat.getEmptyLocaleList()
+ private var expectedLocales = LocaleListCompat.getEmptyLocaleList()
+ private lateinit var appLocalesComponent: ComponentName
+ private val instrumentation = InstrumentationRegistry.getInstrumentation()
+
+ @RequiresApi(33)
+ @Before
+ fun setUp() {
+ // TODO(b/223775393): Remove BuildCompat.isAtLeastT() checks after API version is
+ // bumped to 33
+ assumeTrue("Requires API version >=T", BuildCompat.isAtLeastT())
+ // setting the app to follow system.
+ AppCompatDelegate.Api33Impl.localeManagerSetApplicationLocales(
+ AppCompatDelegate.getLocaleManagerForApplication(),
+ LocaleList.getEmptyLocaleList()
+ )
+
+ // Since no locales are applied as of now, current configuration will have system
+ // locales.
+ systemLocales = LocalesUpdateActivity.getConfigLocales(
+ rule.activity.resources.configuration
+ )
+ expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(
+ CUSTOM_LOCALE_LIST, systemLocales
+ )
+
+ appLocalesComponent = ComponentName(
+ instrumentation.context,
+ AppLocalesStorageHelper.APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME
+ )
+ }
+
+ @RequiresApi(33)
+ @Test
+ fun testAutoSync_preTToPostT_syncsSuccessfully() {
+ val firstActivity = rule.activity
+
+ // activity is following the system and the requested locales are null.
+ assertConfigurationLocalesEquals(systemLocales, firstActivity)
+ assertNull(AppCompatDelegate.getRequestedAppLocales())
+
+ val context = instrumentation.context
+
+ // persist some app locales in storage, mimicking locales set using the backward
+ // compatibility API
+ AppCompatDelegate.setIsAutoStoreLocalesOptedIn(true)
+ AppLocalesStorageHelper.persistLocales(context, CUSTOM_LOCALE_LIST.toLanguageTags())
+
+ // explicitly disable appLocalesComponent that acts as a marker to represent that the
+ // locales has been synced so that when a new activity is created the locales are
+ // synced from storage
+ context.packageManager.setComponentEnabledSetting(
+ appLocalesComponent,
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ /* flags= */ PackageManager.DONT_KILL_APP
+ )
+
+ // resetting static storage represents a fresh app start up.
+ AppCompatDelegate.resetStaticRequestedAndStoredLocales()
+
+ // Start a new Activity, so that the original Activity goes into the background
+ val intent = Intent(firstActivity, AppCompatActivity::class.java).apply {
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ }
+ val secondActivity = instrumentation.startActivitySync(intent) as AppCompatActivity
+
+ // wait for locales to get synced, stop execution of the current thread for the
+ // timeout period
+ Thread.sleep(/* timeout= */ 1000)
+
+ // check that the locales were set using the framework API and they have been synced
+ // successfully
+ assertEquals(
+ CUSTOM_LOCALE_LIST.toLanguageTags(),
+ AppCompatDelegate.Api33Impl.localeManagerGetApplicationLocales(
+ AppCompatDelegate.getLocaleManagerForApplication()
+ ).toLanguageTags()
+ )
+ // check that the activity has the app specific locales
+ assertConfigurationLocalesEquals(expectedLocales, secondActivity)
+ // check that the override was not done by AndroidX, but by the framework
+ assertNull(AppCompatDelegate.getRequestedAppLocales())
+ // check that the synced marker was set to true
+ assertEquals(
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ context.packageManager.getComponentEnabledSetting(appLocalesComponent)
+ )
+
+ AppCompatDelegate.setIsAutoStoreLocalesOptedIn(false)
+ }
+
+ @After
+ @RequiresApi(33)
+ fun teardown() {
+ // TODO(b/223775393): Remove BuildCompat.isAtLeastT() checks after API version is
+ // bumped to 33
+ if (!BuildCompat.isAtLeastT()) {
+ return
+ }
+ val context = instrumentation.context
+
+ AppCompatDelegate.setIsAutoStoreLocalesOptedIn(true)
+ // setting empty locales deletes the persisted locales record.
+ AppLocalesStorageHelper.persistLocales(context, /* empty locales */ "")
+ AppCompatDelegate.setIsAutoStoreLocalesOptedIn(false)
+
+ // clearing locales from framework.
+ // setting the app to follow system.
+ AppCompatDelegate.Api33Impl.localeManagerSetApplicationLocales(
+ AppCompatDelegate.getLocaleManagerForApplication(),
+ LocaleList.getEmptyLocaleList()
+ )
+
+ // disabling component enabled setting for app_locales sync marker.
+ context.packageManager.setComponentEnabledSetting(
+ appLocalesComponent,
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ /* flags= */ PackageManager.DONT_KILL_APP
+ )
+ }
+}
\ No newline at end of file
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java
new file mode 100644
index 0000000..7678876
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateActivity.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+import static androidx.appcompat.app.LocaleOverlayHelper.combineLocalesIfOverlayExists;
+
+import android.content.res.Configuration;
+import android.os.Build;
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.test.R;
+import androidx.appcompat.testutils.BaseTestActivity;
+import androidx.core.os.LocaleListCompat;
+
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+
+public class LocalesUpdateActivity extends BaseTestActivity {
+
+
+ public static final String KEY_TITLE = "title";
+
+ private final Semaphore mOnConfigurationChangeSemaphore = new Semaphore(0);
+ private final Semaphore mOnDestroySemaphore = new Semaphore(0);
+ private final Semaphore mOnCreateSemaphore = new Semaphore(0);
+
+ private LocaleListCompat mLastLocales = LocaleListCompat.getEmptyLocaleList();
+
+ private Configuration mEffectiveConfiguration;
+ private Configuration mLastConfigurationChange;
+
+ @Override
+ protected int getContentViewLayoutResId() {
+ return R.layout.activity_locales;
+ }
+
+ @Override
+ public void onLocalesChanged(@NonNull LocaleListCompat locales) {
+ mLastLocales = locales;
+ }
+
+ @Override
+ public void onConfigurationChanged(@NonNull Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ mLastConfigurationChange = new Configuration(newConfig);
+ mEffectiveConfiguration = mLastConfigurationChange;
+ mOnConfigurationChangeSemaphore.release();
+ }
+
+ @Override
+ public void onCreate(Bundle bundle) {
+ super.onCreate(bundle);
+
+ String title = getIntent().getStringExtra(KEY_TITLE);
+ if (title != null) {
+ setTitle(title);
+ }
+
+ mEffectiveConfiguration = new Configuration(getResources().getConfiguration());
+ mOnCreateSemaphore.release();
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ mOnDestroySemaphore.release();
+ }
+
+ @Nullable
+ Configuration getLastConfigurationChangeAndClear() {
+ final Configuration config = mLastConfigurationChange;
+ mLastConfigurationChange = null;
+ return config;
+ }
+
+ /**
+ * @return a copy of the {@link Configuration} from the most recent call to {@link #onCreate} or
+ * {@link #onConfigurationChanged}, or {@code null} if neither has been called yet
+ */
+ @Nullable
+ Configuration getEffectiveConfiguration() {
+ return mEffectiveConfiguration;
+ }
+
+ LocaleListCompat getLastLocalesAndReset() {
+ final LocaleListCompat locales = mLastLocales;
+ mLastLocales = LocaleListCompat.getEmptyLocaleList();
+ return locales;
+ }
+
+ public static LocaleListCompat getConfigLocales(Configuration conf) {
+ if (Build.VERSION.SDK_INT >= 24) {
+ return AppCompatDelegateImpl.Api24Impl.getLocales(conf);
+ } else if (Build.VERSION.SDK_INT >= 21) {
+ return LocaleListCompat.forLanguageTags(AppCompatDelegateImpl.Api21Impl
+ .toLanguageTag(conf.locale));
+ } else {
+ return LocaleListCompat.create(conf.locale);
+ }
+ }
+
+ public static LocaleListCompat overlayCustomAndSystemLocales(LocaleListCompat customLocales,
+ LocaleListCompat baseLocales) {
+ if (Build.VERSION.SDK_INT >= 24) {
+ return combineLocalesIfOverlayExists(customLocales, baseLocales);
+ } else {
+ return LocaleListCompat.create(customLocales.get(0));
+ }
+ }
+
+ /**
+ * Resets the number of received configuration changes.
+ * <p>
+ * Call this method before {@link #expectOnConfigurationChange(long)} to ensure only future
+ * configuration changes are counted.
+ */
+ public void resetOnConfigurationChange() {
+ mOnConfigurationChangeSemaphore.drainPermits();
+ }
+
+ /**
+ * Blocks until a single configuration change has been received.
+ * <p>
+ * Configuration changes are sticky; if any configuration changes were received prior to
+ * calling this method and {@link #resetOnConfigurationChange()} has not been called, this
+ * method will return immediately.
+ *
+ * @param timeout maximum amount of time (in ms) to wait for a configuration change
+ * @throws InterruptedException if the lock is interrupted
+ */
+ public void expectOnConfigurationChange(long timeout) throws InterruptedException {
+ if (Thread.currentThread() == getMainLooper().getThread()) {
+ throw new IllegalStateException("Method cannot be called on the Activity's UI thread");
+ }
+
+ mOnConfigurationChangeSemaphore.tryAcquire(timeout, TimeUnit.MILLISECONDS);
+ }
+
+ /**
+ * Resets the number of received onCreate lifecycle events.
+ * <p>
+ * Call this method before {@link #expectOnCreate(long)} to ensure only future
+ * onCreate lifecycle events are counted.
+ */
+ public void resetOnCreate() {
+ mOnCreateSemaphore.drainPermits();
+ }
+
+ /**
+ * Blocks until a single onCreate lifecycle event has been received.
+ * <p>
+ * Lifecycle events are sticky; if any events were received prior to calling this method and
+ * an event has been received, this method will return immediately.
+ *
+ * @param timeout maximum amount of time (in ms) to wait for an onCreate event
+ * @throws InterruptedException if the lock is interrupted
+ */
+ public void expectOnCreate(long timeout) throws InterruptedException {
+ if (Thread.currentThread() == getMainLooper().getThread()) {
+ throw new IllegalStateException("Method cannot be called on the Activity's UI thread");
+ }
+
+ mOnCreateSemaphore.tryAcquire(timeout, TimeUnit.MILLISECONDS);
+ }
+
+ /**
+ * Resets the number of received onDestroy lifecycle events.
+ * <p>
+ * Call this method before {@link #expectOnDestroy(long)} to ensure only future
+ * onDestroy lifecycle events are counted.
+ */
+ public void resetOnDestroy() {
+ mOnDestroySemaphore.drainPermits();
+ }
+
+ /**
+ * Blocks until a single onDestroy lifecycle event has been received.
+ * <p>
+ * Lifecycle events are sticky; if any events were received prior to calling this method and
+ * an event has been received, this method will return immediately.
+ *
+ * @param timeout maximum amount of time (in ms) to wait for an onDestroy event
+ * @throws InterruptedException if the lock is interrupted
+ */
+ public void expectOnDestroy(long timeout) throws InterruptedException {
+ if (Thread.currentThread() == getMainLooper().getThread()) {
+ throw new IllegalStateException("Method cannot be called on the Activity's UI thread");
+ }
+
+ mOnDestroySemaphore.tryAcquire(timeout, TimeUnit.MILLISECONDS);
+ }
+
+ /**
+ * Teardown method to clean up persistent locales in static storage.
+ */
+ public static void teardown() {
+ AppCompatDelegate.resetStaticRequestedAndStoredLocales();
+ }
+
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateTestCase.kt
new file mode 100644
index 0000000..d504dc6
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/LocalesUpdateTestCase.kt
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app
+
+import android.webkit.WebView
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils
+import androidx.appcompat.testutils.LocalesUtils.CUSTOM_LOCALE_LIST
+import androidx.appcompat.testutils.LocalesUtils.assertConfigurationLocalesEquals
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWait
+import androidx.appcompat.testutils.LocalesUtils.setLocalesAndWaitForRecreate
+import androidx.core.os.LocaleListCompat
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.testutils.waitForExecution
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNull
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+
+@LargeTest
+// TODO(b/218430372): Modify SdkSuppress annotation in tests for backward compatibility of
+// setApplicationLocales
+@SdkSuppress(maxSdkVersion = 31)
+class LocalesUpdateTestCase() {
+ @get:Rule
+ val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+ var systemLocales = LocaleListCompat.getEmptyLocaleList()
+ var expectedLocales = LocaleListCompat.getEmptyLocaleList()
+
+ @Before
+ fun setUp() {
+ // Since no locales are applied as of now, current configuration will have system
+ // locales.
+ systemLocales = LocalesUpdateActivity.getConfigLocales(rule.activity
+ .resources.configuration)
+ expectedLocales = LocalesUpdateActivity.overlayCustomAndSystemLocales(CUSTOM_LOCALE_LIST,
+ systemLocales)
+ }
+ @Test
+ fun testDialogDoesNotOverrideActivityConfiguration() {
+ setLocalesAndWaitForRecreate(rule, CUSTOM_LOCALE_LIST)
+ // Now show a AppCompatDialog
+ lateinit var dialog: AppCompatDialog
+ rule.runOnUiThread {
+ dialog = AppCompatDialog(rule.activity)
+ dialog.show()
+ }
+ rule.waitForExecution()
+ // Now dismiss the dialog
+ rule.runOnUiThread { dialog.dismiss() }
+
+ // Assert that the locales are unchanged
+ assertConfigurationLocalesEquals(
+ expectedLocales,
+ rule.activity.resources.configuration
+ )
+ }
+
+ @Test
+ fun testLoadingWebViewMaintainsConfiguration() {
+ setLocalesAndWaitForRecreate(rule, CUSTOM_LOCALE_LIST)
+
+ // Now load a WebView into the Activity
+ rule.runOnUiThread { WebView(rule.activity) }
+
+ // Now assert that the context still has applied locales.
+ assertEquals(
+ expectedLocales,
+ LocalesUpdateActivity.getConfigLocales(rule.activity.resources.configuration)
+ )
+ }
+
+ @Test
+ fun testOnLocalesChangedCalled() {
+ val activity = rule.activity
+ // Set local night mode to YES
+ setLocalesAndWait(rule, CUSTOM_LOCALE_LIST)
+ // Assert that the Activity received a new value
+ assertEquals(expectedLocales, activity.lastLocalesAndReset)
+ }
+
+ @Test
+ fun testOnConfigurationChangeNotCalled() {
+ var activity = rule.activity
+ // Set locales to CUSTOM_LOCALE_LIST.
+ LocalesUtils.setLocalesAndWait(
+ rule,
+ CUSTOM_LOCALE_LIST
+ )
+ // Assert that onConfigurationChange was not called on the original activity
+ assertNull(activity.lastConfigurationChangeAndClear)
+
+ activity = rule.activity
+ // Set locales back to system locales.
+ setLocalesAndWait(
+ rule,
+ LocaleListCompat.getEmptyLocaleList()
+ )
+ // Assert that onConfigurationChange was not called
+ assertNull(activity.lastConfigurationChangeAndClear)
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeForegroundDialogTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeForegroundDialogTestCase.kt
index 2ccfc39..a0e190b 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeForegroundDialogTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeForegroundDialogTestCase.kt
@@ -44,7 +44,7 @@
// Open a dialog on top of the activity.
rule.runOnUiThread {
- val frag = NightModeDialogFragment.newInstance()
+ val frag = TestDialogFragment.newInstance()
frag.show(firstActivity.supportFragmentManager, "dialog")
}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/SystemLocalesMaintainedOnAppLanguageChangeTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/SystemLocalesMaintainedOnAppLanguageChangeTestCase.kt
new file mode 100644
index 0000000..02066e3
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/SystemLocalesMaintainedOnAppLanguageChangeTestCase.kt
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+@file:Suppress("deprecation")
+
+package androidx.appcompat.app
+
+import android.os.LocaleList
+import androidx.appcompat.testutils.LocalesActivityTestRule
+import androidx.appcompat.testutils.LocalesUtils
+import androidx.core.app.LocaleManagerCompat
+import androidx.core.os.BuildCompat
+import androidx.core.os.LocaleListCompat
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.platform.app.InstrumentationRegistry
+import junit.framework.Assert.assertEquals
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+class SystemLocalesMaintainedOnAppLanguageChangeTestCase {
+ @get:Rule
+ val rule = LocalesActivityTestRule(LocalesUpdateActivity::class.java)
+ private var expectedSystemLocales = LocaleListCompat.getEmptyLocaleList()
+
+ @Before
+ fun setUp() {
+ // Since no locales are applied as of now, current configuration will have system
+ // locales.
+ expectedSystemLocales = LocalesUpdateActivity.getConfigLocales(
+ rule.activity.resources.configuration
+ )
+ }
+
+ @Test
+ fun testGetSystemLocales_noAppLocalesSet_systemLocalesSameAsExpectedSystemLocales() {
+ val context = InstrumentationRegistry.getInstrumentation().context
+ assertEquals(expectedSystemLocales, LocaleManagerCompat.getSystemLocales(context))
+ }
+
+ @Test
+ fun testGetSystemLocales_afterAppLocalesSet_systemLocalesSameAsExpectedSystemLocales() {
+ LocalesUtils.setLocalesAndWaitForRecreate(rule.activity, LocalesUtils.CUSTOM_LOCALE_LIST)
+ // verify the custom locales were applied.
+ assertEquals(LocalesUtils.CUSTOM_LOCALE_LIST, AppCompatDelegate.getApplicationLocales())
+
+ val context = InstrumentationRegistry.getInstrumentation().context
+ // verify correct system locales are returned.
+ assertEquals(expectedSystemLocales, LocaleManagerCompat.getSystemLocales(context))
+ }
+
+ @After
+ fun teardown() {
+ if (BuildCompat.isAtLeastT()) {
+ // cleaning up any platform-persisted locales.
+ AppCompatDelegate.Api33Impl.localeManagerSetApplicationLocales(
+ AppCompatDelegate.getLocaleManagerForApplication(),
+ LocaleList.getEmptyLocaleList()
+ )
+ }
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeDialogFragment.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java
similarity index 70%
rename from appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeDialogFragment.java
rename to appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java
index ba3932e..907c068 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeDialogFragment.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/TestDialogFragment.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -23,22 +23,26 @@
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
-public class NightModeDialogFragment extends DialogFragment {
+/**
+ * Test class extending DialogFragment used for testing of configuration changes like nightMode and
+ * locales.
+ */
+public class TestDialogFragment extends DialogFragment {
- public NightModeDialogFragment() {
+ public TestDialogFragment() {
// Public empty constructor used to handle lifecycle events.
}
- public static NightModeDialogFragment newInstance() {
- return new NightModeDialogFragment();
+ public static TestDialogFragment newInstance() {
+ return new TestDialogFragment();
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
- builder.setTitle("NightModeDialogFragment");
- builder.setMessage("NightModeDialogFragment");
+ builder.setTitle("TestDialogFragment");
+ builder.setMessage("TestDialogFragment");
return builder.create();
}
}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivityWithCustomDefault.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivityWithCustomDefault.java
new file mode 100644
index 0000000..f8763e9
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorActivityWithCustomDefault.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app.g3;
+
+import android.content.res.Configuration;
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatDelegate;
+
+import java.util.concurrent.CountDownLatch;
+
+public class FilternatorActivityWithCustomDefault extends AppCompatActivity {
+ public static CountDownLatch configurationLatch = new CountDownLatch(1);
+ public static Exception configurationException = null;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ Configuration initialConfig =
+ new Configuration(getApplication().getResources().getConfiguration());
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
+
+ super.onCreate(savedInstanceState);
+
+ if (!initialConfig.equals(getApplication().getResources().getConfiguration())) {
+ throw new IllegalStateException("Base configuration got messed up");
+ }
+ }
+
+ @Override
+ public void onConfigurationChanged(@NonNull Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+
+ Configuration actualConfig = getResources().getConfiguration();
+ if (actualConfig.equals(newConfig)) {
+ int diff = actualConfig.diff(newConfig);
+ configurationException = new RuntimeException("Configuration changes not correctly "
+ + "reflected in getResources().getConfiguration(), diff is " + diff + ", "
+ + "actual config is " + actualConfig + ", new config is " + newConfig);
+ }
+
+ if (configurationLatch.getCount() > 0) {
+ configurationLatch.countDown();
+ }
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorTestWithCustomDefault.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorTestWithCustomDefault.kt
new file mode 100644
index 0000000..3ef6da9
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/g3/FilternatorTestWithCustomDefault.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app.g3
+
+import androidx.appcompat.Orientation
+import androidx.appcompat.app.AppCompatDelegate
+import androidx.appcompat.withOrientation
+import androidx.lifecycle.Lifecycle
+import androidx.test.ext.junit.rules.ActivityScenarioRule
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.uiautomator.UiDevice
+import androidx.testutils.LifecycleOwnerUtils.waitUntilState
+import androidx.testutils.withActivity
+import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.TimeUnit
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+/**
+ * Regression test for b/236394773, adapted from GmsCore's own tests. The activity used for this
+ * test has been modified to always call AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES).
+ *
+ * The primary purpose of this test is to ensure that the application configuration is not
+ * accidentally modified when we modify the activity configuration.
+ */
+@Suppress("SameParameterValue")
+@LargeTest
+@SdkSuppress(minSdkVersion = 18) // UiDevice
+@RunWith(AndroidJUnit4::class)
+class FilternatorTestWithCustomDefault {
+ @get:Rule
+ val activityRule = ActivityScenarioRule(FilternatorActivityWithCustomDefault::class.java)
+
+ private lateinit var uiDevice: UiDevice
+
+ @Before
+ fun setup() {
+ uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
+
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
+ }
+
+ @After
+ fun teardown() {
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
+ }
+
+ @Test
+ fun testConfigurationUpdatedOnLandscapeMode() {
+ // Wait for the activity to fully start before rotating,
+ // otherwise we won't receive onConfigurationChanged.
+ val activity = activityRule.withActivity { this }
+ waitUntilState(activity, Lifecycle.State.RESUMED)
+
+ // Rotate and wait for the activity to check that
+ // configuration has been properly updated.
+ uiDevice.withOrientation(Orientation.LEFT) {
+ FilternatorActivity.configurationLatch.await(5000, TimeUnit.MILLISECONDS)
+ assertThat(FilternatorActivity.configurationException).isNull()
+ }
+ }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/LocalesActivityTestRule.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/LocalesActivityTestRule.kt
new file mode 100644
index 0000000..976fac7
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/LocalesActivityTestRule.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.testutils
+
+import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatDelegate
+import androidx.appcompat.app.LocalesUpdateActivity
+import androidx.appcompat.testutils.LocalesUtils.initCustomLocaleList
+import androidx.core.os.LocaleListCompat
+
+@Suppress("DEPRECATION")
+class LocalesActivityTestRule<T : AppCompatActivity>(
+ activityClazz: Class<T>,
+ initialTouchMode: Boolean = false,
+ launchActivity: Boolean = true
+) : androidx.test.rule.ActivityTestRule<T>(activityClazz, initialTouchMode, launchActivity) {
+ override fun beforeActivityLaunched() {
+ initCustomLocaleList()
+ // By default we'll set the locales to match system locales, which allows us to make better
+ // assumptions in the test below.
+ runOnUiThread {
+ AppCompatDelegate.setApplicationLocales(LocaleListCompat.getEmptyLocaleList())
+ }
+ }
+
+ override fun afterActivityFinished() {
+ // Reset locales persisted in static storage.
+ LocalesUpdateActivity.teardown()
+ }
+}
\ No newline at end of file
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/LocalesUtils.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/LocalesUtils.kt
new file mode 100644
index 0000000..36dd7ea
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/LocalesUtils.kt
@@ -0,0 +1,165 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.testutils
+
+import android.content.Context
+import android.content.res.Configuration
+import android.os.Build
+import android.util.Log
+import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatDelegate
+import androidx.core.os.LocaleListCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.testutils.LifecycleOwnerUtils
+import androidx.testutils.PollingCheck
+import java.util.Locale
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotEquals
+
+object LocalesUtils {
+ private const val LOG_TAG = "LocalesUtils"
+
+ /**
+ * A test {@link LocaleListCompat} containing locales [CANADA_FRENCH, CHINESE].
+ */
+ var CUSTOM_LOCALE_LIST: LocaleListCompat = LocaleListCompat.getEmptyLocaleList()
+
+ fun initCustomLocaleList() {
+ if (Build.VERSION.SDK_INT >= 24) {
+ CUSTOM_LOCALE_LIST = LocaleListCompat.forLanguageTags(
+ Locale.CANADA_FRENCH.toLanguageTag() + "," +
+ Locale.CHINESE.toLanguageTag()
+ )
+ } else {
+ CUSTOM_LOCALE_LIST = LocaleListCompat.create(Locale.CHINESE)
+ }
+ }
+
+ fun assertConfigurationLocalesEquals(
+ expectedLocales: LocaleListCompat,
+ context: Context
+ ) {
+ assertConfigurationLocalesEquals(
+ null,
+ expectedLocales,
+ context
+ )
+ }
+
+ fun assertConfigurationLocalesEquals(
+ message: String?,
+ expectedLocales: LocaleListCompat,
+ context: Context
+ ) {
+ assertConfigurationLocalesEquals(
+ message,
+ expectedLocales,
+ context.resources.configuration
+ )
+ }
+
+ fun assertConfigurationLocalesEquals(
+ expectedLocales: LocaleListCompat,
+ configuration: Configuration
+ ) {
+ assertConfigurationLocalesEquals(
+ null,
+ expectedLocales,
+ configuration
+ )
+ }
+
+ fun assertConfigurationLocalesEquals(
+ message: String?,
+ expectedLocales: LocaleListCompat,
+ configuration: Configuration
+ ) {
+ if (Build.VERSION.SDK_INT >= 24) {
+ assertEquals(
+ message,
+ expectedLocales.toLanguageTags(),
+ configuration.locales.toLanguageTags()
+ )
+ } else {
+ assertEquals(
+ message,
+ expectedLocales.get(0),
+ @Suppress("DEPRECATION") configuration.locale
+ )
+ }
+ }
+
+ fun <T : AppCompatActivity> setLocalesAndWait(
+ @Suppress("DEPRECATION") activityRule: androidx.test.rule.ActivityTestRule<T>,
+ locales: LocaleListCompat
+ ) {
+ setLocalesAndWait(activityRule.activity, activityRule, locales)
+ }
+
+ fun <T : AppCompatActivity> setLocalesAndWait(
+ activity: AppCompatActivity?,
+ @Suppress("DEPRECATION") activityRule: androidx.test.rule.ActivityTestRule<T>,
+ locales: LocaleListCompat
+ ) {
+ Log.d(
+ LOG_TAG,
+ "setLocalesAndWait on Activity: " + activity +
+ " to locales: " + locales
+ )
+
+ val instrumentation = InstrumentationRegistry.getInstrumentation()
+ activityRule.runOnUiThread { setLocales(locales) }
+ instrumentation.waitForIdleSync()
+ }
+
+ fun <T : AppCompatActivity> setLocalesAndWaitForRecreate(
+ @Suppress("DEPRECATION") activityRule: androidx.test.rule.ActivityTestRule<T>,
+ locales: LocaleListCompat
+ ): T = setLocalesAndWaitForRecreate(activityRule.activity, locales)
+
+ fun <T : AppCompatActivity> setLocalesAndWaitForRecreate(
+ activity: T,
+ locales: LocaleListCompat
+ ): T {
+ Log.d(
+ LOG_TAG,
+ "setLocalesAndWaitForRecreate on Activity: " + activity +
+ " to mode: " + locales
+ )
+
+ LifecycleOwnerUtils.waitUntilState(activity, Lifecycle.State.RESUMED)
+
+ // Screen rotation kicks off a lot of background work, so we might need to wait a bit
+ // between the activity reaching RESUMED state and it actually being shown on screen.
+ PollingCheck.waitFor {
+ activity.hasWindowFocus()
+ }
+ assertNotEquals(locales, getLocales())
+
+ // Now perform locales change and wait for the Activity to be recreated.
+ return LifecycleOwnerUtils.waitForRecreation(activity) {
+ setLocales(locales)
+ }
+ }
+
+ fun setLocales(
+ locales: LocaleListCompat
+ ) = AppCompatDelegate.setApplicationLocales(locales)
+
+ private fun getLocales(): LocaleListCompat = AppCompatDelegate.getApplicationLocales()
+}
\ No newline at end of file
diff --git a/appcompat/appcompat/src/androidTest/res/layout/activity_locales.xml b/appcompat/appcompat/src/androidTest/res/layout/activity_locales.xml
new file mode 100644
index 0000000..cbbdf80
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/res/layout/activity_locales.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Copyright 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/text_locales"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="locales" />
+
+ <WebView
+ android:id="@+id/webView"
+ android:layout_width="match_parent"
+ android:layout_height="100dp"
+ android:layout_gravity="bottom" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
index 981c192..a81cb3c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
@@ -45,6 +45,7 @@
import androidx.core.app.ActivityCompat;
import androidx.core.app.NavUtils;
import androidx.core.app.TaskStackBuilder;
+import androidx.core.os.LocaleListCompat;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewTreeLifecycleOwner;
import androidx.lifecycle.ViewTreeViewModelStoreOwner;
@@ -225,14 +226,16 @@
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
- if (mResources != null) {
- // The real (and thus managed) resources object was already updated
- // by ResourcesManager, so pull the current metrics from there.
- final DisplayMetrics newMetrics = super.getResources().getDisplayMetrics();
- mResources.updateConfiguration(newConfig, newMetrics);
- }
-
+ // The delegate may modify the real resources object or the config param to implement its
+ // desired configuration overrides. Let it do it's thing and then use the resulting state.
getDelegate().onConfigurationChanged(newConfig);
+
+ // Manually propagate configuration changes to our unmanaged resources object.
+ if (mResources != null) {
+ final Configuration currConfig = super.getResources().getConfiguration();
+ final DisplayMetrics currMetrics = super.getResources().getDisplayMetrics();
+ mResources.updateConfiguration(currConfig, currMetrics);
+ }
}
@Override
@@ -662,4 +665,13 @@
*/
protected void onNightModeChanged(@NightMode int mode) {
}
+
+ /**
+ * Called when the locales have been changed. See {@link AppCompatDelegate#applyAppLocales()}
+ * for more information.
+ *
+ * @param locales the localeListCompat which has been applied
+ */
+ protected void onLocalesChanged(@NonNull LocaleListCompat locales) {
+ }
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
index fc04398..e02fd89 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegate.java
@@ -17,12 +17,21 @@
package androidx.appcompat.app;
import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
+import static androidx.appcompat.app.AppLocalesStorageHelper.persistLocales;
+import static androidx.appcompat.app.AppLocalesStorageHelper.readLocales;
+import static androidx.appcompat.app.AppLocalesStorageHelper.syncLocalesToFramework;
+
+import static java.util.Objects.requireNonNull;
import android.app.Activity;
import android.app.Dialog;
+import android.app.LocaleManager;
import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.ServiceInfo;
import android.content.res.Configuration;
import android.os.Bundle;
+import android.os.LocaleList;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MenuInflater;
@@ -30,19 +39,25 @@
import android.view.ViewGroup;
import android.view.Window;
+import androidx.annotation.AnyThread;
import androidx.annotation.CallSuper;
+import androidx.annotation.DoNotInline;
import androidx.annotation.IdRes;
import androidx.annotation.IntDef;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.annotation.StyleRes;
+import androidx.annotation.VisibleForTesting;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.Toolbar;
import androidx.appcompat.widget.VectorEnabledTintResources;
import androidx.collection.ArraySet;
+import androidx.core.os.BuildCompat;
+import androidx.core.os.LocaleListCompat;
import androidx.core.view.WindowCompat;
import androidx.fragment.app.FragmentActivity;
@@ -95,6 +110,10 @@
static final boolean DEBUG = false;
static final String TAG = "AppCompatDelegate";
+ static AppLocalesStorageHelper.SerialExecutor sSerialExecutorForLocalesStorage = new
+ AppLocalesStorageHelper.SerialExecutor(
+ new AppLocalesStorageHelper.ThreadPerTaskExecutor());
+
/**
* Mode which uses the system's night mode setting to determine if it is night or not.
*
@@ -165,6 +184,13 @@
@NightMode
private static int sDefaultNightMode = MODE_NIGHT_UNSPECIFIED;
+ private static LocaleListCompat sRequestedAppLocales = null;
+ private static LocaleListCompat sStoredAppLocales = null;
+ private static Boolean sIsAutoStoreLocalesOptedIn = null;
+ private static boolean sIsFrameworkSyncChecked = false;
+ private static Object sLocaleManager = null;
+ private static Context sAppContext = null;
+
/**
* All AppCompatDelegate instances associated with a "live" Activity, e.g. lifecycle state is
* post-onCreate and pre-onDestroy. These instances are used to instrument night mode's uiMode
@@ -173,6 +199,7 @@
private static final ArraySet<WeakReference<AppCompatDelegate>> sActivityDelegates =
new ArraySet<>();
private static final Object sActivityDelegatesLock = new Object();
+ private static final Object sAppLocalesStorageSyncLock = new Object();
/** @hide */
@SuppressWarnings("deprecation")
@@ -521,6 +548,31 @@
public abstract boolean applyDayNight();
/**
+ * Applies the current locales to this delegate's host component.
+ *
+ * <p>Apps can be notified when the locales are changed by overriding the
+ * {@link AppCompatActivity#onLocalesChanged(LocaleListCompat)} method.</p>
+ *
+ * <p>This is a default implementation and it is overridden atin
+ * {@link AppCompatDelegateImpl#applyAppLocales()} </p>
+ *
+ * @see #setApplicationLocales(LocaleListCompat)
+ *
+ * @return true if requested app-specific locales were applied, false if not.
+ */
+ boolean applyAppLocales() {
+ return false;
+ }
+
+ /**
+ * Returns the context for the current delegate.
+ */
+ @Nullable
+ public Context getContextForDelegate() {
+ return null;
+ }
+
+ /**
* Override the night mode used for this delegate's host component.
*
* <p>When setting a mode to be used across an entire app, the
@@ -595,6 +647,113 @@
}
/**
+ * Sets the current locales for the calling app.
+ *
+ * <p>If this method is called after any host components with attached
+ * {@link AppCompatDelegate}s have been 'created', a {@link LocaleList} configuration
+ * change will occur in each. This may result in those components being recreated, depending
+ * on their manifest configuration.</p>
+ *
+ * <p>This method accepts {@link LocaleListCompat} as an input parameter.</p>
+ *
+ * <p>Apps should continue to read Locales via their in-process {@link LocaleList}s.</p>
+ *
+ * <p>Pass a {@link LocaleListCompat#getEmptyLocaleList()} to reset to the system locale.</p>
+ *
+ * <p>On API level 33 and above, this API will handle storage automatically.</p>
+ *
+ * <p>For API levels below that, the developer has two options:</p>
+ * <ul>
+ * <li>They can opt-in to automatic storage handled through the library. They can do this by
+ * adding a special metaData entry in their {@code AndroidManifest.xml}, similar to :
+ * <pre><code>
+ * <service
+ * android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
+ * android:enabled="false"
+ * android:exported="false">
+ * <meta-data
+ * android:name="autoStoreLocales"
+ * android:value="true" />
+ * </service>
+ * </code></pre>
+ * They should be mindful that this will cause a blocking diskRead and diskWrite
+ * strictMode violation, and they might need to suppress it at their end.</li>
+ *
+ * <li>The second option is that they can choose to handle storage themselves. In order to
+ * do so they must use this API to initialize locales during app-start up and provide
+ * their stored locales. In this case, API should be called before Activity.onCreate()
+ * in the activity lifecycle, e.g. in attachBaseContext().
+ * <b>Note: Developers should gate this to API versions < 33.</b></li>
+ * </ul>
+ *
+ * <p>When the application using this API with API versions < 33 updates to a
+ * version >= 33, then there can be two scenarios for this transition:
+ * <ul>
+ * <li>If the developer has opted-in for autoStorage then the locales will be automatically
+ * synced to the framework. Developers must specify android:enabled="false" for the
+ * AppLocalesMetadataHolderService as shown in the meta-data entry above.</li>
+ * <li>If the developer has not opted-in for autoStorage then they will need to handle
+ * this transition on their end.</li>
+ * </ul>
+ *
+ * @param locales a list of locales.
+ */
+ @OptIn(markerClass = androidx.core.os.BuildCompat.PrereleaseSdkCheck.class)
+ public static void setApplicationLocales(@NonNull LocaleListCompat locales) {
+ requireNonNull(locales);
+ if (BuildCompat.isAtLeastT()) {
+ // If the API version is 33 (version for T) or above we want to redirect the call to
+ // the framework API.
+ Object localeManager = getLocaleManagerForApplication();
+ if (localeManager != null) {
+ Api33Impl.localeManagerSetApplicationLocales(localeManager,
+ Api24Impl.localeListForLanguageTags(locales.toLanguageTags()));
+ }
+ } else {
+ if (DEBUG) {
+ Log.d(TAG, String.format("sRequestedAppLocales. New:%s, Current:%s",
+ locales, sRequestedAppLocales));
+ }
+ if (!locales.equals(sRequestedAppLocales)) {
+ synchronized (sActivityDelegatesLock) {
+ sRequestedAppLocales = locales;
+ applyLocalesToActiveDelegates();
+ }
+ } else if (DEBUG) {
+ Log.d(TAG, String.format("Not applying changes, sRequestedAppLocales is already %s",
+ locales));
+ }
+ }
+ }
+
+ /**
+ * Returns application locales for the calling app as a {@link LocaleListCompat}.
+ *
+ * <p>Returns a {@link LocaleListCompat#getEmptyLocaleList()} if no app-specific locales are
+ * set.
+ */
+ @AnyThread
+ @NonNull
+ @OptIn(markerClass = androidx.core.os.BuildCompat.PrereleaseSdkCheck.class)
+ public static LocaleListCompat getApplicationLocales() {
+ if (BuildCompat.isAtLeastT()) {
+ // If the API version is 33 or above we want to redirect the call to the framework API.
+ Object localeManager = getLocaleManagerForApplication();
+ if (localeManager != null) {
+ return LocaleListCompat.wrap(Api33Impl.localeManagerGetApplicationLocales(
+ localeManager));
+ }
+ } else {
+ if (sRequestedAppLocales != null) {
+ // If app-specific locales exists then sRequestedApplicationLocales contains the
+ // latest locales.
+ return sRequestedAppLocales;
+ }
+ }
+ return LocaleListCompat.getEmptyLocaleList();
+ }
+
+ /**
* Returns the default night mode.
*
* @see #setDefaultNightMode(int)
@@ -605,6 +764,183 @@
}
/**
+ * Returns the requested app locales.
+ *
+ * @see #setApplicationLocales(LocaleListCompat)
+ */
+ @Nullable
+ static LocaleListCompat getRequestedAppLocales() {
+ return sRequestedAppLocales;
+ }
+
+ /**
+ * Returns the stored app locales.
+ *
+ * @see #setApplicationLocales(LocaleListCompat)
+ */
+ @Nullable
+ static LocaleListCompat getStoredAppLocales() {
+ return sStoredAppLocales;
+ }
+
+ /**
+ * Resets the static variables for requested and stored locales to null. This method is used
+ * for testing as it mimics activity restart which is difficult to do in a test.
+ */
+ @VisibleForTesting
+ static void resetStaticRequestedAndStoredLocales() {
+ sRequestedAppLocales = null;
+ sStoredAppLocales = null;
+ }
+
+ /**
+ * Sets {@link AppCompatDelegate#sIsAutoStoreLocalesOptedIn} to the provided value. This method
+ * is used for testing, setting sIsAutoStoreLocalesOptedIn to true mimics adding an opt-in
+ * "autoStoreLocales" meta-data entry.
+ *
+ * see {@link AppCompatDelegate#setApplicationLocales(LocaleListCompat)}.
+ */
+ @VisibleForTesting
+ static void setIsAutoStoreLocalesOptedIn(boolean isAutoStoreLocalesOptedIn) {
+ sIsAutoStoreLocalesOptedIn = isAutoStoreLocalesOptedIn;
+ }
+
+ /**
+ * Returns the localeManager for the current application using active delegates to fetch
+ * context, returns null if no active delegates present.
+ */
+ @RequiresApi(33)
+ static Object getLocaleManagerForApplication() {
+ if (sLocaleManager != null) {
+ return sLocaleManager;
+ }
+ // Traversing through the active delegates to retrieve context for any one non null
+ // delegate.
+ // This context is used to create a localeManager which is saved as a static variable to
+ // reduce multiple object creation for different activities.
+ if (sAppContext == null) {
+ for (WeakReference<AppCompatDelegate> activeDelegate : sActivityDelegates) {
+ final AppCompatDelegate delegate = activeDelegate.get();
+ if (delegate != null) {
+ Context context = delegate.getContextForDelegate();
+ if (context != null) {
+ sAppContext = context;
+ break;
+ }
+ }
+ }
+ }
+
+ if (sAppContext != null) {
+ sLocaleManager = sAppContext.getSystemService(Context.LOCALE_SERVICE);
+ }
+ return sLocaleManager;
+ }
+
+ /**
+ * Returns true is the "autoStoreLocales" metaData is marked true in the app manifest.
+ */
+ static boolean isAutoStorageOptedIn(Context context) {
+ if (sIsAutoStoreLocalesOptedIn == null) {
+ try {
+ ServiceInfo serviceInfo = AppLocalesMetadataHolderService.getServiceInfo(
+ context);
+ if (serviceInfo.metaData != null) {
+ sIsAutoStoreLocalesOptedIn = serviceInfo.metaData.getBoolean(
+ /* key= */ "autoStoreLocales");
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.d(TAG, "Checking for metadata for AppLocalesMetadataHolderService "
+ + ": Service not found");
+ sIsAutoStoreLocalesOptedIn = false;
+ }
+ }
+ return sIsAutoStoreLocalesOptedIn;
+ }
+
+ /**
+ * Executes {@link AppCompatDelegate#syncRequestedAndStoredLocales(Context)} asynchronously
+ * on a worker thread, serialized using {@link
+ * AppCompatDelegate#sSerialExecutorForLocalesStorage}.
+ *
+ * <p>This is done to perform the storage read operation without blocking the main thread.</p>
+ */
+ void asyncExecuteSyncRequestedAndStoredLocales(Context context) {
+ sSerialExecutorForLocalesStorage.execute(() -> syncRequestedAndStoredLocales(context));
+ }
+
+ /**
+ * Syncs requested and persisted app-specific locales.
+ *
+ * <p>This sync is only performed if the developer has opted in to use the autoStoredLocales
+ * feature, marked by the metaData "autoStoreLocales" wrapped in the service
+ * "AppLocalesMetadataHolderService". If the metaData is not found in the manifest or holds
+ * the value false then we return from this function without doing anything. If the metaData
+ * is set to true, then we perform a sync for app-locales.</p>
+ *
+ * <p>If the API version is >=33, then the storage is checked for app-specific locales, if
+ * found they are synced to the framework by calling the
+ * {@link AppCompatDelegate#setApplicationLocales(LocaleListCompat)}</p>
+ *
+ * <p>If the API version is <33, then there are two scenarios:</p>
+ * <ul>
+ * <li>If the requestedAppLocales are not set then the app-specific locales are read from
+ * storage. If persisted app-specific locales are found then they are used to
+ * update the requestedAppLocales.</li>
+ * <li>If the requestedAppLocales are populated and are different from the stored locales
+ * then in that case the requestedAppLocales are stored and the static variable for
+ * storedAppLocales is updated accordingly.</li>
+ * </ul>
+ */
+ @OptIn(markerClass = androidx.core.os.BuildCompat.PrereleaseSdkCheck.class)
+ static void syncRequestedAndStoredLocales(Context context) {
+ if (!isAutoStorageOptedIn(context)) {
+ return;
+ } else if (BuildCompat.isAtLeastT()) {
+ // TODO: After BuildCompat.isAtLeast() is deprecated, the above condition needs to be
+ // replaced by (Build.VERSION.SDK_INT == 33).
+ if (!sIsFrameworkSyncChecked) {
+ // syncs locales from androidX to framework, it only happens once after the
+ // device is updated to T (API version 33).
+ sSerialExecutorForLocalesStorage.execute(() -> {
+ syncLocalesToFramework(context);
+ sIsFrameworkSyncChecked = true;
+ });
+ }
+ } else {
+ synchronized (sAppLocalesStorageSyncLock) {
+ if (sRequestedAppLocales == null) {
+ if (sStoredAppLocales == null) {
+ sStoredAppLocales =
+ LocaleListCompat.forLanguageTags(readLocales(context));
+ }
+ if (sStoredAppLocales.isEmpty()) {
+ // if both requestedLocales and storedLocales not set, then the user has not
+ // specified any application-specific locales. So no alterations in current
+ // application locales should take place.
+ return;
+ }
+ sRequestedAppLocales = sStoredAppLocales;
+ } else if (!sRequestedAppLocales.equals(sStoredAppLocales)) {
+ // if requestedLocales is set and is not equal to the storedLocales then in this
+ // case we need to store these locales in storage.
+ sStoredAppLocales = sRequestedAppLocales;
+ persistLocales(context, sRequestedAppLocales.toLanguageTags());
+ }
+ }
+ }
+ }
+
+
+ /**
+ * Sets the value for {@link AppCompatDelegate#sAppContext} which is the context for the
+ * current application.
+ */
+ static void setAppContext(Context context) {
+ sAppContext = context;
+ }
+
+ /**
* Sets whether vector drawables on older platforms (< API 21) can be used within
* {@link android.graphics.drawable.DrawableContainer} resources.
*
@@ -695,4 +1031,48 @@
}
}
}
+
+ private static void applyLocalesToActiveDelegates() {
+ for (WeakReference<AppCompatDelegate> activeDelegate : sActivityDelegates) {
+ final AppCompatDelegate delegate = activeDelegate.get();
+ if (delegate != null) {
+ if (DEBUG) {
+ Log.d(TAG, "applyLocalesToActiveDelegates. Applying to " + delegate);
+ }
+ delegate.applyAppLocales();
+ }
+ }
+ }
+
+ @RequiresApi(24)
+ static class Api24Impl {
+ private Api24Impl() {
+ // This class is not instantiable.
+ }
+
+ @DoNotInline
+ static LocaleList localeListForLanguageTags(String list) {
+ return LocaleList.forLanguageTags(list);
+ }
+ }
+
+ @RequiresApi(33)
+ static class Api33Impl {
+ private Api33Impl() {
+ // This class is not instantiable.
+ }
+
+ @DoNotInline
+ static void localeManagerSetApplicationLocales(Object localeManager,
+ LocaleList locales) {
+ LocaleManager mLocaleManager = (LocaleManager) localeManager;
+ mLocaleManager.setApplicationLocales(locales);
+ }
+
+ @DoNotInline
+ static LocaleList localeManagerGetApplicationLocales(Object localeManager) {
+ LocaleManager mLocaleManager = (LocaleManager) localeManager;
+ return mLocaleManager.getApplicationLocales();
+ }
+ }
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
index 8219742..dfa91ee7 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
@@ -24,6 +24,7 @@
import static android.view.Window.FEATURE_OPTIONS_PANEL;
import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+import static androidx.appcompat.app.LocaleOverlayHelper.combineLocalesIfOverlayExists;
import android.annotation.SuppressLint;
import android.app.Activity;
@@ -75,6 +76,7 @@
import android.widget.TextView;
import androidx.annotation.CallSuper;
+import androidx.annotation.DoNotInline;
import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -109,6 +111,7 @@
import androidx.core.app.NavUtils;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
+import androidx.core.os.LocaleListCompat;
import androidx.core.util.ObjectsCompat;
import androidx.core.view.KeyEventDispatcher;
import androidx.core.view.LayoutInflaterCompat;
@@ -125,6 +128,7 @@
import org.xmlpull.v1.XmlPullParser;
import java.util.List;
+import java.util.Locale;
/**
* @hide
@@ -258,9 +262,8 @@
private int mLocalNightMode = MODE_NIGHT_UNSPECIFIED;
private int mThemeResId;
- private boolean mActivityHandlesUiMode;
- private boolean mActivityHandlesUiModeChecked;
-
+ private int mActivityHandlesConfigFlags;
+ private boolean mActivityHandlesConfigFlagsChecked;
private AutoNightModeManager mAutoTimeNightModeManager;
private AutoNightModeManager mAutoBatteryNightModeManager;
@@ -360,13 +363,22 @@
final int modeToApply = mapNightMode(baseContext, calculateNightMode());
+ if (isAutoStorageOptedIn(baseContext)) {
+ // If the developer has opted in to auto store the locales, then we use
+ // syncRequestedAndStoredLocales() to load the saved locales from storage. This is
+ // performed only during cold app start-ups because in other cases the locales can be
+ // found in the static storage.
+ syncRequestedAndStoredLocales(baseContext);
+ }
+ final LocaleListCompat localesToApply = calculateApplicationLocales(baseContext);
+
// If the base context is a ContextThemeWrapper (thus not an Application context)
// and nobody's touched its Resources yet, we can shortcut and directly apply our
// override configuration.
if (sCanApplyOverrideConfiguration
&& baseContext instanceof android.view.ContextThemeWrapper) {
- final Configuration config = createOverrideConfigurationForDayNight(
- baseContext, modeToApply, null);
+ final Configuration config = createOverrideAppConfiguration(
+ baseContext, modeToApply, localesToApply, null, false);
if (DEBUG) {
Log.d(TAG, String.format("Attempting to apply config to base context: %s",
config.toString()));
@@ -385,8 +397,8 @@
// Again, but using the AppCompat version of ContextThemeWrapper.
if (baseContext instanceof ContextThemeWrapper) {
- final Configuration config = createOverrideConfigurationForDayNight(
- baseContext, modeToApply, null);
+ final Configuration config = createOverrideAppConfiguration(
+ baseContext, modeToApply, localesToApply, null, false);
if (DEBUG) {
Log.d(TAG, String.format("Attempting to apply config to base context: %s",
config.toString()));
@@ -442,8 +454,8 @@
}
}
- final Configuration config = createOverrideConfigurationForDayNight(
- baseContext, modeToApply, configOverlay);
+ final Configuration config = createOverrideAppConfiguration(
+ baseContext, modeToApply, localesToApply, configOverlay, true);
if (DEBUG) {
Log.d(TAG, String.format("Applying night mode using ContextThemeWrapper and "
+ "applyOverrideConfiguration(). Config: %s", config.toString()));
@@ -497,9 +509,9 @@
// Dialogs, etc
mBaseContextAttached = true;
- // Our implicit call to applyDayNight() should not recreate until after the Activity is
- // created
- applyDayNight(false);
+ // Our implicit call to applyApplicationSpecificConfig() should not recreate
+ // until after the Activity is created
+ applyApplicationSpecificConfig(false);
// We lazily fetch the Window for Activities, to allow DayNight to apply in
// attachBaseContext
@@ -661,16 +673,38 @@
// inspects the last-seen configuration. Otherwise, we'll recurse back to this method.
mEffectiveConfiguration = new Configuration(mContext.getResources().getConfiguration());
- // Re-apply Day/Night with the new configuration but disable recreations. Since this
- // configuration change has only just happened we can safely just update the resources now
- applyDayNight(false);
+ // Re-apply Day/Night with the new configuration but disable recreations.
+ // Since this configuration change has only just happened we can safely just update the
+ // resources now.
+ // For locales, no re-application is required since locales must have already been applied
+ // to the configuration when AppCompatDelegate.setApplicationLocales() is called.
+ // Also, in the case where an invalid locale is passed at the top position in the input
+ // locales, framework re-adjusts the list to bring forward the most suitable locale in
+ // the configuration. Therefore if we apply the new locales here again, the code will get
+ // stuck in a loop of attempted re-application since the configuration locales are never
+ // the same as we applied. The same thing is valid during the case when configChanges are
+ // handled by the application.
+ applyApplicationSpecificConfig(false,
+ /* isLocalesApplicationRequired */ false);
+
+ // We may have just changed the resource configuration. Make sure that everyone after us
+ // sees the same configuration by modifying the parameter's internal state.
+ newConfig.updateFrom(mContext.getResources().getConfiguration());
}
@Override
public void onStart() {
// This will apply day/night if the time has changed, it will also call through to
- // setupAutoNightModeIfNeeded()
- applyDayNight();
+ // setupAutoNightModeIfNeeded().
+ // For locales, no re-application is required since the requested locales must have
+ // already been updated before this point in activity lifecycle.
+ // Also, in the case where an invalid locale is passed at the top position in the input
+ // locales, framework re-adjusts the list to bring forward the most suitable locale in
+ // the configuration. Therefore if we apply the new locales here again, the code will get
+ // stuck in a loop of attempted re-application since the configuration locales are never
+ // the same as we applied.
+ applyApplicationSpecificConfig(true,
+ /* isLocalesApplicationRequired */false);
}
@Override
@@ -2369,15 +2403,50 @@
}
@Override
- public boolean applyDayNight() {
- return applyDayNight(true);
+ public Context getContextForDelegate() {
+ return mContext;
}
+ @Override
+ public boolean applyDayNight() {
+ return applyApplicationSpecificConfig(true);
+ }
+
+ @Override
+ boolean applyAppLocales() {
+ // This method is only reached when there is an explicit call to setApplicationLocales().
+ if (isAutoStorageOptedIn(mContext)
+ && getRequestedAppLocales() != null
+ && !getRequestedAppLocales().equals(getStoredAppLocales())) {
+ // If the developer has opted in to autoStore the locales, we need to store the locales
+ // for the application here. This is done using the syncRequestedAndStoredLocales,
+ // called asynchronously on a worker thread.
+ asyncExecuteSyncRequestedAndStoredLocales(mContext);
+ }
+ return applyApplicationSpecificConfig(true);
+ }
+
+ /**
+ * Applies application configuration to the activity.
+ */
+ private boolean applyApplicationSpecificConfig(final boolean allowRecreation) {
+ return applyApplicationSpecificConfig(allowRecreation,
+ /* isLocalesApplicationRequired */ true);
+ }
+
+ /**
+ * Applies application configuration to the activity.
+ *
+ * <p>By passing appropriate values to the input parameter {@param isLocalesApplicationRequired}
+ * application of locales config on the current activity can be triggered or suppressed.</p>
+ */
@SuppressWarnings("deprecation")
- private boolean applyDayNight(final boolean allowRecreation) {
+ private boolean applyApplicationSpecificConfig(final boolean allowRecreation,
+ final boolean isLocalesApplicationRequired) {
if (mDestroyed) {
if (DEBUG) {
- Log.d(TAG, "applyDayNight. Skipping because host is destroyed");
+ Log.d(TAG, "applyApplicationSpecificConfig. Skipping because host is "
+ + "destroyed");
}
// If we're destroyed, ignore the call
return false;
@@ -2385,7 +2454,23 @@
@NightMode final int nightMode = calculateNightMode();
@ApplyableNightMode final int modeToApply = mapNightMode(mContext, nightMode);
- final boolean applied = updateForNightMode(modeToApply, allowRecreation);
+
+ LocaleListCompat localesToBeApplied = null;
+ if (Build.VERSION.SDK_INT < 33) {
+ localesToBeApplied = calculateApplicationLocales(mContext);
+ }
+
+ if (!isLocalesApplicationRequired && localesToBeApplied != null) {
+ // Reaching here would mean that the requested locales has already been applied and
+ // no modification is required. Hence, localesToBeApplied is kept same as the current
+ // configuration locales.
+ localesToBeApplied =
+ getConfigurationLocales(mContext.getResources()
+ .getConfiguration());
+ }
+
+ final boolean applied = updateAppConfiguration(modeToApply, localesToBeApplied,
+ allowRecreation);
if (nightMode == MODE_NIGHT_AUTO_TIME) {
getAutoTimeNightModeManager(mContext).setup();
@@ -2403,6 +2488,50 @@
return applied;
}
+ /**
+ * Returns the required {@link LocaleListCompat} for the current application. This method
+ * checks for requested app-specific locales and returns them after an overlay
+ * with the system locales. If requested app-specific do not exist, it returns a null.
+ */
+ @Nullable
+ LocaleListCompat calculateApplicationLocales(@NonNull Context context) {
+ if (Build.VERSION.SDK_INT >= 33) {
+ return null;
+ }
+ LocaleListCompat requestedLocales = getRequestedAppLocales();
+ if (requestedLocales == null) {
+ return null;
+ }
+ LocaleListCompat systemLocales = getConfigurationLocales(
+ context.getApplicationContext()
+ .getResources().getConfiguration());
+
+ LocaleListCompat localesToBeApplied;
+ if (Build.VERSION.SDK_INT >= 24) {
+ // For API>=24 the application locales are applied as a localeList. The localeList
+ // to be applied is an overlay of app-specific locales and the system locales.
+ localesToBeApplied = combineLocalesIfOverlayExists(requestedLocales,
+ systemLocales);
+ } else {
+ // For API<24 the application does not have a localeList instead it has a single
+ // locale, which we have set as the locale with the highest preference i.e. the first
+ // one from the requested locales.
+ if (requestedLocales.isEmpty()) {
+ localesToBeApplied = LocaleListCompat.getEmptyLocaleList();
+ } else {
+ localesToBeApplied =
+ LocaleListCompat.forLanguageTags(requestedLocales.get(0).toString());
+ }
+ }
+
+ if (localesToBeApplied.isEmpty()) {
+ // If the localesToBeApplied is empty, it implies that there are no app-specific locales
+ // set for this application and systemLocales should be followed.
+ localesToBeApplied = systemLocales;
+ }
+ return localesToBeApplied;
+ }
+
@Override
@RequiresApi(17)
public void setLocalNightMode(@NightMode int mode) {
@@ -2461,10 +2590,39 @@
return mLocalNightMode != MODE_NIGHT_UNSPECIFIED ? mLocalNightMode : getDefaultNightMode();
}
+ void setConfigurationLocales(Configuration conf, @NonNull LocaleListCompat locales) {
+ if (Build.VERSION.SDK_INT >= 24) {
+ Api24Impl.setLocales(conf, locales);
+ } else if (Build.VERSION.SDK_INT >= 17) {
+ Api17Impl.setLocale(conf, locales.get(0));
+ Api17Impl.setLayoutDirection(conf, locales.get(0));
+ } else {
+ conf.locale = locales.get(0);
+ }
+ }
+
+ LocaleListCompat getConfigurationLocales(Configuration conf) {
+ if (Build.VERSION.SDK_INT >= 24) {
+ return Api24Impl.getLocales(conf);
+ } else if (Build.VERSION.SDK_INT >= 21) {
+ return LocaleListCompat.forLanguageTags(Api21Impl.toLanguageTag(conf.locale));
+ } else {
+ return LocaleListCompat.create(conf.locale);
+ }
+ }
+
+ void setDefaultLocalesForLocaleList(LocaleListCompat locales) {
+ if (Build.VERSION.SDK_INT >= 24) {
+ Api24Impl.setDefaultLocales(locales);
+ } else {
+ Locale.setDefault(locales.get(0));
+ }
+ }
+
@NonNull
- private Configuration createOverrideConfigurationForDayNight(
- @NonNull Context context, @ApplyableNightMode final int mode,
- @Nullable Configuration configOverlay) {
+ private Configuration createOverrideAppConfiguration(@NonNull Context context,
+ @ApplyableNightMode int mode, @Nullable LocaleListCompat locales,
+ @Nullable Configuration configOverlay, boolean ignoreFollowSystem) {
int newNightMode;
switch (mode) {
case MODE_NIGHT_YES:
@@ -2475,11 +2633,17 @@
break;
default:
case MODE_NIGHT_FOLLOW_SYSTEM:
- // If we're following the system, we just use the system default from the
- // application context
- final Configuration appConfig =
- context.getApplicationContext().getResources().getConfiguration();
- newNightMode = appConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
+ if (ignoreFollowSystem) {
+ // We're generating an overlay to be used on top of the system configuration,
+ // so use whatever's already there.
+ newNightMode = Configuration.UI_MODE_NIGHT_UNDEFINED;
+ } else {
+ // If we're following the system, we just use the system default from the
+ // application context
+ final Configuration appConfig =
+ context.getApplicationContext().getResources().getConfiguration();
+ newNightMode = appConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
+ }
break;
}
@@ -2492,43 +2656,76 @@
overrideConf.uiMode = newNightMode
| (overrideConf.uiMode & ~Configuration.UI_MODE_NIGHT_MASK);
+ if (locales != null) {
+ setConfigurationLocales(overrideConf, locales);
+ }
return overrideConf;
}
/**
- * Updates the {@link Resources} configuration {@code uiMode} with the
- * chosen {@code UI_MODE_NIGHT} value.
+ * Updates the {@link Resources} configuration {@code uiMode} and {@Link LocaleList} with the
+ * chosen configuration values.
*
- * @param mode The new night mode to apply
+ * @param nightMode The new night mode to apply
+ * @param locales The new Locales to be applied
* @param allowRecreation whether to attempt activity recreate
* @return true if an action has been taken (recreation, resources updating, etc)
*/
- private boolean updateForNightMode(@ApplyableNightMode final int mode,
- final boolean allowRecreation) {
+ private boolean updateAppConfiguration(int nightMode, @Nullable LocaleListCompat
+ locales, final boolean allowRecreation) {
boolean handled = false;
final Configuration overrideConfig =
- createOverrideConfigurationForDayNight(mContext, mode, null);
+ createOverrideAppConfiguration(mContext, nightMode, locales, null, false);
- final boolean activityHandlingUiMode = isActivityManifestHandlingUiMode(mContext);
+ final int activityHandlingConfigChange = getActivityHandlesConfigChangesFlags(mContext);
final Configuration currentConfiguration = mEffectiveConfiguration == null
? mContext.getResources().getConfiguration() : mEffectiveConfiguration;
final int currentNightMode = currentConfiguration.uiMode
& Configuration.UI_MODE_NIGHT_MASK;
final int newNightMode = overrideConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
- if (DEBUG) {
- Log.d(TAG, String.format(
- "updateForNightMode [allowRecreation:%s, currentNightMode:%d, "
- + "newNightMode:%d, activityHandlingUiMode:%s, baseContextAttached:%s, "
- + "created:%s, canReturnDifferentContext:%s, host:%s]",
- allowRecreation, currentNightMode, newNightMode, activityHandlingUiMode,
- mBaseContextAttached, mCreated, sCanReturnDifferentContext, mHost));
+ final LocaleListCompat currentLocales = getConfigurationLocales(currentConfiguration);
+ final LocaleListCompat newLocales;
+ if (locales == null) {
+ newLocales = null;
+ } else {
+ newLocales = getConfigurationLocales(overrideConfig);
}
- if (currentNightMode != newNightMode
+ // Bitmask representing if there is a change in nightMode or Locales, mapped by bits
+ // ActivityInfo.CONFIG_UI_MODE and ActivityInfo.CONFIG_LOCALE respectively.
+ int configChanges = 0;
+ if (currentNightMode != newNightMode) {
+ configChanges |= ActivityInfo.CONFIG_UI_MODE;
+ }
+ if (newLocales != null && !currentLocales.equals(newLocales)) {
+ configChanges |= ActivityInfo.CONFIG_LOCALE;
+ if (Build.VERSION.SDK_INT >= 17) {
+ configChanges |= ActivityInfo.CONFIG_LAYOUT_DIRECTION;
+ }
+ }
+
+ if (DEBUG) {
+ Log.d(TAG, String.format(
+ "updateAppConfiguration [allowRecreation:%s, "
+ + "currentNightMode:%s, newNightMode:%s, currentLocales:%s, "
+ + "newLocales:%s, activityHandlingNightModeChanges:%s, "
+ + "activityHandlingLocalesChanges:%s, "
+ + "activityHandlingLayoutDirectionChanges:%s, "
+ + "baseContextAttached:%s, "
+ + "created:%s, canReturnDifferentContext:%s, host:%s]",
+ allowRecreation, currentNightMode, newNightMode,
+ currentLocales,
+ newLocales,
+ ((activityHandlingConfigChange & ActivityInfo.CONFIG_UI_MODE) != 0),
+ ((activityHandlingConfigChange & ActivityInfo.CONFIG_LOCALE) != 0),
+ ((activityHandlingConfigChange & ActivityInfo.CONFIG_LAYOUT_DIRECTION) != 0),
+ mBaseContextAttached, mCreated,
+ sCanReturnDifferentContext, mHost));
+ }
+ if ((~activityHandlingConfigChange & configChanges) != 0
&& allowRecreation
- && !activityHandlingUiMode
&& mBaseContextAttached
&& (sCanReturnDifferentContext || mCreated)
&& mHost instanceof Activity
@@ -2537,41 +2734,61 @@
// attachBaseContext() + createConfigurationContext() code path.
// Else, we need to use updateConfiguration() before we're 'created' (below)
if (DEBUG) {
- Log.d(TAG, "updateForNightMode attempting to recreate Activity: " + mHost);
+ Log.d(TAG, "updateAppConfiguration attempting to recreate Activity: "
+ + mHost);
}
ActivityCompat.recreate((Activity) mHost);
handled = true;
} else if (DEBUG) {
- Log.d(TAG, "updateForNightMode not recreating Activity: " + mHost);
+ Log.d(TAG, "updateAppConfiguration not recreating Activity: " + mHost);
}
- if (!handled && currentNightMode != newNightMode) {
+ if (!handled && (configChanges != 0)) {
// Else we need to use the updateConfiguration path
if (DEBUG) {
- Log.d(TAG, "updateForNightMode. Updating resources config on host: " + mHost);
+ Log.d(TAG, "updateAppConfiguration. Updating resources config on host: "
+ + mHost);
}
- updateResourcesConfigurationForNightMode(newNightMode, activityHandlingUiMode, null);
+ // If all the configurations that need to be altered are handled by the activity,
+ // only then callOnConfigChange is set to true.
+ updateResourcesConfiguration(newNightMode, newLocales,
+ /* callOnConfigChange = */(configChanges & activityHandlingConfigChange)
+ == configChanges, null);
+
handled = true;
}
if (DEBUG && !handled) {
- Log.d(TAG, "updateForNightMode. Skipping. Night mode: " + mode + " for host:" + mHost);
+ Log.d(TAG,
+ "updateAppConfiguration. Skipping. nightMode: " + nightMode + " and "
+ + "locales: " + locales + " for host:" + mHost);
}
- // Notify the activity of the night mode. We only notify if we handled the change,
- // or the Activity is set to handle uiMode changes
if (handled && mHost instanceof AppCompatActivity) {
- ((AppCompatActivity) mHost).onNightModeChanged(mode);
+ if ((configChanges & ActivityInfo.CONFIG_UI_MODE) != 0) {
+ ((AppCompatActivity) mHost).onNightModeChanged(nightMode);
+ }
+ if ((configChanges & ActivityInfo.CONFIG_LOCALE) != 0) {
+ ((AppCompatActivity) mHost).onLocalesChanged(locales);
+ }
}
+ if (handled && newLocales != null) {
+ // LocaleListCompat's default locales are updated here using the configuration
+ // locales to keep default locales in sync with application locales and also to cover
+ // the case where framework re-adjusts input locales by bringing forward the most
+ // suitable locale.
+ setDefaultLocalesForLocaleList(getConfigurationLocales(
+ mContext.getResources().getConfiguration()));
+ }
return handled;
}
- private void updateResourcesConfigurationForNightMode(
- final int uiModeNightModeValue, final boolean callOnConfigChange,
+ private void updateResourcesConfiguration(int uiModeNightModeValue,
+ @Nullable final LocaleListCompat locales, final boolean callOnConfigChange,
@Nullable Configuration configOverlay) {
- // If the Activity is not set to handle uiMode config changes we will
- // update the Resources with a new Configuration with an updated UI Mode
+ // If the Activity is not set to handle config changes we will
+ // update the Resources with a new Configuration with updated nightMode and locales.
final Resources res = mContext.getResources();
final Configuration conf = new Configuration(res.getConfiguration());
if (configOverlay != null) {
@@ -2579,6 +2796,9 @@
}
conf.uiMode = uiModeNightModeValue
| (res.getConfiguration().uiMode & ~Configuration.UI_MODE_NIGHT_MASK);
+ if (locales != null) {
+ setConfigurationLocales(conf, locales);
+ }
res.updateConfiguration(conf, null);
// We may need to flush the Resources' drawable cache due to framework bugs.
@@ -2602,19 +2822,23 @@
}
if (callOnConfigChange && mHost instanceof Activity) {
- final Activity activity = (Activity) mHost;
- if (activity instanceof LifecycleOwner) {
- // If the Activity is a LifecyleOwner, check that it is after onCreate() and
- // before onDestroy(), which includes STOPPED.
- Lifecycle lifecycle = ((LifecycleOwner) activity).getLifecycle();
- if (lifecycle.getCurrentState().isAtLeast(Lifecycle.State.CREATED)) {
- activity.onConfigurationChanged(conf);
- }
- } else {
- // Otherwise, we'll fallback to our internal created and destroyed flags.
- if (mCreated && !mDestroyed) {
- activity.onConfigurationChanged(conf);
- }
+ updateActivityConfiguration(conf);
+ }
+ }
+
+ private void updateActivityConfiguration(Configuration conf) {
+ final Activity activity = (Activity) mHost;
+ if (activity instanceof LifecycleOwner) {
+ // If the Activity is a LifecyleOwner, check that it is after onCreate() and
+ // before onDestroy(), which includes STOPPED.
+ Lifecycle lifecycle = ((LifecycleOwner) activity).getLifecycle();
+ if (lifecycle.getCurrentState().isAtLeast(Lifecycle.State.CREATED)) {
+ activity.onConfigurationChanged(conf);
+ }
+ } else {
+ // Otherwise, we'll fallback to our internal created and destroyed flags.
+ if (mCreated && !mDestroyed) {
+ activity.onConfigurationChanged(conf);
}
}
}
@@ -2644,13 +2868,14 @@
return mAutoBatteryNightModeManager;
}
- private boolean isActivityManifestHandlingUiMode(Context baseContext) {
- if (!mActivityHandlesUiModeChecked && mHost instanceof Activity) {
+ private int getActivityHandlesConfigChangesFlags(Context baseContext) {
+ if (!mActivityHandlesConfigFlagsChecked
+ && mHost instanceof Activity) {
final PackageManager pm = baseContext.getPackageManager();
if (pm == null) {
- // If we don't have a PackageManager, return false. Don't set
+ // If we don't have a PackageManager, return 0. Don't set
// the checked flag though so we still check again later
- return false;
+ return 0;
}
try {
int flags = 0;
@@ -2667,19 +2892,19 @@
}
final ActivityInfo info = pm.getActivityInfo(
new ComponentName(baseContext, mHost.getClass()), flags);
- mActivityHandlesUiMode = info != null
- && (info.configChanges & ActivityInfo.CONFIG_UI_MODE) != 0;
+ if (info != null) {
+ mActivityHandlesConfigFlags = info.configChanges;
+ }
} catch (PackageManager.NameNotFoundException e) {
// This shouldn't happen but let's not crash because of it, we'll just log and
// return false (since most apps won't be handling it)
Log.d(TAG, "Exception while getting ActivityInfo", e);
- mActivityHandlesUiMode = false;
+ mActivityHandlesConfigFlags = 0;
}
}
// Flip the checked flag so we don't check again
- mActivityHandlesUiModeChecked = true;
-
- return mActivityHandlesUiMode;
+ mActivityHandlesConfigFlagsChecked = true;
+ return mActivityHandlesConfigFlags;
}
/**
@@ -3603,6 +3828,16 @@
@NonNull Configuration overrideConfiguration) {
return context.createConfigurationContext(overrideConfiguration);
}
+
+ @DoNotInline
+ static void setLayoutDirection(Configuration configuration, Locale loc) {
+ configuration.setLayoutDirection(loc);
+ }
+
+ @DoNotInline
+ static void setLocale(Configuration configuration, Locale loc) {
+ configuration.setLocale(loc);
+ }
}
@RequiresApi(21)
@@ -3612,12 +3847,20 @@
static boolean isPowerSaveMode(PowerManager powerManager) {
return powerManager.isPowerSaveMode();
}
+
+ @DoNotInline
+ static String toLanguageTag(Locale locale) {
+ return locale.toLanguageTag();
+ }
}
@RequiresApi(24)
static class Api24Impl {
private Api24Impl() { }
+ // Most methods of LocaleListCompat requires a minimum API of 24 to be used and these are
+ // the helper implementations of those methods, used to indirectly invoke them in our code.
+ @DoNotInline
static void generateConfigDelta_locale(@NonNull Configuration base,
@NonNull Configuration change, @NonNull Configuration delta) {
final LocaleList baseLocales = base.getLocales();
@@ -3627,6 +3870,21 @@
delta.locale = change.locale;
}
}
+
+ @DoNotInline
+ static LocaleListCompat getLocales(Configuration configuration) {
+ return LocaleListCompat.forLanguageTags(configuration.getLocales().toLanguageTags());
+ }
+
+ @DoNotInline
+ static void setLocales(Configuration configuration, LocaleListCompat locales) {
+ configuration.setLocales(LocaleList.forLanguageTags(locales.toLanguageTags()));
+ }
+
+ @DoNotInline
+ public static void setDefaultLocales(LocaleListCompat locales) {
+ LocaleList.setDefault(LocaleList.forLanguageTags(locales.toLanguageTags()));
+ }
}
@RequiresApi(26)
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java
new file mode 100644
index 0000000..5f2668f
--- /dev/null
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesMetadataHolderService.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+import android.app.Service;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ServiceInfo;
+import android.os.Build;
+import android.os.IBinder;
+
+import androidx.annotation.DoNotInline;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.core.os.LocaleListCompat;
+
+/**
+ * A placeholder service to avoid adding application-level metadata. The service
+ * is only used to expose metadata defined in the library's manifest. It is
+ * never invoked.
+ *
+ * <p>This metadata boolean collected from the key "autoStoreLocales" is used as an opt-in from
+ * the developers to automatically store locales provided by them through the API
+ * {@link AppCompatDelegate#setApplicationLocales(LocaleListCompat)}.</p>
+ */
+public final class AppLocalesMetadataHolderService extends Service {
+ public AppLocalesMetadataHolderService() {}
+
+ @NonNull
+ @Override
+ public IBinder onBind(@SuppressWarnings("InvalidNullabilityOverride") @NonNull Intent intent) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Returns the {@link ServiceInfo} for the declared {@link AppLocalesMetadataHolderService}.
+ *
+ * <p>This serviceInfo contains the attribute "autoStoreLocales", its value being a boolean
+ * that informs us if the developer wants us to handle the storage of locales or not.</p>
+ */
+ @NonNull
+ @SuppressWarnings("deprecation") // GET_DISABLED_COMPONENTS, getServiceInfo
+ public static ServiceInfo getServiceInfo(@NonNull Context context) throws
+ PackageManager.NameNotFoundException {
+ int flags = PackageManager.GET_META_DATA;
+ // The service is marked as disabled so we need to include the following flags.
+ if (Build.VERSION.SDK_INT >= 24) {
+ flags |= Api24Impl.getDisabledComponentFlag();
+ } else {
+ flags |= PackageManager.GET_DISABLED_COMPONENTS;
+ }
+
+ return context.getPackageManager().getServiceInfo(
+ new ComponentName(context, AppLocalesMetadataHolderService.class), flags);
+ }
+
+ @RequiresApi(24)
+ private static class Api24Impl {
+ @DoNotInline
+ static int getDisabledComponentFlag() {
+ return PackageManager.MATCH_DISABLED_COMPONENTS;
+ }
+ }
+}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesStorageHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesStorageHelper.java
new file mode 100644
index 0000000..d30f599
--- /dev/null
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppLocalesStorageHelper.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+import static android.content.pm.PackageManager.DONT_KILL_APP;
+
+import static androidx.appcompat.app.AppCompatDelegate.getApplicationLocales;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.util.Log;
+import android.util.Xml;
+
+import androidx.annotation.NonNull;
+import androidx.core.os.LocaleListCompat;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayDeque;
+import java.util.Queue;
+import java.util.concurrent.Executor;
+
+/**
+ * Helper class to manage storage of locales in app's persistent files.
+ */
+class AppLocalesStorageHelper {
+ static final String APPLICATION_LOCALES_RECORD_FILE =
+ "androidx.appcompat.app.AppCompatDelegate.application_locales_record_file";
+ static final String LOCALE_RECORD_ATTRIBUTE_TAG = "application_locales";
+ static final String LOCALE_RECORD_FILE_TAG = "locales";
+ static final String APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME = "androidx.appcompat.app"
+ + ".AppLocalesMetadataHolderService";
+ static final String TAG = "AppLocalesStorageHelper";
+
+ private AppLocalesStorageHelper() {}
+
+ /**
+ * Returns app locales after reading from storage, fetched using the application context.
+ */
+ @NonNull
+ static String readLocales(@NonNull Context context) {
+ String appLocales = "";
+
+ FileInputStream fis;
+ try {
+ fis = context.openFileInput(APPLICATION_LOCALES_RECORD_FILE);
+ } catch (FileNotFoundException fnfe) {
+ Log.w(TAG, "Reading app Locales : Locales record file not found: "
+ + APPLICATION_LOCALES_RECORD_FILE);
+ return appLocales;
+ }
+ try {
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(fis, "UTF-8");
+ int type;
+ int outerDepth = parser.getDepth();
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+ if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+ continue;
+ }
+
+ String tagName = parser.getName();
+ if (tagName.equals(LOCALE_RECORD_FILE_TAG)) {
+ appLocales = parser.getAttributeValue(/*namespace= */ null,
+ LOCALE_RECORD_ATTRIBUTE_TAG);
+ break;
+ }
+ }
+ } catch (XmlPullParserException | IOException e) {
+ Log.w(TAG,
+ "Reading app Locales : Unable to parse through file :"
+ + APPLICATION_LOCALES_RECORD_FILE);
+ } finally {
+ if (fis != null) {
+ try {
+ fis.close();
+ } catch (IOException e) {
+ /* ignore */
+ }
+ }
+ }
+
+ if (!appLocales.isEmpty()) {
+ Log.d(TAG,
+ "Reading app Locales : Locales read from file: "
+ + APPLICATION_LOCALES_RECORD_FILE + " ," + " appLocales: "
+ + appLocales);
+ } else {
+ context.deleteFile(APPLICATION_LOCALES_RECORD_FILE);
+ }
+ return appLocales;
+ }
+
+ /**
+ * Stores the provided locales in internal app file, using the application context.
+ */
+ static void persistLocales(@NonNull Context context, @NonNull String locales) {
+ if (locales.equals("")) {
+ context.deleteFile(APPLICATION_LOCALES_RECORD_FILE);
+ return;
+ }
+
+ FileOutputStream fos;
+ try {
+ fos = context.openFileOutput(APPLICATION_LOCALES_RECORD_FILE, Context.MODE_PRIVATE);
+ } catch (FileNotFoundException fnfe) {
+ Log.w(TAG, String.format("Storing App Locales : FileNotFoundException: Cannot open "
+ + "file %s for writing ", APPLICATION_LOCALES_RECORD_FILE));
+ return;
+ }
+ XmlSerializer serializer = Xml.newSerializer();
+ try {
+ serializer.setOutput(fos, /* encoding= */ null);
+ serializer.startDocument("UTF-8", true);
+ serializer.startTag(/* namespace= */ null, LOCALE_RECORD_FILE_TAG);
+ serializer.attribute(/* namespace= */ null, LOCALE_RECORD_ATTRIBUTE_TAG, locales);
+ serializer.endTag(/* namespace= */ null, LOCALE_RECORD_FILE_TAG);
+ serializer.endDocument();
+ Log.d(TAG, "Storing App Locales : app-locales: "
+ + locales + " persisted successfully.");
+ } catch (Exception e) {
+ Log.w(TAG, "Storing App Locales : Failed to persist app-locales: "
+ + locales, e);
+ } finally {
+ if (fos != null) {
+ try {
+ fos.close();
+ } catch (IOException e) {
+ /* ignore */
+ }
+ }
+ }
+ }
+
+ /**
+ * Syncs app-specific locales from androidX to framework. This is used to maintain a smooth
+ * transition for a device that updates from pre-T API versions to T.
+ *
+ * <p><b>NOTE:</b> This should only be called when auto-storage is opted-in. This method
+ * uses the meta-data service provided during the opt-in and hence if the service is not found
+ * this method will throw an error.</p>
+ */
+ static void syncLocalesToFramework(Context context) {
+ ComponentName app_locales_component = new ComponentName(
+ context, APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME);
+
+ if (context.getPackageManager().getComponentEnabledSetting(app_locales_component)
+ != COMPONENT_ENABLED_STATE_ENABLED) {
+ AppCompatDelegate.setAppContext(context);
+ // ComponentEnabledSetting for the app component app_locales_component is used as a
+ // marker to represent that the locales has been synced from AndroidX to framework
+ // If this marker is found in ENABLED state then we do not need to sync again.
+ if (getApplicationLocales().isEmpty()) {
+ // We check if some locales are applied by the framework or not (this is done to
+ // ensure that we don't overwrite newer locales set by the framework). If no
+ // app-locales are found then we need to sync the app-specific locales from androidX
+ // to framework.
+
+ String appLocales = readLocales(context);
+ // if locales are present in storage, call the setApplicationLocales() API. As the
+ // API version is >= 33, this call will be directed to the framework API and the
+ // locales will be persisted there.
+ AppCompatDelegate.setApplicationLocales(
+ LocaleListCompat.forLanguageTags(appLocales));
+ }
+ // setting ComponentEnabledSetting for app component using
+ // AppLocalesMetadataHolderService (used only for locales, thus minimizing
+ // the chances of conflicts). Setting it as ENABLED marks the success of app-locales
+ // sync from AndroidX to framework.
+ // Flag DONT_KILL_APP indicates that you don't want to kill the app containing the
+ // component.
+ context.getPackageManager().setComponentEnabledSetting(app_locales_component,
+ COMPONENT_ENABLED_STATE_ENABLED, /* flags= */ DONT_KILL_APP);
+ }
+ }
+
+ /**
+ * Implementation of {@link java.util.concurrent.Executor} that executes each runnable on a
+ * new thread.
+ */
+ static class ThreadPerTaskExecutor implements Executor {
+ @Override
+ public void execute(Runnable r) {
+ new Thread(r).start();
+ }
+ }
+
+ /**
+ * Implementation of {@link java.util.concurrent.Executor} that executes runnables serially
+ * by synchronizing the {@link Executor#execute(Runnable)} method and maintaining a tasks
+ * queue.
+ */
+ static class SerialExecutor implements Executor {
+ private final Object mLock = new Object();
+ final Queue<Runnable> mTasks = new ArrayDeque<>();
+ final Executor mExecutor;
+ Runnable mActive;
+
+ SerialExecutor(Executor executor) {
+ this.mExecutor = executor;
+ }
+
+ @Override
+ public void execute(final Runnable r) {
+ synchronized (mLock) {
+ mTasks.add(() -> {
+ try {
+ r.run();
+ } finally {
+ scheduleNext();
+ }
+ });
+ if (mActive == null) {
+ scheduleNext();
+ }
+ }
+ }
+
+ protected void scheduleNext() {
+ synchronized (mLock) {
+ if ((mActive = mTasks.poll()) != null) {
+ mExecutor.execute(mActive);
+ }
+ }
+ }
+ }
+}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/LocaleOverlayHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/LocaleOverlayHelper.java
new file mode 100644
index 0000000..9684b92
--- /dev/null
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/LocaleOverlayHelper.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app;
+
+import android.os.LocaleList;
+
+import androidx.annotation.RequiresApi;
+import androidx.core.os.LocaleListCompat;
+
+import java.util.LinkedHashSet;
+import java.util.Locale;
+import java.util.Set;
+
+/**
+ * Static utilities to overlay locales on top of another LocaleListCompat.
+ *
+ * <p>This is used to overlay application-specific locales on top of
+ * system locales.</p>
+ */
+@RequiresApi(24)
+final class LocaleOverlayHelper {
+
+ private LocaleOverlayHelper() {}
+
+ /**
+ * Combines the overlay locales and base locales.
+ *
+ * @return the combined {@link LocaleListCompat} if the overlay locales is not empty/null else
+ * returns an empty LocaleListCompat.
+ */
+ static LocaleListCompat combineLocalesIfOverlayExists(LocaleListCompat overlayLocales,
+ LocaleListCompat baseLocales) {
+ if (overlayLocales == null || overlayLocales.isEmpty()) {
+ return LocaleListCompat.getEmptyLocaleList();
+ }
+ return combineLocales(overlayLocales, baseLocales);
+ }
+
+ static LocaleListCompat combineLocalesIfOverlayExists(LocaleList overlayLocales,
+ LocaleList baseLocales) {
+ if (overlayLocales == null || overlayLocales.isEmpty()) {
+ return LocaleListCompat.getEmptyLocaleList();
+ }
+ return combineLocales(LocaleListCompat.wrap(overlayLocales),
+ LocaleListCompat.wrap(baseLocales));
+ }
+
+ /**
+ * Creates a combined {@link LocaleListCompat} by placing overlay locales before base
+ * locales and dropping duplicates from the base locales.
+ */
+ private static LocaleListCompat combineLocales(LocaleListCompat overlayLocales,
+ LocaleListCompat baseLocales) {
+ // using LinkedHashSet to drop duplicates.
+ Set<Locale> combinedLocales = new LinkedHashSet<>();
+ for (int i = 0; i < overlayLocales.size() + baseLocales.size(); i++) {
+ Locale currLocale;
+ if (i < overlayLocales.size()) {
+ currLocale = overlayLocales.get(i);
+ } else {
+ currLocale = baseLocales.get(i - overlayLocales.size());
+ }
+ if (currLocale != null) {
+ combinedLocales.add(currLocale);
+ }
+ }
+ return LocaleListCompat.create(combinedLocales.toArray(
+ new Locale[combinedLocales.size()]));
+ }
+}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/ContextThemeWrapper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/ContextThemeWrapper.java
index 56d9ec7..b8c582d 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/ContextThemeWrapper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/ContextThemeWrapper.java
@@ -33,6 +33,11 @@
* A context wrapper that allows you to modify or replace the theme of the wrapped context.
*/
public class ContextThemeWrapper extends ContextWrapper {
+ /**
+ * Lazily-populated configuration object representing an empty, default configuration.
+ */
+ private static Configuration sEmptyConfig;
+
private int mThemeResource;
private Resources.Theme mTheme;
private LayoutInflater mInflater;
@@ -113,7 +118,10 @@
private Resources getResourcesInternal() {
if (mResources == null) {
- if (mOverrideConfiguration == null) {
+ if (isEmptyConfiguration(mOverrideConfiguration)) {
+ // If we're not applying any overrides, use the base context's resources. On API
+ // 26+, this will avoid pulling in resources that share a backing implementation
+ // with the application context.
mResources = super.getResources();
} else if (Build.VERSION.SDK_INT >= 17) {
final Context resContext =
@@ -203,6 +211,26 @@
return getResources().getAssets();
}
+ /**
+ * @return {@code true} if the specified configuration is {@code null} or is a no-op when
+ * used as a configuration overlay
+ */
+ private static boolean isEmptyConfiguration(Configuration overrideConfiguration) {
+ if (overrideConfiguration == null) {
+ return true;
+ }
+
+ if (sEmptyConfig == null) {
+ Configuration emptyConfig = new Configuration();
+ // Workaround for incorrect default fontScale on earlier SDKs (b/29924927). Note
+ // that Configuration.setToDefaults() is *not* a no-op configuration overlay.
+ emptyConfig.fontScale = 0.0f;
+ sEmptyConfig = emptyConfig;
+ }
+
+ return overrideConfiguration.equals(sEmptyConfig);
+ }
+
@RequiresApi(17)
static class Api17Impl {
private Api17Impl() {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserModel.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserModel.java
index 89e3bb9..34a8e20 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserModel.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActivityChooserModel.java
@@ -683,6 +683,7 @@
*
* @return Whether loading was performed.
*/
+ @SuppressWarnings("deprecation")
private boolean loadActivitiesIfNeeded() {
if (mReloadActivities && mIntent != null) {
mReloadActivities = false;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
index 6e9c5ba..6cc5e8b 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
@@ -59,6 +59,7 @@
import androidx.appcompat.content.res.AppCompatResources;
import androidx.appcompat.view.ContextThemeWrapper;
import androidx.appcompat.view.menu.ShowableListMenu;
+import androidx.core.util.ObjectsCompat;
import androidx.core.view.TintableBackgroundView;
import androidx.core.view.ViewCompat;
import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
@@ -1129,7 +1130,7 @@
@NonNull android.widget.ThemedSpinnerAdapter themedSpinnerAdapter,
@Nullable Resources.Theme theme
) {
- if (themedSpinnerAdapter.getDropDownViewTheme() != theme) {
+ if (!ObjectsCompat.equals(themedSpinnerAdapter.getDropDownViewTheme(), theme)) {
themedSpinnerAdapter.setDropDownViewTheme(theme);
}
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java
index ff70a9c..561672f 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/DropDownListView.java
@@ -23,6 +23,7 @@
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
+import android.os.Build;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
@@ -33,10 +34,12 @@
import androidx.annotation.DoNotInline;
import androidx.annotation.NonNull;
+import androidx.annotation.OptIn;
import androidx.annotation.RequiresApi;
import androidx.appcompat.R;
import androidx.appcompat.graphics.drawable.DrawableWrapper;
import androidx.core.graphics.drawable.DrawableCompat;
+import androidx.core.os.BuildCompat;
import androidx.core.view.ViewPropertyAnimatorCompat;
import androidx.core.widget.ListViewAutoScrollHelper;
@@ -62,8 +65,6 @@
private int mMotionPosition;
- private Field mIsChildViewEnabled;
-
private GateKeeperDrawable mSelector;
/*
@@ -126,15 +127,25 @@
super(context, null, R.attr.dropDownListViewStyle);
mHijackFocus = hijackFocus;
setCacheColorHint(0); // Transparent, since the background drawable could be anything.
+ }
- try {
- mIsChildViewEnabled = AbsListView.class.getDeclaredField("mIsChildViewEnabled");
- mIsChildViewEnabled.setAccessible(true);
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ private boolean superIsSelectedChildViewEnabled() {
+ if (BuildCompat.isAtLeastT()) {
+ return Api33Impl.isSelectedChildViewEnabled(this);
+ } else {
+ return PreApi33Impl.isSelectedChildViewEnabled(this);
}
}
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ private void superSetSelectedChildViewEnabled(boolean enabled) {
+ if (BuildCompat.isAtLeastT()) {
+ Api33Impl.setSelectedChildViewEnabled(this, enabled);
+ } else {
+ PreApi33Impl.setSelectedChildViewEnabled(this, enabled);
+ }
+ }
@Override
public boolean isInTouchMode() {
@@ -624,18 +635,14 @@
selectorRect.right += mSelectionRightPadding;
selectorRect.bottom += mSelectionBottomPadding;
- try {
- // AbsListView.mIsChildViewEnabled controls the selector's state so we need to
- // modify its value
- final boolean isChildViewEnabled = mIsChildViewEnabled.getBoolean(this);
- if (sel.isEnabled() != isChildViewEnabled) {
- mIsChildViewEnabled.set(this, !isChildViewEnabled);
- if (position != INVALID_POSITION) {
- refreshDrawableState();
- }
+ // AbsListView.mIsChildViewEnabled controls the selector's state so we need to
+ // modify its value
+ final boolean isChildViewEnabled = superIsSelectedChildViewEnabled();
+ if (sel.isEnabled() != isChildViewEnabled) {
+ superSetSelectedChildViewEnabled(!isChildViewEnabled);
+ if (position != INVALID_POSITION) {
+ refreshDrawableState();
}
- } catch (IllegalAccessException e) {
- e.printStackTrace();
}
}
@@ -803,4 +810,66 @@
view.drawableHotspotChanged(x, y);
}
}
+
+ // TODO(b/221852137): Use @DeprecatedSinceApi(33).
+ @SuppressWarnings({"JavaReflectionMemberAccess", "CatchAndPrintStackTrace"})
+ static class PreApi33Impl {
+ private static final Field sIsChildViewEnabled;
+
+ static {
+ Field isChildViewEnabled = null;
+
+ try {
+ isChildViewEnabled = AbsListView.class.getDeclaredField("mIsChildViewEnabled");
+ isChildViewEnabled.setAccessible(true);
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ }
+
+ sIsChildViewEnabled = isChildViewEnabled;
+ }
+
+ private PreApi33Impl() {
+ // This class is not instantiable.
+ }
+
+ static boolean isSelectedChildViewEnabled(AbsListView view) {
+ if (sIsChildViewEnabled != null) {
+ try {
+ return sIsChildViewEnabled.getBoolean(view);
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ }
+
+ return false;
+ }
+
+ static void setSelectedChildViewEnabled(AbsListView view, boolean enabled) {
+ if (sIsChildViewEnabled != null) {
+ try {
+ sIsChildViewEnabled.set(view, enabled);
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ static class Api33Impl {
+ private Api33Impl() {
+ // This class is not instantiable.
+ }
+
+ @DoNotInline
+ static boolean isSelectedChildViewEnabled(AbsListView view) {
+ return view.isSelectedChildViewEnabled();
+ }
+
+ @DoNotInline
+ static void setSelectedChildViewEnabled(AbsListView view, boolean enabled) {
+ view.setSelectedChildViewEnabled(enabled);
+ }
+ }
}
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
index 072c94a..3bd4492 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SearchView.java
@@ -900,6 +900,7 @@
updateSubmitArea();
}
+ @SuppressWarnings("deprecation")
private boolean hasVoiceSearch() {
if (mSearchable != null && mSearchable.getVoiceSearchEnabled()) {
Intent testIntent = null;
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java
index 173e289..77e9dae 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ThemedSpinnerAdapter.java
@@ -123,7 +123,7 @@
public void setDropDownViewTheme(@Nullable Resources.Theme theme) {
if (theme == null) {
mDropDownInflater = null;
- } else if (theme == mContext.getTheme()) {
+ } else if (theme.equals(mContext.getTheme())) {
mDropDownInflater = mInflater;
} else {
final Context context = new ContextThemeWrapper(mContext, theme);
diff --git a/appsearch/appsearch-debug-view/samples/src/main/java/androidx/appsearch/debugview/samples/NotesAppSearchManager.java b/appsearch/appsearch-debug-view/samples/src/main/java/androidx/appsearch/debugview/samples/NotesAppSearchManager.java
index 7aba8a7..2628b2e 100644
--- a/appsearch/appsearch-debug-view/samples/src/main/java/androidx/appsearch/debugview/samples/NotesAppSearchManager.java
+++ b/appsearch/appsearch-debug-view/samples/src/main/java/androidx/appsearch/debugview/samples/NotesAppSearchManager.java
@@ -93,7 +93,7 @@
PutDocumentsRequest request = new PutDocumentsRequest.Builder().addDocuments(notes)
.build();
return Futures.transformAsync(mAppSearchSessionFuture,
- session -> session.put(request), mExecutor);
+ session -> session.putAsync(request), mExecutor);
} catch (Exception e) {
return Futures.immediateFailedFuture(e);
}
@@ -112,7 +112,7 @@
}
private ListenableFuture<AppSearchSession> createLocalSession() {
- return LocalStorage.createSearchSession(
+ return LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(mContext, DB_NAME)
.build()
);
@@ -122,7 +122,7 @@
SetSchemaRequest request =
new SetSchemaRequest.Builder().setForceOverride(FORCE_OVERRIDE).build();
return Futures.transformAsync(mAppSearchSessionFuture,
- session -> session.setSchema(request),
+ session -> session.setSchemaAsync(request),
mExecutor);
}
@@ -131,7 +131,7 @@
SetSchemaRequest request = new SetSchemaRequest.Builder().addDocumentClasses(Note.class)
.build();
return Futures.transformAsync(mAppSearchSessionFuture,
- session -> session.setSchema(request), mExecutor);
+ session -> session.setSchemaAsync(request), mExecutor);
} catch (AppSearchException e) {
return Futures.immediateFailedFuture(e);
}
diff --git a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/DebugAppSearchManager.java b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/DebugAppSearchManager.java
index 720d679..fce8a0d 100644
--- a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/DebugAppSearchManager.java
+++ b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/DebugAppSearchManager.java
@@ -81,7 +81,7 @@
* storage as the storage type for debugging.
*/
@NonNull
- public static ListenableFuture<DebugAppSearchManager> create(
+ public static ListenableFuture<DebugAppSearchManager> createAsync(
@NonNull Context context,
@NonNull ExecutorService executor, @NonNull String databaseName,
@AppSearchDebugActivity.StorageType int storageType) throws AppSearchException {
@@ -98,14 +98,13 @@
case AppSearchDebugActivity.STORAGE_TYPE_LOCAL:
debugAppSearchManagerListenableFuture =
Futures.transform(
- debugAppSearchManager.initializeLocalStorage(databaseName),
+ debugAppSearchManager.initializeLocalStorageAsync(databaseName),
unused -> debugAppSearchManager, executor);
break;
case AppSearchDebugActivity.STORAGE_TYPE_PLATFORM:
if (Build.VERSION.SDK_INT >= 31) {
- debugAppSearchManagerListenableFuture =
- Futures.transform(
- debugAppSearchManager.initializePlatformStorage(databaseName),
+ debugAppSearchManagerListenableFuture = Futures.transform(
+ debugAppSearchManager.initializePlatformStorageAsync(databaseName),
unused -> debugAppSearchManager, executor);
} else {
throw new AppSearchException(AppSearchResult.RESULT_INVALID_ARGUMENT,
@@ -130,7 +129,7 @@
* {@link #getNextPage} to retrieve the {@link GenericDocument} objects for each page.
*/
@NonNull
- public ListenableFuture<SearchResults> getAllDocumentsSearchResults() {
+ public ListenableFuture<SearchResults> getAllDocumentsSearchResultsAsync() {
SearchSpec searchSpec = new SearchSpec.Builder()
.setResultCountPerPage(PAGE_SIZE)
.setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
@@ -151,10 +150,11 @@
* {@link GenericDocument} objects.
*/
@NonNull
- public ListenableFuture<List<GenericDocument>> getNextPage(@NonNull SearchResults results) {
+ public ListenableFuture<List<GenericDocument>> getNextPageAsync(
+ @NonNull SearchResults results) {
Preconditions.checkNotNull(results);
- return Futures.transform(results.getNextPage(),
+ return Futures.transform(results.getNextPageAsync(),
DebugAppSearchManager::convertResultsToGenericDocuments, mExecutor);
}
@@ -162,7 +162,7 @@
* Gets a document from the AppSearch database by namespace and ID.
*/
@NonNull
- public ListenableFuture<GenericDocument> getDocument(@NonNull String namespace,
+ public ListenableFuture<GenericDocument> getDocumentAsync(@NonNull String namespace,
@NonNull String id) {
Preconditions.checkNotNull(id);
Preconditions.checkNotNull(namespace);
@@ -170,7 +170,7 @@
new GetByDocumentIdRequest.Builder(namespace).addIds(id).build();
return Futures.transformAsync(mAppSearchSessionFuture,
- session -> Futures.transform(session.getByDocumentId(request),
+ session -> Futures.transform(session.getByDocumentIdAsync(request),
response -> response.getSuccesses().get(id), mExecutor), mExecutor);
}
@@ -178,9 +178,9 @@
* Gets the schema of the AppSearch database.
*/
@NonNull
- public ListenableFuture<GetSchemaResponse> getSchema() {
+ public ListenableFuture<GetSchemaResponse> getSchemaAsync() {
return Futures.transformAsync(mAppSearchSessionFuture,
- session -> session.getSchema(), mExecutor);
+ session -> session.getSchemaAsync(), mExecutor);
}
/**
@@ -195,9 +195,9 @@
}
@NonNull
- private ListenableFuture<AppSearchSession> initializeLocalStorage(
+ private ListenableFuture<AppSearchSession> initializeLocalStorageAsync(
@NonNull String databaseName) {
- mAppSearchSessionFuture.setFuture(LocalStorage.createSearchSession(
+ mAppSearchSessionFuture.setFuture(LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(mContext, databaseName)
.build())
);
@@ -206,9 +206,9 @@
@NonNull
@RequiresApi(Build.VERSION_CODES.S)
- private ListenableFuture<AppSearchSession> initializePlatformStorage(
+ private ListenableFuture<AppSearchSession> initializePlatformStorageAsync(
@NonNull String databaseName) {
- mAppSearchSessionFuture.setFuture(PlatformStorage.createSearchSession(
+ mAppSearchSessionFuture.setFuture(PlatformStorage.createSearchSessionAsync(
new PlatformStorage.SearchContext.Builder(mContext, databaseName)
.build())
);
diff --git a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentListModel.java b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentListModel.java
index 5a23cb0..6425c63 100644
--- a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentListModel.java
+++ b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentListModel.java
@@ -76,7 +76,7 @@
*/
@NonNull
public LiveData<SearchResults> getAllDocumentsSearchResults() {
- Futures.addCallback(mDebugAppSearchManager.getAllDocumentsSearchResults(),
+ Futures.addCallback(mDebugAppSearchManager.getAllDocumentsSearchResultsAsync(),
new FutureCallback<SearchResults>() {
@Override
public void onSuccess(SearchResults result) {
@@ -107,7 +107,7 @@
@NonNull
public LiveData<List<GenericDocument>> addAdditionalResultsPage(
@NonNull SearchResults results) {
- Futures.addCallback(mDebugAppSearchManager.getNextPage(results),
+ Futures.addCallback(mDebugAppSearchManager.getNextPageAsync(results),
new FutureCallback<List<GenericDocument>>() {
@Override
public void onSuccess(List<GenericDocument> result) {
diff --git a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentModel.java b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentModel.java
index a8c03dc..41d2ed1 100644
--- a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentModel.java
+++ b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/DocumentModel.java
@@ -61,7 +61,7 @@
*/
@NonNull
public LiveData<GenericDocument> getDocument(@NonNull String namespace, @NonNull String id) {
- Futures.addCallback(mDebugAppSearchManager.getDocument(namespace, id),
+ Futures.addCallback(mDebugAppSearchManager.getDocumentAsync(namespace, id),
new FutureCallback<GenericDocument>() {
@Override
public void onSuccess(GenericDocument result) {
diff --git a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/SchemaTypeListModel.java b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/SchemaTypeListModel.java
index 16e0b66..70cc1ee 100644
--- a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/SchemaTypeListModel.java
+++ b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/model/SchemaTypeListModel.java
@@ -90,7 +90,7 @@
*/
@NonNull
private LiveData<GetSchemaResponse> getSchema() {
- Futures.addCallback(mDebugAppSearchManager.getSchema(),
+ Futures.addCallback(mDebugAppSearchManager.getSchemaAsync(),
new FutureCallback<GetSchemaResponse>() {
@Override
public void onSuccess(GetSchemaResponse result) {
diff --git a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/view/AppSearchDebugActivity.java b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/view/AppSearchDebugActivity.java
index 20ea01f..3174e2d 100644
--- a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/view/AppSearchDebugActivity.java
+++ b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/view/AppSearchDebugActivity.java
@@ -97,7 +97,7 @@
@StorageType int storageType =
getIntent().getExtras().getInt(STORAGE_TYPE_INTENT_KEY);
try {
- mDebugAppSearchManager = DebugAppSearchManager.create(
+ mDebugAppSearchManager = DebugAppSearchManager.createAsync(
getApplicationContext(), mBackgroundExecutor, mDbName, storageType);
} catch (AppSearchException e) {
Toast.makeText(getApplicationContext(),
diff --git a/appsearch/appsearch-ktx/src/androidTest/java/AnnotationProcessorKtTest.kt b/appsearch/appsearch-ktx/src/androidTest/java/AnnotationProcessorKtTest.kt
index 7636104..85eb735 100644
--- a/appsearch/appsearch-ktx/src/androidTest/java/AnnotationProcessorKtTest.kt
+++ b/appsearch/appsearch-ktx/src/androidTest/java/AnnotationProcessorKtTest.kt
@@ -43,7 +43,7 @@
@Before
public fun setUp() {
val context = ApplicationProvider.getApplicationContext<Context>()
- session = LocalStorage.createSearchSession(
+ session = LocalStorage.createSearchSessionAsync(
LocalStorage.SearchContext.Builder(context, DB_NAME).build()
).get()
@@ -59,7 +59,7 @@
}
private fun cleanup() {
- session.setSchema(SetSchemaRequest.Builder().setForceOverride(true).build()).get()
+ session.setSchemaAsync(SetSchemaRequest.Builder().setForceOverride(true).build()).get()
}
@Document
@@ -250,7 +250,7 @@
@Test
fun testAnnotationProcessor() {
- session.setSchema(
+ session.setSchemaAsync(
SetSchemaRequest.Builder()
.addDocumentClasses(Card::class.java, Gift::class.java).build()
).get()
@@ -260,7 +260,7 @@
// Index the Gift document and query it.
checkIsBatchResultSuccess(
- session.put(
+ session.putAsync(
PutDocumentsRequest.Builder().addDocuments(inputDocument).build()
)
)
diff --git a/appsearch/appsearch-local-storage/api/current.txt b/appsearch/appsearch-local-storage/api/current.txt
index 5eb0af5..94465dd 100644
--- a/appsearch/appsearch-local-storage/api/current.txt
+++ b/appsearch/appsearch-local-storage/api/current.txt
@@ -2,7 +2,8 @@
package androidx.appsearch.localstorage {
public class LocalStorage {
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.localstorage.LocalStorage.SearchContext);
+ method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.localstorage.LocalStorage.SearchContext);
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.SearchContext);
}
public static final class LocalStorage.SearchContext {
diff --git a/appsearch/appsearch-local-storage/api/public_plus_experimental_current.txt b/appsearch/appsearch-local-storage/api/public_plus_experimental_current.txt
index 5eb0af5..94465dd 100644
--- a/appsearch/appsearch-local-storage/api/public_plus_experimental_current.txt
+++ b/appsearch/appsearch-local-storage/api/public_plus_experimental_current.txt
@@ -2,7 +2,8 @@
package androidx.appsearch.localstorage {
public class LocalStorage {
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.localstorage.LocalStorage.SearchContext);
+ method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.localstorage.LocalStorage.SearchContext);
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.SearchContext);
}
public static final class LocalStorage.SearchContext {
diff --git a/appsearch/appsearch-local-storage/api/restricted_current.txt b/appsearch/appsearch-local-storage/api/restricted_current.txt
index 5eb0af5..94465dd 100644
--- a/appsearch/appsearch-local-storage/api/restricted_current.txt
+++ b/appsearch/appsearch-local-storage/api/restricted_current.txt
@@ -2,7 +2,8 @@
package androidx.appsearch.localstorage {
public class LocalStorage {
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.localstorage.LocalStorage.SearchContext);
+ method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.localstorage.LocalStorage.SearchContext);
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.SearchContext);
}
public static final class LocalStorage.SearchContext {
diff --git a/appsearch/appsearch-local-storage/build.gradle b/appsearch/appsearch-local-storage/build.gradle
index 268af48..d723e00 100644
--- a/appsearch/appsearch-local-storage/build.gradle
+++ b/appsearch/appsearch-local-storage/build.gradle
@@ -44,12 +44,11 @@
defaultConfig {
externalNativeBuild {
cmake {
- cppFlags "-std=c++17"
arguments "-DCMAKE_VERBOSE_MAKEFILE=ON"
targets "icing"
}
}
- multiDexEnabled true
+ multiDexEnabled true
}
externalNativeBuild {
cmake {
@@ -72,9 +71,9 @@
api("androidx.annotation:annotation:1.1.0")
implementation(project(":appsearch:appsearch"))
+ implementation('androidx.collection:collection:1.2.0')
implementation("androidx.concurrent:concurrent-futures:1.0.0")
implementation("androidx.core:core:1.2.0")
- implementation('androidx.collection:collection:1.0.0')
androidTestImplementation project(':appsearch:appsearch-test-util')
androidTestImplementation(libs.multidex)
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java
index 961543b..d972613 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchImplTest.java
@@ -16,6 +16,7 @@
package androidx.appsearch.localstorage;
+import static androidx.appsearch.app.AppSearchResult.RESULT_INVALID_ARGUMENT;
import static androidx.appsearch.localstorage.util.PrefixUtil.addPrefixToDocument;
import static androidx.appsearch.localstorage.util.PrefixUtil.createPrefix;
import static androidx.appsearch.localstorage.util.PrefixUtil.removePrefixesFromDocument;
@@ -25,25 +26,39 @@
import static org.junit.Assert.assertThrows;
import android.content.Context;
-import android.os.Process;
import androidx.appsearch.app.AppSearchResult;
import androidx.appsearch.app.AppSearchSchema;
import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.InternalSetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
import androidx.appsearch.app.SearchResult;
import androidx.appsearch.app.SearchResultPage;
import androidx.appsearch.app.SearchSpec;
+import androidx.appsearch.app.SearchSuggestionResult;
+import androidx.appsearch.app.SearchSuggestionSpec;
import androidx.appsearch.app.SetSchemaResponse;
import androidx.appsearch.app.StorageInfo;
+import androidx.appsearch.app.VisibilityDocument;
import androidx.appsearch.exceptions.AppSearchException;
import androidx.appsearch.localstorage.stats.InitializeStats;
import androidx.appsearch.localstorage.stats.OptimizeStats;
import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityChecker;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityStore;
+import androidx.appsearch.observer.DocumentChangeInfo;
+import androidx.appsearch.observer.ObserverSpec;
+import androidx.appsearch.observer.SchemaChangeInfo;
+import androidx.appsearch.testutil.TestObserverCallback;
import androidx.collection.ArrayMap;
import androidx.collection.ArraySet;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.filters.FlakyTest;
+import com.google.android.icing.proto.DebugInfoProto;
+import com.google.android.icing.proto.DebugInfoVerbosity;
import com.google.android.icing.proto.DocumentProto;
import com.google.android.icing.proto.GetOptimizeInfoResultProto;
import com.google.android.icing.proto.PersistType;
@@ -58,6 +73,7 @@
import com.google.android.icing.proto.TermMatchType;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
+import com.google.common.util.concurrent.MoreExecutors;
import org.junit.After;
import org.junit.Before;
@@ -72,6 +88,7 @@
import java.util.Map;
import java.util.Set;
+@SuppressWarnings("GuardedBy")
public class AppSearchImplTest {
/**
* Always trigger optimize in this class. OptimizeStrategy will be tested in its own test class.
@@ -80,6 +97,12 @@
@Rule
public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
private File mAppSearchDir;
+
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+
+ // The caller access for this package
+ private final CallerAccess mSelfCallerAccess = new CallerAccess(mContext.getPackageName());
+
private AppSearchImpl mAppSearchImpl;
@Before
@@ -88,7 +111,9 @@
mAppSearchImpl = AppSearchImpl.create(
mAppSearchDir,
new UnlimitedLimitConfig(),
- /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+ /*initStatsBuilder=*/ null,
+ ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
}
@After
@@ -362,20 +387,24 @@
// Insert schema
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert a document and then remove it to generate garbage.
GenericDocument document = new GenericDocument.Builder<>("namespace", "id", "type").build();
- mAppSearchImpl.putDocument("package", "database", document, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
mAppSearchImpl.remove("package", "database", "namespace", "id",
/*removeStatsBuilder=*/ null);
@@ -409,28 +438,27 @@
@Test
public void testReset() throws Exception {
// Insert schema
- Context context = ApplicationProvider.getApplicationContext();
List<AppSearchSchema> schemas = ImmutableList.of(
new AppSearchSchema.Builder("Type1").build(),
new AppSearchSchema.Builder("Type2").build());
- mAppSearchImpl.setSchema(
- context.getPackageName(),
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
"database1",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert a valid doc
GenericDocument validDoc =
new GenericDocument.Builder<>("namespace1", "id1", "Type1").build();
mAppSearchImpl.putDocument(
- context.getPackageName(),
+ mContext.getPackageName(),
"database1",
validDoc,
+ /*sendChangeNotifications=*/ false,
/*logger=*/null);
// Query it via global query. We use the same code again later so this is to make sure we
@@ -438,10 +466,7 @@
SearchResultPage results = mAppSearchImpl.globalQuery(
/*queryExpression=*/ "",
new SearchSpec.Builder().addFilterSchemas("Type1").build(),
- context.getPackageName(),
- /*visibilityStore=*/ null,
- Process.INVALID_UID,
- /*callerHasSystemAccess=*/ false,
+ mSelfCallerAccess,
/*logger=*/ null);
assertThat(results.getResults()).hasSize(1);
assertThat(results.getResults().get(0).getGenericDocument()).isEqualTo(validDoc);
@@ -450,7 +475,7 @@
DocumentProto invalidDoc = DocumentProto.newBuilder()
.setNamespace("invalidNamespace")
.setUri("id2")
- .setSchema(context.getPackageName() + "$database1/Type1")
+ .setSchema(mContext.getPackageName() + "$database1/Type1")
.build();
AppSearchException e = assertThrows(
AppSearchException.class,
@@ -466,7 +491,8 @@
InitializeStats.Builder initStatsBuilder = new InitializeStats.Builder();
mAppSearchImpl.close();
mAppSearchImpl = AppSearchImpl.create(
- mAppSearchDir, new UnlimitedLimitConfig(), initStatsBuilder, ALWAYS_OPTIMIZE);
+ mAppSearchDir, new UnlimitedLimitConfig(), initStatsBuilder, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
// Check recovery state
InitializeStats initStats = initStatsBuilder.build();
@@ -485,45 +511,43 @@
assertThat(initStats.getResetStatusCode()).isEqualTo(AppSearchResult.RESULT_OK);
// Make sure all our data is gone
- assertThat(mAppSearchImpl.getSchema(context.getPackageName(), "database1").getSchemas())
+ assertThat(mAppSearchImpl.getSchema(
+ /*packageName=*/mContext.getPackageName(),
+ /*databaseName=*/"database1",
+ /*callerAccess=*/mSelfCallerAccess)
+ .getSchemas())
.isEmpty();
results = mAppSearchImpl.globalQuery(
/*queryExpression=*/ "",
new SearchSpec.Builder().addFilterSchemas("Type1").build(),
- context.getPackageName(),
- /*visibilityStore=*/ null,
- Process.INVALID_UID,
- /*callerHasSystemAccess=*/ false,
+ mSelfCallerAccess,
/*logger=*/ null);
assertThat(results.getResults()).isEmpty();
// Make sure the index can now be used successfully
- mAppSearchImpl.setSchema(
- context.getPackageName(),
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
"database1",
Collections.singletonList(new AppSearchSchema.Builder("Type1").build()),
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert a valid doc
mAppSearchImpl.putDocument(
- context.getPackageName(),
+ mContext.getPackageName(),
"database1",
validDoc,
+ /*sendChangeNotifications=*/ false,
/*logger=*/null);
// Query it via global query.
results = mAppSearchImpl.globalQuery(
/*queryExpression=*/ "",
new SearchSpec.Builder().addFilterSchemas("Type1").build(),
- context.getPackageName(),
- /*visibilityStore=*/ null,
- Process.INVALID_UID,
- /*callerHasSystemAccess=*/ false,
+ mSelfCallerAccess,
/*logger=*/ null);
assertThat(results.getResults()).hasSize(1);
assertThat(results.getResults().get(0).getGenericDocument()).isEqualTo(validDoc);
@@ -547,35 +571,38 @@
// Insert package1 schema
List<AppSearchSchema> schema1 =
ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schema1,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert package2 schema
List<AppSearchSchema> schema2 =
ImmutableList.of(new AppSearchSchema.Builder("schema2").build());
- mAppSearchImpl.setSchema(
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package2",
"database2",
schema2,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert package1 document
GenericDocument document = new GenericDocument.Builder<>("namespace", "id", "schema1")
.build();
- mAppSearchImpl.putDocument("package1", "database1", document, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// No query filters specified, package2 shouldn't be able to query for package1's documents.
SearchSpec searchSpec =
@@ -586,7 +613,12 @@
// Insert package2 document
document = new GenericDocument.Builder<>("namespace", "id", "schema2").build();
- mAppSearchImpl.putDocument("package2", "database2", document, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package2",
+ "database2",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// No query filters specified. package2 should only get its own documents back.
searchResultPage = mAppSearchImpl.query("package2", "database2", "", searchSpec, /*logger=
@@ -604,35 +636,38 @@
// Insert package1 schema
List<AppSearchSchema> schema1 =
ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schema1,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert package2 schema
List<AppSearchSchema> schema2 =
ImmutableList.of(new AppSearchSchema.Builder("schema2").build());
- mAppSearchImpl.setSchema(
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package2",
"database2",
schema2,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert package1 document
GenericDocument document = new GenericDocument.Builder<>("namespace", "id",
"schema1").build();
- mAppSearchImpl.putDocument("package1", "database1", document, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// "package1" filter specified, but package2 shouldn't be able to query for package1's
// documents.
@@ -646,7 +681,12 @@
// Insert package2 document
document = new GenericDocument.Builder<>("namespace", "id", "schema2").build();
- mAppSearchImpl.putDocument("package2", "database2", document, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package2",
+ "database2",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// "package2" filter specified, package2 should only get its own documents back.
searchSpec = new SearchSpec.Builder()
@@ -660,43 +700,371 @@
}
@Test
- public void testGlobalQueryEmptyDatabase() throws Exception {
+ public void testGlobalQuery_emptyPackage() throws Exception {
SearchSpec searchSpec =
new SearchSpec.Builder().setTermMatch(TermMatchType.Code.PREFIX_VALUE).build();
SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(
- "",
+ /*queryExpression=*/"",
searchSpec,
- /*callerPackageName=*/ "",
- /*visibilityStore=*/ null,
- Process.INVALID_UID,
- /*callerHasSystemAccess=*/ false,
+ new CallerAccess(/*callingPackageName=*/""),
/*logger=*/ null);
assertThat(searchResultPage.getResults()).isEmpty();
}
@Test
+ public void testSearchSuggestion() throws Exception {
+ // Insert schema
+ List<AppSearchSchema> schemas = Collections.singletonList(
+ new AppSearchSchema.Builder("type")
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("body")
+ .setIndexingType(
+ AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(
+ AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build())
+ .build());
+ mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+
+ // Insert three documents.
+ GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "type")
+ .setPropertyString("body", "termOne")
+ .build();
+ GenericDocument doc2 = new GenericDocument.Builder<>("namespace", "id2", "type")
+ .setPropertyString("body", "termOne termTwo")
+ .build();
+ GenericDocument doc3 = new GenericDocument.Builder<>("namespace", "id3", "type")
+ .setPropertyString("body", "termOne termTwo termThree")
+ .build();
+ mAppSearchImpl.putDocument("package", "database", doc1,
+ /*sendChangeNotifications=*/ false, /*logger=*/ null);
+ mAppSearchImpl.putDocument("package", "database", doc2,
+ /*sendChangeNotifications=*/ false, /*logger=*/ null);
+ mAppSearchImpl.putDocument("package", "database", doc3,
+ /*sendChangeNotifications=*/ false, /*logger=*/ null);
+
+ List<SearchSuggestionResult> suggestions = mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+ assertThat(suggestions).hasSize(3);
+ assertThat(suggestions.get(0).getSuggestedResult()).isEqualTo("termone");
+ assertThat(suggestions.get(1).getSuggestedResult()).isEqualTo("termtwo");
+ assertThat(suggestions.get(2).getSuggestedResult()).isEqualTo("termthree");
+
+ // Set total result count to be 2.
+ suggestions = mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/2).build());
+ assertThat(suggestions).hasSize(2);
+ assertThat(suggestions.get(0).getSuggestedResult()).isEqualTo("termone");
+ assertThat(suggestions.get(1).getSuggestedResult()).isEqualTo("termtwo");
+ }
+
+ @Test
+ public void testSearchSuggestion_removeDocument() throws Exception {
+ // Insert schema
+ List<AppSearchSchema> schemas = Collections.singletonList(
+ new AppSearchSchema.Builder("type")
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("body")
+ .setIndexingType(
+ AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(
+ AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build())
+ .build());
+ mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+
+ // Insert a document.
+ GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "type")
+ .setPropertyString("body", "termOne")
+ .build();
+ mAppSearchImpl.putDocument("package", "database", doc1,
+ /*sendChangeNotifications=*/ false, /*logger=*/ null);
+
+ List<SearchSuggestionResult> suggestions = mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+ assertThat(suggestions).hasSize(1);
+ assertThat(suggestions.get(0).getSuggestedResult()).isEqualTo("termone");
+
+ // Remove the document.
+ mAppSearchImpl.remove("package", "database", "namespace", "id1",
+ /*removeStatsBuilder=*/null);
+
+ // Now we cannot find any suggestion
+ suggestions = mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+ assertThat(suggestions).isEmpty();
+ }
+
+ @Test
+ public void testSearchSuggestion_replaceDocument() throws Exception {
+ // Insert schema
+ List<AppSearchSchema> schemas = Collections.singletonList(
+ new AppSearchSchema.Builder("type")
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("body")
+ .setIndexingType(
+ AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(
+ AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build())
+ .build());
+ mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+
+ // Insert a document.
+ GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "type")
+ .setPropertyString("body", "tart two three")
+ .build();
+ mAppSearchImpl.putDocument("package", "database", doc1,
+ /*sendChangeNotifications=*/ false, /*logger=*/ null);
+ SearchSuggestionResult tartResult =
+ new SearchSuggestionResult.Builder().setSuggestedResult("tart").build();
+ SearchSuggestionResult twoResult =
+ new SearchSuggestionResult.Builder().setSuggestedResult("two").build();
+ SearchSuggestionResult threeResult =
+ new SearchSuggestionResult.Builder().setSuggestedResult("three").build();
+ SearchSuggestionResult twistResult =
+ new SearchSuggestionResult.Builder().setSuggestedResult("twist").build();
+ List<SearchSuggestionResult> suggestions = mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+ assertThat(suggestions).containsExactly(tartResult, twoResult, threeResult);
+
+ // replace the document with two terms.
+ GenericDocument replaceDocument = new GenericDocument.Builder<>("namespace", "id1", "type")
+ .setPropertyString("body", "twist three")
+ .build();
+ mAppSearchImpl.putDocument("package", "database", replaceDocument,
+ /*sendChangeNotifications=*/ false, /*logger=*/ null);
+
+ // Now we cannot find any suggestion
+ suggestions = mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+ assertThat(suggestions).containsExactly(twistResult, threeResult);
+ }
+
+ @Test
+ public void testSearchSuggestion_namespaceFilter() throws Exception {
+ // Insert schema
+ List<AppSearchSchema> schemas = Collections.singletonList(
+ new AppSearchSchema.Builder("type")
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("body")
+ .setIndexingType(
+ AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(
+ AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build())
+ .build());
+ mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+
+ // Insert three documents.
+ GenericDocument doc1 = new GenericDocument.Builder<>("namespace1", "id1", "type")
+ .setPropertyString("body", "term1")
+ .build();
+ GenericDocument doc2 = new GenericDocument.Builder<>("namespace2", "id2", "type")
+ .setPropertyString("body", "term1 term2")
+ .build();
+ GenericDocument doc3 = new GenericDocument.Builder<>("namespace3", "id3", "type")
+ .setPropertyString("body", "term1 term2 term3")
+ .build();
+
+ mAppSearchImpl.putDocument("package", "database", doc1,
+ /*sendChangeNotifications=*/ false, /*logger=*/ null);
+ mAppSearchImpl.putDocument("package", "database", doc2,
+ /*sendChangeNotifications=*/ false, /*logger=*/ null);
+ mAppSearchImpl.putDocument("package", "database", doc3,
+ /*sendChangeNotifications=*/ false, /*logger=*/ null);
+
+ List<SearchSuggestionResult> suggestions = mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+ .addFilterNamespaces("namespace1").build());
+ assertThat(suggestions).hasSize(1);
+ assertThat(suggestions.get(0).getSuggestedResult()).isEqualTo("term1");
+
+ suggestions = mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+ .addFilterNamespaces("namespace1", "namespace2")
+ .build());
+ assertThat(suggestions).hasSize(2);
+ assertThat(suggestions.get(0).getSuggestedResult()).isEqualTo("term1");
+ assertThat(suggestions.get(1).getSuggestedResult()).isEqualTo("term2");
+ }
+
+ @Test
+ public void testSearchSuggestion_invalidPrefix() throws Exception {
+ // Insert schema just put something in the AppSearch to make it searchable.
+ List<AppSearchSchema> schemas = Collections.singletonList(
+ new AppSearchSchema.Builder("type")
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("body")
+ .setIndexingType(
+ AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(
+ AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build())
+ .build());
+ mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ GenericDocument doc = new GenericDocument.Builder<>("namespace1", "id1", "type")
+ .setPropertyString("body", "term1")
+ .build();
+ mAppSearchImpl.putDocument("package", "database", doc,
+ /*sendChangeNotifications=*/ false, /*logger=*/ null);
+
+ List<SearchSuggestionResult> suggestions = mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"t:",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+ assertThat(suggestions).isEmpty();
+ suggestions = mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"t-",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+ assertThat(suggestions).isEmpty();
+ suggestions = mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"t ",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+ assertThat(suggestions).isEmpty();
+ suggestions = mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"{t}",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+ assertThat(suggestions).isEmpty();
+ suggestions = mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"(t)",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build());
+ assertThat(suggestions).isEmpty();
+ }
+
+ @Test
+ public void testSearchSuggestion_emptyPrefix() throws Exception {
+ // Insert schema just put something in the AppSearch to make it searchable.
+ List<AppSearchSchema> schemas = Collections.singletonList(
+ new AppSearchSchema.Builder("type")
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("body")
+ .setIndexingType(
+ AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(
+ AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build())
+ .build());
+ mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ GenericDocument doc = new GenericDocument.Builder<>("namespace1", "id1", "type")
+ .setPropertyString("body", "term1")
+ .build();
+ mAppSearchImpl.putDocument("package", "database", doc,
+ /*sendChangeNotifications=*/ false, /*logger=*/ null);
+
+ AppSearchException e = assertThrows(AppSearchException.class,
+ () -> mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+ .addFilterNamespaces("namespace1")
+ .build()));
+ assertThat(e.getResultCode()).isEqualTo(RESULT_INVALID_ARGUMENT);
+ assertThat(e).hasMessageThat().contains("suggestionQueryExpression cannot be empty.");
+ }
+
+ @Test
public void testGetNextPageToken_query() throws Exception {
// Insert package1 schema
List<AppSearchSchema> schema1 =
ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schema1,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert two package1 documents
GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
"schema1").build();
GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
"schema1").build();
- mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
- mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Query for only 1 result per page
SearchSpec searchSpec = new SearchSpec.Builder()
@@ -723,24 +1091,33 @@
// Insert package1 schema
List<AppSearchSchema> schema1 =
ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schema1,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert two package1 documents
GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
"schema1").build();
GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
"schema1").build();
- mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
- mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Query for only 1 result per page
SearchSpec searchSpec = new SearchSpec.Builder()
@@ -777,33 +1154,44 @@
// Insert package1 schema
List<AppSearchSchema> schema1 =
ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schema1,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert two package1 documents
GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
"schema1").build();
GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
"schema1").build();
- mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
- mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Query for only 1 result per page
SearchSpec searchSpec = new SearchSpec.Builder()
.setTermMatch(TermMatchType.Code.PREFIX_VALUE)
.setResultCountPerPage(1)
.build();
- SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(/*queryExpression=*/ "",
- searchSpec, "package1", /*visibilityStore=*/ null, Process.myUid(),
- /*callerHasSystemAccess=*/ false, /*logger=*/ null);
+ SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(
+ /*queryExpression=*/ "",
+ searchSpec,
+ new CallerAccess(/*callingPackageName=*/"package1"),
+ /*logger=*/ null);
// Document2 will come first because it was inserted last and default return order is
// most recent.
@@ -822,33 +1210,44 @@
// Insert package1 schema
List<AppSearchSchema> schema1 =
ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schema1,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert two package1 documents
GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
"schema1").build();
GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
"schema1").build();
- mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
- mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Query for only 1 result per page
SearchSpec searchSpec = new SearchSpec.Builder()
.setTermMatch(TermMatchType.Code.PREFIX_VALUE)
.setResultCountPerPage(1)
.build();
- SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(/*queryExpression=*/ "",
- searchSpec, "package1", /*visibilityStore=*/ null, Process.myUid(),
- /*callerHasSystemAccess=*/ false, /*logger=*/ null);
+ SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(
+ /*queryExpression=*/ "",
+ searchSpec,
+ new CallerAccess(/*callingPackageName=*/"package1"),
+ /*logger=*/ null);
// Document2 will come first because it was inserted last and default return order is
// most recent.
@@ -877,24 +1276,33 @@
// Insert package1 schema
List<AppSearchSchema> schema1 =
ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schema1,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert two package1 documents
GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
"schema1").build();
GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
"schema1").build();
- mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
- mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Query for only 1 result per page
SearchSpec searchSpec = new SearchSpec.Builder()
@@ -928,21 +1336,25 @@
// Insert package1 schema
List<AppSearchSchema> schema1 =
ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schema1,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert one package1 documents
GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
"schema1").build();
- mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Query for 2 results per page, so all the results can fit in one page.
SearchSpec searchSpec = new SearchSpec.Builder()
@@ -968,24 +1380,33 @@
// Insert package1 schema
List<AppSearchSchema> schema1 =
ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schema1,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert two package1 documents
GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
"schema1").build();
GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
"schema1").build();
- mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
- mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Query for only 1 result per page
SearchSpec searchSpec = new SearchSpec.Builder()
@@ -1022,33 +1443,44 @@
// Insert package1 schema
List<AppSearchSchema> schema1 =
ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schema1,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert two package1 documents
GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
"schema1").build();
GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
"schema1").build();
- mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
- mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Query for only 1 result per page
SearchSpec searchSpec = new SearchSpec.Builder()
.setTermMatch(TermMatchType.Code.PREFIX_VALUE)
.setResultCountPerPage(1)
.build();
- SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(/*queryExpression=*/ "",
- searchSpec, "package1", /*visibilityStore=*/ null, Process.myUid(),
- /*callerHasSystemAccess=*/ false, /*logger=*/ null);
+ SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(
+ /*queryExpression=*/ "",
+ searchSpec,
+ new CallerAccess(/*callingPackageName=*/"package1"),
+ /*logger=*/ null);
// Document2 will come first because it was inserted last and default return order is
// most recent.
@@ -1074,33 +1506,44 @@
// Insert package1 schema
List<AppSearchSchema> schema1 =
ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schema1,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert two package1 documents
GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
"schema1").build();
GenericDocument document2 = new GenericDocument.Builder<>("namespace", "id2",
"schema1").build();
- mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
- mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Query for only 1 result per page
SearchSpec searchSpec = new SearchSpec.Builder()
.setTermMatch(TermMatchType.Code.PREFIX_VALUE)
.setResultCountPerPage(1)
.build();
- SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(/*queryExpression=*/ "",
- searchSpec, "package1", /*visibilityStore=*/ null, Process.myUid(),
- /*callerHasSystemAccess=*/ false, /*logger=*/ null);
+ SearchResultPage searchResultPage = mAppSearchImpl.globalQuery(
+ /*queryExpression=*/ "",
+ searchSpec,
+ new CallerAccess(/*callingPackageName=*/"package1"),
+ /*logger=*/ null);
// Document2 will come first because it was inserted last and default return order is
// most recent.
@@ -1151,16 +1594,15 @@
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("Email").build());
// Set schema Email to AppSearch database1
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database1",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Create expected schemaType proto.
SchemaProto expectedProto = SchemaProto.newBuilder()
@@ -1189,32 +1631,32 @@
.build());
oldSchemas.add(new AppSearchSchema.Builder("Text").build());
// Set schema Email to AppSearch database1
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database1",
oldSchemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Create incompatible schema
List<AppSearchSchema> newSchemas =
Collections.singletonList(new AppSearchSchema.Builder("Email").build());
// set email incompatible and delete text
- SetSchemaResponse setSchemaResponse = mAppSearchImpl.setSchema(
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database1",
newSchemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ true,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ SetSchemaResponse setSchemaResponse = internalSetSchemaResponse.getSetSchemaResponse();
+
assertThat(setSchemaResponse.getDeletedTypes()).containsExactly("Text");
assertThat(setSchemaResponse.getIncompatibleTypes()).containsExactly("Email");
}
@@ -1228,16 +1670,15 @@
new AppSearchSchema.Builder("Email").build(),
new AppSearchSchema.Builder("Document").build());
// Set schema Email and Document to AppSearch database1
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database1",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Create expected schemaType proto.
SchemaProto expectedProto = SchemaProto.newBuilder()
@@ -1257,31 +1698,30 @@
final List<AppSearchSchema> finalSchemas = Collections.singletonList(
new AppSearchSchema.Builder("Email").build());
- SetSchemaResponse setSchemaResponse =
- mAppSearchImpl.setSchema(
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database1",
finalSchemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
- // Check the Document type has been deleted.
+ // We are fail to set this call since forceOverride is false.
+ assertThat(internalSetSchemaResponse.isSuccess()).isFalse();
+ SetSchemaResponse setSchemaResponse = internalSetSchemaResponse.getSetSchemaResponse();
+ // Check the incompatible reason is we are trying to delete Document type.
assertThat(setSchemaResponse.getDeletedTypes()).containsExactly("Document");
// ForceOverride to delete.
- mAppSearchImpl.setSchema(
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database1",
finalSchemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ true,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Check Document schema is removed.
expectedProto = SchemaProto.newBuilder()
@@ -1308,26 +1748,24 @@
new AppSearchSchema.Builder("Document").build());
// Set schema Email and Document to AppSearch database1 and 2
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database1",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
- mAppSearchImpl.setSchema(
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database2",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Create expected schemaType proto.
SchemaProto expectedProto = SchemaProto.newBuilder()
@@ -1352,16 +1790,15 @@
// Save only Email to database1 this time.
schemas = Collections.singletonList(new AppSearchSchema.Builder("Email").build());
- mAppSearchImpl.setSchema(
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database1",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ true,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Create expected schemaType list, database 1 should only contain Email but database 2
// remains in same.
@@ -1393,21 +1830,24 @@
// Insert package schema
List<AppSearchSchema> schema =
ImmutableList.of(new AppSearchSchema.Builder("schema").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schema,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert package document
GenericDocument document = new GenericDocument.Builder<>("namespace", "id",
"schema").build();
- mAppSearchImpl.putDocument("package", "database", document,
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document,
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// Verify the document is indexed.
@@ -1444,31 +1884,36 @@
existingPackages.add(PrefixUtil.getPackageName(existingSchemas.get(i).getSchemaType()));
}
+ // Create VisibilityDocument
+ VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("schema")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .setCreationTimestampMillis(12345L)
+ .build();
+
// Insert schema for package A and B.
List<AppSearchSchema> schema =
ImmutableList.of(new AppSearchSchema.Builder("schema").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"packageA",
"database",
schema,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
- mAppSearchImpl.setSchema(
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"packageB",
"database",
schema,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
- // Verify these two packages is stored in AppSearch
+ // Verify these two packages are stored in AppSearch.
SchemaProto expectedProto = SchemaProto.newBuilder()
.addTypes(
SchemaTypeConfigProto.newBuilder()
@@ -1483,6 +1928,26 @@
assertThat(mAppSearchImpl.getSchemaProtoLocked().getTypesList())
.containsExactlyElementsIn(expectedTypes);
+ // Verify these two visibility documents are stored in AppSearch.
+ VisibilityDocument expectedVisibilityDocumentA =
+ new VisibilityDocument.Builder("packageA$database/schema")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .setCreationTimestampMillis(12345L)
+ .build();
+ VisibilityDocument expectedVisibilityDocumentB =
+ new VisibilityDocument.Builder("packageB$database/schema")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .setCreationTimestampMillis(12345L)
+ .build();
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked
+ .getVisibility("packageA$database/schema"))
+ .isEqualTo(expectedVisibilityDocumentA);
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked
+ .getVisibility("packageB$database/schema"))
+ .isEqualTo(expectedVisibilityDocumentB);
+
// Prune packages
mAppSearchImpl.prunePackageData(existingPackages);
@@ -1491,6 +1956,12 @@
.containsExactlyElementsIn(existingSchemas);
assertThat(mAppSearchImpl.getPackageToDatabases())
.containsExactlyEntriesIn(existingDatabases);
+
+ // Verify the VisibilitySetting is removed.
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked
+ .getVisibility("packageA$database/schema")).isNull();
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked
+ .getVisibility("packageB$database/schema")).isNull();
}
@Test
@@ -1501,71 +1972,121 @@
// Has database1
expectedMapping.put("package1", ImmutableSet.of("database1"));
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1", "database1",
Collections.singletonList(new AppSearchSchema.Builder("schema").build()),
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
assertThat(mAppSearchImpl.getPackageToDatabases()).containsExactlyEntriesIn(
expectedMapping);
// Has both databases
expectedMapping.put("package1", ImmutableSet.of("database1", "database2"));
- mAppSearchImpl.setSchema(
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1", "database2",
Collections.singletonList(new AppSearchSchema.Builder("schema").build()),
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
assertThat(mAppSearchImpl.getPackageToDatabases()).containsExactlyEntriesIn(
expectedMapping);
// Has both packages
expectedMapping.put("package2", ImmutableSet.of("database1"));
- mAppSearchImpl.setSchema(
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package2", "database1",
Collections.singletonList(new AppSearchSchema.Builder("schema").build()),
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
assertThat(mAppSearchImpl.getPackageToDatabases()).containsExactlyEntriesIn(
expectedMapping);
}
+ @Test
+ public void testGetAllPrefixedSchemaTypes() throws Exception {
+ // Insert schema
+ List<AppSearchSchema> schemas1 =
+ Collections.singletonList(new AppSearchSchema.Builder("type1").build());
+ List<AppSearchSchema> schemas2 =
+ Collections.singletonList(new AppSearchSchema.Builder("type2").build());
+ List<AppSearchSchema> schemas3 =
+ Collections.singletonList(new AppSearchSchema.Builder("type3").build());
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package1",
+ "database1",
+ schemas1,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package1",
+ "database2",
+ schemas2,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package2",
+ "database1",
+ schemas3,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ assertThat(mAppSearchImpl.getAllPrefixedSchemaTypes()).containsExactly(
+ "package1$database1/type1",
+ "package1$database2/type2",
+ "package2$database1/type3",
+ "VS#Pkg$VS#Db/VisibilityType", // plus the stored Visibility schema
+ "VS#Pkg$VS#Db/VisibilityPermissionType");
+ }
+
@FlakyTest(bugId = 204186664)
@Test
public void testReportUsage() throws Exception {
// Insert schema
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert two docs
GenericDocument document1 =
new GenericDocument.Builder<>("namespace", "id1", "type").build();
GenericDocument document2 =
new GenericDocument.Builder<>("namespace", "id2", "type").build();
- mAppSearchImpl.putDocument("package", "database", document1, /*logger=*/ null);
- mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Report some usages. id1 has 2 app and 1 system usage, id2 has 1 app and 2 system usage.
mAppSearchImpl.reportUsage("package", "database", "namespace",
@@ -1638,16 +2159,15 @@
// Insert schema for "package1"
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Since "package1" doesn't have a document, it get any space attributed to it.
StorageInfo storageInfo = mAppSearchImpl.getStorageInfoForPackage("package1");
@@ -1662,39 +2182,52 @@
Collections.singletonList(new AppSearchSchema.Builder("type").build());
// Insert schema for "package1"
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert document for "package1"
GenericDocument document =
new GenericDocument.Builder<>("namespace", "id1", "type").build();
- mAppSearchImpl.putDocument("package1", "database", document, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Insert schema for "package2"
- mAppSearchImpl.setSchema(
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package2",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert two documents for "package2"
document = new GenericDocument.Builder<>("namespace", "id1", "type").build();
- mAppSearchImpl.putDocument("package2", "database", document, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package2",
+ "database",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
document = new GenericDocument.Builder<>("namespace", "id2", "type").build();
- mAppSearchImpl.putDocument("package2", "database", document, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package2",
+ "database",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
StorageInfo storageInfo = mAppSearchImpl.getStorageInfoForPackage("package1");
long size1 = storageInfo.getSizeBytes();
@@ -1728,16 +2261,15 @@
// Insert schema for "package1"
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// "package2" doesn't exist yet, so it shouldn't have any storage size
StorageInfo storageInfo = mAppSearchImpl.getStorageInfoForDatabase("package1",
@@ -1752,16 +2284,15 @@
// Insert schema for "package1"
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Since "package1", "database1" doesn't have a document, it get any space attributed to it.
StorageInfo storageInfo = mAppSearchImpl.getStorageInfoForDatabase("package1", "database1");
@@ -1775,38 +2306,50 @@
// Insert schema for "package1", "database1" and "database2"
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
- mAppSearchImpl.setSchema(
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database2",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Add a document for "package1", "database1"
GenericDocument document =
new GenericDocument.Builder<>("namespace1", "id1", "type").build();
- mAppSearchImpl.putDocument("package1", "database1", document, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Add two documents for "package1", "database2"
document = new GenericDocument.Builder<>("namespace1", "id1", "type").build();
- mAppSearchImpl.putDocument("package1", "database2", document, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database2",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
document = new GenericDocument.Builder<>("namespace1", "id2", "type").build();
- mAppSearchImpl.putDocument("package1", "database2", document, /*logger=*/ null);
-
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database2",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
StorageInfo storageInfo = mAppSearchImpl.getStorageInfoForDatabase("package1", "database1");
long size1 = storageInfo.getSizeBytes();
@@ -1830,16 +2373,15 @@
// Initial check that we could do something at first.
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
mAppSearchImpl.close();
@@ -1848,20 +2390,21 @@
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null));
assertThrows(IllegalStateException.class, () -> mAppSearchImpl.getSchema(
- "package", "database"));
+ /*packageName=*/"package",
+ /*databaseName=*/"database",
+ /*callerAccess=*/mSelfCallerAccess));
assertThrows(IllegalStateException.class, () -> mAppSearchImpl.putDocument(
"package",
"database",
new GenericDocument.Builder<>("namespace", "id", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null));
assertThrows(IllegalStateException.class, () -> mAppSearchImpl.getDocument(
@@ -1877,10 +2420,7 @@
assertThrows(IllegalStateException.class, () -> mAppSearchImpl.globalQuery(
"query",
new SearchSpec.Builder().build(),
- "package",
- /*visibilityStore=*/ null,
- Process.INVALID_UID,
- /*callerHasSystemAccess=*/ false,
+ mSelfCallerAccess,
/*logger=*/ null));
assertThrows(IllegalStateException.class, () -> mAppSearchImpl.getNextPage("package",
@@ -1918,21 +2458,25 @@
public void testPutPersistsWithLiteFlush() throws Exception {
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Add a document and persist it.
GenericDocument document =
new GenericDocument.Builder<>("namespace1", "id1", "type").build();
- mAppSearchImpl.putDocument("package", "database", document, /*logger=*/null);
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
GenericDocument getResult = mAppSearchImpl.getDocument("package", "database", "namespace1",
@@ -1945,7 +2489,8 @@
mAppSearchDir,
new UnlimitedLimitConfig(),
/*initStatsBuilder=*/ null,
- ALWAYS_OPTIMIZE);
+ ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
getResult = appSearchImpl2.getDocument("package", "database", "namespace1",
"id1",
Collections.emptyMap());
@@ -1957,24 +2502,33 @@
public void testDeletePersistsWithLiteFlush() throws Exception {
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Add two documents and persist them.
GenericDocument document1 =
new GenericDocument.Builder<>("namespace1", "id1", "type").build();
- mAppSearchImpl.putDocument("package", "database", document1, /*logger=*/null);
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
GenericDocument document2 =
new GenericDocument.Builder<>("namespace1", "id2", "type").build();
- mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/null);
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
GenericDocument getResult = mAppSearchImpl.getDocument("package", "database", "namespace1",
@@ -2004,7 +2558,8 @@
mAppSearchDir,
new UnlimitedLimitConfig(),
/*initStatsBuilder=*/ null,
- ALWAYS_OPTIMIZE);
+ ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
assertThrows(AppSearchException.class, () -> appSearchImpl2.getDocument("package",
"database",
"namespace1",
@@ -2021,24 +2576,33 @@
public void testDeleteByQueryPersistsWithLiteFlush() throws Exception {
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Add two documents and persist them.
GenericDocument document1 =
new GenericDocument.Builder<>("namespace1", "id1", "type").build();
- mAppSearchImpl.putDocument("package", "database", document1, /*logger=*/null);
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
GenericDocument document2 =
new GenericDocument.Builder<>("namespace2", "id2", "type").build();
- mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/null);
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
GenericDocument getResult = mAppSearchImpl.getDocument("package", "database", "namespace1",
@@ -2070,7 +2634,8 @@
mAppSearchDir,
new UnlimitedLimitConfig(),
/*initStatsBuilder=*/ null,
- ALWAYS_OPTIMIZE);
+ ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
assertThrows(AppSearchException.class, () -> appSearchImpl2.getDocument("package",
"database",
"namespace1",
@@ -2087,24 +2652,33 @@
public void testGetIcingSearchEngineStorageInfo() throws Exception {
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Add two documents
GenericDocument document1 =
new GenericDocument.Builder<>("namespace1", "id1", "type").build();
- mAppSearchImpl.putDocument("package", "database", document1, /*logger=*/null);
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
GenericDocument document2 =
new GenericDocument.Builder<>("namespace1", "id2", "type").build();
- mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/null);
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
StorageInfoProto storageInfo = mAppSearchImpl.getRawStorageInfoProto();
@@ -2116,7 +2690,52 @@
.isEqualTo(2);
assertThat(
storageInfo.getSchemaStoreStorageInfo().getNumSchemaTypes())
- .isEqualTo(1);
+ .isEqualTo(3); // +2 for VisibilitySchema
+ }
+
+ @Test
+ public void testGetIcingSearchEngineDebugInfo() throws Exception {
+ List<AppSearchSchema> schemas =
+ Collections.singletonList(new AppSearchSchema.Builder("type").build());
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Add two documents
+ GenericDocument document1 =
+ new GenericDocument.Builder<>("namespace1", "id1", "type").build();
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ GenericDocument document2 =
+ new GenericDocument.Builder<>("namespace1", "id2", "type").build();
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+
+ DebugInfoProto debugInfo =
+ mAppSearchImpl.getRawDebugInfoProto(DebugInfoVerbosity.Code.DETAILED);
+
+ // Simple checks to verify if we can get correct DebugInfoProto from IcingSearchEngine
+ // No need to cover all the fields
+ assertThat(debugInfo.getDocumentInfo().getCorpusInfoList()).hasSize(1);
+ assertThat(
+ debugInfo.getDocumentInfo().getDocumentStorageInfo().getNumAliveDocuments())
+ .isEqualTo(2);
+ assertThat(debugInfo.getSchemaInfo().getSchema().getTypesList())
+ .hasSize(3); // +2 for VisibilitySchema
}
@Test
@@ -2135,28 +2754,38 @@
public int getMaxDocumentCount() {
return 1;
}
+
+ @Override
+ public int getMaxSuggestionCount() {
+ return Integer.MAX_VALUE;
+ }
},
- /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
// Insert schema
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert a document which is too large
GenericDocument document = new GenericDocument.Builder<>(
"this_namespace_is_long_to_make_the_doc_big", "id", "type").build();
AppSearchException e = assertThrows(AppSearchException.class, () ->
- mAppSearchImpl.putDocument("package", "database", document, /*logger=*/ null));
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
"Document \"id\" for package \"package\" serialized to 99 bytes, which exceeds"
@@ -2166,13 +2795,23 @@
// index 1 document.
GenericDocument document2 =
new GenericDocument.Builder<>("namespace", "id2", "type").build();
- mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Now we should get a failure
GenericDocument document3 =
new GenericDocument.Builder<>("namespace", "id3", "type").build();
e = assertThrows(AppSearchException.class, () ->
- mAppSearchImpl.putDocument("package", "database", document3, /*logger=*/ null));
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document3,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
"Package \"package\" exceeded limit of 1 documents");
@@ -2195,35 +2834,46 @@
public int getMaxDocumentCount() {
return 1;
}
+
+ @Override
+ public int getMaxSuggestionCount() {
+ return Integer.MAX_VALUE;
+ }
},
- /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
// Insert schema
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Index a document
mAppSearchImpl.putDocument(
"package",
"database",
new GenericDocument.Builder<>("namespace", "id1", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// Now we should get a failure
GenericDocument document2 =
new GenericDocument.Builder<>("namespace", "id2", "type").build();
AppSearchException e = assertThrows(AppSearchException.class, () ->
- mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/ null));
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
"Package \"package\" exceeded limit of 1 documents");
@@ -2242,12 +2892,23 @@
public int getMaxDocumentCount() {
return 1;
}
+
+ @Override
+ public int getMaxSuggestionCount() {
+ return Integer.MAX_VALUE;
+ }
},
- /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
// Make sure the limit is maintained
e = assertThrows(AppSearchException.class, () ->
- mAppSearchImpl.putDocument("package", "database", document2, /*logger=*/ null));
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
"Package \"package\" exceeded limit of 1 documents");
@@ -2269,45 +2930,58 @@
public int getMaxDocumentCount() {
return 3;
}
+
+ @Override
+ public int getMaxSuggestionCount() {
+ return Integer.MAX_VALUE;
+ }
},
- /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
// Insert schema
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Index 3 documents
mAppSearchImpl.putDocument(
"package",
"database",
new GenericDocument.Builder<>("namespace", "id1", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
mAppSearchImpl.putDocument(
"package",
"database",
new GenericDocument.Builder<>("namespace", "id2", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
mAppSearchImpl.putDocument(
"package",
"database",
new GenericDocument.Builder<>("namespace", "id3", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// Now we should get a failure
GenericDocument document4 =
new GenericDocument.Builder<>("namespace", "id4", "type").build();
AppSearchException e = assertThrows(AppSearchException.class, () ->
- mAppSearchImpl.putDocument("package", "database", document4, /*logger=*/ null));
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document4,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
"Package \"package\" exceeded limit of 3 documents");
@@ -2319,7 +2993,12 @@
// Should still fail
e = assertThrows(AppSearchException.class, () ->
- mAppSearchImpl.putDocument("package", "database", document4, /*logger=*/ null));
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document4,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
"Package \"package\" exceeded limit of 3 documents");
@@ -2329,13 +3008,19 @@
"package", "database", "namespace", "id2", /*removeStatsBuilder=*/null);
// Now doc4 should work
- mAppSearchImpl.putDocument("package", "database", document4, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document4,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// The next one should fail again
e = assertThrows(AppSearchException.class, () -> mAppSearchImpl.putDocument(
"package",
"database",
new GenericDocument.Builder<>("namespace", "id5", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
@@ -2359,63 +3044,67 @@
public int getMaxDocumentCount() {
return 2;
}
+
+ @Override
+ public int getMaxSuggestionCount() {
+ return Integer.MAX_VALUE;
+ }
},
- /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
// Insert schema
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
- mAppSearchImpl.setSchema(
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database2",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
- mAppSearchImpl.setSchema(
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package2",
"database1",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
- mAppSearchImpl.setSchema(
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package2",
"database2",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Index documents in package1/database1
mAppSearchImpl.putDocument(
"package1",
"database1",
new GenericDocument.Builder<>("namespace", "id1", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
mAppSearchImpl.putDocument(
"package1",
"database2",
new GenericDocument.Builder<>("namespace", "id2", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// Indexing a third doc into package1 should fail (here we use database3)
@@ -2424,6 +3113,7 @@
"package1",
"database3",
new GenericDocument.Builder<>("namespace", "id3", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
@@ -2434,6 +3124,7 @@
"package2",
"database1",
new GenericDocument.Builder<>("namespace", "id1", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// Reinitialize to make sure packages are parsed correctly on init
@@ -2450,8 +3141,14 @@
public int getMaxDocumentCount() {
return 2;
}
+
+ @Override
+ public int getMaxSuggestionCount() {
+ return Integer.MAX_VALUE;
+ }
},
- /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
// package1 should still be out of space
e = assertThrows(AppSearchException.class, () ->
@@ -2459,6 +3156,7 @@
"package1",
"database4",
new GenericDocument.Builder<>("namespace", "id4", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
@@ -2469,6 +3167,7 @@
"package2",
"database2",
new GenericDocument.Builder<>("namespace", "id2", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// now package2 really is out of space
@@ -2477,6 +3176,7 @@
"package2",
"database3",
new GenericDocument.Builder<>("namespace", "id3", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
@@ -2499,8 +3199,14 @@
public int getMaxDocumentCount() {
return 3;
}
+
+ @Override
+ public int getMaxSuggestionCount() {
+ return Integer.MAX_VALUE;
+ }
},
- /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
// Insert schema
List<AppSearchSchema> schemas = Collections.singletonList(
@@ -2512,16 +3218,15 @@
AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.build())
.build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Index 3 documents
mAppSearchImpl.putDocument(
@@ -2530,6 +3235,7 @@
new GenericDocument.Builder<>("namespace", "id1", "type")
.setPropertyString("body", "tablet")
.build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
mAppSearchImpl.putDocument(
"package",
@@ -2537,6 +3243,7 @@
new GenericDocument.Builder<>("namespace", "id2", "type")
.setPropertyString("body", "tabby")
.build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
mAppSearchImpl.putDocument(
"package",
@@ -2544,13 +3251,19 @@
new GenericDocument.Builder<>("namespace", "id3", "type")
.setPropertyString("body", "grabby")
.build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// Now we should get a failure
GenericDocument document4 =
new GenericDocument.Builder<>("namespace", "id4", "type").build();
AppSearchException e = assertThrows(AppSearchException.class, () ->
- mAppSearchImpl.putDocument("package", "database", document4, /*logger=*/ null));
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document4,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
"Package \"package\" exceeded limit of 3 documents");
@@ -2565,7 +3278,12 @@
// Should still fail
e = assertThrows(AppSearchException.class, () ->
- mAppSearchImpl.putDocument("package", "database", document4, /*logger=*/ null));
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document4,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
"Package \"package\" exceeded limit of 3 documents");
@@ -2579,11 +3297,17 @@
/*removeStatsBuilder=*/null);
// Now doc4 and doc5 should work
- mAppSearchImpl.putDocument("package", "database", document4, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document4,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
mAppSearchImpl.putDocument(
"package",
"database",
new GenericDocument.Builder<>("namespace", "id5", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// We only deleted 2 docs so the next one should fail again
@@ -2591,6 +3315,7 @@
"package",
"database",
new GenericDocument.Builder<>("namespace", "id6", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
@@ -2613,8 +3338,14 @@
public int getMaxDocumentCount() {
return 2;
}
+
+ @Override
+ public int getMaxSuggestionCount() {
+ return Integer.MAX_VALUE;
+ }
},
- /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
// Insert schema
List<AppSearchSchema> schemas = Collections.singletonList(
@@ -2622,16 +3353,15 @@
.addProperty(
new AppSearchSchema.StringPropertyConfig.Builder("body").build())
.build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Index a document
mAppSearchImpl.putDocument(
@@ -2640,6 +3370,7 @@
new GenericDocument.Builder<>("namespace", "id1", "type")
.setPropertyString("body", "id1.orig")
.build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// Replace it with another doc
mAppSearchImpl.putDocument(
@@ -2648,6 +3379,7 @@
new GenericDocument.Builder<>("namespace", "id1", "type")
.setPropertyString("body", "id1.new")
.build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// Index id2. This should pass but only because we check for replacements.
@@ -2655,13 +3387,19 @@
"package",
"database",
new GenericDocument.Builder<>("namespace", "id2", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// Now we should get a failure on id3
GenericDocument document3 =
new GenericDocument.Builder<>("namespace", "id3", "type").build();
AppSearchException e = assertThrows(AppSearchException.class, () ->
- mAppSearchImpl.putDocument("package", "database", document3, /*logger=*/ null));
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document3,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
"Package \"package\" exceeded limit of 2 documents");
@@ -2684,8 +3422,14 @@
public int getMaxDocumentCount() {
return 2;
}
+
+ @Override
+ public int getMaxSuggestionCount() {
+ return Integer.MAX_VALUE;
+ }
},
- /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
// Insert schema
List<AppSearchSchema> schemas = Collections.singletonList(
@@ -2693,16 +3437,15 @@
.addProperty(
new AppSearchSchema.StringPropertyConfig.Builder("body").build())
.build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package",
"database",
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Index a document
mAppSearchImpl.putDocument(
@@ -2711,6 +3454,7 @@
new GenericDocument.Builder<>("namespace", "id1", "type")
.setPropertyString("body", "id1.orig")
.build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// Replace it with another doc
mAppSearchImpl.putDocument(
@@ -2719,6 +3463,7 @@
new GenericDocument.Builder<>("namespace", "id1", "type")
.setPropertyString("body", "id1.new")
.build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// Reinitialize to make sure replacements are correctly accounted for by init
@@ -2735,23 +3480,1890 @@
public int getMaxDocumentCount() {
return 2;
}
+
+ @Override
+ public int getMaxSuggestionCount() {
+ return Integer.MAX_VALUE;
+ }
},
- /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
// Index id2. This should pass but only because we check for replacements.
mAppSearchImpl.putDocument(
"package",
"database",
new GenericDocument.Builder<>("namespace", "id2", "type").build(),
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
// Now we should get a failure on id3
GenericDocument document3 =
new GenericDocument.Builder<>("namespace", "id3", "type").build();
AppSearchException e = assertThrows(AppSearchException.class, () ->
- mAppSearchImpl.putDocument("package", "database", document3, /*logger=*/ null));
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document3,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null));
assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_OUT_OF_SPACE);
assertThat(e).hasMessageThat().contains(
"Package \"package\" exceeded limit of 2 documents");
}
+ @Test
+ public void testLimitConfig_suggestion() throws Exception {
+ mAppSearchImpl.close();
+ File tempFolder = mTemporaryFolder.newFolder();
+ mAppSearchImpl = AppSearchImpl.create(
+ tempFolder,
+ new LimitConfig() {
+ @Override
+ public int getMaxDocumentSizeBytes() {
+ return Integer.MAX_VALUE;
+ }
+
+ @Override
+ public int getMaxDocumentCount() {
+ return Integer.MAX_VALUE;
+ }
+
+ @Override
+ public int getMaxSuggestionCount() {
+ return 2;
+ }
+ },
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
+
+ AppSearchException e = assertThrows(AppSearchException.class, () ->
+ mAppSearchImpl.searchSuggestion(
+ "package",
+ "database",
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()));
+ assertThat(e.getResultCode()).isEqualTo(RESULT_INVALID_ARGUMENT);
+ assertThat(e).hasMessageThat().contains(
+ "Trying to get 10 suggestion results, which exceeds limit of 2");
+ }
+
+ /**
+ * Ensure that it is okay to register the same observer for multiple packages and that removing
+ * the observer for one package doesn't remove it for the other.
+ */
+ @Test
+ public void testRemoveObserver_onlyAffectsOnePackage() throws Exception {
+ final String fakePackage = "com.android.appsearch.fake.package";
+
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ /*schemas=*/ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/false,
+ /*version=*/0,
+ /*setSchemaStatsBuilder=*/null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Register an observer twice, on different packages.
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ /*listeningPackageAccess=*/mSelfCallerAccess,
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+ mAppSearchImpl.registerObserverCallback(
+ /*listeningPackageAccess=*/mSelfCallerAccess,
+ /*targetPackageName=*/fakePackage,
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Insert a valid doc
+ GenericDocument validDoc =
+ new GenericDocument.Builder<>("namespace1", "id1", "Type1").build();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.putDocument(
+ mContext.getPackageName(),
+ "database1",
+ validDoc,
+ /*sendChangeNotifications=*/ true,
+ /*logger=*/null);
+
+ // Dispatch notifications and empty the observers
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ observer.clear();
+
+ // Remove the observer from the fake package
+ mAppSearchImpl.unregisterObserverCallback(fakePackage, observer);
+
+ // Index a second document
+ GenericDocument doc2 = new GenericDocument.Builder<>("namespace1", "id2", "Type1").build();
+ mAppSearchImpl.putDocument(
+ mContext.getPackageName(),
+ "database1",
+ doc2,
+ /*sendChangeNotifications=*/ true,
+ /*logger=*/null);
+
+ // Observer should still have received this data from its registration on
+ // context.getPackageName(), as we only removed the copy from fakePackage.
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).containsExactly(
+ new DocumentChangeInfo(
+ mContext.getPackageName(),
+ "database1",
+ "namespace1",
+ "Type1",
+ /*changedDocumentIds=*/ImmutableSet.of("id2")));
+ }
+
+ @Test
+ public void testGetGlobalDocumentThrowsExceptionWhenNotVisible() throws Exception {
+ List<AppSearchSchema> schemas =
+ Collections.singletonList(new AppSearchSchema.Builder("type").build());
+
+ // Create a new mAppSearchImpl with a mock Visibility Checker
+ mAppSearchImpl.close();
+ File tempFolder = mTemporaryFolder.newFolder();
+ VisibilityChecker mockVisibilityChecker =
+ (callerAccess, packageName, prefixedSchema, visibilityStore) -> false;
+ mAppSearchImpl = AppSearchImpl.create(
+ tempFolder,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/ null,
+ ALWAYS_OPTIMIZE,
+ mockVisibilityChecker);
+
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Add a document and persist it.
+ GenericDocument document =
+ new GenericDocument.Builder<>("namespace1", "id1", "type").build();
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document,
+ /*sendChangeNotifications=*/false,
+ /*logger=*/null);
+ mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
+
+ AppSearchException e = assertThrows(AppSearchException.class, () ->
+ mAppSearchImpl.globalGetDocument(
+ "package",
+ "database",
+ "namespace1",
+ "id1",
+ /*typePropertyPaths=*/Collections.emptyMap(),
+ /*callerAccess=*/mSelfCallerAccess));
+ assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
+ assertThat(e.getMessage()).isEqualTo("Document (namespace1, id1) not found.");
+ }
+
+ @Test
+ public void testGetGlobalDocument() throws Exception {
+ List<AppSearchSchema> schemas =
+ Collections.singletonList(new AppSearchSchema.Builder("type").build());
+
+ // Create a new mAppSearchImpl with a mock Visibility Checker
+ mAppSearchImpl.close();
+ File tempFolder = mTemporaryFolder.newFolder();
+ VisibilityChecker mockVisibilityChecker =
+ (callerAccess, packageName, prefixedSchema, visibilityStore) -> true;
+ mAppSearchImpl = AppSearchImpl.create(
+ tempFolder,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/ null,
+ ALWAYS_OPTIMIZE,
+ mockVisibilityChecker);
+
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Add a document and persist it.
+ GenericDocument document =
+ new GenericDocument.Builder<>("namespace1", "id1", "type").build();
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
+
+ GenericDocument getResult = mAppSearchImpl.globalGetDocument(
+ "package",
+ "database",
+ "namespace1",
+ "id1",
+ /*typePropertyPaths=*/Collections.emptyMap(),
+ /*callerAccess=*/mSelfCallerAccess);
+ assertThat(getResult).isEqualTo(document);
+ }
+
+ @Test
+ public void getGlobalDocumentTest_notFound() throws Exception {
+ List<AppSearchSchema> schemas =
+ Collections.singletonList(new AppSearchSchema.Builder("type").build());
+
+ // Create a new mAppSearchImpl with a mock Visibility Checker
+ mAppSearchImpl.close();
+ File tempFolder = mTemporaryFolder.newFolder();
+ VisibilityChecker mockVisibilityChecker =
+ (callerAccess, packageName, prefixedSchema, visibilityStore) -> true;
+ mAppSearchImpl = AppSearchImpl.create(
+ tempFolder,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/ null,
+ ALWAYS_OPTIMIZE,
+ mockVisibilityChecker);
+
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Add a document and persist it.
+ GenericDocument document =
+ new GenericDocument.Builder<>("namespace1", "id1", "type").build();
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
+
+ AppSearchException e = assertThrows(AppSearchException.class, () ->
+ mAppSearchImpl.globalGetDocument(
+ "package",
+ "database",
+ "namespace1",
+ "id2",
+ /*typePropertyPaths=*/Collections.emptyMap(),
+ /*callerAccess=*/mSelfCallerAccess));
+ assertThat(e.getResultCode()).isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
+ assertThat(e.getMessage()).isEqualTo("Document (namespace1, id2) not found.");
+ }
+
+ @Test
+ public void getGlobalDocumentNoAccessNoFileHasSameException() throws Exception {
+ List<AppSearchSchema> schemas =
+ Collections.singletonList(new AppSearchSchema.Builder("type").build());
+ // Create a new mAppSearchImpl with a mock Visibility Checker
+ mAppSearchImpl.close();
+ File tempFolder = mTemporaryFolder.newFolder();
+ VisibilityChecker mockVisibilityChecker =
+ (callerAccess, packageName, prefixedSchema, visibilityStore) ->
+ callerAccess.getCallingPackageName().equals("visiblePackage");
+ mAppSearchImpl = AppSearchImpl.create(
+ tempFolder,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/ null,
+ ALWAYS_OPTIMIZE,
+ mockVisibilityChecker);
+
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Add a document and persist it.
+ GenericDocument document =
+ new GenericDocument.Builder<>("namespace1", "id1", "type").build();
+ mAppSearchImpl.putDocument(
+ "package",
+ "database",
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
+
+ AppSearchException unauthorizedException = assertThrows(AppSearchException.class, () ->
+ mAppSearchImpl.globalGetDocument(
+ "package",
+ "database",
+ "namespace1",
+ "id1",
+ /*typePropertyPaths=*/Collections.emptyMap(),
+ new CallerAccess(/*callingPackageName=*/"invisiblePackage")));
+
+ mAppSearchImpl.remove("package", "database", "namespace1", "id1",
+ /*removeStatsBuilder=*/null);
+
+ AppSearchException noDocException = assertThrows(AppSearchException.class, () ->
+ mAppSearchImpl.globalGetDocument(
+ "package",
+ "database",
+ "namespace1",
+ "id1",
+ /*typePropertyPaths=*/Collections.emptyMap(),
+ new CallerAccess(/*callingPackageName=*/"visiblePackage")));
+
+ assertThat(noDocException.getResultCode()).isEqualTo(unauthorizedException.getResultCode());
+ assertThat(noDocException.getMessage()).isEqualTo(unauthorizedException.getMessage());
+ }
+
+ @Test
+ public void testSetVisibility() throws Exception {
+ VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .setCreationTimestampMillis(12345L)
+ .build();
+ List<AppSearchSchema> schemas =
+ Collections.singletonList(new AppSearchSchema.Builder("Email").build());
+
+ // Set schema Email to AppSearch database1 with a visibility document
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package",
+ "database1",
+ schemas,
+ /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ String prefix = PrefixUtil.createPrefix("package", "database1");
+
+ // assert the visibility document is saved.
+ VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .setCreationTimestampMillis(12345L)
+ .build();
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
+ .isEqualTo(expectedDocument);
+ // Verify the VisibilityDocument is saved to AppSearchImpl.
+ VisibilityDocument actualDocument = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix + "Email",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ assertThat(actualDocument).isEqualTo(expectedDocument);
+ }
+
+ @Test
+ public void testSetVisibility_existingVisibilitySettingRetains() throws Exception {
+ // Create Visibility Document for Email1
+ VisibilityDocument visibilityDocument1 = new VisibilityDocument.Builder("Email1")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .setCreationTimestampMillis(12345L)
+ .build();
+ List<AppSearchSchema> schemas1 =
+ Collections.singletonList(new AppSearchSchema.Builder("Email1").build());
+
+ // Set schema Email1 to package1 with a visibility document
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package1",
+ "database",
+ schemas1,
+ /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument1),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ String prefix1 = PrefixUtil.createPrefix("package1", "database");
+
+ // assert the visibility document is saved.
+ VisibilityDocument expectedDocument1 = new VisibilityDocument.Builder(prefix1 + "Email1")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .setCreationTimestampMillis(12345L)
+ .build();
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix1 + "Email1"))
+ .isEqualTo(expectedDocument1);
+ // Verify the VisibilityDocument is saved to AppSearchImpl.
+ VisibilityDocument actualDocument1 = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix1 + "Email1",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ assertThat(actualDocument1).isEqualTo(expectedDocument1);
+
+ // Create Visibility Document for Email2
+ VisibilityDocument visibilityDocument2 = new VisibilityDocument.Builder("Email2")
+ .setNotDisplayedBySystem(false)
+ .addVisibleToPackage(new PackageIdentifier("pkgFoo", new byte[32]))
+ .setCreationTimestampMillis(54321L)
+ .build();
+ List<AppSearchSchema> schemas2 =
+ Collections.singletonList(new AppSearchSchema.Builder("Email2").build());
+
+ // Set schema Email2 to package1 with a visibility document
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package2",
+ "database",
+ schemas2,
+ /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument2),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ String prefix2 = PrefixUtil.createPrefix("package2", "database");
+
+ // assert the visibility document is saved.
+ VisibilityDocument expectedDocument2 = new VisibilityDocument.Builder(prefix2 + "Email2")
+ .setNotDisplayedBySystem(false)
+ .addVisibleToPackage(new PackageIdentifier("pkgFoo", new byte[32]))
+ .setCreationTimestampMillis(54321)
+ .build();
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix2 + "Email2"))
+ .isEqualTo(expectedDocument2);
+ // Verify the VisibilityDocument is saved to AppSearchImpl.
+ VisibilityDocument actualDocument2 = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix2 + "Email2",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ assertThat(actualDocument2).isEqualTo(expectedDocument2);
+
+ // Check the existing visibility document retains.
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix1 + "Email1"))
+ .isEqualTo(expectedDocument1);
+ // Verify the VisibilityDocument is saved to AppSearchImpl.
+ actualDocument1 = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix1 + "Email1",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ assertThat(actualDocument1).isEqualTo(expectedDocument1);
+ }
+
+ @Test
+ public void testSetVisibility_removeVisibilitySettings() throws Exception {
+ // Create a non-all-default visibility document
+ VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .setCreationTimestampMillis(12345L)
+ .build();
+
+ List<AppSearchSchema> schemas =
+ Collections.singletonList(new AppSearchSchema.Builder("Email").build());
+
+ // Set schema Email and its visibility document to AppSearch database1
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package",
+ "database1",
+ schemas,
+ /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ String prefix = PrefixUtil.createPrefix("package", "database1");
+ VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .setCreationTimestampMillis(12345L)
+ .build();
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
+ .isEqualTo(expectedDocument);
+ // Verify the VisibilityDocument is saved to AppSearchImpl.
+ VisibilityDocument actualDocument = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix + "Email",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ assertThat(actualDocument).isEqualTo(expectedDocument);
+
+ // Set schema Email and its all-default visibility document to AppSearch database1
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package",
+ "database1",
+ schemas,
+ /*visibilityDocuments=*/ ImmutableList.of(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ // All-default visibility document won't be saved in AppSearch.
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
+ .isNull();
+ // Verify the VisibilityDocument is removed from AppSearchImpl.
+ AppSearchException e = assertThrows(AppSearchException.class,
+ () -> mAppSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix + "Email",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ assertThat(e).hasMessageThat().contains(
+ "Document (VS#Pkg$VS#Db/, package$database1/Email) not found.");
+ }
+
+ @Test
+ public void testRemoveVisibility_noRemainingSettings() throws Exception {
+ // Create a non-all-default visibility document
+ VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .setCreationTimestampMillis(12345L)
+ .build();
+
+ List<AppSearchSchema> schemas =
+ Collections.singletonList(new AppSearchSchema.Builder("Email").build());
+
+ // Set schema Email and its visibility document to AppSearch database1
+ mAppSearchImpl.setSchema(
+ "package",
+ "database1",
+ schemas,
+ /*visibilityDocuments=*/ ImmutableList.of(visibilityDocument),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ String prefix = PrefixUtil.createPrefix("package", "database1");
+ VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .setCreationTimestampMillis(12345L)
+ .build();
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
+ .isEqualTo(expectedDocument);
+ // Verify the VisibilityDocument is saved to AppSearchImpl.
+ VisibilityDocument actualDocument = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix + "Email",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ assertThat(actualDocument).isEqualTo(expectedDocument);
+
+ // remove the schema and visibility setting from AppSearch
+ mAppSearchImpl.setSchema(
+ "package",
+ "database1",
+ /*schemas=*/ new ArrayList<>(),
+ /*visibilityDocuments=*/ ImmutableList.of(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+
+ // add the schema back with an all default visibility setting.
+ mAppSearchImpl.setSchema(
+ "package",
+ "database1",
+ schemas,
+ /*visibilityDocuments=*/ ImmutableList.of(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /* setSchemaStatsBuilder= */ null);
+ // All-default visibility document won't be saved in AppSearch.
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
+ .isNull();
+ // Verify there is no visibility setting for the schema.
+ AppSearchException e = assertThrows(AppSearchException.class,
+ () -> mAppSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix + "Email",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ assertThat(e).hasMessageThat().contains(
+ "Document (VS#Pkg$VS#Db/, package$database1/Email) not found.");
+ }
+
+ @Test
+ public void testCloseAndReopen_visibilityInfoRetains() throws Exception {
+ // set Schema and visibility to AppSearch
+ VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .setCreationTimestampMillis(12345L)
+ .build();
+ List<AppSearchSchema> schemas =
+ Collections.singletonList(new AppSearchSchema.Builder("Email").build());
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "packageName",
+ "databaseName",
+ schemas,
+ ImmutableList.of(visibilityDocument),
+ /*forceOverride=*/ true,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // close and re-open AppSearchImpl, the visibility document retains
+ mAppSearchImpl.close();
+ mAppSearchImpl = AppSearchImpl.create(
+ mAppSearchDir,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/ null,
+ ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
+
+ String prefix = PrefixUtil.createPrefix("packageName", "databaseName");
+ VisibilityDocument expectedDocument = new VisibilityDocument.Builder(prefix + "Email")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .setCreationTimestampMillis(12345L)
+ .build();
+
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email"))
+ .isEqualTo(expectedDocument);
+ // Verify the VisibilityDocument is saved to AppSearchImpl.
+ VisibilityDocument actualDocument = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix + "Email",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ assertThat(actualDocument).isEqualTo(expectedDocument);
+
+ // remove schema and visibility document
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "packageName",
+ "databaseName",
+ ImmutableList.of(),
+ ImmutableList.of(),
+ /*forceOverride=*/ true,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // close and re-open AppSearchImpl, the visibility document removed
+ mAppSearchImpl.close();
+ mAppSearchImpl = AppSearchImpl.create(
+ mAppSearchDir,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/ null,
+ ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
+
+ assertThat(mAppSearchImpl.mVisibilityStoreLocked.getVisibility(prefix + "Email")).isNull();
+ // Verify the VisibilityDocument is removed from AppSearchImpl.
+ AppSearchException e = assertThrows(AppSearchException.class,
+ () -> mAppSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix + "Email",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ assertThat(e).hasMessageThat().contains(
+ "Document (VS#Pkg$VS#Db/, packageName$databaseName/Email) not found.");
+ }
+
+ @Test
+ public void testGetSchema_global() throws Exception {
+ List<AppSearchSchema> schemas =
+ Collections.singletonList(new AppSearchSchema.Builder("Type").build());
+
+ // Create a new mAppSearchImpl with a mock Visibility Checker
+ mAppSearchImpl.close();
+ File tempFolder = mTemporaryFolder.newFolder();
+ VisibilityChecker mockVisibilityChecker =
+ (callerAccess, packageName, prefixedSchema, visibilityStore) -> true;
+ mAppSearchImpl = AppSearchImpl.create(
+ tempFolder,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/ null,
+ ALWAYS_OPTIMIZE,
+ mockVisibilityChecker);
+
+ // Add a schema type that is not displayed by the system
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ImmutableList.of(
+ new VisibilityDocument.Builder("Type")
+ .setNotDisplayedBySystem(true).build()),
+ /*forceOverride=*/false,
+ /*version=*/0,
+ /*setSchemaStatsBuilder=*/null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Get this schema as another package
+ GetSchemaResponse getResponse = mAppSearchImpl.getSchema(
+ "package",
+ "database",
+ new CallerAccess(/*callingPackageName=*/"com.android.appsearch.fake.package"));
+ assertThat(getResponse.getSchemas()).containsExactlyElementsIn(schemas);
+ assertThat(getResponse.getSchemaTypesNotDisplayedBySystem()).containsExactly("Type");
+ }
+
+ @Test
+ public void testGetSchema_nonExistentApp() throws Exception {
+ // Add a schema. The test loses meaning if the schema is completely empty.
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ Collections.singletonList(new AppSearchSchema.Builder("Type").build()),
+ /*visibilityDocuments=*/ImmutableList.of(),
+ /*forceOverride=*/false,
+ /*version=*/0,
+ /*setSchemaStatsBuilder=*/null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Try to get the schema of a nonexistent package.
+ GetSchemaResponse getResponse = mAppSearchImpl.getSchema(
+ "com.android.appsearch.fake.package",
+ "database",
+ new CallerAccess(/*callingPackageName=*/"package"));
+ assertThat(getResponse.getSchemas()).isEmpty();
+ assertThat(getResponse.getSchemaTypesNotDisplayedBySystem()).isEmpty();
+ }
+
+ @Test
+ public void testGetSchema_noAccess() throws Exception {
+ List<AppSearchSchema> schemas =
+ Collections.singletonList(new AppSearchSchema.Builder("Type").build());
+ // Add a schema type
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ImmutableList.of(),
+ /*forceOverride=*/false,
+ /*version=*/1,
+ /*setSchemaStatsBuilder=*/null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ GetSchemaResponse getResponse = mAppSearchImpl.getSchema(
+ "package",
+ "database",
+ new CallerAccess(/*callingPackageName=*/
+ "com.android.appsearch.fake.package"));
+ assertThat(getResponse.getSchemas()).isEmpty();
+ assertThat(getResponse.getSchemaTypesNotDisplayedBySystem()).isEmpty();
+ assertThat(getResponse.getVersion()).isEqualTo(0);
+
+ // Make sure the test is hooked up right by calling getSchema with the same parameters but
+ // from the same package
+ getResponse = mAppSearchImpl.getSchema(
+ "package",
+ "database",
+ new CallerAccess(/*callingPackageName=*/"package"));
+ assertThat(getResponse.getSchemas()).containsExactlyElementsIn(schemas);
+ }
+
+ @Test
+ public void testGetSchema_global_partialAccess() throws Exception {
+ List<AppSearchSchema> schemas = ImmutableList.of(
+ new AppSearchSchema.Builder("VisibleType").build(),
+ new AppSearchSchema.Builder("PrivateType").build());
+
+ // Create a new mAppSearchImpl with a mock Visibility Checker
+ mAppSearchImpl.close();
+ File tempFolder = mTemporaryFolder.newFolder();
+ VisibilityChecker mockVisibilityChecker =
+ (callerAccess, packageName, prefixedSchema, visibilityStore)
+ -> prefixedSchema.endsWith("VisibleType");
+ mAppSearchImpl = AppSearchImpl.create(
+ tempFolder,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/ null,
+ ALWAYS_OPTIMIZE,
+ mockVisibilityChecker);
+
+ // Add two schema types that are not displayed by the system.
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ "package",
+ "database",
+ schemas,
+ /*visibilityDocuments=*/ImmutableList.of(
+ new VisibilityDocument.Builder("VisibleType")
+ .setNotDisplayedBySystem(true)
+ .build(),
+ new VisibilityDocument.Builder("PrivateType")
+ .setNotDisplayedBySystem(true)
+ .build()),
+ /*forceOverride=*/false,
+ /*version=*/1,
+ /*setSchemaStatsBuilder=*/null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ GetSchemaResponse getResponse = mAppSearchImpl.getSchema(
+ "package",
+ "database",
+ new CallerAccess(/*callingPackageName=*/
+ "com.android.appsearch.fake.package"));
+ assertThat(getResponse.getSchemas()).containsExactly(schemas.get(0));
+ assertThat(getResponse.getSchemaTypesNotDisplayedBySystem()).containsExactly("VisibleType");
+ assertThat(getResponse.getVersion()).isEqualTo(1);
+ }
+
+ @Test
+ public void testDispatchObserver_samePackage_noVisStore_accept() throws Exception {
+ // Add a schema type
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ /*listeningPackageAccess=*/mSelfCallerAccess,
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Insert a valid doc
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.putDocument(
+ mContext.getPackageName(),
+ "database1",
+ new GenericDocument.Builder<>("namespace1", "id1", "Type1").build(),
+ /*sendChangeNotifications=*/ true,
+ /*logger=*/null);
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+
+ // Dispatch notifications
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).containsExactly(
+ new DocumentChangeInfo(
+ mContext.getPackageName(),
+ "database1",
+ "namespace1",
+ "Type1",
+ ImmutableSet.of("id1")));
+ }
+
+ @Test
+ public void testDispatchObserver_samePackage_withVisStore_accept() throws Exception {
+ // Make a visibility checker that rejects everything
+ final VisibilityChecker rejectChecker =
+ (callerAccess, packageName, prefixedSchema, visibilityStore) -> false;
+ mAppSearchImpl.close();
+ mAppSearchImpl = AppSearchImpl.create(
+ mAppSearchDir,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/null,
+ ALWAYS_OPTIMIZE,
+ rejectChecker);
+
+ // Add a schema type
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ /*listeningPackageAccess=*/mSelfCallerAccess,
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Insert a valid doc
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.putDocument(
+ mContext.getPackageName(),
+ "database1",
+ new GenericDocument.Builder<>("namespace1", "id1", "Type1").build(),
+ /*sendChangeNotifications=*/ true,
+ /*logger=*/null);
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+
+ // Dispatch notifications
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).containsExactly(
+ new DocumentChangeInfo(
+ mContext.getPackageName(),
+ "database1",
+ "namespace1",
+ "Type1",
+ ImmutableSet.of("id1")));
+ }
+
+ @Test
+ public void testDispatchObserver_differentPackage_noVisStore_reject() throws Exception {
+ // Add a schema type
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Register an observer from a simulated different package
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ new CallerAccess(/*callingPackageName=*/
+ "com.fake.Listening.package"),
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Insert a valid doc
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.putDocument(
+ mContext.getPackageName(),
+ "database1",
+ new GenericDocument.Builder<>("namespace1", "id1", "Type1").build(),
+ /*sendChangeNotifications=*/ true,
+ /*logger=*/null);
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+
+ // Dispatch notifications
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testDispatchObserver_differentPackage_withVisStore_accept() throws Exception {
+ final String fakeListeningPackage = "com.fake.listening.package";
+
+ // Make a visibility checker that allows only fakeListeningPackage.
+ final VisibilityChecker visibilityChecker =
+ (callerAccess, packageName, prefixedSchema, visibilityStore)
+ -> callerAccess.getCallingPackageName().equals(fakeListeningPackage);
+ mAppSearchImpl.close();
+ mAppSearchImpl = AppSearchImpl.create(
+ mAppSearchDir,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/null,
+ ALWAYS_OPTIMIZE,
+ visibilityChecker);
+
+ // Add a schema type
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ new CallerAccess(/*callingPackageName=*/fakeListeningPackage),
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Insert a valid doc
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.putDocument(
+ mContext.getPackageName(),
+ "database1",
+ new GenericDocument.Builder<>("namespace1", "id1", "Type1").build(),
+ /*sendChangeNotifications=*/ true,
+ /*logger=*/null);
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+
+ // Dispatch notifications
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).containsExactly(
+ new DocumentChangeInfo(
+ mContext.getPackageName(),
+ "database1",
+ "namespace1",
+ "Type1",
+ ImmutableSet.of("id1")));
+ }
+
+ @Test
+ public void testDispatchObserver_differentPackage_withVisStore_reject() throws Exception {
+ final String fakeListeningPackage = "com.fake.Listening.package";
+
+ // Make a visibility checker that rejects everything.
+ final VisibilityChecker rejectChecker =
+ (callerAccess, packageName, prefixedSchema, visibilityStore) -> false;
+ mAppSearchImpl.close();
+ mAppSearchImpl = AppSearchImpl.create(
+ mAppSearchDir,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/null,
+ ALWAYS_OPTIMIZE,
+ rejectChecker);
+
+ // Add a schema type
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ new CallerAccess(/*callingPackageName=*/fakeListeningPackage),
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Insert a doc
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.putDocument(
+ mContext.getPackageName(),
+ "database1",
+ new GenericDocument.Builder<>("namespace1", "id1", "Type1").build(),
+ /*sendChangeNotifications=*/ true,
+ /*logger=*/null);
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+
+ // Dispatch notifications
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testAddObserver_schemaChange_added() throws Exception {
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ /*listeningPackageAccess=*/mSelfCallerAccess,
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Add a schema type
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+
+ // Dispatch notifications
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableSet.of("Type1")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+
+ // Add two more schema types without touching the existing one
+ observer.clear();
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2").build(),
+ new AppSearchSchema.Builder("Type3").build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+
+ // Dispatch notifications
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), "database1", ImmutableSet.of("Type2", "Type3")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testAddObserver_schemaChange_removed() throws Exception {
+ // Add a schema type
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2").build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ /*listeningPackageAccess=*/mSelfCallerAccess,
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Remove Type2
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(new AppSearchSchema.Builder("Type1").build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ true,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Dispatch notifications
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableSet.of("Type2")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testAddObserver_schemaChange_contents() throws Exception {
+ // Add a schema
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+ .build())
+ .build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ /*listeningPackageAccess=*/mSelfCallerAccess,
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Update the schema, but don't make any actual changes
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+ .build())
+ .build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 1,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Dispatch notifications
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+
+ // Now update the schema again, but this time actually make a change (cardinality of the
+ // property)
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 2,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Dispatch notifications
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), "database1", ImmutableSet.of("Type2")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testAddObserver_schemaChange_contents_skipBySpec() throws Exception {
+ // Add a schema
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1")
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+ .build())
+ .build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+ .build())
+ .build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Register an observer that only listens for Type2
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ /*listeningPackageAccess=*/mSelfCallerAccess,
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().addFilterSchemas("Type2").build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Update both types of the schema (changed cardinalities)
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1")
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Dispatch notifications
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), "database1", ImmutableSet.of("Type2")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testAddObserver_schemaChange_visibilityOnly() throws Exception {
+ final String fakeListeningPackage = "com.fake.listening.package";
+
+ // Make a fake visibility checker that actually looks at visibility store
+ final VisibilityChecker visibilityChecker =
+ (callerAccess, packageName, prefixedSchema, visibilityStore)
+ -> {
+ if (!callerAccess.getCallingPackageName().equals(fakeListeningPackage)) {
+ return false;
+ }
+ Set<String> allowedPackages = new ArraySet<>(
+ visibilityStore.getVisibility(prefixedSchema).getPackageNames());
+ return allowedPackages.contains(fakeListeningPackage);
+ };
+ mAppSearchImpl.close();
+ mAppSearchImpl = AppSearchImpl.create(
+ mAppSearchDir,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/null,
+ ALWAYS_OPTIMIZE,
+ visibilityChecker);
+
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ new CallerAccess(/*callingPackageName=*/fakeListeningPackage),
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Add a schema where both types are visible to the fake package.
+ List<AppSearchSchema> schemas = ImmutableList.of(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2").build());
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ schemas,
+ /*visibilityDocuments=*/ ImmutableList.of(
+ new VisibilityDocument.Builder("Type1")
+ .addVisibleToPackage(
+ new PackageIdentifier(fakeListeningPackage, new byte[0]))
+ .build(),
+ new VisibilityDocument.Builder("Type2")
+ .addVisibleToPackage(
+ new PackageIdentifier(fakeListeningPackage, new byte[0]))
+ .build()
+ ),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Notifications of addition should now be dispatched
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), "database1", ImmutableSet.of("Type1", "Type2")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ observer.clear();
+
+ // Update schema, keeping the types identical but denying visibility to type2
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ schemas,
+ /*visibilityDocuments=*/ ImmutableList.of(
+ new VisibilityDocument.Builder("Type1")
+ .addVisibleToPackage(
+ new PackageIdentifier(fakeListeningPackage, new byte[0]))
+ .build(),
+ new VisibilityDocument.Builder("Type2").build()
+ ),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Dispatch notifications. This should look like a deletion of Type2.
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), "database1", ImmutableSet.of("Type2")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ observer.clear();
+
+ // Now update Type2 and make sure no further notification is received.
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .build()),
+ /*visibilityDocuments=*/ ImmutableList.of(
+ new VisibilityDocument.Builder("Type1")
+ .addVisibleToPackage(
+ new PackageIdentifier(fakeListeningPackage, new byte[0]))
+ .build(),
+ new VisibilityDocument.Builder("Type2").build()
+ ),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+
+ // Grant visibility to Type2 again and make sure it appears
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .build()),
+ /*visibilityDocuments=*/ImmutableList.of(
+ new VisibilityDocument.Builder("Type1")
+ .addVisibleToPackage(
+ new PackageIdentifier(fakeListeningPackage, new byte[0]))
+ .build(),
+ new VisibilityDocument.Builder("Type2")
+ .addVisibleToPackage(
+ new PackageIdentifier(fakeListeningPackage, new byte[0]))
+ .build()
+ ),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Dispatch notifications. This should look like a creation of Type2.
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), "database1", ImmutableSet.of("Type2")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testAddObserver_schemaChange_visibilityAndContents() throws Exception {
+ final String fakeListeningPackage = "com.fake.listening.package";
+
+ // Make a visibility checker that allows fakeListeningPackage access only to Type2.
+ final VisibilityChecker visibilityChecker =
+ (callerAccess, packageName, prefixedSchema, visibilityStore)
+ -> callerAccess.getCallingPackageName().equals(fakeListeningPackage)
+ && prefixedSchema.endsWith("Type2");
+ mAppSearchImpl.close();
+ mAppSearchImpl = AppSearchImpl.create(
+ mAppSearchDir,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/null,
+ ALWAYS_OPTIMIZE,
+ visibilityChecker);
+
+ // Add a schema.
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1")
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+ .build())
+ .build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+ .build())
+ .build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ new CallerAccess(/*callingPackageName=*/fakeListeningPackage),
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Update both types of the schema (changed cardinalities)
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1")
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Dispatch notifications
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), "database1", ImmutableSet.of("Type2")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testAddObserver_schemaChange_partialVisibility_removed() throws Exception {
+ final String fakeListeningPackage = "com.fake.listening.package";
+
+ // Make a visibility checker that allows fakeListeningPackage access only to Type2.
+ final VisibilityChecker visibilityChecker =
+ (callerAccess, packageName, prefixedSchema, visibilityStore)
+ -> callerAccess.getCallingPackageName().equals(fakeListeningPackage)
+ && prefixedSchema.endsWith("Type2");
+ mAppSearchImpl.close();
+ mAppSearchImpl = AppSearchImpl.create(
+ mAppSearchDir,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/null,
+ ALWAYS_OPTIMIZE,
+ visibilityChecker);
+
+ // Add a schema.
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2").build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ new CallerAccess(/*callingPackageName=*/fakeListeningPackage),
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Remove Type1
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(new AppSearchSchema.Builder("Type2").build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ true,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Dispatch notifications. Nothing should appear since Type1 is not visible to us.
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+
+ // Now remove Type2. This should cause a notification.
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ true,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), "database1", ImmutableSet.of("Type2")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testAddObserver_schemaChange_multipleObservers() throws Exception {
+ // Create two fake packages. One can access Type1, one can access Type2, they both can
+ // access Type3, and no one can access Type4.
+ final String fakePackage1 = "com.fake.listening.package1";
+
+ final String fakePackage2 = "com.fake.listening.package2";
+
+ final VisibilityChecker visibilityChecker =
+ (callerAccess, packageName, prefixedSchema, visibilityStore)
+ -> {
+ if (prefixedSchema.endsWith("Type1")) {
+ return callerAccess.getCallingPackageName().equals(fakePackage1);
+ } else if (prefixedSchema.endsWith("Type2")) {
+ return callerAccess.getCallingPackageName().equals(fakePackage2);
+ } else if (prefixedSchema.endsWith("Type3")) {
+ return false;
+ } else if (prefixedSchema.endsWith("Type4")) {
+ return true;
+ } else {
+ throw new IllegalArgumentException(prefixedSchema);
+ }
+ };
+ mAppSearchImpl.close();
+ mAppSearchImpl = AppSearchImpl.create(
+ mAppSearchDir,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/null,
+ ALWAYS_OPTIMIZE,
+ visibilityChecker);
+
+ // Add a schema.
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2").build(),
+ new AppSearchSchema.Builder("Type3").build(),
+ new AppSearchSchema.Builder("Type4").build()
+ ),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Register three observers: one in each package, and another in package1 with a filter.
+ TestObserverCallback observerPkg1NoFilter = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ new CallerAccess(/*callingPackageName=*/fakePackage1),
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observerPkg1NoFilter);
+
+ TestObserverCallback observerPkg2NoFilter = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ new CallerAccess(/*callingPackageName=*/fakePackage2),
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observerPkg2NoFilter);
+
+ TestObserverCallback observerPkg1FilterType4 = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ new CallerAccess(/*callingPackageName=*/fakePackage1),
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().addFilterSchemas("Type4").build(),
+ MoreExecutors.directExecutor(),
+ observerPkg1FilterType4);
+
+ // Remove everything
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ true,
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Dispatch notifications.
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+
+ // observerPkg1NoFilter should see Type1 and Type4 vanish.
+ // observerPkg2NoFilter should see Type2 and Type4 vanish.
+ // observerPkg2WithFilter should see Type4 vanish.
+ assertThat(observerPkg1NoFilter.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), "database1", ImmutableSet.of("Type1", "Type4"))
+ );
+ assertThat(observerPkg1NoFilter.getDocumentChanges()).isEmpty();
+
+ assertThat(observerPkg2NoFilter.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), "database1", ImmutableSet.of("Type2", "Type4"))
+ );
+ assertThat(observerPkg2NoFilter.getDocumentChanges()).isEmpty();
+
+ assertThat(observerPkg1FilterType4.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), "database1", ImmutableSet.of("Type4"))
+ );
+ assertThat(observerPkg1FilterType4.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testAddObserver_schemaChange_noChangeIfIncompatible() throws Exception {
+ // Add a schema with two types.
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Type1")
+ .addProperty(
+ new AppSearchSchema.StringPropertyConfig.Builder("strProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig
+ .CARDINALITY_OPTIONAL)
+ .build()
+ ).build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(
+ new AppSearchSchema.StringPropertyConfig.Builder("strProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig
+ .CARDINALITY_OPTIONAL)
+ .build()
+ ).build()
+ ),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 1,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mAppSearchImpl.registerObserverCallback(
+ new CallerAccess(/*callingPackageName=*/mContext.getPackageName()),
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ MoreExecutors.directExecutor(),
+ observer);
+
+ // Update schema to try to make an incompatible change to Type1, and a compatible change to
+ // Type2.
+ List<AppSearchSchema> updatedSchemaTypes = ImmutableList.of(
+ new AppSearchSchema.Builder("Type1")
+ .addProperty(
+ new AppSearchSchema.StringPropertyConfig.Builder("strProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
+ .build()
+ ).build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(
+ new AppSearchSchema.StringPropertyConfig.Builder("strProp")
+ .setCardinality(
+ AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .build()
+ ).build()
+ );
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ updatedSchemaTypes,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ 2,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isFalse();
+ SetSchemaResponse setSchemaResponse = internalSetSchemaResponse.getSetSchemaResponse();
+ assertThat(setSchemaResponse.getDeletedTypes()).isEmpty();
+ assertThat(setSchemaResponse.getIncompatibleTypes()).containsExactly("Type1");
+
+ // Dispatch notifications. Nothing should appear since the schema was incompatible and has
+ // not changed.
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+
+ // Now force apply the schemas Type2. This should cause a notification.
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ mContext.getPackageName(),
+ "database1",
+ updatedSchemaTypes,
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ true,
+ /*version=*/ 3,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mAppSearchImpl.dispatchAndClearChangeNotifications();
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), "database1", ImmutableSet.of("Type1", "Type2")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
}
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchLoggerTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchLoggerTest.java
index 75966bf..5b2c3da 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchLoggerTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/AppSearchLoggerTest.java
@@ -21,6 +21,7 @@
import androidx.appsearch.app.AppSearchResult;
import androidx.appsearch.app.AppSearchSchema;
import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.InternalSetSchemaResponse;
import androidx.appsearch.app.SearchResultPage;
import androidx.appsearch.app.SearchSpec;
import androidx.appsearch.exceptions.AppSearchException;
@@ -74,7 +75,8 @@
mTemporaryFolder.newFolder(),
new UnlimitedLimitConfig(),
/*initStatsBuilder=*/ null,
- ALWAYS_OPTIMIZE);
+ ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
mLogger = new SimpleTestLogger();
}
@@ -335,16 +337,18 @@
mTemporaryFolder.newFolder(),
new UnlimitedLimitConfig(),
initStatsBuilder,
- ALWAYS_OPTIMIZE);
+ ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
InitializeStats iStats = initStatsBuilder.build();
appSearchImpl.close();
assertThat(iStats).isNotNull();
+ // If the process goes really fast, the total latency could be 0. Since the default of total
+ // latency is also 0, we just remove the assert about NativeLatencyMillis.
assertThat(iStats.getStatusCode()).isEqualTo(AppSearchResult.RESULT_OK);
// Total latency captured in LocalStorage
assertThat(iStats.getTotalLatencyMillis()).isEqualTo(0);
assertThat(iStats.hasDeSync()).isFalse();
- assertThat(iStats.getNativeLatencyMillis()).isGreaterThan(0);
assertThat(iStats.getDocumentStoreDataStatus()).isEqualTo(
InitializeStatsProto.DocumentStoreDataStatus.NO_DATA_LOSS_VALUE);
assertThat(iStats.getDocumentCount()).isEqualTo(0);
@@ -363,44 +367,56 @@
folder,
new UnlimitedLimitConfig(),
/*initStatsBuilder=*/ null,
- ALWAYS_OPTIMIZE);
+ ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
List<AppSearchSchema> schemas = ImmutableList.of(
new AppSearchSchema.Builder("Type1").build(),
new AppSearchSchema.Builder("Type2").build());
- appSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = appSearchImpl.setSchema(
testPackageName,
testDatabase,
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
GenericDocument doc1 =
new GenericDocument.Builder<>("namespace", "id1", "Type1").build();
GenericDocument doc2 =
new GenericDocument.Builder<>("namespace", "id2", "Type1").build();
- appSearchImpl.putDocument(testPackageName, testDatabase, doc1, mLogger);
- appSearchImpl.putDocument(testPackageName, testDatabase, doc2, mLogger);
+ appSearchImpl.putDocument(
+ testPackageName,
+ testDatabase,
+ doc1,
+ /*sendChangeNotifications=*/ false,
+ mLogger);
+ appSearchImpl.putDocument(
+ testPackageName,
+ testDatabase,
+ doc2,
+ /*sendChangeNotifications=*/ false,
+ mLogger);
appSearchImpl.close();
// Create another appsearchImpl on the same folder
InitializeStats.Builder initStatsBuilder = new InitializeStats.Builder();
appSearchImpl = AppSearchImpl.create(
- folder, new UnlimitedLimitConfig(), initStatsBuilder, ALWAYS_OPTIMIZE);
+ folder, new UnlimitedLimitConfig(), initStatsBuilder, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
InitializeStats iStats = initStatsBuilder.build();
assertThat(iStats).isNotNull();
+ // If the process goes really fast, the total latency could be 0. Since the default of total
+ // latency is also 0, we just remove the assert about NativeLatencyMillis.
assertThat(iStats.getStatusCode()).isEqualTo(AppSearchResult.RESULT_OK);
// Total latency captured in LocalStorage
assertThat(iStats.getTotalLatencyMillis()).isEqualTo(0);
assertThat(iStats.hasDeSync()).isFalse();
- assertThat(iStats.getNativeLatencyMillis()).isGreaterThan(0);
assertThat(iStats.getDocumentStoreDataStatus()).isEqualTo(
InitializeStatsProto.DocumentStoreDataStatus.NO_DATA_LOSS_VALUE);
assertThat(iStats.getDocumentCount()).isEqualTo(2);
- assertThat(iStats.getSchemaTypeCount()).isEqualTo(2);
+ assertThat(iStats.getSchemaTypeCount()).isEqualTo(4); // +2 for VisibilitySchema
assertThat(iStats.hasReset()).isEqualTo(false);
assertThat(iStats.getResetStatusCode()).isEqualTo(AppSearchResult.RESULT_OK);
appSearchImpl.close();
@@ -413,26 +429,31 @@
final File folder = mTemporaryFolder.newFolder();
AppSearchImpl appSearchImpl = AppSearchImpl.create(
- folder, new UnlimitedLimitConfig(), /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+ folder, new UnlimitedLimitConfig(), /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
List<AppSearchSchema> schemas = ImmutableList.of(
new AppSearchSchema.Builder("Type1").build(),
new AppSearchSchema.Builder("Type2").build());
- appSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = appSearchImpl.setSchema(
testPackageName,
testDatabase,
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert a valid doc
GenericDocument doc1 =
new GenericDocument.Builder<>("namespace", "id1", "Type1").build();
- appSearchImpl.putDocument(testPackageName, testDatabase, doc1, mLogger);
+ appSearchImpl.putDocument(
+ testPackageName,
+ testDatabase,
+ doc1,
+ /*sendChangeNotifications=*/ false,
+ mLogger);
// Insert the invalid doc with an invalid namespace right into icing
DocumentProto invalidDoc = DocumentProto.newBuilder()
@@ -447,7 +468,8 @@
// Create another appsearchImpl on the same folder
InitializeStats.Builder initStatsBuilder = new InitializeStats.Builder();
appSearchImpl = AppSearchImpl.create(
- folder, new UnlimitedLimitConfig(), initStatsBuilder, ALWAYS_OPTIMIZE);
+ folder, new UnlimitedLimitConfig(), initStatsBuilder, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
InitializeStats iStats = initStatsBuilder.build();
// Some of other fields are already covered by AppSearchImplTest#testReset()
@@ -471,23 +493,27 @@
.build())
.build();
List<AppSearchSchema> schemas = Collections.singletonList(testSchema);
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
testPackageName,
testDatabase,
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
GenericDocument document =
new GenericDocument.Builder<>("namespace", "id", "type")
.setPropertyString("subject", "testPut example1")
.build();
- mAppSearchImpl.putDocument(testPackageName, testDatabase, document, mLogger);
+ mAppSearchImpl.putDocument(
+ testPackageName,
+ testDatabase,
+ document,
+ /*sendChangeNotifications=*/ false,
+ mLogger);
PutDocumentStats pStats = mLogger.mPutDocumentStats;
assertThat(pStats).isNotNull();
@@ -513,16 +539,15 @@
.build())
.build();
List<AppSearchSchema> schemas = Collections.singletonList(testSchema);
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
testPackageName,
testDatabase,
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
GenericDocument document =
new GenericDocument.Builder<>("namespace", "id", "type")
@@ -530,7 +555,12 @@
.build();
AppSearchException exception = Assert.assertThrows(AppSearchException.class,
- () -> mAppSearchImpl.putDocument(testPackageName, testDatabase, document, mLogger));
+ () -> mAppSearchImpl.putDocument(
+ testPackageName,
+ testDatabase,
+ document,
+ /*sendChangeNotifications=*/ false,
+ mLogger));
assertThat(exception.getResultCode()).isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
PutDocumentStats pStats = mLogger.mPutDocumentStats;
@@ -554,16 +584,15 @@
.build())
.build();
List<AppSearchSchema> schemas = Collections.singletonList(testSchema);
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
testPackageName,
testDatabase,
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
GenericDocument document1 =
new GenericDocument.Builder<>("namespace", "id1", "type")
.setPropertyString("subject", "testPut example1")
@@ -576,9 +605,24 @@
new GenericDocument.Builder<>("namespace", "id3", "type")
.setPropertyString("subject", "testPut 3")
.build();
- mAppSearchImpl.putDocument(testPackageName, testDatabase, document1, mLogger);
- mAppSearchImpl.putDocument(testPackageName, testDatabase, document2, mLogger);
- mAppSearchImpl.putDocument(testPackageName, testDatabase, document3, mLogger);
+ mAppSearchImpl.putDocument(
+ testPackageName,
+ testDatabase,
+ document1,
+ /*sendChangeNotifications=*/ false,
+ mLogger);
+ mAppSearchImpl.putDocument(
+ testPackageName,
+ testDatabase,
+ document2,
+ /*sendChangeNotifications=*/ false,
+ mLogger);
+ mAppSearchImpl.putDocument(
+ testPackageName,
+ testDatabase,
+ document3,
+ /*sendChangeNotifications=*/ false,
+ mLogger);
// No query filters specified. package2 should only get its own documents back.
@@ -598,10 +642,11 @@
SearchStats sStats = mLogger.mSearchStats;
assertThat(sStats).isNotNull();
+ // If the process goes really fast, the total latency could be 0. Since the default of total
+ // latency is also 0, we just remove the assert about TotalLatencyMillis.
assertThat(sStats.getPackageName()).isEqualTo(testPackageName);
assertThat(sStats.getDatabase()).isEqualTo(testDatabase);
assertThat(sStats.getStatusCode()).isEqualTo(AppSearchResult.RESULT_OK);
- assertThat(sStats.getTotalLatencyMillis()).isGreaterThan(0);
assertThat(sStats.getVisibilityScope()).isEqualTo(SearchStats.VISIBILITY_SCOPE_LOCAL);
assertThat(sStats.getTermCount()).isEqualTo(2);
assertThat(sStats.getQueryLength()).isEqualTo(queryStr.length());
@@ -622,16 +667,15 @@
List<AppSearchSchema> schemas = ImmutableList.of(
new AppSearchSchema.Builder("Type1").build(),
new AppSearchSchema.Builder("Type2").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
testPackageName,
testDatabase,
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
SearchSpec searchSpec =
new SearchSpec.Builder().setTermMatch(TermMatchType.Code.PREFIX_VALUE)
@@ -660,19 +704,23 @@
final String testId = "id";
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
testPackageName,
testDatabase,
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
GenericDocument document =
new GenericDocument.Builder<>(testNamespace, testId, "type").build();
- mAppSearchImpl.putDocument(testPackageName, testDatabase, document, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ testPackageName,
+ testDatabase,
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
RemoveStats.Builder rStatsBuilder = new RemoveStats.Builder(testPackageName, testDatabase);
mAppSearchImpl.remove(testPackageName, testDatabase, testNamespace, testId, rStatsBuilder);
@@ -695,20 +743,24 @@
final String testId = "id";
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
testPackageName,
testDatabase,
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
GenericDocument document =
new GenericDocument.Builder<>(testNamespace, testId, "type").build();
- mAppSearchImpl.putDocument(testPackageName, testDatabase, document, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ testPackageName,
+ testDatabase,
+ document,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
RemoveStats.Builder rStatsBuilder = new RemoveStats.Builder(testPackageName, testDatabase);
@@ -735,22 +787,31 @@
final String testNamespace = "testNameSpace";
List<AppSearchSchema> schemas =
Collections.singletonList(new AppSearchSchema.Builder("type").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
testPackageName,
testDatabase,
schemas,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
GenericDocument document1 =
new GenericDocument.Builder<>(testNamespace, "id1", "type").build();
GenericDocument document2 =
new GenericDocument.Builder<>(testNamespace, "id2", "type").build();
- mAppSearchImpl.putDocument(testPackageName, testDatabase, document1, mLogger);
- mAppSearchImpl.putDocument(testPackageName, testDatabase, document2, mLogger);
+ mAppSearchImpl.putDocument(
+ testPackageName,
+ testDatabase,
+ document1,
+ /*sendChangeNotifications=*/ false,
+ mLogger);
+ mAppSearchImpl.putDocument(
+ testPackageName,
+ testDatabase,
+ document2,
+ /*sendChangeNotifications=*/ false,
+ mLogger);
// No query filters specified. package2 should only get its own documents back.
SearchSpec searchSpec =
new SearchSpec.Builder().setTermMatch(TermMatchType.Code.PREFIX_VALUE).build();
@@ -780,30 +841,28 @@
.setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.build())
.build();
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
PACKAGE_NAME,
DATABASE,
Collections.singletonList(schema1),
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// create a backwards incompatible schema
SetSchemaStats.Builder sStatsBuilder = new SetSchemaStats.Builder(PACKAGE_NAME, DATABASE);
AppSearchSchema schema2 = new AppSearchSchema.Builder("testSchema").build();
- mAppSearchImpl.setSchema(
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
PACKAGE_NAME,
DATABASE,
Collections.singletonList(schema2),
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ sStatsBuilder);
+ assertThat(internalSetSchemaResponse.isSuccess()).isFalse();
SetSchemaStats sStats = sStatsBuilder.build();
assertThat(sStats.getPackageName()).isEqualTo(PACKAGE_NAME);
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/SearchResultsImplTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/SearchResultsImplTest.java
index 9df244e..dff83a2 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/SearchResultsImplTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/SearchResultsImplTest.java
@@ -20,6 +20,7 @@
import androidx.appsearch.app.AppSearchSchema;
import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.InternalSetSchemaResponse;
import androidx.appsearch.app.SearchResult;
import androidx.appsearch.app.SearchSpec;
@@ -51,7 +52,8 @@
mAppSearchImpl = AppSearchImpl.create(
mTemporaryFolder.newFolder(),
new UnlimitedLimitConfig(),
- /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE);
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
}
@After
@@ -64,21 +66,25 @@
// Insert package1 schema
List<AppSearchSchema> schema1 =
ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schema1,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert one package1 documents
GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
"schema1").build();
- mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Query for only 1 result per page
SearchSpec searchSpec = new SearchSpec.Builder()
@@ -95,12 +101,12 @@
searchSpec,
/*logger=*/ null);
- List<SearchResult> results = searchResults.getNextPage().get();
+ List<SearchResult> results = searchResults.getNextPageAsync().get();
assertThat(results).hasSize(1);
assertThat(results.get(0).getGenericDocument()).isEqualTo(document1);
// We get all documents, and it shouldn't fail if we keep calling getNextPage().
- results = searchResults.getNextPage().get();
+ results = searchResults.getNextPageAsync().get();
assertThat(results).isEmpty();
}
@@ -109,16 +115,15 @@
// Insert package1 schema
List<AppSearchSchema> schema1 =
ImmutableList.of(new AppSearchSchema.Builder("schema1").build());
- mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
"package1",
"database1",
schema1,
- /*visibilityStore=*/ null,
- /*schemasNotDisplayedBySystem=*/ Collections.emptyList(),
- /*schemasVisibleToPackages=*/ Collections.emptyMap(),
+ /*visibilityDocuments=*/ Collections.emptyList(),
/*forceOverride=*/ false,
/*version=*/ 0,
/* setSchemaStatsBuilder= */ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
// Insert 3 package1 documents
GenericDocument document1 = new GenericDocument.Builder<>("namespace", "id1",
@@ -127,9 +132,24 @@
"schema1").build();
GenericDocument document3 = new GenericDocument.Builder<>("namespace", "id3",
"schema1").build();
- mAppSearchImpl.putDocument("package1", "database1", document1, /*logger=*/ null);
- mAppSearchImpl.putDocument("package1", "database1", document2, /*logger=*/ null);
- mAppSearchImpl.putDocument("package1", "database1", document3, /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document2,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mAppSearchImpl.putDocument(
+ "package1",
+ "database1",
+ document3,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
// Query for only 2 result per page
SearchSpec searchSpec = new SearchSpec.Builder()
@@ -146,18 +166,18 @@
searchSpec,
/*logger=*/ null);
List<GenericDocument> outDocs = new ArrayList<>();
- List<SearchResult> results = searchResults.getNextPage().get();
+ List<SearchResult> results = searchResults.getNextPageAsync().get();
assertThat(results).hasSize(2);
outDocs.add(results.get(0).getGenericDocument());
outDocs.add(results.get(1).getGenericDocument());
- results = searchResults.getNextPage().get();
+ results = searchResults.getNextPageAsync().get();
assertThat(results).hasSize(1);
outDocs.add(results.get(0).getGenericDocument());
assertThat(outDocs).containsExactly(document1, document2, document3);
// We get all documents, and it shouldn't fail if we keep calling getNextPage().
- results = searchResults.getNextPage().get();
+ results = searchResults.getNextPageAsync().get();
assertThat(results).isEmpty();
}
}
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterTest.java
index 29aeb96..4a528ad 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterTest.java
@@ -23,12 +23,14 @@
import static com.google.common.truth.Truth.assertThat;
-import androidx.annotation.NonNull;
-import androidx.appsearch.app.PackageIdentifier;
import androidx.appsearch.app.SearchSpec;
-import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.OptimizeStrategy;
+import androidx.appsearch.localstorage.UnlimitedLimitConfig;
import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
import androidx.appsearch.localstorage.visibilitystore.VisibilityStore;
+import androidx.appsearch.testutil.AppSearchTestUtils;
import com.google.android.icing.proto.ResultSpecProto;
import com.google.android.icing.proto.SchemaTypeConfigProto;
@@ -37,13 +39,19 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
-import java.util.List;
import java.util.Map;
import java.util.Set;
public class SearchSpecToProtoConverterTest {
+ /** An optimize strategy that always triggers optimize. */
+ public static final OptimizeStrategy ALWAYS_OPTIMIZE = optimizeInfo -> true;
+
+ @Rule
+ public final TemporaryFolder mTemporaryFolder = new TemporaryFolder();
@Test
public void testToSearchSpecProto() throws Exception {
@@ -52,7 +60,9 @@
String prefix2 = PrefixUtil.createPrefix("package", "database2");
SchemaTypeConfigProto configProto = SchemaTypeConfigProto.getDefaultInstance();
- SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"query",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(prefix1, prefix2),
/*namespaceMap=*/ImmutableMap.of(
prefix1, ImmutableSet.of(
@@ -69,8 +79,7 @@
prefix2 + "typeA", configProto,
prefix2 + "typeB", configProto)));
// Convert SearchSpec to proto.
- SearchSpecProto searchSpecProto = converter.toSearchSpecProto(
- /*queryExpression=*/"query");
+ SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
assertThat(searchSpecProto.getQuery()).isEqualTo("query");
assertThat(searchSpecProto.getSchemaTypeFiltersList()).containsExactly(
@@ -87,7 +96,9 @@
.setOrder(ORDER_ASCENDING)
.setRankingStrategy(RANKING_STRATEGY_CREATION_TIMESTAMP).build();
- ScoringSpecProto scoringSpecProto = new SearchSpecToProtoConverter(searchSpec,
+ ScoringSpecProto scoringSpecProto = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"query",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(),
/*namespaceMap=*/ImmutableMap.of(),
/*schemaMap=*/ImmutableMap.of()).toScoringSpecProto();
@@ -107,7 +118,9 @@
.setMaxSnippetSize(456)
.build();
- SearchSpecToProtoConverter convert = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter convert = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"query",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(),
/*namespaceMap=*/ImmutableMap.of(),
/*schemaMap=*/ImmutableMap.of());
@@ -117,7 +130,7 @@
assertThat(resultSpecProto.getNumPerPage()).isEqualTo(123);
assertThat(resultSpecProto.getSnippetSpec().getNumToSnippet()).isEqualTo(234);
assertThat(resultSpecProto.getSnippetSpec().getNumMatchesPerProperty()).isEqualTo(345);
- assertThat(resultSpecProto.getSnippetSpec().getMaxWindowBytes()).isEqualTo(456);
+ assertThat(resultSpecProto.getSnippetSpec().getMaxWindowUtf32Length()).isEqualTo(456);
}
@Test
@@ -129,7 +142,9 @@
String prefix1 = PrefixUtil.createPrefix("package1", "database");
String prefix2 = PrefixUtil.createPrefix("package2", "database");
- SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"query",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(prefix1, prefix2),
/*namespaceMap=*/ImmutableMap.of(),
/*schemaMap=*/ImmutableMap.of());
@@ -178,7 +193,9 @@
prefix2, ImmutableSet.of(
prefix2 + "namespaceA",
prefix2 + "namespaceB"));
- SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"query",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(prefix1, prefix2),
namespaceMap,
/*schemaMap=*/ImmutableMap.of());
@@ -219,7 +236,9 @@
prefix2 + "namespaceA",
prefix2 + "namespaceB"));
- SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"query",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(prefix1, prefix2),
namespaceMap, /*schemaMap=*/ImmutableMap.of());
ResultSpecProto resultSpecProto = converter.toResultSpecProto(namespaceMap);
@@ -243,12 +262,13 @@
"package$database1/namespace2"),
prefix2, ImmutableSet.of("package$database2/namespace3",
"package$database2/namespace4"));
- SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(prefix1, prefix2),
namespaceMap, /*schemaMap=*/ImmutableMap.of());
- SearchSpecProto searchSpecProto =
- converter.toSearchSpecProto(/*queryExpression=*/"");
+ SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
assertThat(searchSpecProto.getNamespaceFiltersList()).containsExactly(
"package$database1/namespace1", "package$database1/namespace2",
@@ -262,7 +282,9 @@
String prefix2 = PrefixUtil.createPrefix("package", "database2");
// Only search for prefix1
- SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(prefix1),
/*namespaceMap=*/ImmutableMap.of(
prefix1, ImmutableSet.of("package$database1/namespace1",
@@ -271,8 +293,7 @@
"package$database2/namespace4")),
/*schemaMap=*/ImmutableMap.of());
- SearchSpecProto searchSpecProto =
- converter.toSearchSpecProto(/*queryExpression=*/"");
+ SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
// Only search prefix1 will return namespace 1 and 2.
assertThat(searchSpecProto.getNamespaceFiltersList()).containsExactly(
"package$database1/namespace1", "package$database1/namespace2");
@@ -285,14 +306,15 @@
.addFilterNamespaces("namespace1", "nonExist").build();
String prefix1 = PrefixUtil.createPrefix("package", "database1");
- SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(prefix1),
/*namespaceMap=*/ImmutableMap.of(
prefix1, ImmutableSet.of("package$database1/namespace1",
"package$database1/namespace2")),
/*schemaMap=*/ImmutableMap.of());
- SearchSpecProto searchSpecProto =
- converter.toSearchSpecProto(/*queryExpression=*/"");
+ SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
// If the searching namespace filter is not empty, the target namespace filter will be the
// intersection of the searching namespace filters that users want to search over and
// those candidates which are stored in AppSearch.
@@ -307,14 +329,15 @@
.addFilterNamespaces("nonExist").build();
String prefix1 = PrefixUtil.createPrefix("package", "database1");
- SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(prefix1),
/*namespaceMap=*/ImmutableMap.of(
prefix1, ImmutableSet.of("package$database1/namespace1",
"package$database1/namespace2")),
/*schemaMap=*/ImmutableMap.of());
- SearchSpecProto searchSpecProto =
- converter.toSearchSpecProto(/*queryExpression=*/"");
+ SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
// If the searching namespace filter is not empty, the target namespace filter will be the
// intersection of the searching namespace filters that users want to search over and
// those candidates which are stored in AppSearch.
@@ -328,7 +351,9 @@
String prefix2 = createPrefix("package", "database2");
SchemaTypeConfigProto schemaTypeConfigProto =
SchemaTypeConfigProto.newBuilder().getDefaultInstanceForType();
- SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(prefix1, prefix2),
/*namespaceMap=*/ImmutableMap.of(
prefix1, ImmutableSet.of("package$database1/namespace1")),
@@ -339,8 +364,7 @@
prefix2, ImmutableMap.of(
"package$database2/typeC", schemaTypeConfigProto,
"package$database2/typeD", schemaTypeConfigProto)));
- SearchSpecProto searchSpecProto =
- converter.toSearchSpecProto(/*queryExpression=*/"");
+ SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
// Empty searching filter will get all types for target filter
assertThat(searchSpecProto.getSchemaTypeFiltersList()).containsExactly(
"package$database1/typeA", "package$database1/typeB",
@@ -355,7 +379,9 @@
SchemaTypeConfigProto schemaTypeConfigProto =
SchemaTypeConfigProto.newBuilder().getDefaultInstanceForType();
// only search in prefix1
- SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(prefix1),
/*namespaceMap=*/ImmutableMap.of(
prefix1, ImmutableSet.of("package$database1/namespace1")),
@@ -366,8 +392,7 @@
prefix2, ImmutableMap.of(
"package$database2/typeC", schemaTypeConfigProto,
"package$database2/typeD", schemaTypeConfigProto)));
- SearchSpecProto searchSpecProto =
- converter.toSearchSpecProto(/*queryExpression=*/"");
+ SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
// Only search prefix1 will return typeA and B.
assertThat(searchSpecProto.getSchemaTypeFiltersList()).containsExactly(
"package$database1/typeA", "package$database1/typeB");
@@ -381,7 +406,9 @@
String prefix1 = createPrefix("package", "database1");
SchemaTypeConfigProto schemaTypeConfigProto =
SchemaTypeConfigProto.newBuilder().getDefaultInstanceForType();
- SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(prefix1),
/*namespaceMap=*/ImmutableMap.of(
prefix1, ImmutableSet.of("package$database1/namespace1")),
@@ -389,8 +416,7 @@
prefix1, ImmutableMap.of(
"package$database1/typeA", schemaTypeConfigProto,
"package$database1/typeB", schemaTypeConfigProto)));
- SearchSpecProto searchSpecProto =
- converter.toSearchSpecProto(/*queryExpression=*/"");
+ SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
// If the searching schema filter is not empty, the target schema filter will be the
// intersection of the schema filters that users want to search over and those candidates
// which are stored in AppSearch.
@@ -406,7 +432,9 @@
String prefix1 = createPrefix("package", "database1");
SchemaTypeConfigProto schemaTypeConfigProto =
SchemaTypeConfigProto.newBuilder().getDefaultInstanceForType();
- SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"",
+ searchSpec,
/*prefixes=*/ImmutableSet.of(prefix1),
/*namespaceMap=*/ImmutableMap.of(
prefix1, ImmutableSet.of("package$database1/namespace1")),
@@ -414,8 +442,7 @@
prefix1, ImmutableMap.of(
"package$database1/typeA", schemaTypeConfigProto,
"package$database1/typeB", schemaTypeConfigProto)));
- SearchSpecProto searchSpecProto =
- converter.toSearchSpecProto(/*queryExpression=*/"");
+ SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
// If there is no intersection of the schema filters that user want to search over and
// those filters which are stored in AppSearch, return empty.
@@ -423,14 +450,21 @@
}
@Test
- public void testRemoveInaccessibleSchemaFilter() {
- String prefix = PrefixUtil.createPrefix("package", "database");
+ public void testRemoveInaccessibleSchemaFilter() throws Exception {
+ AppSearchImpl appSearchImpl = AppSearchImpl.create(
+ mTemporaryFolder.newFolder(),
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/null,
+ ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
+ VisibilityStore visibilityStore = new VisibilityStore(appSearchImpl);
- SearchSpec searchSpec = new SearchSpec.Builder().build();
-
+ final String prefix = PrefixUtil.createPrefix("package", "database");
SchemaTypeConfigProto schemaTypeConfigProto =
SchemaTypeConfigProto.newBuilder().getDefaultInstanceForType();
- SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(searchSpec,
+ SearchSpecToProtoConverter converter = new SearchSpecToProtoConverter(
+ /*queryExpression=*/"",
+ new SearchSpec.Builder().build(),
/*prefixes=*/ImmutableSet.of(prefix),
/*namespaceMap=*/ImmutableMap.of(
prefix, ImmutableSet.of("package$database/namespace1")),
@@ -441,30 +475,13 @@
"package$database/schema3", schemaTypeConfigProto)));
converter.removeInaccessibleSchemaFilter(
- /*callerPackageName=*/"otherPackageName",
- new VisibilityStore() {
- @Override
- public void setVisibility(@NonNull String packageName,
- @NonNull String databaseName,
- @NonNull Set<String> schemasNotDisplayedBySystem,
- @NonNull Map<String, List<PackageIdentifier>> schemasVisibleToPackages)
- throws AppSearchException {
+ new CallerAccess(/*callingPackageName=*/"otherPackageName"),
+ visibilityStore,
+ AppSearchTestUtils.createMockVisibilityChecker(
+ /*visiblePrefixedSchemas=*/ ImmutableSet.of(
+ prefix + "schema1", prefix + "schema3")));
- }
-
- @Override
- public boolean isSchemaSearchableByCaller(@NonNull String packageName,
- @NonNull String databaseName, @NonNull String prefixedSchema,
- int callerUid, boolean callerHasSystemAccess) {
- // filter out schema 2 which is not searchable for user.
- return !prefixedSchema.equals(prefix + "schema2");
- }
- },
- /*callerUid=*/-1,
- /*callerHasSystemAccess=*/true);
-
- SearchSpecProto searchSpecProto =
- converter.toSearchSpecProto(/*queryExpression=*/"");
+ SearchSpecProto searchSpecProto = converter.toSearchSpecProto();
// schema 2 is filtered out since it is not searchable for user.
assertThat(searchSpecProto.getSchemaTypeFiltersList()).containsExactly(
prefix + "schema1", prefix + "schema3");
@@ -488,45 +505,33 @@
);
SearchSpecToProtoConverter emptySchemaConverter =
- new SearchSpecToProtoConverter(searchSpec, /*prefixes=*/ImmutableSet.of(prefix),
+ new SearchSpecToProtoConverter(
+ /*queryExpression=*/"",
+ searchSpec, /*prefixes=*/ImmutableSet.of(prefix),
/*namespaceMap=*/namespaceMap,
/*schemaMap=*/ImmutableMap.of());
- assertThat(emptySchemaConverter.isNothingToSearch()).isTrue();
+ assertThat(emptySchemaConverter.hasNothingToSearch()).isTrue();
SearchSpecToProtoConverter emptyNamespaceConverter =
- new SearchSpecToProtoConverter(searchSpec, /*prefixes=*/ImmutableSet.of(prefix),
+ new SearchSpecToProtoConverter(
+ /*queryExpression=*/"",
+ searchSpec, /*prefixes=*/ImmutableSet.of(prefix),
/*namespaceMap=*/ImmutableMap.of(),
schemaMap);
- assertThat(emptyNamespaceConverter.isNothingToSearch()).isTrue();
+ assertThat(emptyNamespaceConverter.hasNothingToSearch()).isTrue();
SearchSpecToProtoConverter nonEmptyConverter =
- new SearchSpecToProtoConverter(searchSpec, /*prefixes=*/ImmutableSet.of(prefix),
+ new SearchSpecToProtoConverter(
+ /*queryExpression=*/"",
+ searchSpec, /*prefixes=*/ImmutableSet.of(prefix),
namespaceMap, schemaMap);
- assertThat(nonEmptyConverter.isNothingToSearch()).isFalse();
+ assertThat(nonEmptyConverter.hasNothingToSearch()).isFalse();
// remove all target schema filter, and the query becomes nothing to search.
nonEmptyConverter.removeInaccessibleSchemaFilter(
- /*callerPackageName=*/"otherPackageName",
- new VisibilityStore() {
- @Override
- public void setVisibility(@NonNull String packageName,
- @NonNull String databaseName,
- @NonNull Set<String> schemasNotDisplayedBySystem,
- @NonNull Map<String, List<PackageIdentifier>> schemasVisibleToPackages)
- throws AppSearchException {
-
- }
-
- @Override
- public boolean isSchemaSearchableByCaller(@NonNull String packageName,
- @NonNull String databaseName, @NonNull String prefixedSchema,
- int callerUid, boolean callerHasSystemAccess) {
- // filter out all schema.
- return false;
- }
- },
- /*callerUid=*/-1,
- /*callerHasSystemAccess=*/true);
- assertThat(nonEmptyConverter.isNothingToSearch()).isTrue();
+ new CallerAccess(/*callingPackageName=*/"otherPackageName"),
+ /*visibilityStore=*/null,
+ /*visibilityChecker=*/null);
+ assertThat(nonEmptyConverter.hasNothingToSearch()).isTrue();
}
}
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SnippetTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SnippetTest.java
index fd150c0..9e3b559 100644
--- a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SnippetTest.java
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/converter/SnippetTest.java
@@ -18,6 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
+import androidx.appsearch.app.PropertyPath;
import androidx.appsearch.app.SearchResult;
import androidx.appsearch.app.SearchResultPage;
import androidx.appsearch.localstorage.util.PrefixUtil;
@@ -277,6 +278,7 @@
assertThat(searchResultPage.getResults()).hasSize(1);
SearchResult.MatchInfo match1 = searchResultPage.getResults().get(0).getMatchInfos().get(0);
assertThat(match1.getPropertyPath()).isEqualTo("sender.name");
+ assertThat(match1.getPropertyPathObject()).isEqualTo(new PropertyPath("sender.name"));
assertThat(match1.getFullText()).isEqualTo("Test Name Jr.");
assertThat(match1.getExactMatchRange()).isEqualTo(
new SearchResult.MatchRange(/*lower=*/0, /*upper=*/4));
@@ -290,6 +292,7 @@
SearchResult.MatchInfo match2 = searchResultPage.getResults().get(0).getMatchInfos().get(1);
assertThat(match2.getPropertyPath()).isEqualTo("sender.email[1]");
+ assertThat(match2.getPropertyPathObject()).isEqualTo(new PropertyPath("sender.email[1]"));
assertThat(match2.getFullText()).isEqualTo("TestNameJr2@gmail.com");
assertThat(match2.getExactMatchRange()).isEqualTo(
new SearchResult.MatchRange(/*lower=*/0, /*upper=*/21));
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java
new file mode 100644
index 0000000..fc8d058
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0Test.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.localstorage.visibilitystore;
+
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_NOT_DISPLAYED_BY_SYSTEM_PROPERTY;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_PACKAGE_NAME_PROPERTY;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_PACKAGE_SCHEMA_TYPE;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_SHA_256_CERT_PROPERTY;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_VISIBILITY_SCHEMA_TYPE;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV0.DEPRECATED_VISIBLE_TO_PACKAGES_PROPERTY;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.InternalSetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.VisibilityDocument;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.OptimizeStrategy;
+import androidx.appsearch.localstorage.UnlimitedLimitConfig;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+
+import com.google.common.collect.ImmutableList;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.File;
+import java.util.Collections;
+
+public class VisibilityStoreMigrationHelperFromV0Test {
+
+ /**
+ * Always trigger optimize in this class. OptimizeStrategy will be tested in its own test class.
+ */
+ private static final OptimizeStrategy ALWAYS_OPTIMIZE = optimizeInfo -> true;
+
+ @Rule
+ public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+ private File mFile;
+
+ @Before
+ public void setUp() throws Exception {
+ // Give ourselves global query permissions
+ mFile = mTemporaryFolder.newFolder();
+ }
+
+ @Test
+ public void testVisibilityMigration_from0() throws Exception {
+ // Values for a "foo" client
+ String packageNameFoo = "packageFoo";
+ byte[] sha256CertFoo = new byte[32];
+
+ // Values for a "bar" client
+ String packageNameBar = "packageBar";
+ byte[] sha256CertBar = new byte[32];
+
+ // Create AppSearchImpl with visibility document version 0;
+ AppSearchImpl appSearchImplInV0 = buildAppSearchImplInV0();
+ // Build deprecated visibility documents in version 0
+ // "schema1" and "schema2" are platform hidden.
+ // "schema1" is accessible to packageFoo and "schema2" is accessible to packageBar.
+ String prefix = PrefixUtil.createPrefix("package", "database");
+ GenericDocument deprecatedVisibilityToPackageFoo = new GenericDocument.Builder<>(
+ VisibilityDocument.NAMESPACE, "", DEPRECATED_PACKAGE_SCHEMA_TYPE)
+ .setPropertyString(DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY, prefix + "Schema1")
+ .setPropertyString(DEPRECATED_PACKAGE_NAME_PROPERTY, packageNameFoo)
+ .setPropertyBytes(DEPRECATED_SHA_256_CERT_PROPERTY, sha256CertFoo)
+ .build();
+ GenericDocument deprecatedVisibilityToPackageBar = new GenericDocument.Builder<>(
+ VisibilityDocument.NAMESPACE, "", DEPRECATED_PACKAGE_SCHEMA_TYPE)
+ .setPropertyString(DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY, prefix + "Schema2")
+ .setPropertyString(DEPRECATED_PACKAGE_NAME_PROPERTY, packageNameBar)
+ .setPropertyBytes(DEPRECATED_SHA_256_CERT_PROPERTY, sha256CertBar)
+ .build();
+ GenericDocument deprecatedVisibilityDocument = new GenericDocument.Builder<>(
+ VisibilityDocument.NAMESPACE,
+ VisibilityStoreMigrationHelperFromV0.getDeprecatedVisibilityDocumentId(
+ "package", "database"),
+ DEPRECATED_VISIBILITY_SCHEMA_TYPE)
+ .setPropertyString(DEPRECATED_NOT_DISPLAYED_BY_SYSTEM_PROPERTY,
+ prefix + "Schema1", prefix + "Schema2")
+ .setPropertyDocument(DEPRECATED_VISIBLE_TO_PACKAGES_PROPERTY,
+ deprecatedVisibilityToPackageFoo, deprecatedVisibilityToPackageBar)
+ .build();
+
+ // Set some client schemas into AppSearchImpl with empty VisibilityDocument since we need to
+ // directly put old version of VisibilityDocument.
+ InternalSetSchemaResponse internalSetSchemaResponse = appSearchImplInV0.setSchema(
+ "package",
+ "database",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("schema1").build(),
+ new AppSearchSchema.Builder("schema2").build()),
+ /*prefixedVisibilityBundles=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*schemaVersion=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Put deprecated visibility documents in version 0 to AppSearchImpl
+ appSearchImplInV0.putDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ deprecatedVisibilityDocument,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/null);
+
+ // Persist to disk and re-open the AppSearchImpl
+ appSearchImplInV0.close();
+ AppSearchImpl appSearchImpl = AppSearchImpl.create(mFile, new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
+
+ VisibilityDocument actualDocument1 = new VisibilityDocument(
+ appSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix + "Schema1",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ VisibilityDocument actualDocument2 = new VisibilityDocument(
+ appSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix + "Schema2",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+
+ VisibilityDocument expectedDocument1 =
+ new VisibilityDocument.Builder(/*id=*/ prefix + "Schema1")
+ .setNotDisplayedBySystem(true)
+ .setCreationTimestampMillis(actualDocument1.getCreationTimestampMillis())
+ .addVisibleToPackage(new PackageIdentifier(packageNameFoo, sha256CertFoo))
+ .build();
+ VisibilityDocument expectedDocument2 =
+ new VisibilityDocument.Builder(/*id=*/ prefix + "Schema2")
+ .setNotDisplayedBySystem(true)
+ .setCreationTimestampMillis(actualDocument2.getCreationTimestampMillis())
+ .addVisibleToPackage(new PackageIdentifier(packageNameBar, sha256CertBar))
+ .build();
+ assertThat(actualDocument1).isEqualTo(expectedDocument1);
+ assertThat(actualDocument2).isEqualTo(expectedDocument2);
+ }
+
+ /** Build AppSearchImpl with deprecated visibility schemas version 0. */
+ private AppSearchImpl buildAppSearchImplInV0() throws Exception {
+ AppSearchSchema visibilityDocumentSchemaV0 = new AppSearchSchema.Builder(
+ DEPRECATED_VISIBILITY_SCHEMA_TYPE)
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(
+ DEPRECATED_NOT_DISPLAYED_BY_SYSTEM_PROPERTY)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .addProperty(new AppSearchSchema.DocumentPropertyConfig.Builder(
+ DEPRECATED_VISIBLE_TO_PACKAGES_PROPERTY,
+ DEPRECATED_PACKAGE_SCHEMA_TYPE)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .build();
+ AppSearchSchema visibilityToPackagesSchemaV0 = new AppSearchSchema.Builder(
+ DEPRECATED_PACKAGE_SCHEMA_TYPE)
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(
+ DEPRECATED_PACKAGE_NAME_PROPERTY)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .addProperty(new AppSearchSchema.BytesPropertyConfig.Builder(
+ DEPRECATED_SHA_256_CERT_PROPERTY)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(
+ DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .build();
+ // Set deprecated visibility schema version 0 into AppSearchImpl.
+ AppSearchImpl appSearchImpl = AppSearchImpl.create(mFile, new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
+ InternalSetSchemaResponse internalSetSchemaResponse = appSearchImpl.setSchema(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ ImmutableList.of(visibilityDocumentSchemaV0, visibilityToPackagesSchemaV0),
+ /*prefixedVisibilityBundles=*/ Collections.emptyList(),
+ /*forceOverride=*/ true, // force push the old version into disk
+ /*version=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ return appSearchImpl;
+ }
+}
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java
new file mode 100644
index 0000000..37d8fb6
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1Test.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.localstorage.visibilitystore;
+
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV1.DEPRECATED_ROLE_ASSISTANT;
+import static androidx.appsearch.localstorage.visibilitystore.VisibilityStoreMigrationHelperFromV1.DEPRECATED_ROLE_HOME;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.InternalSetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.SetSchemaRequest;
+import androidx.appsearch.app.VisibilityDocument;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.OptimizeStrategy;
+import androidx.appsearch.localstorage.UnlimitedLimitConfig;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.File;
+import java.util.Collections;
+
+public class VisibilityStoreMigrationHelperFromV1Test {
+
+ /**
+ * Always trigger optimize in this class. OptimizeStrategy will be tested in its own test class.
+ */
+ private static final OptimizeStrategy ALWAYS_OPTIMIZE = optimizeInfo -> true;
+
+ @Rule
+ public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+ private File mFile;
+
+ @Before
+ public void setUp() throws Exception {
+ // Give ourselves global query permissions
+ mFile = mTemporaryFolder.newFolder();
+ }
+
+ @Test
+ public void testVisibilityMigration_from1() throws Exception {
+ // Values for a "foo" client
+ String packageNameFoo = "packageFoo";
+ byte[] sha256CertFoo = new byte[32];
+
+ // Values for a "bar" client
+ String packageNameBar = "packageBar";
+ byte[] sha256CertBar = new byte[32];
+
+ // Create AppSearchImpl with visibility document version 1;
+ AppSearchImpl appSearchImplInV1 = AppSearchImpl.create(mFile, new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
+ InternalSetSchemaResponse internalSetSchemaResponse = appSearchImplInV1.setSchema(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ ImmutableList.of(VisibilityDocumentV1.SCHEMA),
+ /*prefixedVisibilityBundles=*/ Collections.emptyList(),
+ /*forceOverride=*/ true, // force push the old version into disk
+ /*version=*/ 1,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ // Build deprecated visibility documents in version 1
+ String prefix = PrefixUtil.createPrefix("package", "database");
+ VisibilityDocumentV1 visibilityDocumentV1 =
+ new VisibilityDocumentV1.Builder(prefix + "Schema")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier(packageNameFoo, sha256CertFoo))
+ .addVisibleToPackage(new PackageIdentifier(packageNameBar, sha256CertBar))
+ .setVisibleToRoles(ImmutableSet.of(DEPRECATED_ROLE_HOME,
+ DEPRECATED_ROLE_ASSISTANT))
+ .setVisibleToPermissions(ImmutableSet.of(SetSchemaRequest.READ_SMS,
+ SetSchemaRequest.READ_CALENDAR))
+ .build();
+
+ // Set client schema into AppSearchImpl with empty VisibilityDocument since we need to
+ // directly put old version of VisibilityDocument.
+ internalSetSchemaResponse = appSearchImplInV1.setSchema(
+ "package",
+ "database",
+ ImmutableList.of(
+ new AppSearchSchema.Builder("Schema").build()),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*schemaVersion=*/ 0,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+
+ // Put deprecated visibility documents in version 0 to AppSearchImpl
+ appSearchImplInV1.putDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ visibilityDocumentV1,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/null);
+
+ // Persist to disk and re-open the AppSearchImpl
+ appSearchImplInV1.close();
+ AppSearchImpl appSearchImpl = AppSearchImpl.create(mFile, new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/ null, ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
+
+ VisibilityDocument actualDocument = new VisibilityDocument(
+ appSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix + "Schema",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+
+ assertThat(actualDocument.isNotDisplayedBySystem()).isTrue();
+ assertThat(actualDocument.getPackageNames()).asList().containsExactly(packageNameFoo,
+ packageNameBar);
+ assertThat(actualDocument.getSha256Certs()).isEqualTo(
+ new byte[][] {sha256CertFoo, sha256CertBar});
+ assertThat(actualDocument.getVisibleToPermissions()).containsExactlyElementsIn(
+ ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA),
+ ImmutableSet.of(SetSchemaRequest.READ_ASSISTANT_APP_SEARCH_DATA)));
+ }
+}
diff --git a/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java
new file mode 100644
index 0000000..0a5364f
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/androidTest/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreTest.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.localstorage.visibilitystore;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertThrows;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.InternalSetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.VisibilityDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.OptimizeStrategy;
+import androidx.appsearch.localstorage.UnlimitedLimitConfig;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.File;
+import java.util.Collections;
+
+public class VisibilityStoreTest {
+
+ /**
+ * Always trigger optimize in this class. OptimizeStrategy will be tested in its own test class.
+ */
+ private static final OptimizeStrategy ALWAYS_OPTIMIZE = optimizeInfo -> true;
+ @Rule
+ public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+ private File mAppSearchDir;
+ private AppSearchImpl mAppSearchImpl;
+ private VisibilityStore mVisibilityStore;
+
+ @Before
+ public void setUp() throws Exception {
+ mAppSearchDir = mTemporaryFolder.newFolder();
+ mAppSearchImpl = AppSearchImpl.create(
+ mAppSearchDir,
+ new UnlimitedLimitConfig(),
+ /*initStatsBuilder=*/ null,
+ ALWAYS_OPTIMIZE,
+ /*visibilityChecker=*/null);
+ mVisibilityStore = new VisibilityStore(mAppSearchImpl);
+ }
+
+ @After
+ public void tearDown() {
+ mAppSearchImpl.close();
+ }
+
+ /**
+ * Make sure that we don't conflict with any special characters that AppSearchImpl has reserved.
+ */
+ @Test
+ public void testValidPackageName() {
+ assertThat(VisibilityStore.VISIBILITY_PACKAGE_NAME)
+ .doesNotContain(String.valueOf(PrefixUtil.PACKAGE_DELIMITER));
+ assertThat(VisibilityStore.VISIBILITY_PACKAGE_NAME)
+ .doesNotContain(String.valueOf(PrefixUtil.DATABASE_DELIMITER));
+ }
+
+ /**
+ * Make sure that we don't conflict with any special characters that AppSearchImpl has reserved.
+ */
+ @Test
+ public void testValidDatabaseName() {
+ assertThat(VisibilityStore.VISIBILITY_DATABASE_NAME)
+ .doesNotContain(String.valueOf(PrefixUtil.PACKAGE_DELIMITER));
+ assertThat(VisibilityStore.VISIBILITY_DATABASE_NAME)
+ .doesNotContain(String.valueOf(PrefixUtil.DATABASE_DELIMITER));
+ }
+
+ @Test
+ public void testSetAndGetVisibility() throws Exception {
+ String prefix = PrefixUtil.createPrefix("packageName", "databaseName");
+ VisibilityDocument visibilityDocument = new VisibilityDocument.Builder(prefix + "Email")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .build();
+ mVisibilityStore.setVisibility(ImmutableList.of(visibilityDocument));
+
+ assertThat(mVisibilityStore.getVisibility(prefix + "Email"))
+ .isEqualTo(visibilityDocument);
+ // Verify the VisibilityDocument is saved to AppSearchImpl.
+ VisibilityDocument actualDocument = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefix + "Email",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ assertThat(actualDocument).isEqualTo(visibilityDocument);
+ }
+
+ @Test
+ public void testRemoveVisibility() throws Exception {
+ VisibilityDocument visibilityDocument = new VisibilityDocument.Builder("Email")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .build();
+ mVisibilityStore.setVisibility(ImmutableList.of(visibilityDocument));
+
+ assertThat(mVisibilityStore.getVisibility("Email"))
+ .isEqualTo(visibilityDocument);
+ // Verify the VisibilityDocument is saved to AppSearchImpl.
+ VisibilityDocument actualDocument = new VisibilityDocument(mAppSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ "Email",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ assertThat(actualDocument).isEqualTo(visibilityDocument);
+
+ mVisibilityStore.removeVisibility(ImmutableSet.of(visibilityDocument.getId()));
+ assertThat(mVisibilityStore.getVisibility("Email")).isNull();
+ // Verify the VisibilityDocument is removed from AppSearchImpl.
+ AppSearchException e = assertThrows(AppSearchException.class,
+ () -> mAppSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ "Email",
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ assertThat(e).hasMessageThat().contains(
+ "Document (VS#Pkg$VS#Db/, Email) not found.");
+ }
+
+ @Test
+ public void testRecoverBrokenVisibilitySchema() throws Exception {
+ // Create a broken schema which could be recovered to the latest schema in a compatible
+ // change. Since we won't set force override to true to recover the broken case.
+ AppSearchSchema brokenSchema = new AppSearchSchema.Builder(VisibilityDocument.SCHEMA_TYPE)
+ .build();
+
+ // Index a broken schema into AppSearch, use the latest version to make it broken.
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ Collections.singletonList(brokenSchema),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ true,
+ /*version=*/ VisibilityDocument.SCHEMA_VERSION_LATEST,
+ /*setSchemaStatsBuilder=*/ null);
+ assertThat(internalSetSchemaResponse.isSuccess()).isTrue();
+ // Create VisibilityStore should recover the broken schema
+ mVisibilityStore = new VisibilityStore(mAppSearchImpl);
+
+ // We should be able to set and get Visibility settings.
+ String prefix = PrefixUtil.createPrefix("packageName", "databaseName");
+ VisibilityDocument visibilityDocument = new VisibilityDocument.Builder(prefix + "Email")
+ .setNotDisplayedBySystem(true)
+ .addVisibleToPackage(new PackageIdentifier("pkgBar", new byte[32]))
+ .build();
+ mVisibilityStore.setVisibility(ImmutableList.of(visibilityDocument));
+
+ assertThat(mVisibilityStore.getVisibility(prefix + "Email"))
+ .isEqualTo(visibilityDocument);
+ }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java
index 23b0e83..c7bc830 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AlwaysSupportedFeatures.java
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+// @exportToFramework:copyToPath(testing/testutils/src/android/app/appsearch/testutil/external/AlwaysSupportedFeatures.java)
package androidx.appsearch.localstorage;
import androidx.annotation.NonNull;
@@ -33,7 +34,16 @@
if (Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH.equals(feature)) {
return true;
}
- if (Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER.equals(feature)) {
+ if (Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK.equals(feature)) {
+ return true;
+ }
+ if (Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA.equals(feature)) {
+ return true;
+ }
+ if (Features.GLOBAL_SEARCH_SESSION_GET_BY_ID.equals(feature)) {
+ return true;
+ }
+ if (Features.ADD_PERMISSIONS_AND_GET_VISIBILITY.equals(feature)) {
return true;
}
return false;
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
index a0016a2..1f164db 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchImpl.java
@@ -16,6 +16,10 @@
package androidx.appsearch.localstorage;
+import static androidx.appsearch.app.AppSearchResult.RESULT_INTERNAL_ERROR;
+import static androidx.appsearch.app.AppSearchResult.RESULT_SECURITY_ERROR;
+import static androidx.appsearch.app.InternalSetSchemaResponse.newFailedSetSchemaResponse;
+import static androidx.appsearch.app.InternalSetSchemaResponse.newSuccessfulSetSchemaResponse;
import static androidx.appsearch.localstorage.util.PrefixUtil.addPrefixToDocument;
import static androidx.appsearch.localstorage.util.PrefixUtil.createPrefix;
import static androidx.appsearch.localstorage.util.PrefixUtil.getDatabaseName;
@@ -38,17 +42,22 @@
import androidx.appsearch.app.GenericDocument;
import androidx.appsearch.app.GetByDocumentIdRequest;
import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.InternalSetSchemaResponse;
import androidx.appsearch.app.PackageIdentifier;
import androidx.appsearch.app.SearchResultPage;
import androidx.appsearch.app.SearchSpec;
+import androidx.appsearch.app.SearchSuggestionResult;
+import androidx.appsearch.app.SearchSuggestionSpec;
import androidx.appsearch.app.SetSchemaResponse;
import androidx.appsearch.app.StorageInfo;
+import androidx.appsearch.app.VisibilityDocument;
import androidx.appsearch.exceptions.AppSearchException;
import androidx.appsearch.localstorage.converter.GenericDocumentToProtoConverter;
import androidx.appsearch.localstorage.converter.ResultCodeToProtoConverter;
import androidx.appsearch.localstorage.converter.SchemaToProtoConverter;
import androidx.appsearch.localstorage.converter.SearchResultToProtoConverter;
import androidx.appsearch.localstorage.converter.SearchSpecToProtoConverter;
+import androidx.appsearch.localstorage.converter.SearchSuggestionSpecToProtoConverter;
import androidx.appsearch.localstorage.converter.SetSchemaResponseToProtoConverter;
import androidx.appsearch.localstorage.converter.TypePropertyPathToProtoConverter;
import androidx.appsearch.localstorage.stats.InitializeStats;
@@ -58,8 +67,11 @@
import androidx.appsearch.localstorage.stats.SearchStats;
import androidx.appsearch.localstorage.stats.SetSchemaStats;
import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityChecker;
import androidx.appsearch.localstorage.visibilitystore.VisibilityStore;
-import androidx.appsearch.observer.AppSearchObserverCallback;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityUtil;
+import androidx.appsearch.observer.ObserverCallback;
import androidx.appsearch.observer.ObserverSpec;
import androidx.appsearch.util.LogUtil;
import androidx.collection.ArrayMap;
@@ -68,6 +80,9 @@
import androidx.core.util.Preconditions;
import com.google.android.icing.IcingSearchEngine;
+import com.google.android.icing.proto.DebugInfoProto;
+import com.google.android.icing.proto.DebugInfoResultProto;
+import com.google.android.icing.proto.DebugInfoVerbosity;
import com.google.android.icing.proto.DeleteByQueryResultProto;
import com.google.android.icing.proto.DeleteResultProto;
import com.google.android.icing.proto.DocumentProto;
@@ -79,6 +94,7 @@
import com.google.android.icing.proto.GetSchemaResultProto;
import com.google.android.icing.proto.IcingSearchEngineOptions;
import com.google.android.icing.proto.InitializeResultProto;
+import com.google.android.icing.proto.LogSeverity;
import com.google.android.icing.proto.NamespaceStorageInfoProto;
import com.google.android.icing.proto.OptimizeResultProto;
import com.google.android.icing.proto.PersistToDiskResultProto;
@@ -97,6 +113,7 @@
import com.google.android.icing.proto.StatusProto;
import com.google.android.icing.proto.StorageInfoProto;
import com.google.android.icing.proto.StorageInfoResultProto;
+import com.google.android.icing.proto.SuggestionResponse;
import com.google.android.icing.proto.TypePropertyMask;
import com.google.android.icing.proto.UsageReport;
@@ -161,14 +178,7 @@
TypePropertyMask.newBuilder().setSchemaType(
GetByDocumentIdRequest.PROJECTION_SCHEMA_TYPE_WILDCARD)).build();
- /** A ResultSpec that uses projection to skip all properties. */
- private static final ResultSpecProto RESULT_SPEC_NO_PROPERTIES =
- ResultSpecProto.newBuilder().addTypePropertyMasks(
- TypePropertyMask.newBuilder().setSchemaType(
- GetByDocumentIdRequest.PROJECTION_SCHEMA_TYPE_WILDCARD)).build();
-
private final ReadWriteLock mReadWriteLock = new ReentrantReadWriteLock();
- private final LogUtil mLogUtil = new LogUtil(TAG);
private final OptimizeStrategy mOptimizeStrategy;
private final LimitConfig mLimitConfig;
@@ -211,6 +221,21 @@
private final ObserverManager mObserverManager = new ObserverManager();
/**
+ * VisibilityStore will be used in {@link #setSchema} and {@link #getSchema} to store and query
+ * visibility information. But to create a {@link VisibilityStore}, it will call
+ * {@link #setSchema} and {@link #getSchema} to get the visibility schema. Make it nullable to
+ * avoid call it before we actually create it.
+ */
+ @Nullable
+ @VisibleForTesting
+ @GuardedBy("mReadWriteLock")
+ final VisibilityStore mVisibilityStoreLocked;
+
+ @Nullable
+ @GuardedBy("mReadWriteLock")
+ private final VisibilityChecker mVisibilityCheckerLocked;
+
+ /**
* The counter to check when to call {@link #checkForOptimize}. The
* interval is
* {@link #CHECK_OPTIMIZE_INTERVAL}.
@@ -234,15 +259,20 @@
* and putDocument.
*
* @param initStatsBuilder collects stats for initialization if provided.
+ * @param visibilityChecker The {@link VisibilityChecker} that check whether the caller has
+ * access to aa specific schema. Pass null will lost that ability and
+ * global querier could only get their own data.
*/
@NonNull
public static AppSearchImpl create(
@NonNull File icingDir,
@NonNull LimitConfig limitConfig,
@Nullable InitializeStats.Builder initStatsBuilder,
- @NonNull OptimizeStrategy optimizeStrategy)
+ @NonNull OptimizeStrategy optimizeStrategy,
+ @Nullable VisibilityChecker visibilityChecker)
throws AppSearchException {
- return new AppSearchImpl(icingDir, limitConfig, initStatsBuilder, optimizeStrategy);
+ return new AppSearchImpl(icingDir, limitConfig, initStatsBuilder, optimizeStrategy,
+ visibilityChecker);
}
/**
@@ -252,11 +282,13 @@
@NonNull File icingDir,
@NonNull LimitConfig limitConfig,
@Nullable InitializeStats.Builder initStatsBuilder,
- @NonNull OptimizeStrategy optimizeStrategy)
+ @NonNull OptimizeStrategy optimizeStrategy,
+ @Nullable VisibilityChecker visibilityChecker)
throws AppSearchException {
Preconditions.checkNotNull(icingDir);
mLimitConfig = Preconditions.checkNotNull(limitConfig);
mOptimizeStrategy = Preconditions.checkNotNull(optimizeStrategy);
+ mVisibilityCheckerLocked = visibilityChecker;
mReadWriteLock.writeLock().lock();
try {
@@ -264,18 +296,20 @@
// than once. It's unnecessary and can be a costly operation.
IcingSearchEngineOptions options = IcingSearchEngineOptions.newBuilder()
.setBaseDir(icingDir.getAbsolutePath()).build();
- mLogUtil.piiTrace("Constructing IcingSearchEngine, request", options);
+ LogUtil.piiTrace(TAG, "Constructing IcingSearchEngine, request", options);
mIcingSearchEngineLocked = new IcingSearchEngine(options);
- mLogUtil.piiTrace(
+ LogUtil.piiTrace(
+ TAG,
"Constructing IcingSearchEngine, response",
ObjectsCompat.hashCode(mIcingSearchEngineLocked));
// The core initialization procedure. If any part of this fails, we bail into
// resetLocked(), deleting all data (but hopefully allowing AppSearchImpl to come up).
try {
- mLogUtil.piiTrace("icingSearchEngine.initialize, request");
+ LogUtil.piiTrace(TAG, "icingSearchEngine.initialize, request");
InitializeResultProto initializeResultProto = mIcingSearchEngineLocked.initialize();
- mLogUtil.piiTrace(
+ LogUtil.piiTrace(
+ TAG,
"icingSearchEngine.initialize, response",
initializeResultProto.getStatus(),
initializeResultProto);
@@ -295,10 +329,11 @@
long prepareSchemaAndNamespacesLatencyStartMillis = SystemClock.elapsedRealtime();
SchemaProto schemaProto = getSchemaProtoLocked();
- mLogUtil.piiTrace("init:getAllNamespaces, request");
+ LogUtil.piiTrace(TAG, "init:getAllNamespaces, request");
GetAllNamespacesResultProto getAllNamespacesResultProto =
mIcingSearchEngineLocked.getAllNamespaces();
- mLogUtil.piiTrace(
+ LogUtil.piiTrace(
+ TAG,
"init:getAllNamespaces, response",
getAllNamespacesResultProto.getNamespacesCount(),
getAllNamespacesResultProto);
@@ -344,7 +379,7 @@
- prepareSchemaAndNamespacesLatencyStartMillis));
}
- mLogUtil.piiTrace("Init completed successfully");
+ LogUtil.piiTrace(TAG, "Init completed successfully");
} catch (AppSearchException e) {
// Some error. Reset and see if it fixes it.
@@ -355,6 +390,14 @@
resetLocked(initStatsBuilder);
}
+ long prepareVisibilityStoreLatencyStartMillis = SystemClock.elapsedRealtime();
+ mVisibilityStoreLocked = new VisibilityStore(this);
+ long prepareVisibilityStoreLatencyEndMillis = SystemClock.elapsedRealtime();
+ if (initStatsBuilder != null) {
+ initStatsBuilder.setPrepareVisibilityStoreLatencyMillis((int)
+ (prepareVisibilityStoreLatencyEndMillis
+ - prepareVisibilityStoreLatencyStartMillis));
+ }
} finally {
mReadWriteLock.writeLock().unlock();
}
@@ -381,9 +424,9 @@
return;
}
persistToDisk(PersistType.Code.FULL);
- mLogUtil.piiTrace("icingSearchEngine.close, request");
+ LogUtil.piiTrace(TAG, "icingSearchEngine.close, request");
mIcingSearchEngineLocked.close();
- mLogUtil.piiTrace("icingSearchEngine.close, response");
+ LogUtil.piiTrace(TAG, "icingSearchEngine.close, response");
mClosedLocked = true;
} catch (AppSearchException e) {
Log.w(TAG, "Error when closing AppSearchImpl.", e);
@@ -397,186 +440,426 @@
*
* <p>This method belongs to mutate group.
*
- * @param packageName The package name that owns the schemas.
- * @param databaseName The name of the database where this schema lives.
- * @param schemas Schemas to set for this app.
- * @param visibilityStore If set, {@code schemasNotDisplayedBySystem} and {@code
- * schemasVisibleToPackages} will be saved here if the
- * schema is successfully applied.
- * @param schemasNotDisplayedBySystem Schema types that should not be surfaced on platform
- * surfaces.
- * @param schemasVisibleToPackages Schema types that are visible to the specified packages.
- * @param forceOverride Whether to force-apply the schema even if it is
- * incompatible. Documents
- * which do not comply with the new schema will be deleted.
- * @param version The overall version number of the request.
- * @param setSchemaStatsBuilder Builder for {@link SetSchemaStats} to hold stats for
- * setSchema
- * @return The response contains deleted schema types and incompatible schema types of this
- * call.
+ * @param packageName The package name that owns the schemas.
+ * @param databaseName The name of the database where this schema lives.
+ * @param schemas Schemas to set for this app.
+ * @param visibilityDocuments {@link VisibilityDocument}s that contain all
+ * visibility setting information for those schemas
+ * has user custom settings. Other schemas in the list
+ * that don't has a {@link VisibilityDocument}
+ * will be treated as having the default visibility,
+ * which is accessible by the system and no other packages.
+ * @param forceOverride Whether to force-apply the schema even if it is
+ * incompatible. Documents
+ * which do not comply with the new schema will be deleted.
+ * @param version The overall version number of the request.
+ * @param setSchemaStatsBuilder Builder for {@link SetSchemaStats} to hold stats for
+ * setSchema
+ * @return A success {@link InternalSetSchemaResponse} with a {@link SetSchemaResponse}. Or a
+ * failed {@link InternalSetSchemaResponse} if this call contains incompatible change. The
+ * {@link SetSchemaResponse} in the failed {@link InternalSetSchemaResponse} contains which type
+ * is incompatible. You need to check the status by
+ * {@link InternalSetSchemaResponse#isSuccess()}.
+ *
* @throws AppSearchException On IcingSearchEngine error. If the status code is
* FAILED_PRECONDITION for the incompatible change, the
* exception will be converted to the SetSchemaResponse.
*/
@NonNull
- public SetSchemaResponse setSchema(
+ public InternalSetSchemaResponse setSchema(
@NonNull String packageName,
@NonNull String databaseName,
@NonNull List<AppSearchSchema> schemas,
- @Nullable VisibilityStore visibilityStore,
- @NonNull List<String> schemasNotDisplayedBySystem,
- @NonNull Map<String, List<PackageIdentifier>> schemasVisibleToPackages,
+ @NonNull List<VisibilityDocument> visibilityDocuments,
boolean forceOverride,
int version,
@Nullable SetSchemaStats.Builder setSchemaStatsBuilder) throws AppSearchException {
mReadWriteLock.writeLock().lock();
try {
throwIfClosedLocked();
-
- SchemaProto.Builder existingSchemaBuilder = getSchemaProtoLocked().toBuilder();
-
- SchemaProto.Builder newSchemaBuilder = SchemaProto.newBuilder();
- for (int i = 0; i < schemas.size(); i++) {
- AppSearchSchema schema = schemas.get(i);
- SchemaTypeConfigProto schemaTypeProto =
- SchemaToProtoConverter.toSchemaTypeConfigProto(schema, version);
- newSchemaBuilder.addTypes(schemaTypeProto);
- }
-
- String prefix = createPrefix(packageName, databaseName);
- // Combine the existing schema (which may have types from other prefixes) with this
- // prefix's new schema. Modifies the existingSchemaBuilder.
- RewrittenSchemaResults rewrittenSchemaResults = rewriteSchema(prefix,
- existingSchemaBuilder,
- newSchemaBuilder.build());
-
- // Apply schema
- SchemaProto finalSchema = existingSchemaBuilder.build();
- mLogUtil.piiTrace("setSchema, request", finalSchema.getTypesCount(), finalSchema);
- SetSchemaResultProto setSchemaResultProto =
- mIcingSearchEngineLocked.setSchema(finalSchema, forceOverride);
- mLogUtil.piiTrace(
- "setSchema, response", setSchemaResultProto.getStatus(), setSchemaResultProto);
-
- if (setSchemaStatsBuilder != null) {
- setSchemaStatsBuilder.setStatusCode(statusProtoToResultCode(
- setSchemaResultProto.getStatus()));
- AppSearchLoggerHelper.copyNativeStats(setSchemaResultProto,
- setSchemaStatsBuilder);
- }
-
- // Determine whether it succeeded.
- try {
- checkSuccess(setSchemaResultProto.getStatus());
- } catch (AppSearchException e) {
- // Swallow the exception for the incompatible change case. We will propagate
- // those deleted schemas and incompatible types to the SetSchemaResponse.
- boolean isFailedPrecondition = setSchemaResultProto.getStatus().getCode()
- == StatusProto.Code.FAILED_PRECONDITION;
- boolean isIncompatible = setSchemaResultProto.getDeletedSchemaTypesCount() > 0
- || setSchemaResultProto.getIncompatibleSchemaTypesCount() > 0;
- if (isFailedPrecondition && isIncompatible) {
- return SetSchemaResponseToProtoConverter
- .toSetSchemaResponse(setSchemaResultProto, prefix);
- } else {
- throw e;
- }
- }
-
- // Update derived data structures.
- for (SchemaTypeConfigProto schemaTypeConfigProto :
- rewrittenSchemaResults.mRewrittenPrefixedTypes.values()) {
- addToMap(mSchemaMapLocked, prefix, schemaTypeConfigProto);
- }
-
- for (String schemaType : rewrittenSchemaResults.mDeletedPrefixedTypes) {
- removeFromMap(mSchemaMapLocked, prefix, schemaType);
- }
-
- if (visibilityStore != null) {
- Set<String> prefixedSchemasNotDisplayedBySystem =
- new ArraySet<>(schemasNotDisplayedBySystem.size());
- for (int i = 0; i < schemasNotDisplayedBySystem.size(); i++) {
- prefixedSchemasNotDisplayedBySystem.add(
- prefix + schemasNotDisplayedBySystem.get(i));
- }
-
- Map<String, List<PackageIdentifier>> prefixedSchemasVisibleToPackages =
- new ArrayMap<>(schemasVisibleToPackages.size());
- for (Map.Entry<String, List<PackageIdentifier>> entry
- : schemasVisibleToPackages.entrySet()) {
- prefixedSchemasVisibleToPackages.put(prefix + entry.getKey(), entry.getValue());
- }
-
- visibilityStore.setVisibility(
+ if (mObserverManager.isPackageObserved(packageName)) {
+ return doSetSchemaWithChangeNotificationLocked(
packageName,
databaseName,
- prefixedSchemasNotDisplayedBySystem,
- prefixedSchemasVisibleToPackages);
+ schemas,
+ visibilityDocuments,
+ forceOverride,
+ version,
+ setSchemaStatsBuilder);
+ } else {
+ return doSetSchemaNoChangeNotificationLocked(
+ packageName,
+ databaseName,
+ schemas,
+ visibilityDocuments,
+ forceOverride,
+ version,
+ setSchemaStatsBuilder);
}
-
- return SetSchemaResponseToProtoConverter
- .toSetSchemaResponse(setSchemaResultProto, prefix);
} finally {
mReadWriteLock.writeLock().unlock();
}
}
/**
+ * Updates the AppSearch schema for this app, dispatching change notifications.
+ *
+ * @see #setSchema
+ * @see #doSetSchemaNoChangeNotificationLocked
+ */
+ @GuardedBy("mReadWriteLock")
+ @NonNull
+ private InternalSetSchemaResponse doSetSchemaWithChangeNotificationLocked(
+ @NonNull String packageName,
+ @NonNull String databaseName,
+ @NonNull List<AppSearchSchema> schemas,
+ @NonNull List<VisibilityDocument> visibilityDocuments,
+ boolean forceOverride,
+ int version,
+ @Nullable SetSchemaStats.Builder setSchemaStatsBuilder) throws AppSearchException {
+ // First, capture the old state of the system. This includes the old schema as well as
+ // whether each registered observer can access each type. Once VisibilityStore is updated
+ // by the setSchema call, the information of which observers could see which types will be
+ // lost.
+ GetSchemaResponse oldSchema = getSchema(
+ packageName,
+ databaseName,
+ // A CallerAccess object for internal use that has local access to this database.
+ new CallerAccess(/*callingPackageName=*/packageName));
+
+ // Cache some lookup tables to help us work with the old schema
+ Set<AppSearchSchema> oldSchemaTypes = oldSchema.getSchemas();
+ Map<String, AppSearchSchema> oldSchemaNameToType = new ArrayMap<>(oldSchemaTypes.size());
+ // Maps unprefixed schema name to the set of listening packages that had visibility into
+ // that type under the old schema.
+ Map<String, Set<String>> oldSchemaNameToVisibleListeningPackage =
+ new ArrayMap<>(oldSchemaTypes.size());
+ for (AppSearchSchema oldSchemaType : oldSchemaTypes) {
+ String oldSchemaName = oldSchemaType.getSchemaType();
+ oldSchemaNameToType.put(oldSchemaName, oldSchemaType);
+ oldSchemaNameToVisibleListeningPackage.put(
+ oldSchemaName,
+ mObserverManager.getObserversForSchemaType(
+ packageName,
+ databaseName,
+ oldSchemaName,
+ mVisibilityStoreLocked,
+ mVisibilityCheckerLocked));
+ }
+
+ // Apply the new schema
+ InternalSetSchemaResponse internalSetSchemaResponse = doSetSchemaNoChangeNotificationLocked(
+ packageName,
+ databaseName,
+ schemas,
+ visibilityDocuments,
+ forceOverride,
+ version,
+ setSchemaStatsBuilder);
+
+ // This check is needed wherever setSchema is called to detect soft errors which do not
+ // throw an exception but also prevent the schema from actually being applied.
+ if (!internalSetSchemaResponse.isSuccess()) {
+ return internalSetSchemaResponse;
+ }
+
+ // Cache some lookup tables to help us work with the new schema
+ Map<String, AppSearchSchema> newSchemaNameToType = new ArrayMap<>(schemas.size());
+ // Maps unprefixed schema name to the set of listening packages that have visibility into
+ // that type under the new schema.
+ Map<String, Set<String>> newSchemaNameToVisibleListeningPackage =
+ new ArrayMap<>(schemas.size());
+ for (AppSearchSchema newSchemaType : schemas) {
+ String newSchemaName = newSchemaType.getSchemaType();
+ newSchemaNameToType.put(newSchemaName, newSchemaType);
+ newSchemaNameToVisibleListeningPackage.put(
+ newSchemaName,
+ mObserverManager.getObserversForSchemaType(
+ packageName,
+ databaseName,
+ newSchemaName,
+ mVisibilityStoreLocked,
+ mVisibilityCheckerLocked));
+ }
+
+ // Create a unified set of all schema names mentioned in either the old or new schema.
+ Set<String> allSchemaNames = new ArraySet<>(oldSchemaNameToType.keySet());
+ allSchemaNames.addAll(newSchemaNameToType.keySet());
+
+ // Perform the diff between the old and new schema.
+ for (String schemaName : allSchemaNames) {
+ final AppSearchSchema contentBefore = oldSchemaNameToType.get(schemaName);
+ final AppSearchSchema contentAfter = newSchemaNameToType.get(schemaName);
+
+ final boolean existBefore = (contentBefore != null);
+ final boolean existAfter = (contentAfter != null);
+
+ // This should never happen
+ if (!existBefore && !existAfter) {
+ continue;
+ }
+
+ boolean contentsChanged = true;
+ if (existBefore && existAfter && contentBefore.equals(contentAfter)) {
+ contentsChanged = false;
+ }
+
+ Set<String> oldVisibleListeners =
+ oldSchemaNameToVisibleListeningPackage.get(schemaName);
+ Set<String> newVisibleListeners =
+ newSchemaNameToVisibleListeningPackage.get(schemaName);
+ Set<String> allListeningPackages = new ArraySet<>(oldVisibleListeners);
+ if (newVisibleListeners != null) {
+ allListeningPackages.addAll(newVisibleListeners);
+ }
+
+ // Now that we've computed the relationship between the old and new schema, we go
+ // observer by observer and consider the observer's own personal view of the schema.
+ for (String listeningPackageName : allListeningPackages) {
+ // Figure out the visibility
+ final boolean visibleBefore = (
+ existBefore
+ && oldVisibleListeners != null
+ && oldVisibleListeners.contains(listeningPackageName));
+ final boolean visibleAfter = (
+ existAfter
+ && newVisibleListeners != null
+ && newVisibleListeners.contains(listeningPackageName));
+
+ // Now go through the truth table of all the relevant flags.
+ // visibleBefore and visibleAfter take into account existBefore and existAfter, so
+ // we can stop worrying about existBefore and existAfter.
+ boolean sendNotification = false;
+ if (visibleBefore && visibleAfter && contentsChanged) {
+ sendNotification = true; // Type configuration was modified
+ } else if (!visibleBefore && visibleAfter) {
+ sendNotification = true; // Newly granted visibility or type was created
+ } else if (visibleBefore && !visibleAfter) {
+ sendNotification = true; // Revoked visibility or type was deleted
+ } else {
+ // No visibility before and no visibility after. Nothing to dispatch.
+ }
+
+ if (sendNotification) {
+ mObserverManager.onSchemaChange(
+ /*listeningPackageName=*/listeningPackageName,
+ /*targetPackageName=*/packageName,
+ /*databaseName=*/databaseName,
+ /*schemaName=*/schemaName);
+ }
+ }
+ }
+
+ return internalSetSchemaResponse;
+ }
+
+ /**
+ * Updates the AppSearch schema for this app, without dispatching change notifications.
+ *
+ * <p>This method can be used only when no one is observing {@code packageName}.
+ *
+ * @see #setSchema
+ * @see #doSetSchemaWithChangeNotificationLocked
+ */
+ @GuardedBy("mReadWriteLock")
+ @NonNull
+ private InternalSetSchemaResponse doSetSchemaNoChangeNotificationLocked(
+ @NonNull String packageName,
+ @NonNull String databaseName,
+ @NonNull List<AppSearchSchema> schemas,
+ @NonNull List<VisibilityDocument> visibilityDocuments,
+ boolean forceOverride,
+ int version,
+ @Nullable SetSchemaStats.Builder setSchemaStatsBuilder) throws AppSearchException {
+ SchemaProto.Builder existingSchemaBuilder = getSchemaProtoLocked().toBuilder();
+
+ SchemaProto.Builder newSchemaBuilder = SchemaProto.newBuilder();
+ for (int i = 0; i < schemas.size(); i++) {
+ AppSearchSchema schema = schemas.get(i);
+ SchemaTypeConfigProto schemaTypeProto =
+ SchemaToProtoConverter.toSchemaTypeConfigProto(schema, version);
+ newSchemaBuilder.addTypes(schemaTypeProto);
+ }
+
+ String prefix = createPrefix(packageName, databaseName);
+ // Combine the existing schema (which may have types from other prefixes) with this
+ // prefix's new schema. Modifies the existingSchemaBuilder.
+ RewrittenSchemaResults rewrittenSchemaResults = rewriteSchema(prefix,
+ existingSchemaBuilder,
+ newSchemaBuilder.build());
+
+ // Apply schema
+ SchemaProto finalSchema = existingSchemaBuilder.build();
+ LogUtil.piiTrace(TAG, "setSchema, request", finalSchema.getTypesCount(), finalSchema);
+ SetSchemaResultProto setSchemaResultProto =
+ mIcingSearchEngineLocked.setSchema(finalSchema, forceOverride);
+ LogUtil.piiTrace(
+ TAG, "setSchema, response", setSchemaResultProto.getStatus(), setSchemaResultProto);
+
+ if (setSchemaStatsBuilder != null) {
+ setSchemaStatsBuilder.setStatusCode(statusProtoToResultCode(
+ setSchemaResultProto.getStatus()));
+ AppSearchLoggerHelper.copyNativeStats(setSchemaResultProto,
+ setSchemaStatsBuilder);
+ }
+
+ boolean isFailedPrecondition = setSchemaResultProto.getStatus().getCode()
+ == StatusProto.Code.FAILED_PRECONDITION;
+ // Determine whether it succeeded.
+ try {
+ checkSuccess(setSchemaResultProto.getStatus());
+ } catch (AppSearchException e) {
+ // Swallow the exception for the incompatible change case. We will generate a failed
+ // InternalSetSchemaResponse for this case.
+ int deletedTypes = setSchemaResultProto.getDeletedSchemaTypesCount();
+ int incompatibleTypes = setSchemaResultProto.getIncompatibleSchemaTypesCount();
+ boolean isIncompatible = deletedTypes > 0 || incompatibleTypes > 0;
+ if (isFailedPrecondition && !forceOverride && isIncompatible) {
+ SetSchemaResponse setSchemaResponse = SetSchemaResponseToProtoConverter
+ .toSetSchemaResponse(setSchemaResultProto, prefix);
+ String errorMessage = "Schema is incompatible."
+ + "\n Deleted types: " + setSchemaResponse.getDeletedTypes()
+ + "\n Incompatible types: " + setSchemaResponse.getIncompatibleTypes();
+ return newFailedSetSchemaResponse(setSchemaResponse, errorMessage);
+ } else {
+ throw e;
+ }
+ }
+
+ // Update derived data structures.
+ for (SchemaTypeConfigProto schemaTypeConfigProto :
+ rewrittenSchemaResults.mRewrittenPrefixedTypes.values()) {
+ addToMap(mSchemaMapLocked, prefix, schemaTypeConfigProto);
+ }
+
+ for (String schemaType : rewrittenSchemaResults.mDeletedPrefixedTypes) {
+ removeFromMap(mSchemaMapLocked, prefix, schemaType);
+ }
+ // Since the constructor of VisibilityStore will set schema. Avoid call visibility
+ // store before we have already created it.
+ if (mVisibilityStoreLocked != null) {
+ // Add prefix to all visibility documents.
+ List<VisibilityDocument> prefixedVisibilityDocuments =
+ new ArrayList<>(visibilityDocuments.size());
+ // Find out which Visibility document is deleted or changed to all-default settings.
+ // We need to remove them from Visibility Store.
+ Set<String> deprecatedVisibilityDocuments =
+ new ArraySet<>(rewrittenSchemaResults.mRewrittenPrefixedTypes.keySet());
+ for (int i = 0; i < visibilityDocuments.size(); i++) {
+ VisibilityDocument unPrefixedDocument = visibilityDocuments.get(i);
+ // The VisibilityDocument is controlled by the client and it's untrusted but we
+ // make it safe by appending a prefix.
+ // We must control the package-database prefix. Therefore even if the client
+ // fake the id, they can only mess their own app. That's totally allowed and
+ // they can do this via the public API too.
+ String prefixedSchemaType = prefix + unPrefixedDocument.getId();
+ prefixedVisibilityDocuments.add(new VisibilityDocument(
+ unPrefixedDocument.toBuilder()
+ .setId(prefixedSchemaType)
+ .build()));
+ // This schema has visibility settings. We should keep it from the removal list.
+ deprecatedVisibilityDocuments.remove(prefixedSchemaType);
+ }
+ // Now deprecatedVisibilityDocuments contains those existing schemas that has
+ // all-default visibility settings, add deleted schemas. That's all we need to
+ // remove.
+ deprecatedVisibilityDocuments.addAll(rewrittenSchemaResults.mDeletedPrefixedTypes);
+ mVisibilityStoreLocked.removeVisibility(deprecatedVisibilityDocuments);
+ mVisibilityStoreLocked.setVisibility(prefixedVisibilityDocuments);
+ }
+ return newSuccessfulSetSchemaResponse(SetSchemaResponseToProtoConverter
+ .toSetSchemaResponse(setSchemaResultProto, prefix));
+ }
+
+ /**
* Retrieves the AppSearch schema for this package name, database.
*
* <p>This method belongs to query group.
*
- * @param packageName Package name that owns this schema
- * @param databaseName The name of the database where this schema lives.
+ * @param packageName Package that owns the requested {@link AppSearchSchema} instances.
+ * @param databaseName Database that owns the requested {@link AppSearchSchema} instances.
+ * @param callerAccess Visibility access info of the calling app
* @throws AppSearchException on IcingSearchEngine error.
*/
@NonNull
- public GetSchemaResponse getSchema(@NonNull String packageName,
- @NonNull String databaseName) throws AppSearchException {
+ public GetSchemaResponse getSchema(
+ @NonNull String packageName,
+ @NonNull String databaseName,
+ @NonNull CallerAccess callerAccess)
+ throws AppSearchException {
mReadWriteLock.readLock().lock();
try {
throwIfClosedLocked();
SchemaProto fullSchema = getSchemaProtoLocked();
-
String prefix = createPrefix(packageName, databaseName);
GetSchemaResponse.Builder responseBuilder = new GetSchemaResponse.Builder();
for (int i = 0; i < fullSchema.getTypesCount(); i++) {
- String typePrefix = getPrefix(fullSchema.getTypes(i).getSchemaType());
+ // Check that this type belongs to the requested app and that the caller has
+ // access to it.
+ SchemaTypeConfigProto typeConfig = fullSchema.getTypes(i);
+ String prefixedSchemaType = typeConfig.getSchemaType();
+ String typePrefix = getPrefix(prefixedSchemaType);
if (!prefix.equals(typePrefix)) {
+ // This schema type doesn't belong to the database we're querying for.
continue;
}
- // Rewrite SchemaProto.types.schema_type
- SchemaTypeConfigProto.Builder typeConfigBuilder = fullSchema.getTypes(
- i).toBuilder();
- String newSchemaType =
- typeConfigBuilder.getSchemaType().substring(prefix.length());
- typeConfigBuilder.setSchemaType(newSchemaType);
-
- // Rewrite SchemaProto.types.properties.schema_type
- for (int propertyIdx = 0;
- propertyIdx < typeConfigBuilder.getPropertiesCount();
- propertyIdx++) {
- PropertyConfigProto.Builder propertyConfigBuilder =
- typeConfigBuilder.getProperties(propertyIdx).toBuilder();
- if (!propertyConfigBuilder.getSchemaType().isEmpty()) {
- String newPropertySchemaType = propertyConfigBuilder.getSchemaType()
- .substring(prefix.length());
- propertyConfigBuilder.setSchemaType(newPropertySchemaType);
- typeConfigBuilder.setProperties(propertyIdx, propertyConfigBuilder);
- }
+ if (!VisibilityUtil.isSchemaSearchableByCaller(
+ callerAccess,
+ packageName,
+ prefixedSchemaType,
+ mVisibilityStoreLocked,
+ mVisibilityCheckerLocked)) {
+ // Caller doesn't have access to this type.
+ continue;
}
+ // Rewrite SchemaProto.types.schema_type
+ SchemaTypeConfigProto.Builder typeConfigBuilder = typeConfig.toBuilder();
+ PrefixUtil.removePrefixesFromSchemaType(typeConfigBuilder);
AppSearchSchema schema = SchemaToProtoConverter.toAppSearchSchema(
typeConfigBuilder);
- //TODO(b/183050495) find a place to store the version for the database, rather
- // than read from a schema.
- responseBuilder.setVersion(fullSchema.getTypes(i).getVersion());
+ responseBuilder.setVersion(typeConfig.getVersion());
responseBuilder.addSchema(schema);
+
+ // Populate visibility info. Since the constructor of VisibilityStore will get
+ // schema. Avoid call visibility store before we have already created it.
+ if (mVisibilityStoreLocked != null) {
+ String typeName = typeConfig.getSchemaType().substring(typePrefix.length());
+ VisibilityDocument visibilityDocument =
+ mVisibilityStoreLocked.getVisibility(prefixedSchemaType);
+ if (visibilityDocument != null) {
+ if (visibilityDocument.isNotDisplayedBySystem()) {
+ responseBuilder
+ .addSchemaTypeNotDisplayedBySystem(typeName);
+ }
+ String[] packageNames = visibilityDocument.getPackageNames();
+ byte[][] sha256Certs = visibilityDocument.getSha256Certs();
+ if (packageNames.length != sha256Certs.length) {
+ throw new AppSearchException(RESULT_INTERNAL_ERROR,
+ "The length of package names and sha256Crets are different!");
+ }
+ if (packageNames.length != 0) {
+ Set<PackageIdentifier> packageIdentifier = new ArraySet<>();
+ for (int j = 0; j < packageNames.length; j++) {
+ packageIdentifier.add(new PackageIdentifier(
+ packageNames[j], sha256Certs[j]));
+ }
+ responseBuilder.setSchemaTypeVisibleToPackages(typeName,
+ packageIdentifier);
+ }
+ Set<Set<Integer>> visibleToPermissions =
+ visibilityDocument.getVisibleToPermissions();
+ if (visibleToPermissions != null) {
+ responseBuilder.setRequiredPermissionsForSchemaTypeVisibility(
+ typeName, visibleToPermissions);
+ }
+ }
+ }
}
return responseBuilder.build();
+
} finally {
mReadWriteLock.readLock().unlock();
}
@@ -597,13 +880,14 @@
mReadWriteLock.readLock().lock();
try {
throwIfClosedLocked();
- mLogUtil.piiTrace("getAllNamespaces, request");
+ LogUtil.piiTrace(TAG, "getAllNamespaces, request");
// We can't just use mNamespaceMap here because we have no way to prune namespaces from
// mNamespaceMap when they have no more documents (e.g. after setting schema to empty or
// using deleteByQuery).
GetAllNamespacesResultProto getAllNamespacesResultProto =
mIcingSearchEngineLocked.getAllNamespaces();
- mLogUtil.piiTrace(
+ LogUtil.piiTrace(
+ TAG,
"getAllNamespaces, response",
getAllNamespacesResultProto.getNamespacesCount(),
getAllNamespacesResultProto);
@@ -627,13 +911,20 @@
*
* <p>This method belongs to mutate group.
*
- * @param packageName The package name that owns this document.
- * @param databaseName The databaseName this document resides in.
- * @param document The document to index.
+ * @param packageName The package name that owns this document.
+ * @param databaseName The databaseName this document resides in.
+ * @param document The document to index.
+ * @param sendChangeNotifications Whether to dispatch
+ * {@link androidx.appsearch.observer.DocumentChangeInfo}
+ * messages to observers for this change.
* @throws AppSearchException on IcingSearchEngine error.
*/
- public void putDocument(@NonNull String packageName, @NonNull String databaseName,
- @NonNull GenericDocument document, @Nullable AppSearchLogger logger)
+ public void putDocument(
+ @NonNull String packageName,
+ @NonNull String databaseName,
+ @NonNull GenericDocument document,
+ boolean sendChangeNotifications,
+ @Nullable AppSearchLogger logger)
throws AppSearchException {
PutDocumentStats.Builder pStatsBuilder = null;
if (logger != null) {
@@ -663,9 +954,10 @@
packageName, finalDocument.getUri(), finalDocument.getSerializedSize());
// Insert document
- mLogUtil.piiTrace("putDocument, request", finalDocument.getUri(), finalDocument);
+ LogUtil.piiTrace(TAG, "putDocument, request", finalDocument.getUri(), finalDocument);
PutResultProto putResultProto = mIcingSearchEngineLocked.put(finalDocument);
- mLogUtil.piiTrace("putDocument, response", putResultProto.getStatus(), putResultProto);
+ LogUtil.piiTrace(
+ TAG, "putDocument, response", putResultProto.getStatus(), putResultProto);
// Update caches
addToMap(mNamespaceMapLocked, prefix, finalDocument.getNamespace());
@@ -688,8 +980,16 @@
checkSuccess(putResultProto.getStatus());
// Prepare notifications
- mObserverManager.onDocumentChange(
- packageName, databaseName, document.getNamespace(), document.getSchemaType());
+ if (sendChangeNotifications) {
+ mObserverManager.onDocumentChange(
+ packageName,
+ databaseName,
+ document.getNamespace(),
+ document.getSchemaType(),
+ document.getId(),
+ mVisibilityStoreLocked,
+ mVisibilityCheckerLocked);
+ }
} finally {
mReadWriteLock.writeLock().unlock();
@@ -758,6 +1058,67 @@
}
/**
+ * Retrieves a document from the AppSearch index by namespace and document ID from any
+ * application the caller is allowed to view
+ *
+ * <p>This method will handle both Icing engine errors as well as permission errors by
+ * throwing an obfuscated RESULT_NOT_FOUND exception. This is done so the caller doesn't
+ * receive information on whether or not a file they are not allowed to access exists or not.
+ * This is different from the behavior of {@link #getDocument}.
+ *
+ * @param packageName The package that owns this document.
+ * @param databaseName The databaseName this document resides in.
+ * @param namespace The namespace this document resides in.
+ * @param id The ID of the document to get.
+ * @param typePropertyPaths A map of schema type to a list of property paths to return in the
+ * result.
+ * @param callerAccess Visibility access info of the calling app
+ * @return The Document contents
+ * @throws AppSearchException on IcingSearchEngine error or invalid permissions
+ */
+ @NonNull
+ public GenericDocument globalGetDocument(
+ @NonNull String packageName,
+ @NonNull String databaseName,
+ @NonNull String namespace,
+ @NonNull String id,
+ @NonNull Map<String, List<String>> typePropertyPaths,
+ @NonNull CallerAccess callerAccess) throws AppSearchException {
+ mReadWriteLock.readLock().lock();
+ try {
+ throwIfClosedLocked();
+ // We retrieve the document before checking for access, as we do not know which
+ // schema the document is under. Schema is required for checking access
+ DocumentProto documentProto;
+ try {
+ documentProto = getDocumentProtoByIdLocked(packageName, databaseName,
+ namespace, id, typePropertyPaths);
+
+ if (!VisibilityUtil.isSchemaSearchableByCaller(
+ callerAccess,
+ packageName,
+ documentProto.getSchema(),
+ mVisibilityStoreLocked,
+ mVisibilityCheckerLocked)) {
+ throw new AppSearchException(AppSearchResult.RESULT_NOT_FOUND);
+ }
+ } catch (AppSearchException e) {
+ throw new AppSearchException(AppSearchResult.RESULT_NOT_FOUND,
+ "Document (" + namespace + ", " + id + ") not found.");
+ }
+
+ DocumentProto.Builder documentBuilder = documentProto.toBuilder();
+ removePrefixesFromDocument(documentBuilder);
+ String prefix = createPrefix(packageName, databaseName);
+ Map<String, SchemaTypeConfigProto> schemaTypeMap = mSchemaMapLocked.get(prefix);
+ return GenericDocumentToProtoConverter.toGenericDocument(documentBuilder.build(),
+ prefix, schemaTypeMap);
+ } finally {
+ mReadWriteLock.readLock().unlock();
+ }
+ }
+
+ /**
* Retrieves a document from the AppSearch index by namespace and document ID.
*
* <p>This method belongs to query group.
@@ -773,47 +1134,24 @@
*/
@NonNull
public GenericDocument getDocument(
- @NonNull String packageName, @NonNull String databaseName,
+ @NonNull String packageName,
+ @NonNull String databaseName,
@NonNull String namespace,
@NonNull String id,
@NonNull Map<String, List<String>> typePropertyPaths) throws AppSearchException {
mReadWriteLock.readLock().lock();
try {
throwIfClosedLocked();
+ DocumentProto documentProto = getDocumentProtoByIdLocked(packageName, databaseName,
+ namespace, id, typePropertyPaths);
+ DocumentProto.Builder documentBuilder = documentProto.toBuilder();
+ removePrefixesFromDocument(documentBuilder);
+
String prefix = createPrefix(packageName, databaseName);
- List<TypePropertyMask.Builder> nonPrefixedPropertyMaskBuilders =
- TypePropertyPathToProtoConverter
- .toTypePropertyMaskBuilderList(typePropertyPaths);
- List<TypePropertyMask> prefixedPropertyMasks =
- new ArrayList<>(nonPrefixedPropertyMaskBuilders.size());
- for (int i = 0; i < nonPrefixedPropertyMaskBuilders.size(); ++i) {
- String nonPrefixedType = nonPrefixedPropertyMaskBuilders.get(i).getSchemaType();
- String prefixedType = nonPrefixedType.equals(
- GetByDocumentIdRequest.PROJECTION_SCHEMA_TYPE_WILDCARD)
- ? nonPrefixedType : prefix + nonPrefixedType;
- prefixedPropertyMasks.add(
- nonPrefixedPropertyMaskBuilders.get(i).setSchemaType(prefixedType).build());
- }
- GetResultSpecProto getResultSpec =
- GetResultSpecProto.newBuilder().addAllTypePropertyMasks(prefixedPropertyMasks)
- .build();
-
- String finalNamespace = createPrefix(packageName, databaseName) + namespace;
- if (mLogUtil.isPiiTraceEnabled()) {
- mLogUtil.piiTrace(
- "getDocument, request", finalNamespace + ", " + id + "," + getResultSpec);
- }
- GetResultProto getResultProto =
- mIcingSearchEngineLocked.get(finalNamespace, id, getResultSpec);
- mLogUtil.piiTrace("getDocument, response", getResultProto.getStatus(), getResultProto);
- checkSuccess(getResultProto.getStatus());
-
// The schema type map cannot be null at this point. It could only be null if no
// schema had ever been set for that prefix. Given we have retrieved a document from
// the index, we know a schema had to have been set.
Map<String, SchemaTypeConfigProto> schemaTypeMap = mSchemaMapLocked.get(prefix);
- DocumentProto.Builder documentBuilder = getResultProto.getDocument().toBuilder();
- removePrefixesFromDocument(documentBuilder);
return GenericDocumentToProtoConverter.toGenericDocument(documentBuilder.build(),
prefix, schemaTypeMap);
} finally {
@@ -822,6 +1160,58 @@
}
/**
+ * Returns a DocumentProto from Icing.
+ *
+ * @param packageName The package that owns this document.
+ * @param databaseName The databaseName this document resides in.
+ * @param namespace The namespace this document resides in.
+ * @param id The ID of the document to get.
+ * @param typePropertyPaths A map of schema type to a list of property paths to return in the
+ * result.
+ * @return the DocumentProto object
+ * @throws AppSearchException on IcingSearchEngine error
+ */
+ @NonNull
+ @GuardedBy("mReadWriteLock")
+ private DocumentProto getDocumentProtoByIdLocked(
+ @NonNull String packageName,
+ @NonNull String databaseName,
+ @NonNull String namespace,
+ @NonNull String id,
+ @NonNull Map<String, List<String>> typePropertyPaths)
+ throws AppSearchException {
+ String prefix = createPrefix(packageName, databaseName);
+ List<TypePropertyMask.Builder> nonPrefixedPropertyMaskBuilders =
+ TypePropertyPathToProtoConverter
+ .toTypePropertyMaskBuilderList(typePropertyPaths);
+ List<TypePropertyMask> prefixedPropertyMasks =
+ new ArrayList<>(nonPrefixedPropertyMaskBuilders.size());
+ for (int i = 0; i < nonPrefixedPropertyMaskBuilders.size(); ++i) {
+ String nonPrefixedType = nonPrefixedPropertyMaskBuilders.get(i).getSchemaType();
+ String prefixedType = nonPrefixedType.equals(
+ GetByDocumentIdRequest.PROJECTION_SCHEMA_TYPE_WILDCARD)
+ ? nonPrefixedType : prefix + nonPrefixedType;
+ prefixedPropertyMasks.add(
+ nonPrefixedPropertyMaskBuilders.get(i).setSchemaType(prefixedType).build());
+ }
+ GetResultSpecProto getResultSpec =
+ GetResultSpecProto.newBuilder().addAllTypePropertyMasks(prefixedPropertyMasks)
+ .build();
+
+ String finalNamespace = createPrefix(packageName, databaseName) + namespace;
+ if (LogUtil.isPiiTraceEnabled()) {
+ LogUtil.piiTrace(
+ TAG, "getDocument, request", finalNamespace + ", " + id + "," + getResultSpec);
+ }
+ GetResultProto getResultProto =
+ mIcingSearchEngineLocked.get(finalNamespace, id, getResultSpec);
+ LogUtil.piiTrace(TAG, "getDocument, response", getResultProto.getStatus(), getResultProto);
+ checkSuccess(getResultProto.getStatus());
+
+ return getResultProto.getDocument();
+ }
+
+ /**
* Executes a query against the AppSearch index and returns results.
*
* <p>This method belongs to query group.
@@ -866,9 +1256,9 @@
String prefix = createPrefix(packageName, databaseName);
SearchSpecToProtoConverter searchSpecToProtoConverter =
- new SearchSpecToProtoConverter(searchSpec, Collections.singleton(prefix),
- mNamespaceMapLocked, mSchemaMapLocked);
- if (searchSpecToProtoConverter.isNothingToSearch()) {
+ new SearchSpecToProtoConverter(queryExpression, searchSpec,
+ Collections.singleton(prefix), mNamespaceMapLocked, mSchemaMapLocked);
+ if (searchSpecToProtoConverter.hasNothingToSearch()) {
// there is nothing to search over given their search filters, so we can return an
// empty SearchResult and skip sending request to Icing.
return new SearchResultPage(Bundle.EMPTY);
@@ -876,7 +1266,6 @@
SearchResultPage searchResultPage =
doQueryLocked(
- queryExpression,
searchSpecToProtoConverter,
sStatsBuilder);
addNextPageToken(packageName, searchResultPage.getNextPageToken());
@@ -897,16 +1286,10 @@
*
* <p>This method belongs to query group.
*
- * @param queryExpression Query String to search.
- * @param searchSpec Spec for setting filters, raw query etc.
- * @param callerPackageName Package name of the caller, should belong to the {@code
- * callerUserHandle}.
- * @param visibilityStore Optional visibility store to obtain system and package
- * visibility settings from
- * @param callerUid UID of the client making the globalQuery call.
- * @param callerHasSystemAccess Whether the caller has been positively identified as having
- * access to schemas marked system surfaceable.
- * @param logger logger to collect globalQuery stats
+ * @param queryExpression Query String to search.
+ * @param searchSpec Spec for setting filters, raw query etc.
+ * @param callerAccess Visibility access info of the calling app
+ * @param logger logger to collect globalQuery stats
* @return The results of performing this search. It may contain an empty list of results if
* no documents matched the query.
* @throws AppSearchException on IcingSearchEngine error.
@@ -915,10 +1298,7 @@
public SearchResultPage globalQuery(
@NonNull String queryExpression,
@NonNull SearchSpec searchSpec,
- @NonNull String callerPackageName,
- @Nullable VisibilityStore visibilityStore,
- int callerUid,
- boolean callerHasSystemAccess,
+ @NonNull CallerAccess callerAccess,
@Nullable AppSearchLogger logger) throws AppSearchException {
long totalLatencyStartMillis = SystemClock.elapsedRealtime();
SearchStats.Builder sStatsBuilder = null;
@@ -926,7 +1306,7 @@
sStatsBuilder =
new SearchStats.Builder(
SearchStats.VISIBILITY_SCOPE_GLOBAL,
- callerPackageName);
+ callerAccess.getCallingPackageName());
}
mReadWriteLock.readLock().lock();
@@ -951,22 +1331,22 @@
}
}
SearchSpecToProtoConverter searchSpecToProtoConverter =
- new SearchSpecToProtoConverter(searchSpec, prefixFilters, mNamespaceMapLocked,
- mSchemaMapLocked);
+ new SearchSpecToProtoConverter(queryExpression, searchSpec, prefixFilters,
+ mNamespaceMapLocked, mSchemaMapLocked);
// Remove those inaccessible schemas.
- searchSpecToProtoConverter.removeInaccessibleSchemaFilter(callerPackageName,
- visibilityStore, callerUid, callerHasSystemAccess);
- if (searchSpecToProtoConverter.isNothingToSearch()) {
+ searchSpecToProtoConverter.removeInaccessibleSchemaFilter(
+ callerAccess, mVisibilityStoreLocked, mVisibilityCheckerLocked);
+ if (searchSpecToProtoConverter.hasNothingToSearch()) {
// there is nothing to search over given their search filters, so we can return an
// empty SearchResult and skip sending request to Icing.
return new SearchResultPage(Bundle.EMPTY);
}
SearchResultPage searchResultPage =
doQueryLocked(
- queryExpression,
searchSpecToProtoConverter,
sStatsBuilder);
- addNextPageToken(callerPackageName, searchResultPage.getNextPageToken());
+ addNextPageToken(
+ callerAccess.getCallingPackageName(), searchResultPage.getNextPageToken());
return searchResultPage;
} finally {
mReadWriteLock.readLock().unlock();
@@ -981,15 +1361,13 @@
@GuardedBy("mReadWriteLock")
private SearchResultPage doQueryLocked(
- @NonNull String queryExpression,
@NonNull SearchSpecToProtoConverter searchSpecToProtoConverter,
@Nullable SearchStats.Builder sStatsBuilder)
throws AppSearchException {
// Rewrite the given SearchSpec into SearchSpecProto, ResultSpecProto and ScoringSpecProto.
// All processes are counted in rewriteSearchSpecLatencyMillis
long rewriteSearchSpecLatencyStartMillis = SystemClock.elapsedRealtime();
- SearchSpecProto finalSearchSpec =
- searchSpecToProtoConverter.toSearchSpecProto(queryExpression);
+ SearchSpecProto finalSearchSpec = searchSpecToProtoConverter.toSearchSpecProto();
ResultSpecProto finalResultSpec = searchSpecToProtoConverter.toResultSpecProto(
mNamespaceMapLocked);
ScoringSpecProto scoringSpec = searchSpecToProtoConverter.toScoringSpecProto();
@@ -1020,16 +1398,17 @@
@NonNull ResultSpecProto resultSpec,
@NonNull ScoringSpecProto scoringSpec,
@Nullable SearchStats.Builder sStatsBuilder) throws AppSearchException {
- if (mLogUtil.isPiiTraceEnabled()) {
- mLogUtil.piiTrace(
+ if (LogUtil.isPiiTraceEnabled()) {
+ LogUtil.piiTrace(
+ TAG,
"search, request",
searchSpec.getQuery(),
searchSpec + ", " + scoringSpec + ", " + resultSpec);
}
SearchResultProto searchResultProto = mIcingSearchEngineLocked.search(
searchSpec, scoringSpec, resultSpec);
- mLogUtil.piiTrace(
- "search, response", searchResultProto.getResultsCount(), searchResultProto);
+ LogUtil.piiTrace(
+ TAG, "search, response", searchResultProto.getResultsCount(), searchResultProto);
if (sStatsBuilder != null) {
sStatsBuilder.setStatusCode(statusProtoToResultCode(searchResultProto.getStatus()));
AppSearchLoggerHelper.copyNativeStats(searchResultProto.getQueryStats(), sStatsBuilder);
@@ -1039,6 +1418,73 @@
}
/**
+ * Generates suggestions based on the given search prefix.
+ *
+ * <p>This method belongs to query group.
+ *
+ * @param packageName The package name that is performing the query.
+ * @param databaseName The databaseName this query for.
+ * @param suggestionQueryExpression The non-empty query expression used to be completed.
+ * @param searchSuggestionSpec Spec for setting filters.
+ * @return a List of {@link SearchSuggestionResult}. The returned {@link SearchSuggestionResult}
+ * are order by the number of {@link androidx.appsearch.app.SearchResult} you could get
+ * by using that suggestion in {@link #query}.
+ * @throws AppSearchException if the suggestionQueryExpression is empty.
+ */
+ @NonNull
+ public List<SearchSuggestionResult> searchSuggestion(
+ @NonNull String packageName,
+ @NonNull String databaseName,
+ @NonNull String suggestionQueryExpression,
+ @NonNull SearchSuggestionSpec searchSuggestionSpec) throws AppSearchException {
+ mReadWriteLock.readLock().lock();
+ try {
+ throwIfClosedLocked();
+ if (suggestionQueryExpression.isEmpty()) {
+ throw new AppSearchException(
+ AppSearchResult.RESULT_INVALID_ARGUMENT,
+ "suggestionQueryExpression cannot be empty.");
+ }
+ if (searchSuggestionSpec.getMaximumResultCount()
+ > mLimitConfig.getMaxSuggestionCount()) {
+ throw new AppSearchException(
+ AppSearchResult.RESULT_INVALID_ARGUMENT,
+ "Trying to get " + searchSuggestionSpec.getMaximumResultCount()
+ + " suggestion results, which exceeds limit of "
+ + mLimitConfig.getMaxSuggestionCount());
+ }
+
+ String prefix = createPrefix(packageName, databaseName);
+ SearchSuggestionSpecToProtoConverter searchSuggestionSpecToProtoConverter =
+ new SearchSuggestionSpecToProtoConverter(suggestionQueryExpression,
+ searchSuggestionSpec,
+ Collections.singleton(prefix),
+ mNamespaceMapLocked);
+
+ if (searchSuggestionSpecToProtoConverter.hasNothingToSearch()) {
+ // there is nothing to search over given their search filters, so we can return an
+ // empty SearchResult and skip sending request to Icing.
+ return new ArrayList<>();
+ }
+
+ SuggestionResponse response = mIcingSearchEngineLocked.searchSuggestions(
+ searchSuggestionSpecToProtoConverter.toSearchSuggestionSpecProto());
+
+ checkSuccess(response.getStatus());
+ List<SearchSuggestionResult> suggestions =
+ new ArrayList<>(response.getSuggestionsCount());
+ for (int i = 0; i < response.getSuggestionsCount(); i++) {
+ suggestions.add(new SearchSuggestionResult.Builder()
+ .setSuggestedResult(response.getSuggestions(i).getQuery())
+ .build());
+ }
+ return suggestions;
+ } finally {
+ mReadWriteLock.readLock().unlock();
+ }
+ }
+
+ /**
* Returns a mapping of package names to all the databases owned by that package.
*
* <p>This method is inefficient to call repeatedly.
@@ -1088,7 +1534,7 @@
try {
throwIfClosedLocked();
- mLogUtil.piiTrace("getNextPage, request", nextPageToken);
+ LogUtil.piiTrace(TAG, "getNextPage, request", nextPageToken);
checkNextPageToken(packageName, nextPageToken);
SearchResultProto searchResultProto = mIcingSearchEngineLocked.getNextPage(
nextPageToken);
@@ -1099,7 +1545,8 @@
statsBuilder);
}
- mLogUtil.piiTrace(
+ LogUtil.piiTrace(
+ TAG,
"getNextPage, response",
searchResultProto.getResultsCount(),
searchResultProto);
@@ -1155,7 +1602,7 @@
try {
throwIfClosedLocked();
- mLogUtil.piiTrace("invalidateNextPageToken, request", nextPageToken);
+ LogUtil.piiTrace(TAG, "invalidateNextPageToken, request", nextPageToken);
checkNextPageToken(packageName, nextPageToken);
mIcingSearchEngineLocked.invalidateNextPageToken(nextPageToken);
@@ -1195,9 +1642,9 @@
.setUsageType(usageType)
.build();
- mLogUtil.piiTrace("reportUsage, request", report.getDocumentUri(), report);
+ LogUtil.piiTrace(TAG, "reportUsage, request", report.getDocumentUri(), report);
ReportUsageResultProto result = mIcingSearchEngineLocked.reportUsage(report);
- mLogUtil.piiTrace("reportUsage, response", result.getStatus(), result);
+ LogUtil.piiTrace(TAG, "reportUsage, response", result.getStatus(), result);
checkSuccess(result.getStatus());
} finally {
mReadWriteLock.writeLock().unlock();
@@ -1234,24 +1681,24 @@
// know its type without retrieving it. Do so now.
// TODO(b/193494000): If Icing Lib can return information about the deleted
// document's type we can remove this code.
- if (mLogUtil.isPiiTraceEnabled()) {
- mLogUtil.piiTrace(
- "removeById, getRequest", prefixedNamespace + ", " + documentId);
+ if (LogUtil.isPiiTraceEnabled()) {
+ LogUtil.piiTrace(
+ TAG, "removeById, getRequest", prefixedNamespace + ", " + documentId);
}
GetResultProto getResult = mIcingSearchEngineLocked.get(
prefixedNamespace, documentId, GET_RESULT_SPEC_NO_PROPERTIES);
- mLogUtil.piiTrace("removeById, getResponse", getResult.getStatus(), getResult);
+ LogUtil.piiTrace(TAG, "removeById, getResponse", getResult.getStatus(), getResult);
checkSuccess(getResult.getStatus());
schemaType = PrefixUtil.removePrefix(getResult.getDocument().getSchema());
}
- if (mLogUtil.isPiiTraceEnabled()) {
- mLogUtil.piiTrace("removeById, request", prefixedNamespace + ", " + documentId);
+ if (LogUtil.isPiiTraceEnabled()) {
+ LogUtil.piiTrace(TAG, "removeById, request", prefixedNamespace + ", " + documentId);
}
DeleteResultProto deleteResultProto =
mIcingSearchEngineLocked.delete(prefixedNamespace, documentId);
- mLogUtil.piiTrace(
- "removeById, response", deleteResultProto.getStatus(), deleteResultProto);
+ LogUtil.piiTrace(
+ TAG, "removeById, response", deleteResultProto.getStatus(), deleteResultProto);
if (removeStatsBuilder != null) {
removeStatsBuilder.setStatusCode(statusProtoToResultCode(
@@ -1266,7 +1713,14 @@
// Prepare notifications
if (schemaType != null) {
- mObserverManager.onDocumentChange(packageName, databaseName, namespace, schemaType);
+ mObserverManager.onDocumentChange(
+ packageName,
+ databaseName,
+ namespace,
+ schemaType,
+ documentId,
+ mVisibilityStoreLocked,
+ mVisibilityCheckerLocked);
}
} finally {
mReadWriteLock.writeLock().unlock();
@@ -1315,16 +1769,15 @@
}
SearchSpecToProtoConverter searchSpecToProtoConverter =
- new SearchSpecToProtoConverter(searchSpec, Collections.singleton(prefix),
- mNamespaceMapLocked, mSchemaMapLocked);
- if (searchSpecToProtoConverter.isNothingToSearch()) {
+ new SearchSpecToProtoConverter(queryExpression, searchSpec,
+ Collections.singleton(prefix), mNamespaceMapLocked, mSchemaMapLocked);
+ if (searchSpecToProtoConverter.hasNothingToSearch()) {
// there is nothing to search over given their search filters, so we can return
// early and skip sending request to Icing.
return;
}
- SearchSpecProto finalSearchSpec =
- searchSpecToProtoConverter.toSearchSpecProto(queryExpression);
+ SearchSpecProto finalSearchSpec = searchSpecToProtoConverter.toSearchSpecProto();
Set<String> prefixedObservedSchemas = null;
if (mObserverManager.isPackageObserved(packageName)) {
@@ -1340,13 +1793,8 @@
}
}
- if (prefixedObservedSchemas != null && !prefixedObservedSchemas.isEmpty()) {
- doRemoveByQueryWithChangeNotificationLocked(
- packageName, finalSearchSpec, prefixedObservedSchemas, removeStatsBuilder);
- } else {
- doRemoveByQueryNoChangeNotificationLocked(
- packageName, finalSearchSpec, removeStatsBuilder);
- }
+ doRemoveByQueryLocked(
+ packageName, finalSearchSpec, prefixedObservedSchemas, removeStatsBuilder);
} finally {
mReadWriteLock.writeLock().unlock();
@@ -1358,121 +1806,30 @@
}
/**
- * Executes removeByQuery, creating change notifications for removal.
+ * Executes removeByQuery.
*
- * @param packageName The package name that owns the documents.
- * @param finalSearchSpec The final search spec that has been written through
- * {@link SearchSpecToProtoConverter}.
+ * <p>Change notifications will be created if prefixedObservedSchemas is not null.
+ *
+ * @param packageName The package name that owns the documents.
+ * @param finalSearchSpec The final search spec that has been written through
+ * {@link SearchSpecToProtoConverter}.
* @param prefixedObservedSchemas The set of prefixed schemas that have valid registered
* observers. Only changes to schemas in this set will be queued.
*/
- // TODO(b/193494000): Have Icing Lib return the URIs and types that were actually
- // deleted instead of querying in two passes like this.
@GuardedBy("mReadWriteLock")
- private void doRemoveByQueryWithChangeNotificationLocked(
+ private void doRemoveByQueryLocked(
@NonNull String packageName,
@NonNull SearchSpecProto finalSearchSpec,
- @NonNull Set<String> prefixedObservedSchemas,
+ @Nullable Set<String> prefixedObservedSchemas,
@Nullable RemoveStats.Builder removeStatsBuilder) throws AppSearchException {
- mLogUtil.piiTrace(
- "removeByQuery.withChangeNotification, query request", finalSearchSpec);
- SearchResultProto searchResultProto = mIcingSearchEngineLocked.search(
- finalSearchSpec,
- ScoringSpecProto.getDefaultInstance(),
- RESULT_SPEC_NO_PROPERTIES);
- mLogUtil.piiTrace(
- "removeByQuery.withChangeNotification, query response",
- searchResultProto.getStatus(),
- searchResultProto);
-
- // TODO(b/187206766) also log query stats here once it's added to RemoveStats.Builder
- checkSuccess(searchResultProto.getStatus());
-
- long nextPageToken = searchResultProto.getNextPageToken();
- int numDocumentsDeleted = 0;
- while (true) {
- for (int i = 0; i < searchResultProto.getResultsCount(); i++) {
- DocumentProto document = searchResultProto.getResults(i).getDocument();
-
- if (mLogUtil.isPiiTraceEnabled()) {
- mLogUtil.piiTrace(
- "removeByQuery.withChangeNotification, removeById request",
- document.getNamespace() + ", " + document.getUri());
- }
- DeleteResultProto deleteResultProto =
- mIcingSearchEngineLocked.delete(document.getNamespace(), document.getUri());
- mLogUtil.piiTrace(
- "removeByQuery.withChangeNotification, removeById response",
- deleteResultProto.getStatus(),
- deleteResultProto);
-
- if (removeStatsBuilder != null) {
- removeStatsBuilder.setStatusCode(statusProtoToResultCode(
- deleteResultProto.getStatus()));
- // TODO(b/187206766): This will keep overwriting the remove stats. This whole
- // method should be replaced with native handling within icinglib for returning
- // namespaces, types and URIs. That should populate the same proto as the
- // non-observed case and remove the need for this hacky implementation and log.
- AppSearchLoggerHelper.copyNativeStats(
- deleteResultProto.getDeleteStats(), removeStatsBuilder);
- }
-
- // It shouldn't be possible for this to fail; we have the write lock!
- checkSuccess(deleteResultProto.getStatus());
- numDocumentsDeleted++;
-
- // Prepare change notifications
- if (prefixedObservedSchemas.contains(document.getSchema())) {
- mObserverManager.onDocumentChange(
- packageName,
- /*databaseName=*/ PrefixUtil.getDatabaseName(document.getNamespace()),
- /*namespace=*/ PrefixUtil.removePrefix(document.getNamespace()),
- /*schemaType=*/ PrefixUtil.removePrefix(document.getSchema()));
- }
- }
-
- // Fetch next page
- if (nextPageToken == EMPTY_PAGE_TOKEN) {
- break;
- }
- mLogUtil.piiTrace(
- "removeByQuery.withChangeNotification, getNextPage request",
- nextPageToken);
- searchResultProto = mIcingSearchEngineLocked.getNextPage(nextPageToken);
- mLogUtil.piiTrace(
- "removeByQuery.withChangeNotification, getNextPage response",
- searchResultProto.getResultsCount(),
- searchResultProto);
-
- // TODO(b/187206766) also log query stats here once it's added to RemoveStats.Builder
- checkSuccess(searchResultProto.getStatus());
-
- nextPageToken = searchResultProto.getNextPageToken();
- }
-
- // Update derived maps
- updateDocumentCountAfterRemovalLocked(packageName, numDocumentsDeleted);
- }
-
- /**
- * Executes removeByQuery without dispatching any change notifications.
- *
- * This is faster than {@link #doRemoveByQueryWithChangeNotificationLocked}.
- *
- * @param packageName The package name that owns the documents.
- * @param rewrittenSearchSpec A search spec that has been run through
- * {@link #rewriteSearchSpecForPrefixesLocked}.
- */
- @GuardedBy("mReadWriteLock")
- private void doRemoveByQueryNoChangeNotificationLocked(
- @NonNull String packageName,
- @NonNull SearchSpecProto rewrittenSearchSpec,
- @Nullable RemoveStats.Builder removeStatsBuilder) throws AppSearchException {
- mLogUtil.piiTrace("removeByQuery, request", rewrittenSearchSpec);
+ LogUtil.piiTrace(TAG, "removeByQuery, request", finalSearchSpec);
+ boolean returnDeletedDocumentInfo =
+ prefixedObservedSchemas != null && !prefixedObservedSchemas.isEmpty();
DeleteByQueryResultProto deleteResultProto =
- mIcingSearchEngineLocked.deleteByQuery(rewrittenSearchSpec);
- mLogUtil.piiTrace(
- "removeByQuery, response", deleteResultProto.getStatus(), deleteResultProto);
+ mIcingSearchEngineLocked.deleteByQuery(finalSearchSpec,
+ returnDeletedDocumentInfo);
+ LogUtil.piiTrace(
+ TAG, "removeByQuery, response", deleteResultProto.getStatus(), deleteResultProto);
if (removeStatsBuilder != null) {
removeStatsBuilder.setStatusCode(statusProtoToResultCode(
@@ -1491,6 +1848,11 @@
int numDocumentsDeleted =
deleteResultProto.getDeleteByQueryStats().getNumDocumentsDeleted();
updateDocumentCountAfterRemovalLocked(packageName, numDocumentsDeleted);
+
+ if (prefixedObservedSchemas != null && !prefixedObservedSchemas.isEmpty()) {
+ dispatchChangeNotificationsAfterRemoveByQueryLocked(packageName,
+ deleteResultProto, prefixedObservedSchemas);
+ }
}
@GuardedBy("mReadWriteLock")
@@ -1509,6 +1871,35 @@
}
}
+ @GuardedBy("mReadWriteLock")
+ private void dispatchChangeNotificationsAfterRemoveByQueryLocked(
+ @NonNull String packageName,
+ @NonNull DeleteByQueryResultProto deleteResultProto,
+ @NonNull Set<String> prefixedObservedSchemas
+ ) throws AppSearchException {
+ for (int i = 0; i < deleteResultProto.getDeletedDocumentsCount(); ++i) {
+ DeleteByQueryResultProto.DocumentGroupInfo group =
+ deleteResultProto.getDeletedDocuments(i);
+ if (!prefixedObservedSchemas.contains(group.getSchema())) {
+ continue;
+ }
+ String databaseName = PrefixUtil.getDatabaseName(group.getNamespace());
+ String namespace = PrefixUtil.removePrefix(group.getNamespace());
+ String schemaType = PrefixUtil.removePrefix(group.getSchema());
+ for (int j = 0; j < group.getUrisCount(); ++j) {
+ String uri = group.getUris(j);
+ mObserverManager.onDocumentChange(
+ packageName,
+ databaseName,
+ namespace,
+ schemaType,
+ uri,
+ mVisibilityStoreLocked,
+ mVisibilityCheckerLocked);
+ }
+ }
+ }
+
/** Estimates the storage usage info for a specific package. */
@NonNull
public StorageInfo getStorageInfoForPackage(@NonNull String packageName)
@@ -1586,10 +1977,11 @@
mReadWriteLock.readLock().lock();
try {
throwIfClosedLocked();
- mLogUtil.piiTrace("getStorageInfo, request");
+ LogUtil.piiTrace(TAG, "getStorageInfo, request");
StorageInfoResultProto storageInfoResult = mIcingSearchEngineLocked.getStorageInfo();
- mLogUtil.piiTrace("getStorageInfo, response", storageInfoResult.getStatus(),
- storageInfoResult);
+ LogUtil.piiTrace(
+ TAG,
+ "getStorageInfo, response", storageInfoResult.getStatus(), storageInfoResult);
checkSuccess(storageInfoResult.getStatus());
return storageInfoResult.getStorageInfo();
} finally {
@@ -1652,6 +2044,33 @@
}
/**
+ * Returns the native debug info capsuled in {@link DebugInfoResultProto} directly from
+ * IcingSearchEngine.
+ *
+ * @param verbosity The verbosity of the debug info. {@link DebugInfoVerbosity.Code#BASIC}
+ * will return the simplest debug information.
+ * {@link DebugInfoVerbosity.Code#DETAILED} will return more detailed
+ * debug information as indicated in the comments in debug.proto
+ */
+ @NonNull
+ public DebugInfoProto getRawDebugInfoProto(@NonNull DebugInfoVerbosity.Code verbosity)
+ throws AppSearchException {
+ mReadWriteLock.readLock().lock();
+ try {
+ throwIfClosedLocked();
+ LogUtil.piiTrace(TAG, "getDebugInfo, request");
+ DebugInfoResultProto debugInfoResult = mIcingSearchEngineLocked.getDebugInfo(
+ verbosity);
+ LogUtil.piiTrace(TAG, "getDebugInfo, response", debugInfoResult.getStatus(),
+ debugInfoResult);
+ checkSuccess(debugInfoResult.getStatus());
+ return debugInfoResult.getDebugInfo();
+ } finally {
+ mReadWriteLock.readLock().unlock();
+ }
+ }
+
+ /**
* Persists all update/delete requests to the disk.
*
* <p>If the app crashes after a call to PersistToDisk with {@link PersistType.Code#FULL}, Icing
@@ -1677,10 +2096,11 @@
try {
throwIfClosedLocked();
- mLogUtil.piiTrace("persistToDisk, request", persistType);
+ LogUtil.piiTrace(TAG, "persistToDisk, request", persistType);
PersistToDiskResultProto persistToDiskResultProto =
mIcingSearchEngineLocked.persistToDisk(persistType);
- mLogUtil.piiTrace(
+ LogUtil.piiTrace(
+ TAG,
"persistToDisk, response",
persistToDiskResultProto.getStatus(),
persistToDiskResultProto);
@@ -1746,13 +2166,15 @@
// Apply schema, set force override to true to remove all schemas and documents that
// doesn't belong to any of these installed packages.
- mLogUtil.piiTrace(
+ LogUtil.piiTrace(
+ TAG,
"clearPackageData.setSchema, request",
finalSchema.getTypesCount(),
finalSchema);
SetSchemaResultProto setSchemaResultProto = mIcingSearchEngineLocked.setSchema(
finalSchema, /*ignoreErrorsAndDeleteDocuments=*/ true);
- mLogUtil.piiTrace(
+ LogUtil.piiTrace(
+ TAG,
"clearPackageData.setSchema, response",
setSchemaResultProto.getStatus(),
setSchemaResultProto);
@@ -1771,12 +2193,13 @@
}
for (String databaseName : databaseNames) {
String removedPrefix = createPrefix(packageName, databaseName);
- mSchemaMapLocked.remove(removedPrefix);
+ Map<String, SchemaTypeConfigProto> removedSchemas =
+ mSchemaMapLocked.remove(removedPrefix);
+ mVisibilityStoreLocked.removeVisibility(removedSchemas.keySet());
mNamespaceMapLocked.remove(removedPrefix);
}
}
}
- //TODO(b/145759910) clear visibility setting for package.
} finally {
mReadWriteLock.writeLock().unlock();
}
@@ -1792,9 +2215,10 @@
@GuardedBy("mReadWriteLock")
private void resetLocked(@Nullable InitializeStats.Builder initStatsBuilder)
throws AppSearchException {
- mLogUtil.piiTrace("icingSearchEngine.reset, request");
+ LogUtil.piiTrace(TAG, "icingSearchEngine.reset, request");
ResetResultProto resetResultProto = mIcingSearchEngineLocked.reset();
- mLogUtil.piiTrace(
+ LogUtil.piiTrace(
+ TAG,
"icingSearchEngine.reset, response",
resetResultProto.getStatus(),
resetResultProto);
@@ -1917,9 +2341,9 @@
@VisibleForTesting
@GuardedBy("mReadWriteLock")
SchemaProto getSchemaProtoLocked() throws AppSearchException {
- mLogUtil.piiTrace("getSchema, request");
+ LogUtil.piiTrace(TAG, "getSchema, request");
GetSchemaResultProto schemaProto = mIcingSearchEngineLocked.getSchema();
- mLogUtil.piiTrace("getSchema, response", schemaProto.getStatus(), schemaProto);
+ LogUtil.piiTrace(TAG, "getSchema, response", schemaProto.getStatus(), schemaProto);
// TODO(b/161935693) check GetSchemaResultProto is success or not. Call reset() if it's not.
// TODO(b/161935693) only allow GetSchemaResultProto NOT_FOUND on first run
checkCodeOneOf(schemaProto.getStatus(), StatusProto.Code.OK, StatusProto.Code.NOT_FOUND);
@@ -1951,7 +2375,7 @@
synchronized (mNextPageTokensLocked) {
Set<Long> nextPageTokens = mNextPageTokensLocked.get(packageName);
if (nextPageTokens == null || !nextPageTokens.contains(nextPageToken)) {
- throw new AppSearchException(AppSearchResult.RESULT_SECURITY_ERROR,
+ throw new AppSearchException(RESULT_SECURITY_ERROR,
"Package \"" + packageName + "\" cannot use nextPageToken: "
+ nextPageToken);
}
@@ -1959,48 +2383,60 @@
}
/**
- * Adds an {@link AppSearchObserverCallback} to monitor changes within the
- * databases owned by {@code observedPackage} if they match the given
+ * Adds an {@link ObserverCallback} to monitor changes within the databases owned by
+ * {@code targetPackageName} if they match the given
* {@link androidx.appsearch.observer.ObserverSpec}.
*
- * <p>If the data owned by {@code observedPackage} is not visible to you, the registration call
- * will succeed but no notifications will be dispatched. Notifications could start flowing later
- * if {@code observedPackage} changes its schema visibility settings.
+ * <p>If the data owned by {@code targetPackageName} is not visible to you, the registration
+ * call will succeed but no notifications will be dispatched. Notifications could start flowing
+ * later if {@code targetPackageName} changes its schema visibility settings.
*
- * <p>If no package matching {@code observedPackage} exists on the system, the registration call
- * will succeed but no notifications will be dispatched. Notifications could start flowing later
- * if {@code observedPackage} is installed and starts indexing data.
+ * <p>If no package matching {@code targetPackageName} exists on the system, the registration
+ * call will succeed but no notifications will be dispatched. Notifications could start flowing
+ * later if {@code targetPackageName} is installed and starts indexing data.
*
* <p>Note that this method does not take the standard read/write lock that guards I/O, so it
* will not queue behind I/O. Therefore it is safe to call from any thread including UI or
* binder threads.
+ *
+ * @param listeningPackageAccess Visibility information about the app that wants to receive
+ * notifications.
+ * @param targetPackageName The package that owns the data the observer wants to be
+ * notified for.
+ * @param spec Describes the kind of data changes the observer should trigger
+ * for.
+ * @param executor The executor on which to trigger the observer callback to
+ * deliver notifications.
+ * @param observer The callback to trigger on notifications.
*/
- public void addObserver(
- @NonNull String observedPackage,
+ public void registerObserverCallback(
+ @NonNull CallerAccess listeningPackageAccess,
+ @NonNull String targetPackageName,
@NonNull ObserverSpec spec,
@NonNull Executor executor,
- @NonNull AppSearchObserverCallback observer) {
+ @NonNull ObserverCallback observer) {
// This method doesn't consult mSchemaMap or mNamespaceMap, and it will register
// observers for types that don't exist. This is intentional because we notify for types
// being created or removed. If we only registered observer for existing types, it would
// be impossible to ever dispatch a notification of a type being added.
- mObserverManager.addObserver(observedPackage, spec, executor, observer);
+ mObserverManager.registerObserverCallback(
+ listeningPackageAccess, targetPackageName, spec, executor, observer);
}
/**
- * Removes an {@link AppSearchObserverCallback} from watching the databases owned by
- * {@code observedPackage}.
+ * Removes an {@link ObserverCallback} from watching the databases owned by
+ * {@code targetPackageName}.
*
* <p>All observers which compare equal to the given observer via
- * {@link AppSearchObserverCallback#equals} are removed. This may be 0, 1, or many observers.
+ * {@link ObserverCallback#equals} are removed. This may be 0, 1, or many observers.
*
* <p>Note that this method does not take the standard read/write lock that guards I/O, so it
* will not queue behind I/O. Therefore it is safe to call from any thread including UI or
* binder threads.
*/
- public void removeObserver(
- @NonNull String observedPackage, @NonNull AppSearchObserverCallback observer) {
- mObserverManager.removeObserver(observedPackage, observer);
+ public void unregisterObserverCallback(
+ @NonNull String targetPackageName, @NonNull ObserverCallback observer) {
+ mObserverManager.unregisterObserverCallback(targetPackageName, observer);
}
/**
@@ -2141,9 +2577,10 @@
public void optimize(@Nullable OptimizeStats.Builder builder) throws AppSearchException {
mReadWriteLock.writeLock().lock();
try {
- mLogUtil.piiTrace("optimize, request");
+ LogUtil.piiTrace(TAG, "optimize, request");
OptimizeResultProto optimizeResultProto = mIcingSearchEngineLocked.optimize();
- mLogUtil.piiTrace(
+ LogUtil.piiTrace(
+ TAG,
"optimize, response", optimizeResultProto.getStatus(), optimizeResultProto);
if (builder != null) {
builder.setStatusCode(statusProtoToResultCode(optimizeResultProto.getStatus()));
@@ -2156,16 +2593,65 @@
}
}
+ /**
+ * Sync the current Android logging level to Icing for the entire process. No lock required.
+ */
+ public static void syncLoggingLevelToIcing() {
+ String icingTag = IcingSearchEngine.getLoggingTag();
+ if (icingTag == null) {
+ Log.e(TAG, "Received null logging tag from Icing");
+ return;
+ }
+ if (LogUtil.DEBUG) {
+ if (Log.isLoggable(icingTag, Log.VERBOSE)) {
+ IcingSearchEngine.setLoggingLevel(LogSeverity.Code.VERBOSE, /*verbosity=*/
+ (short) 1);
+ return;
+ } else if (Log.isLoggable(icingTag, Log.DEBUG)) {
+ IcingSearchEngine.setLoggingLevel(LogSeverity.Code.DBG);
+ return;
+ }
+ }
+ if (Log.isLoggable(icingTag, Log.INFO)) {
+ IcingSearchEngine.setLoggingLevel(LogSeverity.Code.INFO);
+ } else if (Log.isLoggable(icingTag, Log.WARN)) {
+ IcingSearchEngine.setLoggingLevel(LogSeverity.Code.WARNING);
+ } else if (Log.isLoggable(icingTag, Log.ERROR)) {
+ IcingSearchEngine.setLoggingLevel(LogSeverity.Code.ERROR);
+ } else {
+ IcingSearchEngine.setLoggingLevel(LogSeverity.Code.FATAL);
+ }
+ }
+
@GuardedBy("mReadWriteLock")
@VisibleForTesting
GetOptimizeInfoResultProto getOptimizeInfoResultLocked() {
- mLogUtil.piiTrace("getOptimizeInfo, request");
+ LogUtil.piiTrace(TAG, "getOptimizeInfo, request");
GetOptimizeInfoResultProto result = mIcingSearchEngineLocked.getOptimizeInfo();
- mLogUtil.piiTrace("getOptimizeInfo, response", result.getStatus(), result);
+ LogUtil.piiTrace(TAG, "getOptimizeInfo, response", result.getStatus(), result);
return result;
}
/**
+ * Returns all prefixed schema types saved in AppSearch.
+ *
+ * <p>This method is inefficient to call repeatedly.
+ */
+ @NonNull
+ public List<String> getAllPrefixedSchemaTypes() {
+ mReadWriteLock.readLock().lock();
+ try {
+ List<String> cachedPrefixedSchemaTypes = new ArrayList<>();
+ for (Map<String, SchemaTypeConfigProto> value : mSchemaMapLocked.values()) {
+ cachedPrefixedSchemaTypes.addAll(value.keySet());
+ }
+ return cachedPrefixedSchemaTypes;
+ } finally {
+ mReadWriteLock.readLock().unlock();
+ }
+ }
+
+ /**
* Converts an erroneous status code from the Icing status enums to the AppSearchResult enums.
*
* <p>Callers should ensure that the status code is not OK or WARNING_DATA_LOSS.
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchMigrationHelper.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchMigrationHelper.java
index 393f8f2..312c2ed 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchMigrationHelper.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/AppSearchMigrationHelper.java
@@ -165,7 +165,7 @@
* {@link androidx.appsearch.app.SetSchemaResponse.MigrationFailure}
* added in.
* @return the {@link SetSchemaResponse} for this
- * {@link androidx.appsearch.app.AppSearchSession#setSchema} call.
+ * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync} call.
*
* @throws IOException on i/o problem
* @throws AppSearchException on AppSearch problem
@@ -185,7 +185,12 @@
while (!codedInputStream.isAtEnd()) {
GenericDocument document = readDocumentFromInputStream(codedInputStream);
try {
- mAppSearchImpl.putDocument(mPackageName, mDatabaseName, document,
+ // During schema migrations, only schema change notifications are dispatched.
+ mAppSearchImpl.putDocument(
+ mPackageName,
+ mDatabaseName,
+ document,
+ /*sendChangeNotifications=*/ false,
/*logger=*/ null);
savedDocsCount++;
} catch (Throwable t) {
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/GlobalSearchSessionImpl.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/GlobalSearchSessionImpl.java
index 6c9e456..ef8ec3b 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/GlobalSearchSessionImpl.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/GlobalSearchSessionImpl.java
@@ -16,24 +16,34 @@
// @exportToFramework:skipFile()
package androidx.appsearch.localstorage;
+import static androidx.appsearch.app.AppSearchResult.throwableToFailedResult;
+
+import android.annotation.SuppressLint;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.appsearch.app.AppSearchBatchResult;
import androidx.appsearch.app.AppSearchResult;
import androidx.appsearch.app.Features;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetByDocumentIdRequest;
+import androidx.appsearch.app.GetSchemaResponse;
import androidx.appsearch.app.GlobalSearchSession;
import androidx.appsearch.app.ReportSystemUsageRequest;
import androidx.appsearch.app.SearchResults;
import androidx.appsearch.app.SearchSpec;
import androidx.appsearch.exceptions.AppSearchException;
import androidx.appsearch.localstorage.util.FutureUtil;
-import androidx.appsearch.observer.AppSearchObserverCallback;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
+import androidx.appsearch.observer.ObserverCallback;
import androidx.appsearch.observer.ObserverSpec;
import androidx.core.util.Preconditions;
import com.google.common.util.concurrent.ListenableFuture;
+import java.util.List;
+import java.util.Map;
import java.util.concurrent.Executor;
/**
@@ -48,12 +58,12 @@
private final Executor mExecutor;
private final Features mFeatures;
private final Context mContext;
+ @Nullable private final AppSearchLogger mLogger;
+
+ private final CallerAccess mSelfCallerAccess;
private boolean mIsClosed = false;
- @Nullable
- private final AppSearchLogger mLogger;
-
GlobalSearchSessionImpl(
@NonNull AppSearchImpl appSearchImpl,
@NonNull Executor executor,
@@ -65,6 +75,37 @@
mFeatures = Preconditions.checkNotNull(features);
mContext = Preconditions.checkNotNull(context);
mLogger = logger;
+
+ mSelfCallerAccess = new CallerAccess(/*callingPackageName=*/mContext.getPackageName());
+ }
+
+ @NonNull
+ @Override
+ public ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentIdAsync(
+ @NonNull String packageName,
+ @NonNull String databaseName,
+ @NonNull GetByDocumentIdRequest request) {
+ Preconditions.checkNotNull(packageName);
+ Preconditions.checkNotNull(databaseName);
+ Preconditions.checkNotNull(request);
+ Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
+ return FutureUtil.execute(mExecutor, () -> {
+ AppSearchBatchResult.Builder<String, GenericDocument> resultBuilder =
+ new AppSearchBatchResult.Builder<>();
+
+ Map<String, List<String>> typePropertyPaths = request.getProjectionsInternal();
+ CallerAccess access = new CallerAccess(mContext.getPackageName());
+ for (String id : request.getIds()) {
+ try {
+ GenericDocument document = mAppSearchImpl.globalGetDocument(packageName,
+ databaseName, request.getNamespace(), id, typePropertyPaths, access);
+ resultBuilder.setSuccess(id, document);
+ } catch (Throwable t) {
+ resultBuilder.setResult(id, throwableToFailedResult(t));
+ }
+ }
+ return resultBuilder.build();
+ });
}
@NonNull
@@ -92,7 +133,8 @@
*/
@NonNull
@Override
- public ListenableFuture<Void> reportSystemUsage(@NonNull ReportSystemUsageRequest request) {
+ public ListenableFuture<Void> reportSystemUsageAsync(
+ @NonNull ReportSystemUsageRequest request) {
Preconditions.checkNotNull(request);
Preconditions.checkState(!mIsClosed, "GlobalSearchSession has already been closed");
return FutureUtil.execute(mExecutor, () -> {
@@ -102,6 +144,18 @@
});
}
+ @SuppressLint("KotlinPropertyAccess")
+ @NonNull
+ @Override
+ public ListenableFuture<GetSchemaResponse> getSchemaAsync(
+ @NonNull String packageName, @NonNull String databaseName) {
+ Preconditions.checkNotNull(packageName);
+ Preconditions.checkNotNull(databaseName);
+ Preconditions.checkState(!mIsClosed, "GlobalSearchSession has already been closed");
+ return FutureUtil.execute(mExecutor,
+ () -> mAppSearchImpl.getSchema(packageName, databaseName, mSelfCallerAccess));
+ }
+
@NonNull
@Override
public Features getFeatures() {
@@ -109,36 +163,41 @@
}
@Override
- public void addObserver(
- @NonNull String observedPackage,
+ public void registerObserverCallback(
+ @NonNull String targetPackageName,
@NonNull ObserverSpec spec,
@NonNull Executor executor,
- @NonNull AppSearchObserverCallback observer) {
- Preconditions.checkNotNull(observedPackage);
+ @NonNull ObserverCallback observer) {
+ Preconditions.checkNotNull(targetPackageName);
Preconditions.checkNotNull(spec);
Preconditions.checkNotNull(executor);
Preconditions.checkNotNull(observer);
// LocalStorage does not support observing data from other packages.
- if (!observedPackage.equals(mContext.getPackageName())) {
+ if (!targetPackageName.equals(mContext.getPackageName())) {
throw new UnsupportedOperationException(
"Local storage implementation does not support receiving change notifications "
+ "from other packages.");
}
- mAppSearchImpl.addObserver(observedPackage, spec, executor, observer);
+ mAppSearchImpl.registerObserverCallback(
+ /*listeningPackageAccess=*/mSelfCallerAccess,
+ /*targetPackageName=*/targetPackageName,
+ spec,
+ executor,
+ observer);
}
@Override
- public void removeObserver(
- @NonNull String observedPackage, @NonNull AppSearchObserverCallback observer) {
- Preconditions.checkNotNull(observedPackage);
+ public void unregisterObserverCallback(
+ @NonNull String targetPackageName, @NonNull ObserverCallback observer) {
+ Preconditions.checkNotNull(targetPackageName);
Preconditions.checkNotNull(observer);
// LocalStorage does not support observing data from other packages.
- if (!observedPackage.equals(mContext.getPackageName())) {
+ if (!targetPackageName.equals(mContext.getPackageName())) {
throw new UnsupportedOperationException(
"Local storage implementation does not support receiving change notifications "
+ "from other packages.");
}
- mAppSearchImpl.removeObserver(observedPackage, observer);
+ mAppSearchImpl.unregisterObserverCallback(targetPackageName, observer);
}
@Override
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LimitConfig.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LimitConfig.java
index dded201..b53e12a 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LimitConfig.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LimitConfig.java
@@ -53,4 +53,14 @@
* </ol>
*/
int getMaxDocumentCount();
+
+ /**
+ * The maximum number of suggestion results a single app is allowed to search.
+ *
+ * <p>Enforced at searching suggestion time.
+ *
+ * <p>The purpose of this limit is to protect Android framework system resource like memory
+ * from being overwhelmed by a single app.
+ */
+ int getMaxSuggestionCount();
}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LocalStorage.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LocalStorage.java
index 3ffb93d..5a0dceb 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LocalStorage.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LocalStorage.java
@@ -270,7 +270,7 @@
* {@link AppSearchSession}
*/
@NonNull
- public static ListenableFuture<AppSearchSession> createSearchSession(
+ public static ListenableFuture<AppSearchSession> createSearchSessionAsync(
@NonNull SearchContext context) {
Preconditions.checkNotNull(context);
return FutureUtil.execute(context.mExecutor, () -> {
@@ -281,6 +281,18 @@
}
/**
+ * @deprecated use {@link #createSearchSessionAsync}
+ * @param context The {@link SearchContext} contains all information to create a new
+ * {@link AppSearchSession}
+ */
+ @NonNull
+ @Deprecated
+ public static ListenableFuture<AppSearchSession> createSearchSession(
+ @NonNull SearchContext context) {
+ return createSearchSessionAsync(context);
+ }
+
+ /**
* Opens a new {@link GlobalSearchSession} on this storage.
*
* <p>This process requires a native search library. If it's not created, the initialization
@@ -290,7 +302,7 @@
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@NonNull
- public static ListenableFuture<GlobalSearchSession> createGlobalSearchSession(
+ public static ListenableFuture<GlobalSearchSession> createGlobalSearchSessionAsync(
@NonNull GlobalSearchContext context) {
Preconditions.checkNotNull(context);
return FutureUtil.execute(context.mExecutor, () -> {
@@ -301,6 +313,18 @@
}
/**
+ * @deprecated use {@link #createGlobalSearchSessionAsync}
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ @NonNull
+ @Deprecated
+ public static ListenableFuture<GlobalSearchSession> createGlobalSearchSession(
+ @NonNull GlobalSearchContext context) {
+ return createGlobalSearchSessionAsync(context);
+ }
+
+ /**
* Returns the singleton instance of {@link LocalStorage}.
*
* <p>If the system is not initialized, it will be initialized using the provided
@@ -338,11 +362,15 @@
initStatsBuilder = new InitializeStats.Builder();
}
+ // Syncing the current logging level to Icing before creating the AppSearch object, so that
+ // the correct logging level will cover the period of Icing initialization.
+ AppSearchImpl.syncLoggingLevelToIcing();
mAppSearchImpl = AppSearchImpl.create(
icingDir,
new UnlimitedLimitConfig(),
initStatsBuilder,
- new JetpackOptimizeStrategy());
+ new JetpackOptimizeStrategy(),
+ /*visibilityChecker=*/null);
if (logger != null) {
initStatsBuilder.setTotalLatencyMillis(
@@ -382,7 +410,7 @@
mAppSearchImpl,
context.mExecutor,
new AlwaysSupportedFeatures(),
- context.mContext.getPackageName(),
+ context.mContext,
context.mDatabaseName,
context.mLogger);
}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/ObserverManager.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/ObserverManager.java
index 0d49147..c25be25 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/ObserverManager.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/ObserverManager.java
@@ -22,22 +22,29 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
-import androidx.appsearch.observer.AppSearchObserverCallback;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityChecker;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityStore;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityUtil;
import androidx.appsearch.observer.DocumentChangeInfo;
+import androidx.appsearch.observer.ObserverCallback;
import androidx.appsearch.observer.ObserverSpec;
+import androidx.appsearch.observer.SchemaChangeInfo;
import androidx.collection.ArrayMap;
import androidx.collection.ArraySet;
import androidx.core.util.ObjectsCompat;
import androidx.core.util.Preconditions;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Executor;
/**
- * Manages {@link AppSearchObserverCallback} instances and queues notifications to them for later
+ * Manages {@link ObserverCallback} instances and queues notifications to them for later
* dispatch.
*
* <p>This class is thread-safe.
@@ -84,72 +91,94 @@
}
private static final class ObserverInfo {
+ /** The package which registered the observer. */
+ final CallerAccess mListeningPackageAccess;
final ObserverSpec mObserverSpec;
final Executor mExecutor;
- final AppSearchObserverCallback mObserver;
- volatile Set<DocumentChangeGroupKey> mDocumentChanges = new ArraySet<>();
+ final ObserverCallback mObserverCallback;
+ // Values is a set of document IDs
+ volatile Map<DocumentChangeGroupKey, Set<String>> mDocumentChanges = new ArrayMap<>();
+ // Keys are database prefixes, values are a set of schema names
+ volatile Map<String, Set<String>> mSchemaChanges = new ArrayMap<>();
ObserverInfo(
+ @NonNull CallerAccess listeningPackageAccess,
@NonNull ObserverSpec observerSpec,
@NonNull Executor executor,
- @NonNull AppSearchObserverCallback observer) {
+ @NonNull ObserverCallback observerCallback) {
+ mListeningPackageAccess = Preconditions.checkNotNull(listeningPackageAccess);
mObserverSpec = Preconditions.checkNotNull(observerSpec);
mExecutor = Preconditions.checkNotNull(executor);
- mObserver = Preconditions.checkNotNull(observer);
+ mObserverCallback = Preconditions.checkNotNull(observerCallback);
}
}
private final Object mLock = new Object();
- /** Maps observed package to observer infos watching something in that package. */
+ /** Maps target packages to ObserverInfos watching something in that package. */
@GuardedBy("mLock")
private final Map<String, List<ObserverInfo>> mObserversLocked = new ArrayMap<>();
private volatile boolean mHasNotifications = false;
/**
- * Adds an {@link AppSearchObserverCallback} to monitor changes within the
- * databases owned by {@code observedPackage} if they match the given
+ * Adds an {@link ObserverCallback} to monitor changes within the databases owned by
+ * {@code targetPackageName} if they match the given
* {@link androidx.appsearch.observer.ObserverSpec}.
*
- * <p>If the data owned by {@code observedPackage} is not visible to you, the registration call
- * will succeed but no notifications will be dispatched. Notifications could start flowing later
- * if {@code observedPackage} changes its schema visibility settings.
+ * <p>If the data owned by {@code targetPackageName} is not visible to you, the registration
+ * call will succeed but no notifications will be dispatched. Notifications could start flowing
+ * later if {@code targetPackageName} changes its schema visibility settings.
*
- * <p>If no package matching {@code observedPackage} exists on the system, the registration call
- * will succeed but no notifications will be dispatched. Notifications could start flowing later
- * if {@code observedPackage} is installed and starts indexing data.
+ * <p>If no package matching {@code targetPackageName} exists on the system, the registration
+ * call will succeed but no notifications will be dispatched. Notifications could start flowing
+ * later if {@code targetPackageName} is installed and starts indexing data.
+ *
+ * <p>Note that this method does not take the standard read/write lock that guards I/O, so it
+ * will not queue behind I/O. Therefore it is safe to call from any thread including UI or
+ * binder threads.
+ *
+ * @param listeningPackageAccess Visibility information about the app that wants to receive
+ * notifications.
+ * @param targetPackageName The package that owns the data the observerCallback wants to be
+ * notified for.
+ * @param spec Describes the kind of data changes the observerCallback should
+ * trigger for.
+ * @param executor The executor on which to trigger the observerCallback callback
+ * to deliver notifications.
+ * @param observerCallback The callback to trigger on notifications.
*/
- public void addObserver(
- @NonNull String observedPackage,
+ public void registerObserverCallback(
+ @NonNull CallerAccess listeningPackageAccess,
+ @NonNull String targetPackageName,
@NonNull ObserverSpec spec,
@NonNull Executor executor,
- @NonNull AppSearchObserverCallback observer) {
+ @NonNull ObserverCallback observerCallback) {
synchronized (mLock) {
- List<ObserverInfo> infos = mObserversLocked.get(observedPackage);
+ List<ObserverInfo> infos = mObserversLocked.get(targetPackageName);
if (infos == null) {
infos = new ArrayList<>();
- mObserversLocked.put(observedPackage, infos);
+ mObserversLocked.put(targetPackageName, infos);
}
- infos.add(new ObserverInfo(spec, executor, observer));
+ infos.add(new ObserverInfo(listeningPackageAccess, spec, executor, observerCallback));
}
}
/**
- * Removes all observers that match via {@link AppSearchObserverCallback#equals} to the given
- * observer from watching the observedPackage.
+ * Removes all observers that match via {@link ObserverCallback#equals} to the given observer
+ * from watching the targetPackageName.
*
* <p>Pending notifications queued for this observer, if any, are discarded.
*/
- public void removeObserver(
- @NonNull String observedPackage, @NonNull AppSearchObserverCallback observer) {
+ public void unregisterObserverCallback(
+ @NonNull String targetPackageName, @NonNull ObserverCallback observer) {
synchronized (mLock) {
- List<ObserverInfo> infos = mObserversLocked.get(observedPackage);
+ List<ObserverInfo> infos = mObserversLocked.get(targetPackageName);
if (infos == null) {
return;
}
for (int i = 0; i < infos.size(); i++) {
- if (infos.get(i).mObserver.equals(observer)) {
+ if (infos.get(i).mObserverCallback.equals(observer)) {
infos.remove(i);
i--;
}
@@ -162,28 +191,105 @@
*
* <p>The notification will be queued in memory for later dispatch. You must call
* {@link #dispatchAndClearPendingNotifications} to dispatch all such pending notifications.
+ *
+ * @param visibilityStore Store for visibility information. If not provided, only access to
+ * own data will be allowed.
+ * @param visibilityChecker Checker for visibility access. If not provided, only access to own
+ * data will be allowed.
*/
public void onDocumentChange(
@NonNull String packageName,
@NonNull String databaseName,
@NonNull String namespace,
- @NonNull String schemaType) {
+ @NonNull String schemaType,
+ @NonNull String documentId,
+ @Nullable VisibilityStore visibilityStore,
+ @Nullable VisibilityChecker visibilityChecker) {
synchronized (mLock) {
List<ObserverInfo> allObserverInfosForPackage = mObserversLocked.get(packageName);
if (allObserverInfosForPackage == null || allObserverInfosForPackage.isEmpty()) {
return; // No observers for this type
}
// Enqueue changes for later dispatch once the call returns
+ String prefixedSchema =
+ PrefixUtil.createPrefix(packageName, databaseName) + schemaType;
DocumentChangeGroupKey key = null;
for (int i = 0; i < allObserverInfosForPackage.size(); i++) {
ObserverInfo observerInfo = allObserverInfosForPackage.get(i);
- if (matchesSpec(schemaType, observerInfo.mObserverSpec)) {
- if (key == null) {
- key = new DocumentChangeGroupKey(
- packageName, databaseName, namespace, schemaType);
- }
- observerInfo.mDocumentChanges.add(key);
+ if (!matchesSpec(schemaType, observerInfo.mObserverSpec)) {
+ continue; // Observer doesn't want this notification
}
+ if (!VisibilityUtil.isSchemaSearchableByCaller(
+ /*callerAccess=*/observerInfo.mListeningPackageAccess,
+ /*targetPackageName=*/packageName,
+ /*prefixedSchema=*/prefixedSchema,
+ visibilityStore,
+ visibilityChecker)) {
+ continue; // Observer can't have this notification.
+ }
+ if (key == null) {
+ key = new DocumentChangeGroupKey(
+ packageName, databaseName, namespace, schemaType);
+ }
+ Set<String> changedDocumentIds = observerInfo.mDocumentChanges.get(key);
+ if (changedDocumentIds == null) {
+ changedDocumentIds = new ArraySet<>();
+ observerInfo.mDocumentChanges.put(key, changedDocumentIds);
+ }
+ changedDocumentIds.add(documentId);
+ }
+ mHasNotifications = true;
+ }
+ }
+
+ /**
+ * Enqueues a change to a schema type for a single observer.
+ *
+ * <p>The notification will be queued in memory for later dispatch. You must call
+ * {@link #dispatchAndClearPendingNotifications} to dispatch all such pending notifications.
+ *
+ * <p>Note that unlike {@link #onDocumentChange}, the changes reported here are not dropped
+ * for observers that don't have visibility. This is because the observer might have had
+ * visibility before the schema change, and a final deletion needs to be sent to it. Caller
+ * is responsible for checking visibility of these notifications.
+ *
+ * @param listeningPackageName Name of package that subscribed to notifications and has been
+ * validated by the caller to have the right access to receive
+ * this notification.
+ * @param targetPackageName Name of package that owns the changed schema types.
+ * @param databaseName Database in which the changed schema types reside.
+ * @param schemaName Unprefixed name of the changed schema type.
+ */
+ public void onSchemaChange(
+ @NonNull String listeningPackageName,
+ @NonNull String targetPackageName,
+ @NonNull String databaseName,
+ @NonNull String schemaName) {
+ synchronized (mLock) {
+ List<ObserverInfo> allObserverInfosForPackage = mObserversLocked.get(targetPackageName);
+ if (allObserverInfosForPackage == null || allObserverInfosForPackage.isEmpty()) {
+ return; // No observers for this type
+ }
+ // Enqueue changes for later dispatch once the call returns
+ String prefix = null;
+ for (int i = 0; i < allObserverInfosForPackage.size(); i++) {
+ ObserverInfo observerInfo = allObserverInfosForPackage.get(i);
+ if (!observerInfo.mListeningPackageAccess.getCallingPackageName()
+ .equals(listeningPackageName)) {
+ continue; // Not the observer we've been requested to update right now.
+ }
+ if (!matchesSpec(schemaName, observerInfo.mObserverSpec)) {
+ continue; // Observer doesn't want this notification
+ }
+ if (prefix == null) {
+ prefix = PrefixUtil.createPrefix(targetPackageName, databaseName);
+ }
+ Set<String> changedSchemaNames = observerInfo.mSchemaChanges.get(prefix);
+ if (changedSchemaNames == null) {
+ changedSchemaNames = new ArraySet<>();
+ observerInfo.mSchemaChanges.put(prefix, changedSchemaNames);
+ }
+ changedSchemaNames.add(schemaName);
}
mHasNotifications = true;
}
@@ -216,6 +322,44 @@
}
}
+ /**
+ * Returns package names of listening packages registered for changes on the given
+ * {@code packageName}, {@code databaseName} and unprefixed {@code schemaType}, only if they
+ * have access to that type according to the provided {@code visibilityChecker}.
+ */
+ @NonNull
+ public Set<String> getObserversForSchemaType(
+ @NonNull String packageName,
+ @NonNull String databaseName,
+ @NonNull String schemaType,
+ @Nullable VisibilityStore visibilityStore,
+ @Nullable VisibilityChecker visibilityChecker) {
+ synchronized (mLock) {
+ List<ObserverInfo> allObserverInfosForPackage = mObserversLocked.get(packageName);
+ if (allObserverInfosForPackage == null) {
+ return Collections.emptySet();
+ }
+ Set<String> result = new ArraySet<>();
+ String prefixedSchema = PrefixUtil.createPrefix(packageName, databaseName) + schemaType;
+ for (int i = 0; i < allObserverInfosForPackage.size(); i++) {
+ ObserverInfo observerInfo = allObserverInfosForPackage.get(i);
+ if (!matchesSpec(schemaType, observerInfo.mObserverSpec)) {
+ continue; // Observer doesn't want this notification
+ }
+ if (!VisibilityUtil.isSchemaSearchableByCaller(
+ /*callerAccess=*/observerInfo.mListeningPackageAccess,
+ /*targetPackageName=*/packageName,
+ /*prefixedSchema=*/prefixedSchema,
+ visibilityStore,
+ visibilityChecker)) {
+ continue; // Observer can't have this notification.
+ }
+ result.add(observerInfo.mListeningPackageAccess.getCallingPackageName());
+ }
+ return result;
+ }
+ }
+
/** Returns whether any notifications have been queued for dispatch. */
public boolean hasNotifications() {
return mHasNotifications;
@@ -243,28 +387,52 @@
@GuardedBy("mLock")
private void dispatchAndClearPendingNotificationsLocked(@NonNull ObserverInfo observerInfo) {
// Get and clear the pending changes
- Set<DocumentChangeGroupKey> documentChanges = observerInfo.mDocumentChanges;
- if (documentChanges.isEmpty()) {
+ Map<String, Set<String>> schemaChanges = observerInfo.mSchemaChanges;
+ Map<DocumentChangeGroupKey, Set<String>> documentChanges = observerInfo.mDocumentChanges;
+ if (schemaChanges.isEmpty() && documentChanges.isEmpty()) {
return;
}
- observerInfo.mDocumentChanges = new ArraySet<>();
+ if (!schemaChanges.isEmpty()) {
+ observerInfo.mSchemaChanges = new ArrayMap<>();
+ }
+ if (!documentChanges.isEmpty()) {
+ observerInfo.mDocumentChanges = new ArrayMap<>();
+ }
// Dispatch the pending changes
observerInfo.mExecutor.execute(() -> {
- for (DocumentChangeGroupKey entry : documentChanges) {
- // TODO(b/193494000): Buffer document URIs as the values of mDocumentChanges
- // and include them in the final ChangeInfo
- DocumentChangeInfo documentChangeInfo = new DocumentChangeInfo(
- entry.mPackageName,
- entry.mDatabaseName,
- entry.mNamespace,
- entry.mSchemaName);
+ // Schema changes
+ if (!schemaChanges.isEmpty()) {
+ for (Map.Entry<String, Set<String>> entry : schemaChanges.entrySet()) {
+ SchemaChangeInfo schemaChangeInfo = new SchemaChangeInfo(
+ /*packageName=*/PrefixUtil.getPackageName(entry.getKey()),
+ /*databaseName=*/PrefixUtil.getDatabaseName(entry.getKey()),
+ /*changedSchemaNames=*/entry.getValue());
- try {
- // TODO(b/193494000): Add code to dispatch SchemaChangeInfo too.
- observerInfo.mObserver.onDocumentChanged(documentChangeInfo);
- } catch (Throwable t) {
- Log.w(TAG, "AppSearchObserverCallback threw exception during dispatch", t);
+ try {
+ observerInfo.mObserverCallback.onSchemaChanged(schemaChangeInfo);
+ } catch (Throwable t) {
+ Log.w(TAG, "ObserverCallback threw exception during dispatch", t);
+ }
+ }
+ }
+
+ // Document changes
+ if (!documentChanges.isEmpty()) {
+ for (Map.Entry<DocumentChangeGroupKey, Set<String>> entry
+ : documentChanges.entrySet()) {
+ DocumentChangeInfo documentChangeInfo = new DocumentChangeInfo(
+ entry.getKey().mPackageName,
+ entry.getKey().mDatabaseName,
+ entry.getKey().mNamespace,
+ entry.getKey().mSchemaName,
+ entry.getValue());
+
+ try {
+ observerInfo.mObserverCallback.onDocumentChanged(documentChangeInfo);
+ } catch (Throwable t) {
+ Log.w(TAG, "ObserverCallback threw exception during dispatch", t);
+ }
}
}
});
@@ -280,12 +448,6 @@
private static boolean matchesSpec(
@NonNull String schemaType, @NonNull ObserverSpec observerSpec) {
Set<String> schemaFilters = observerSpec.getFilterSchemas();
- if (!schemaFilters.isEmpty() && !schemaFilters.contains(schemaType)) {
- return false;
- }
- // TODO(b/193494000): We also need to check VisibilityStore to see if the observer is
- // allowed to access this type before granting access. Note if fixing this TODO makes the
- // method non-static we need to handle locking.
- return true;
+ return schemaFilters.isEmpty() || schemaFilters.contains(schemaType);
}
}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchResultsImpl.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchResultsImpl.java
index 761ebfd..8da40bb 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchResultsImpl.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchResultsImpl.java
@@ -16,18 +16,15 @@
// @exportToFramework:skipFile()
package androidx.appsearch.localstorage;
-import android.os.Process;
-
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.appsearch.app.AppSearchResult;
import androidx.appsearch.app.SearchResult;
import androidx.appsearch.app.SearchResultPage;
import androidx.appsearch.app.SearchResults;
import androidx.appsearch.app.SearchSpec;
-import androidx.appsearch.exceptions.AppSearchException;
import androidx.appsearch.localstorage.stats.SearchStats;
import androidx.appsearch.localstorage.util.FutureUtil;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
import androidx.core.util.Preconditions;
import com.google.common.util.concurrent.ListenableFuture;
@@ -40,11 +37,13 @@
private final Executor mExecutor;
- // The package name to search over. If null, this will search over all package names.
- @Nullable
+ /* The package name of the current app which is using the local backend. */
private final String mPackageName;
- // The database name to search over. If null, this will search over all database names.
+ /** A CallerAccess object describing local-only access of the current app. */
+ private final CallerAccess mSelfCallerAccess;
+
+ /* The database name to search over. If null, this will search over all database names. */
@Nullable
private final String mDatabaseName;
@@ -69,14 +68,15 @@
SearchResultsImpl(
@NonNull AppSearchImpl appSearchImpl,
@NonNull Executor executor,
- @Nullable String packageName,
+ @NonNull String packageName,
@Nullable String databaseName,
@NonNull String queryExpression,
@NonNull SearchSpec searchSpec,
@Nullable AppSearchLogger logger) {
mAppSearchImpl = Preconditions.checkNotNull(appSearchImpl);
mExecutor = Preconditions.checkNotNull(executor);
- mPackageName = packageName;
+ mPackageName = Preconditions.checkNotNull(packageName);
+ mSelfCallerAccess = new CallerAccess(/*callingPackageName=*/mPackageName);
mDatabaseName = databaseName;
mQueryExpression = Preconditions.checkNotNull(queryExpression);
mSearchSpec = Preconditions.checkNotNull(searchSpec);
@@ -85,27 +85,17 @@
@Override
@NonNull
- public ListenableFuture<List<SearchResult>> getNextPage() {
+ public ListenableFuture<List<SearchResult>> getNextPageAsync() {
Preconditions.checkState(!mIsClosed, "SearchResults has already been closed");
return FutureUtil.execute(mExecutor, () -> {
SearchResultPage searchResultPage;
if (mIsFirstLoad) {
mIsFirstLoad = false;
- if (mPackageName == null) {
- throw new AppSearchException(
- AppSearchResult.RESULT_INVALID_ARGUMENT,
- "Invalid null package name for query");
- } else if (mDatabaseName == null) {
+ if (mDatabaseName == null) {
mVisibilityScope = SearchStats.VISIBILITY_SCOPE_GLOBAL;
// Global queries aren't restricted to a single database
searchResultPage = mAppSearchImpl.globalQuery(
- mQueryExpression,
- mSearchSpec,
- mPackageName,
- /*visibilityStore=*/ null,
- Process.myUid(),
- /*callerHasSystemAccess=*/ false,
- mLogger);
+ mQueryExpression, mSearchSpec, mSelfCallerAccess, mLogger);
} else {
mVisibilityScope = SearchStats.VISIBILITY_SCOPE_LOCAL;
// Normal local query, pass in specified database.
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchSessionImpl.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchSessionImpl.java
index a695642..7ce6ae1 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchSessionImpl.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/SearchSessionImpl.java
@@ -16,8 +16,11 @@
// @exportToFramework:skipFile()
package androidx.appsearch.localstorage;
+import static androidx.appsearch.app.AppSearchResult.RESULT_INTERNAL_ERROR;
+import static androidx.appsearch.app.AppSearchResult.RESULT_INVALID_SCHEMA;
import static androidx.appsearch.app.AppSearchResult.throwableToFailedResult;
+import android.content.Context;
import android.os.SystemClock;
import android.util.Log;
@@ -30,24 +33,27 @@
import androidx.appsearch.app.GenericDocument;
import androidx.appsearch.app.GetByDocumentIdRequest;
import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.InternalSetSchemaResponse;
import androidx.appsearch.app.Migrator;
-import androidx.appsearch.app.PackageIdentifier;
import androidx.appsearch.app.PutDocumentsRequest;
import androidx.appsearch.app.RemoveByDocumentIdRequest;
import androidx.appsearch.app.ReportUsageRequest;
import androidx.appsearch.app.SearchResults;
import androidx.appsearch.app.SearchSpec;
+import androidx.appsearch.app.SearchSuggestionResult;
+import androidx.appsearch.app.SearchSuggestionSpec;
import androidx.appsearch.app.SetSchemaRequest;
import androidx.appsearch.app.SetSchemaResponse;
import androidx.appsearch.app.StorageInfo;
+import androidx.appsearch.app.VisibilityDocument;
import androidx.appsearch.exceptions.AppSearchException;
import androidx.appsearch.localstorage.stats.OptimizeStats;
import androidx.appsearch.localstorage.stats.RemoveStats;
import androidx.appsearch.localstorage.stats.SchemaMigrationStats;
import androidx.appsearch.localstorage.stats.SetSchemaStats;
import androidx.appsearch.localstorage.util.FutureUtil;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
import androidx.appsearch.util.SchemaMigrationUtil;
-import androidx.collection.ArrayMap;
import androidx.collection.ArraySet;
import androidx.core.util.Preconditions;
@@ -70,49 +76,50 @@
*/
class SearchSessionImpl implements AppSearchSession {
private static final String TAG = "AppSearchSessionImpl";
+
private final AppSearchImpl mAppSearchImpl;
private final Executor mExecutor;
private final Features mFeatures;
- private final String mPackageName;
+ private final Context mContext;
private final String mDatabaseName;
+ @Nullable private final AppSearchLogger mLogger;
+
+ private final String mPackageName;
+ private final CallerAccess mSelfCallerAccess;
+
private volatile boolean mIsMutated = false;
private volatile boolean mIsClosed = false;
- @Nullable private final AppSearchLogger mLogger;
SearchSessionImpl(
@NonNull AppSearchImpl appSearchImpl,
@NonNull Executor executor,
@NonNull Features features,
- @NonNull String packageName,
+ @NonNull Context context,
@NonNull String databaseName,
@Nullable AppSearchLogger logger) {
mAppSearchImpl = Preconditions.checkNotNull(appSearchImpl);
mExecutor = Preconditions.checkNotNull(executor);
mFeatures = Preconditions.checkNotNull(features);
- mPackageName = packageName;
+ mContext = Preconditions.checkNotNull(context);
mDatabaseName = Preconditions.checkNotNull(databaseName);
mLogger = logger;
+
+ mPackageName = mContext.getPackageName();
+ mSelfCallerAccess = new CallerAccess(/*callingPackageName=*/mPackageName);
}
@Override
@NonNull
- public ListenableFuture<SetSchemaResponse> setSchema(
+ public ListenableFuture<SetSchemaResponse> setSchemaAsync(
@NonNull SetSchemaRequest request) {
Preconditions.checkNotNull(request);
Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
ListenableFuture<SetSchemaResponse> future = execute(() -> {
long startMillis = SystemClock.elapsedRealtime();
-
- // Convert the inner set into a List since Binder can't handle Set.
- Map<String, Set<PackageIdentifier>> schemasVisibleToPackages =
- request.getSchemasVisibleToPackagesInternal();
- Map<String, List<PackageIdentifier>> copySchemasVisibleToPackages = new ArrayMap<>();
- for (Map.Entry<String, Set<PackageIdentifier>> entry :
- schemasVisibleToPackages.entrySet()) {
- copySchemasVisibleToPackages.put(entry.getKey(),
- new ArrayList<>(entry.getValue()));
- }
+ // Extract a Map<schema, VisibilityDocument> from the request.
+ List<VisibilityDocument> visibilityDocuments = VisibilityDocument
+ .toVisibilityDocuments(request);
SetSchemaStats.Builder setSchemaStatsBuilder = null;
if (mLogger != null) {
@@ -123,20 +130,25 @@
// No need to trigger migration if user never set migrator.
if (migrators.size() == 0) {
SetSchemaResponse setSchemaResponse =
- setSchemaNoMigrations(request, copySchemasVisibleToPackages,
- setSchemaStatsBuilder);
+ setSchemaNoMigrations(request, visibilityDocuments, setSchemaStatsBuilder);
+
+ // Schedule a task to dispatch change notifications. See requirements for where the
+ // method is called documented in the method description.
+ dispatchChangeNotifications();
+
if (setSchemaStatsBuilder != null) {
setSchemaStatsBuilder.setTotalLatencyMillis(
(int) (SystemClock.elapsedRealtime() - startMillis));
mLogger.logStats(setSchemaStatsBuilder.build());
}
+
return setSchemaResponse;
}
// Migration process
// 1. Validate and retrieve all active migrators.
- GetSchemaResponse getSchemaResponse =
- mAppSearchImpl.getSchema(mPackageName, mDatabaseName);
+ GetSchemaResponse getSchemaResponse = mAppSearchImpl.getSchema(
+ mPackageName, mDatabaseName, mSelfCallerAccess);
int currentVersion = getSchemaResponse.getVersion();
int finalVersion = request.getVersion();
Map<String, Migrator> activeMigrators = SchemaMigrationUtil.getActiveMigrators(
@@ -144,8 +156,7 @@
// No need to trigger migration if no migrator is active.
if (activeMigrators.size() == 0) {
SetSchemaResponse setSchemaResponse =
- setSchemaNoMigrations(request, copySchemasVisibleToPackages,
- setSchemaStatsBuilder);
+ setSchemaNoMigrations(request, visibilityDocuments, setSchemaStatsBuilder);
if (setSchemaStatsBuilder != null) {
setSchemaStatsBuilder.setTotalLatencyMillis(
(int) (SystemClock.elapsedRealtime() - startMillis));
@@ -157,13 +168,11 @@
// 2. SetSchema with forceOverride=false, to retrieve the list of incompatible/deleted
// types.
long firstSetSchemaLatencyStartMillis = SystemClock.elapsedRealtime();
- SetSchemaResponse setSchemaResponse = mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
mPackageName,
mDatabaseName,
new ArrayList<>(request.getSchemas()),
- /*visibilityStore=*/ null,
- new ArrayList<>(request.getSchemasNotDisplayedBySystem()),
- copySchemasVisibleToPackages,
+ visibilityDocuments,
/*forceOverride=*/false,
request.getVersion(),
setSchemaStatsBuilder);
@@ -172,10 +181,8 @@
// If some aren't we must throw an error, rather than proceeding and deleting those
// types.
long queryAndTransformLatencyStartMillis = SystemClock.elapsedRealtime();
- if (!request.isForceOverride()) {
- SchemaMigrationUtil.checkDeletedAndIncompatibleAfterMigration(setSchemaResponse,
- activeMigrators.keySet());
- }
+ SchemaMigrationUtil.checkDeletedAndIncompatibleAfterMigration(
+ internalSetSchemaResponse, activeMigrators.keySet());
SchemaMigrationStats.Builder schemaMigrationStatsBuilder = null;
if (setSchemaStatsBuilder != null) {
@@ -191,20 +198,26 @@
// 5. SetSchema a second time with forceOverride=true if the first attempted failed
// due to backward incompatible changes.
long secondSetSchemaLatencyStartMillis = SystemClock.elapsedRealtime();
- if (!setSchemaResponse.getIncompatibleTypes().isEmpty()
- || !setSchemaResponse.getDeletedTypes().isEmpty()) {
- setSchemaResponse = mAppSearchImpl.setSchema(
+ if (!internalSetSchemaResponse.isSuccess()) {
+ internalSetSchemaResponse = mAppSearchImpl.setSchema(
mPackageName,
mDatabaseName,
new ArrayList<>(request.getSchemas()),
- /*visibilityStore=*/ null,
- new ArrayList<>(request.getSchemasNotDisplayedBySystem()),
- copySchemasVisibleToPackages,
+ visibilityDocuments,
/*forceOverride=*/ true,
request.getVersion(),
setSchemaStatsBuilder);
+ if (!internalSetSchemaResponse.isSuccess()) {
+ // Impossible case, we just set forceOverride to be true, we should never
+ // fail in incompatible changes. And all other cases should failed during
+ // the first call.
+ throw new AppSearchException(RESULT_INTERNAL_ERROR,
+ internalSetSchemaResponse.getErrorMessage());
+ }
}
- SetSchemaResponse.Builder responseBuilder = setSchemaResponse.toBuilder()
+ SetSchemaResponse.Builder responseBuilder = internalSetSchemaResponse
+ .getSetSchemaResponse()
+ .toBuilder()
.addMigratedTypes(activeMigrators.keySet());
mIsMutated = true;
@@ -214,6 +227,10 @@
migrationHelper.readAndPutDocuments(responseBuilder,
schemaMigrationStatsBuilder);
+ // Schedule a task to dispatch change notifications. See requirements for where the
+ // method is called documented in the method description.
+ dispatchChangeNotifications();
+
if (schemaMigrationStatsBuilder != null) {
long endMillis = SystemClock.elapsedRealtime();
schemaMigrationStatsBuilder
@@ -251,14 +268,15 @@
@Override
@NonNull
- public ListenableFuture<GetSchemaResponse> getSchema() {
+ public ListenableFuture<GetSchemaResponse> getSchemaAsync() {
Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
- return execute(() -> mAppSearchImpl.getSchema(mPackageName, mDatabaseName));
+ return execute(
+ () -> mAppSearchImpl.getSchema(mPackageName, mDatabaseName, mSelfCallerAccess));
}
@NonNull
@Override
- public ListenableFuture<Set<String>> getNamespaces() {
+ public ListenableFuture<Set<String>> getNamespacesAsync() {
Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
return execute(() -> {
List<String> namespaces = mAppSearchImpl.getNamespaces(mPackageName, mDatabaseName);
@@ -268,7 +286,7 @@
@Override
@NonNull
- public ListenableFuture<AppSearchBatchResult<String, Void>> put(
+ public ListenableFuture<AppSearchBatchResult<String, Void>> putAsync(
@NonNull PutDocumentsRequest request) {
Preconditions.checkNotNull(request);
Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
@@ -278,7 +296,12 @@
for (int i = 0; i < request.getGenericDocuments().size(); i++) {
GenericDocument document = request.getGenericDocuments().get(i);
try {
- mAppSearchImpl.putDocument(mPackageName, mDatabaseName, document, mLogger);
+ mAppSearchImpl.putDocument(
+ mPackageName,
+ mDatabaseName,
+ document,
+ /*sendChangeNotifications=*/ true,
+ mLogger);
resultBuilder.setSuccess(document.getId(), /*value=*/ null);
} catch (Throwable t) {
resultBuilder.setResult(document.getId(), throwableToFailedResult(t));
@@ -303,7 +326,7 @@
@Override
@NonNull
- public ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentId(
+ public ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentIdAsync(
@NonNull GetByDocumentIdRequest request) {
Preconditions.checkNotNull(request);
Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
@@ -344,9 +367,25 @@
mLogger);
}
+ @NonNull
+ @Override
+ public ListenableFuture<List<SearchSuggestionResult>> searchSuggestionAsync(
+ @NonNull String suggestionQueryExpression,
+ @NonNull SearchSuggestionSpec searchSuggestionSpec) {
+ Preconditions.checkNotNull(suggestionQueryExpression);
+ Preconditions.checkStringNotEmpty(suggestionQueryExpression);
+ Preconditions.checkNotNull(searchSuggestionSpec);
+ Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
+ return execute(() -> mAppSearchImpl.searchSuggestion(
+ mPackageName,
+ mDatabaseName,
+ suggestionQueryExpression,
+ searchSuggestionSpec));
+ }
+
@Override
@NonNull
- public ListenableFuture<Void> reportUsage(@NonNull ReportUsageRequest request) {
+ public ListenableFuture<Void> reportUsageAsync(@NonNull ReportUsageRequest request) {
Preconditions.checkNotNull(request);
Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
return execute(() -> {
@@ -364,7 +403,7 @@
@Override
@NonNull
- public ListenableFuture<AppSearchBatchResult<String, Void>> remove(
+ public ListenableFuture<AppSearchBatchResult<String, Void>> removeAsync(
@NonNull RemoveByDocumentIdRequest request) {
Preconditions.checkNotNull(request);
Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
@@ -403,7 +442,7 @@
@Override
@NonNull
- public ListenableFuture<Void> remove(
+ public ListenableFuture<Void> removeAsync(
@NonNull String queryExpression, @NonNull SearchSpec searchSpec) {
Preconditions.checkNotNull(queryExpression);
Preconditions.checkNotNull(searchSpec);
@@ -432,14 +471,14 @@
@Override
@NonNull
- public ListenableFuture<StorageInfo> getStorageInfo() {
+ public ListenableFuture<StorageInfo> getStorageInfoAsync() {
Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
return execute(() -> mAppSearchImpl.getStorageInfoForDatabase(mPackageName, mDatabaseName));
}
@NonNull
@Override
- public ListenableFuture<Void> requestFlush() {
+ public ListenableFuture<Void> requestFlushAsync() {
return execute(() -> {
mAppSearchImpl.persistToDisk(PersistType.Code.FULL);
return null;
@@ -472,31 +511,29 @@
/**
* Set schema to Icing for no-migration scenario.
*
- * <p>We only need one time {@link #setSchema} call for no-migration scenario by using the
+ * <p>We only need one time {@link #setSchemaAsync} call for no-migration scenario by using the
* forceoverride in the request.
*/
private SetSchemaResponse setSchemaNoMigrations(@NonNull SetSchemaRequest request,
- @NonNull Map<String, List<PackageIdentifier>> copySchemasVisibleToPackages,
+ @NonNull List<VisibilityDocument> visibilityDocuments,
SetSchemaStats.Builder setSchemaStatsBuilder)
throws AppSearchException {
- SetSchemaResponse setSchemaResponse = mAppSearchImpl.setSchema(
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
mPackageName,
mDatabaseName,
new ArrayList<>(request.getSchemas()),
- /*visibilityStore=*/ null,
- new ArrayList<>(request.getSchemasNotDisplayedBySystem()),
- copySchemasVisibleToPackages,
+ visibilityDocuments,
request.isForceOverride(),
request.getVersion(),
setSchemaStatsBuilder);
- if (!request.isForceOverride()) {
- // check both deleted types and incompatible types are empty. That's the only case we
- // swallowed in the AppSearchImpl#setSchema().
- SchemaMigrationUtil.checkDeletedAndIncompatible(setSchemaResponse.getDeletedTypes(),
- setSchemaResponse.getIncompatibleTypes());
+ if (!internalSetSchemaResponse.isSuccess()) {
+ // check is the set schema call failed because incompatible changes.
+ // That's the only case we swallowed in the AppSearchImpl#setSchema().
+ throw new AppSearchException(RESULT_INVALID_SCHEMA,
+ internalSetSchemaResponse.getErrorMessage());
}
mIsMutated = true;
- return setSchemaResponse;
+ return internalSetSchemaResponse.getSetSchemaResponse();
}
/**
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/UnlimitedLimitConfig.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/UnlimitedLimitConfig.java
index f1e99cb..b4f37fa 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/UnlimitedLimitConfig.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/UnlimitedLimitConfig.java
@@ -35,4 +35,9 @@
public int getMaxDocumentCount() {
return Integer.MAX_VALUE;
}
+
+ @Override
+ public int getMaxSuggestionCount() {
+ return Integer.MAX_VALUE;
+ }
}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverter.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverter.java
index af24c98..43c5263 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverter.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverter.java
@@ -17,7 +17,6 @@
package androidx.appsearch.localstorage.converter;
import static androidx.appsearch.localstorage.util.PrefixUtil.createPrefix;
-import static androidx.appsearch.localstorage.util.PrefixUtil.getDatabaseName;
import static androidx.appsearch.localstorage.util.PrefixUtil.getPackageName;
import static androidx.appsearch.localstorage.util.PrefixUtil.removePrefix;
@@ -28,7 +27,10 @@
import androidx.annotation.RestrictTo;
import androidx.appsearch.app.SearchSpec;
import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.localstorage.visibilitystore.CallerAccess;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityChecker;
import androidx.appsearch.localstorage.visibilitystore.VisibilityStore;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityUtil;
import androidx.collection.ArrayMap;
import androidx.collection.ArraySet;
import androidx.core.util.Preconditions;
@@ -54,16 +56,24 @@
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public final class SearchSpecToProtoConverter {
private static final String TAG = "AppSearchSearchSpecConv";
+ private final String mQueryExpression;
private final SearchSpec mSearchSpec;
private final Set<String> mPrefixes;
- /** Prefixed namespaces that the client is allowed to query over */
- private final Set<String> mTargetPrefixedNamespaceFilters = new ArraySet<>();
- /** Prefixed schemas that the client is allowed to query over */
- private final Set<String> mTargetPrefixedSchemaFilters = new ArraySet<>();
+ /**
+ * The intersected prefixed namespaces that are existing in AppSearch and also accessible to the
+ * client.
+ */
+ private final Set<String> mTargetPrefixedNamespaceFilters;
+ /**
+ * The intersected prefixed schema types that are existing in AppSearch and also accessible to
+ * the client.
+ */
+ private final Set<String> mTargetPrefixedSchemaFilters;
/**
* Creates a {@link SearchSpecToProtoConverter} for given {@link SearchSpec}.
*
+ * @param queryExpression Query String to search.
* @param searchSpec The spec we need to convert from.
* @param prefixes Set of database prefix which the caller want to access.
* @param namespaceMap The cached Map of {@code <Prefix, Set<PrefixedNamespace>>} stores
@@ -71,72 +81,28 @@
* @param schemaMap The cached Map of {@code <Prefix, Map<PrefixedSchemaType, schemaProto>>}
* stores all prefixed schema filters which are stored inAppSearch.
*/
- public SearchSpecToProtoConverter(@NonNull SearchSpec searchSpec,
+ public SearchSpecToProtoConverter(
+ @NonNull String queryExpression,
+ @NonNull SearchSpec searchSpec,
@NonNull Set<String> prefixes,
@NonNull Map<String, Set<String>> namespaceMap,
@NonNull Map<String, Map<String, SchemaTypeConfigProto>> schemaMap) {
+ mQueryExpression = Preconditions.checkNotNull(queryExpression);
mSearchSpec = Preconditions.checkNotNull(searchSpec);
mPrefixes = Preconditions.checkNotNull(prefixes);
Preconditions.checkNotNull(namespaceMap);
Preconditions.checkNotNull(schemaMap);
- generateTargetNamespaceFilters(namespaceMap);
+ mTargetPrefixedNamespaceFilters =
+ SearchSpecToProtoConverterUtil.generateTargetNamespaceFilters(
+ prefixes, namespaceMap, searchSpec.getFilterNamespaces());
+ // If the target namespace filter is empty, the user has nothing to search for. We can skip
+ // generate the target schema filter.
if (!mTargetPrefixedNamespaceFilters.isEmpty()) {
- // Skip generate the target schema filter if the target namespace filter is empty. We
- // have nothing to search anyway.
- generateTargetSchemaFilters(schemaMap);
- }
- }
-
- /**
- * Add prefix to the given namespace filters that user want to search over and find the
- * intersection set with those prefixed namespace candidates that are stored in AppSearch.
- *
- * @param namespaceMap The cached Map of {@code <Prefix, Set<PrefixedNamespace>>} stores
- * all prefixed namespace filters which are stored in AppSearch.
- */
- private void generateTargetNamespaceFilters(
- @NonNull Map<String, Set<String>> namespaceMap) {
- // Convert namespace filters to prefixed namespace filters
- for (String prefix : mPrefixes) {
- // Step1: find all prefixed namespace candidates that are stored in AppSearch.
- Set<String> prefixedNamespaceCandidates = namespaceMap.get(prefix);
- if (prefixedNamespaceCandidates == null) {
- // This is should never happen. All prefixes should be verified before reach
- // here.
- continue;
- }
- // Step2: get the intersection of user searching filters and those candidates which are
- // stored in AppSearch.
- getIntersectedFilters(prefix, prefixedNamespaceCandidates,
- mSearchSpec.getFilterNamespaces(), mTargetPrefixedNamespaceFilters);
- }
- }
-
- /**
- * Add prefix to the given schema filters that user want to search over and find the
- * intersection set with those prefixed schema candidates that are stored in AppSearch.
- *
- * @param schemaMap The cached Map of
- * <Prefix, Map<PrefixedSchemaType, schemaProto>>
- * stores all prefixed schema filters which are stored in
- * AppSearch.
- */
- private void generateTargetSchemaFilters(
- @NonNull Map<String, Map<String, SchemaTypeConfigProto>> schemaMap) {
- // Append prefix to input schema filters and get the intersection of existing schema filter.
- for (String prefix : mPrefixes) {
- // Step1: find all prefixed schema candidates that are stored in AppSearch.
- Map<String, SchemaTypeConfigProto> prefixedSchemaMap = schemaMap.get(prefix);
- if (prefixedSchemaMap == null) {
- // This is should never happen. All prefixes should be verified before reach
- // here.
- continue;
- }
- Set<String> prefixedSchemaCandidates = prefixedSchemaMap.keySet();
- // Step2: get the intersection of user searching filters and those candidates which are
- // stored in AppSearch.
- getIntersectedFilters(prefix, prefixedSchemaCandidates, mSearchSpec.getFilterSchemas(),
- mTargetPrefixedSchemaFilters);
+ mTargetPrefixedSchemaFilters =
+ SearchSpecToProtoConverterUtil.generateTargetSchemaFilters(
+ prefixes, schemaMap, searchSpec.getFilterSchemas());
+ } else {
+ mTargetPrefixedSchemaFilters = new ArraySet<>();
}
}
@@ -144,7 +110,7 @@
* @return whether this search's target filters are empty. If any target filter is empty, we
* should skip send request to Icing.
*/
- public boolean isNothingToSearch() {
+ public boolean hasNothingToSearch() {
return mTargetPrefixedNamespaceFilters.isEmpty() || mTargetPrefixedSchemaFilters.isEmpty();
}
@@ -152,55 +118,43 @@
* For each target schema, we will check visibility store is that accessible to the caller. And
* remove this schemas if it is not allowed for caller to query.
*
- * @param callerPackageName The package name of caller
- * @param visibilityStore The visibility store which holds all visibility settings.
- * If you pass null, all schemas that don't belong to the
- * caller package will be removed.
- * @param callerUid The uid of the caller.
- * @param callerHasSystemAccess Whether the caller has system access.
+ * @param callerAccess Visibility access info of the calling app
+ * @param visibilityStore The {@link VisibilityStore} that store all visibility
+ * information.
+ * @param visibilityChecker Optional visibility checker to check whether the caller
+ * could access target schemas. Pass {@code null} will
+ * reject access for all documents which doesn't belong
+ * to the calling package.
*/
- public void removeInaccessibleSchemaFilter(@NonNull String callerPackageName,
+ public void removeInaccessibleSchemaFilter(
+ @NonNull CallerAccess callerAccess,
@Nullable VisibilityStore visibilityStore,
- int callerUid,
- boolean callerHasSystemAccess) {
+ @Nullable VisibilityChecker visibilityChecker) {
Iterator<String> targetPrefixedSchemaFilterIterator =
mTargetPrefixedSchemaFilters.iterator();
while (targetPrefixedSchemaFilterIterator.hasNext()) {
String targetPrefixedSchemaFilter = targetPrefixedSchemaFilterIterator.next();
String packageName = getPackageName(targetPrefixedSchemaFilter);
- boolean allow;
- if (packageName.equals(callerPackageName)) {
- // Callers can always retrieve their own data
- allow = true;
- } else if (visibilityStore == null) {
- // If there's no visibility store, there's no extra access
- allow = false;
- } else {
- String databaseName = getDatabaseName(targetPrefixedSchemaFilter);
- allow = visibilityStore.isSchemaSearchableByCaller(packageName, databaseName,
- targetPrefixedSchemaFilter, callerUid, callerHasSystemAccess);
- }
- if (!allow) {
+ if (!VisibilityUtil.isSchemaSearchableByCaller(
+ callerAccess,
+ packageName,
+ targetPrefixedSchemaFilter,
+ visibilityStore,
+ visibilityChecker)) {
targetPrefixedSchemaFilterIterator.remove();
}
}
}
- /**
- * Extracts {@link SearchSpecProto} information from a {@link SearchSpec}.
- *
- * @param queryExpression Query String to search.
- */
+ /** Extracts {@link SearchSpecProto} information from a {@link SearchSpec}. */
@NonNull
- public SearchSpecProto toSearchSpecProto(
- @NonNull String queryExpression) {
- Preconditions.checkNotNull(queryExpression);
-
+ public SearchSpecProto toSearchSpecProto() {
// set query to SearchSpecProto and override schema and namespace filter by
- // targetPrefixedFilters which is
+ // targetPrefixedFilters which contains all existing and also accessible to the caller
+ // filters.
SearchSpecProto.Builder protoBuilder = SearchSpecProto.newBuilder()
- .setQuery(queryExpression)
+ .setQuery(mQueryExpression)
.addAllNamespaceFilters(mTargetPrefixedNamespaceFilters)
.addAllSchemaTypeFilters(mTargetPrefixedSchemaFilters);
@@ -229,7 +183,7 @@
ResultSpecProto.SnippetSpecProto.newBuilder()
.setNumToSnippet(mSearchSpec.getSnippetCount())
.setNumMatchesPerProperty(mSearchSpec.getSnippetCountPerProperty())
- .setMaxWindowBytes(mSearchSpec.getMaxSnippetSize()));
+ .setMaxWindowUtf32Length(mSearchSpec.getMaxSnippetSize()));
// Rewrites the typePropertyMasks that exist in {@code prefixes}.
int groupingType = mSearchSpec.getResultGroupingTypeFlags();
@@ -449,34 +403,4 @@
.addAllNamespaces(namespaces).setMaxResults(maxNumResults));
}
}
-
- /**
- * Find the intersection set of candidates existing in AppSearch and user specified filters.
- *
- * @param prefix The package and database's identifier.
- * @param prefixedCandidates The set contains all prefixed candidates which are existing
- * in a database.
- * @param inputFilters The set contains all desired but un-prefixed filters of user.
- * @param prefixedTargetFilters The output set contains all desired prefixed filters which
- * are existing in the database.
- */
- private static void getIntersectedFilters(
- @NonNull String prefix,
- @NonNull Set<String> prefixedCandidates,
- @NonNull List<String> inputFilters,
- @NonNull Set<String> prefixedTargetFilters) {
- if (inputFilters.isEmpty()) {
- // Client didn't specify certain schemas to search over, add all candidates.
- prefixedTargetFilters.addAll(prefixedCandidates);
- } else {
- // Client specified some filters to search over, check and only add those are
- // existing in the database.
- for (int i = 0; i < inputFilters.size(); i++) {
- String prefixedTargetFilter = prefix + inputFilters.get(i);
- if (prefixedCandidates.contains(prefixedTargetFilter)) {
- prefixedTargetFilters.add(prefixedTargetFilter);
- }
- }
- }
- }
}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterUtil.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterUtil.java
new file mode 100644
index 0000000..1a90bb8
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSpecToProtoConverterUtil.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.localstorage.converter;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.collection.ArraySet;
+
+import com.google.android.icing.proto.SchemaTypeConfigProto;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Utilities for working with {@link SearchSpecToProtoConverter} and
+ * {@link SearchSuggestionSpecToProtoConverter}.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class SearchSpecToProtoConverterUtil {
+ private SearchSpecToProtoConverterUtil() {}
+
+ /**
+ * Add prefix to the given namespace filters that user want to search over and find the
+ * intersection set with those prefixed namespace candidates that are stored in AppSearch.
+ *
+ * @param prefixes Set of database prefix which the caller want to access.
+ * @param namespaceMap The cached Map of {@code <Prefix, Set<PrefixedNamespace>>}
+ * stores all prefixed namespace filters which are stored in
+ * AppSearch.
+ * @param inputNamespaceFilters The set contains all desired but un-prefixed namespace filters
+ * of user. If the inputNamespaceFilters is empty, all existing
+ * prefixedCandidates will be added to the prefixedTargetFilters.
+ */
+ static Set<String> generateTargetNamespaceFilters(
+ @NonNull Set<String> prefixes,
+ @NonNull Map<String, Set<String>> namespaceMap,
+ @NonNull List<String> inputNamespaceFilters) {
+ // Convert namespace filters to prefixed namespace filters
+ Set<String> targetPrefixedNamespaceFilters = new ArraySet<>();
+ for (String prefix : prefixes) {
+ // Step1: find all prefixed namespace candidates that are stored in AppSearch.
+ Set<String> prefixedNamespaceCandidates = namespaceMap.get(prefix);
+ if (prefixedNamespaceCandidates == null) {
+ // This is should never happen. All prefixes should be verified before reach
+ // here.
+ continue;
+ }
+ // Step2: get the intersection of user searching filters and those candidates which are
+ // stored in AppSearch.
+ addIntersectedFilters(prefix, prefixedNamespaceCandidates,
+ inputNamespaceFilters, targetPrefixedNamespaceFilters);
+ }
+ return targetPrefixedNamespaceFilters;
+ }
+
+ /**
+ * Add prefix to the given schema filters that user want to search over and find the
+ * intersection set with those prefixed schema candidates that are stored in AppSearch.
+ *
+ * @param prefixes Set of database prefix which the caller want to access.
+ * @param schemaMap The cached Map of
+ * {@code <Prefix, Map<PrefixedSchemaType, schemaProto>>}
+ * stores all prefixed schema filters which are stored in
+ * AppSearch.
+ * @param inputSchemaFilters The set contains all desired but un-prefixed namespace filters
+ * of user. If the inputSchemaFilters is empty, all existing
+ * prefixedCandidates will be added to the prefixedTargetFilters.
+ */
+ static Set<String> generateTargetSchemaFilters(
+ @NonNull Set<String> prefixes,
+ @NonNull Map<String, Map<String, SchemaTypeConfigProto>> schemaMap,
+ @NonNull List<String> inputSchemaFilters) {
+ Set<String> targetPrefixedSchemaFilters = new ArraySet<>();
+ // Append prefix to input schema filters and get the intersection of existing schema filter.
+ for (String prefix : prefixes) {
+ // Step1: find all prefixed schema candidates that are stored in AppSearch.
+ Map<String, SchemaTypeConfigProto> prefixedSchemaMap = schemaMap.get(prefix);
+ if (prefixedSchemaMap == null) {
+ // This is should never happen. All prefixes should be verified before reach
+ // here.
+ continue;
+ }
+ Set<String> prefixedSchemaCandidates = prefixedSchemaMap.keySet();
+ // Step2: get the intersection of user searching filters and those candidates which are
+ // stored in AppSearch.
+ addIntersectedFilters(prefix, prefixedSchemaCandidates, inputSchemaFilters,
+ targetPrefixedSchemaFilters);
+ }
+ return targetPrefixedSchemaFilters;
+ }
+
+ /**
+ * Find the intersection set of candidates existing in AppSearch and user specified filters.
+ *
+ * @param prefix The package and database's identifier.
+ * @param prefixedCandidates The set contains all prefixed candidates which are existing
+ * in a database.
+ * @param inputFilters The set contains all desired but un-prefixed filters of user.
+ * If the inputFilters is empty, all prefixedCandidates will be
+ * added to the prefixedTargetFilters.
+ * @param prefixedTargetFilters The output set contains all desired prefixed filters which
+ * are existing in the database.
+ */
+ private static void addIntersectedFilters(
+ @NonNull String prefix,
+ @NonNull Set<String> prefixedCandidates,
+ @NonNull List<String> inputFilters,
+ @NonNull Set<String> prefixedTargetFilters) {
+ if (inputFilters.isEmpty()) {
+ // Client didn't specify certain schemas to search over, add all candidates.
+ prefixedTargetFilters.addAll(prefixedCandidates);
+ } else {
+ // Client specified some filters to search over, check and only add those are
+ // existing in the database.
+ for (int i = 0; i < inputFilters.size(); i++) {
+ String prefixedTargetFilter = prefix + inputFilters.get(i);
+ if (prefixedCandidates.contains(prefixedTargetFilter)) {
+ prefixedTargetFilters.add(prefixedTargetFilter);
+ }
+ }
+ }
+ }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSuggestionSpecToProtoConverter.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSuggestionSpecToProtoConverter.java
new file mode 100644
index 0000000..e3f8b92
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/converter/SearchSuggestionSpecToProtoConverter.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.localstorage.converter;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.appsearch.app.SearchSuggestionSpec;
+import androidx.core.util.Preconditions;
+
+import com.google.android.icing.proto.SuggestionSpecProto;
+import com.google.android.icing.proto.TermMatchType;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Translates a {@link SearchSuggestionSpec} into icing search protos.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public final class SearchSuggestionSpecToProtoConverter {
+ private final String mSuggestionQueryExpression;
+ private final SearchSuggestionSpec mSearchSuggestionSpec;
+ /**
+ * The intersected prefixed namespaces that are existing in AppSearch and also accessible to the
+ * client.
+ */
+ private final Set<String> mTargetPrefixedNamespaceFilters;
+
+ /**
+ * Creates a {@link SearchSuggestionSpecToProtoConverter} for given
+ * {@link SearchSuggestionSpec}.
+ *
+ * @param suggestionQueryExpression The non-empty query expression used to be completed.
+ * @param searchSuggestionSpec The spec we need to convert from.
+ * @param prefixes Set of database prefix which the caller want to access.
+ * @param namespaceMap The cached Map of {@code <Prefix, Set<PrefixedNamespace>>}
+ * stores all prefixed namespace filters which are stored in
+ * AppSearch.
+ */
+ public SearchSuggestionSpecToProtoConverter(
+ @NonNull String suggestionQueryExpression,
+ @NonNull SearchSuggestionSpec searchSuggestionSpec,
+ @NonNull Set<String> prefixes,
+ @NonNull Map<String, Set<String>> namespaceMap) {
+ mSuggestionQueryExpression = Preconditions.checkNotNull(suggestionQueryExpression);
+ mSearchSuggestionSpec = Preconditions.checkNotNull(searchSuggestionSpec);
+ Preconditions.checkNotNull(prefixes);
+ Preconditions.checkNotNull(namespaceMap);
+ mTargetPrefixedNamespaceFilters =
+ SearchSpecToProtoConverterUtil.generateTargetNamespaceFilters(
+ prefixes, namespaceMap, searchSuggestionSpec.getFilterNamespaces());
+ }
+
+ /**
+ * @return whether this search's target filters are empty. If any target filter is empty, we
+ * should skip send request to Icing.
+ */
+ public boolean hasNothingToSearch() {
+ return mTargetPrefixedNamespaceFilters.isEmpty();
+ }
+
+ /**
+ * Extracts {@link SuggestionSpecProto} information from a {@link SearchSuggestionSpec}.
+ *
+ */
+ @NonNull
+ public SuggestionSpecProto toSearchSuggestionSpecProto() {
+ // Set query suggestion prefix to the SearchSuggestionProto and override schema and
+ // namespace filter by targetPrefixedFilters which contains all existing and also
+ // accessible to the caller filters.
+ SuggestionSpecProto.Builder protoBuilder = SuggestionSpecProto.newBuilder()
+ .setPrefix(mSuggestionQueryExpression)
+ .addAllNamespaceFilters(mTargetPrefixedNamespaceFilters)
+ .setNumToReturn(mSearchSuggestionSpec.getMaximumResultCount());
+
+ // TODO(b/227356108) expose setTermMatch in SearchSuggestionSpec.
+ protoBuilder.setScoringSpec(SuggestionSpecProto.SuggestionScoringSpecProto.newBuilder()
+ .setScoringMatchType(TermMatchType.Code.EXACT_ONLY)
+ .build());
+
+ return protoBuilder.build();
+ }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/CallStats.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/CallStats.java
index e3abf90..101ef1f 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/CallStats.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/CallStats.java
@@ -56,6 +56,7 @@
CALL_TYPE_GLOBAL_SEARCH,
CALL_TYPE_REMOVE_DOCUMENTS_BY_SEARCH,
CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH,
+ CALL_TYPE_GLOBAL_GET_DOCUMENT_BY_ID,
})
@Retention(RetentionPolicy.SOURCE)
public @interface CallType {
@@ -76,6 +77,7 @@
public static final int CALL_TYPE_GLOBAL_SEARCH = 12;
public static final int CALL_TYPE_REMOVE_DOCUMENTS_BY_SEARCH = 13;
public static final int CALL_TYPE_REMOVE_DOCUMENT_BY_SEARCH = 14;
+ public static final int CALL_TYPE_GLOBAL_GET_DOCUMENT_BY_ID = 15;
@Nullable
private final String mPackageName;
@@ -145,11 +147,11 @@
* Returns number of operations succeeded.
*
* <p>For example, for
- * {@link androidx.appsearch.app.AppSearchSession#put}, it is the total number of individual
+ * {@link androidx.appsearch.app.AppSearchSession#putAsync}, it is the total number of individual
* successful put operations. In this case, how many documents are successfully indexed.
*
* <p>For non-batch calls such as
- * {@link androidx.appsearch.app.AppSearchSession#setSchema}, the sum of
+ * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync}, the sum of
* {@link CallStats#getNumOperationsSucceeded()} and
* {@link CallStats#getNumOperationsFailed()} is always 1 since there is only one
* operation.
@@ -162,11 +164,12 @@
* Returns number of operations failed.
*
* <p>For example, for
- * {@link androidx.appsearch.app.AppSearchSession#put}, it is the total number of individual
+ * {@link androidx.appsearch.app.AppSearchSession#putAsync}, it is the total number of individual
* failed put operations. In this case, how many documents are failed to be indexed.
*
- * <p>For non-batch calls such as {@link androidx.appsearch.app.AppSearchSession#setSchema},
- * the sum of {@link CallStats#getNumOperationsSucceeded()} and
+ * <p>For non-batch calls such as
+ * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync}, the sum of
+ * {@link CallStats#getNumOperationsSucceeded()} and
* {@link CallStats#getNumOperationsFailed()} is always 1 since there is only one
* operation.
*/
@@ -235,12 +238,12 @@
* Sets number of operations succeeded.
*
* <p>For example, for
- * {@link androidx.appsearch.app.AppSearchSession#put}, it is the total number of
+ * {@link androidx.appsearch.app.AppSearchSession#putAsync}, it is the total number of
* individual successful put operations. In this case, how many documents are
* successfully indexed.
*
* <p>For non-batch calls such as
- * {@link androidx.appsearch.app.AppSearchSession#setSchema}, the sum of
+ * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync}, the sum of
* {@link CallStats#getNumOperationsSucceeded()} and
* {@link CallStats#getNumOperationsFailed()} is always 1 since there is only one
* operation.
@@ -254,12 +257,12 @@
/**
* Sets number of operations failed.
*
- * <p>For example, for {@link androidx.appsearch.app.AppSearchSession#put}, it is the
+ * <p>For example, for {@link androidx.appsearch.app.AppSearchSession#putAsync}, it is the
* total number of individual failed put operations. In this case, how many documents
* are failed to be indexed.
*
* <p>For non-batch calls such as
- * {@link androidx.appsearch.app.AppSearchSession#setSchema}, the sum of
+ * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync}, the sum of
* {@link CallStats#getNumOperationsSucceeded()} and
* {@link CallStats#getNumOperationsFailed()} is always 1 since there is only one
* operation.
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/PutDocumentStats.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/PutDocumentStats.java
index c8bc687..e9a25fd 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/PutDocumentStats.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/PutDocumentStats.java
@@ -23,7 +23,7 @@
/**
* A class for holding detailed stats to log for each individual document put by a
- * {@link androidx.appsearch.app.AppSearchSession#put} call.
+ * {@link androidx.appsearch.app.AppSearchSession#putAsync} call.
*
* @hide
*/
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/RemoveStats.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/RemoveStats.java
index 3a63aa0..7eb4820 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/RemoveStats.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/stats/RemoveStats.java
@@ -29,8 +29,8 @@
/**
* Class holds detailed stats for
- * {@link androidx.appsearch.app.AppSearchSession#remove(RemoveByDocumentIdRequest)} and
- * {@link androidx.appsearch.app.AppSearchSession#remove(String, SearchSpec)}
+ * {@link androidx.appsearch.app.AppSearchSession#removeAsync(RemoveByDocumentIdRequest)} and
+ * {@link androidx.appsearch.app.AppSearchSession#removeAsync(String, SearchSpec)}
*
* @hide
*/
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/util/PrefixUtil.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/util/PrefixUtil.java
index 12d4587..cf0bde3 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/util/PrefixUtil.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/util/PrefixUtil.java
@@ -25,10 +25,13 @@
import androidx.appsearch.exceptions.AppSearchException;
import com.google.android.icing.proto.DocumentProto;
+import com.google.android.icing.proto.PropertyConfigProto;
import com.google.android.icing.proto.PropertyProto;
+import com.google.android.icing.proto.SchemaTypeConfigProto;
/**
* Provides utility functions for working with package + database prefixes.
+ *
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -41,7 +44,8 @@
@VisibleForTesting
public static final char PACKAGE_DELIMITER = '$';
- private PrefixUtil() {}
+ private PrefixUtil() {
+ }
/**
* Creates prefix string for given package name and database name.
@@ -50,6 +54,7 @@
public static String createPrefix(@NonNull String packageName, @NonNull String databaseName) {
return packageName + PACKAGE_DELIMITER + databaseName + DATABASE_DELIMITER;
}
+
/**
* Creates prefix string for given package name.
*/
@@ -231,4 +236,37 @@
return schemaPrefix;
}
+
+ /**
+ * Removes any prefixes from types mentioned anywhere in {@code typeConfigBuilder}.
+ *
+ * @param typeConfigBuilder The schema type to mutate
+ * @return Prefix name that was removed from the schema type.
+ * @throws AppSearchException if there are unexpected database prefixing errors.
+ */
+ @NonNull
+ public static String removePrefixesFromSchemaType(
+ @NonNull SchemaTypeConfigProto.Builder typeConfigBuilder)
+ throws AppSearchException {
+ String typePrefix = PrefixUtil.getPrefix(typeConfigBuilder.getSchemaType());
+ // Rewrite SchemaProto.types.schema_type
+ String newSchemaType =
+ typeConfigBuilder.getSchemaType().substring(typePrefix.length());
+ typeConfigBuilder.setSchemaType(newSchemaType);
+
+ // Rewrite SchemaProto.types.properties.schema_type
+ for (int propertyIdx = 0;
+ propertyIdx < typeConfigBuilder.getPropertiesCount();
+ propertyIdx++) {
+ if (!typeConfigBuilder.getProperties(propertyIdx).getSchemaType().isEmpty()) {
+ PropertyConfigProto.Builder propertyConfigBuilder =
+ typeConfigBuilder.getProperties(propertyIdx).toBuilder();
+ String newPropertySchemaType = propertyConfigBuilder.getSchemaType()
+ .substring(typePrefix.length());
+ propertyConfigBuilder.setSchemaType(newPropertySchemaType);
+ typeConfigBuilder.setProperties(propertyIdx, propertyConfigBuilder);
+ }
+ }
+ return typePrefix;
+ }
}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/CallerAccess.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/CallerAccess.java
new file mode 100644
index 0000000..1a47109
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/CallerAccess.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.localstorage.visibilitystore;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.core.util.Preconditions;
+
+/**
+ * Contains attributes of an API caller relevant to its access via visibility store.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class CallerAccess {
+ private final String mCallingPackageName;
+
+ /**
+ * Constructs a new {@link CallerAccess}.
+ *
+ * @param callingPackageName The name of the package which wants to access data.
+ */
+ public CallerAccess(@NonNull String callingPackageName) {
+ mCallingPackageName = Preconditions.checkNotNull(callingPackageName);
+ }
+
+ /** Returns the name of the package which wants to access data. */
+ @NonNull
+ public String getCallingPackageName() {
+ return mCallingPackageName;
+ }
+
+ @Override
+ public boolean equals(@Nullable Object o) {
+ if (this == o) return true;
+ if (!(o instanceof CallerAccess)) return false;
+ CallerAccess that = (CallerAccess) o;
+ return mCallingPackageName.equals(that.mCallingPackageName);
+ }
+
+ @Override
+ public int hashCode() {
+ return mCallingPackageName.hashCode();
+ }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityChecker.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityChecker.java
new file mode 100644
index 0000000..7801562
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityChecker.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package androidx.appsearch.localstorage.visibilitystore;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+
+/**
+ * An interface for classes that validate document visibility data.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public interface VisibilityChecker {
+ /**
+ * Checks whether the given caller has access to the given prefixed schemas.
+ *
+ * @param callerAccess Visibility access info of the calling app
+ * @param packageName Package of app that owns the schemas.
+ * @param prefixedSchema The prefixed schema type that the caller want to access.
+ * @param visibilityStore The {@link VisibilityStore} that store all visibility information.
+ */
+ boolean isSchemaSearchableByCaller(
+ @NonNull CallerAccess callerAccess,
+ @NonNull String packageName,
+ @NonNull String prefixedSchema,
+ @NonNull VisibilityStore visibilityStore);
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityDocumentV1.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityDocumentV1.java
new file mode 100644
index 0000000..537fd81
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityDocumentV1.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package androidx.appsearch.localstorage.visibilitystore;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.collection.ArraySet;
+import androidx.core.util.Preconditions;
+
+import java.util.Set;
+
+/**
+ * Holds the visibility settings in version 1 that apply to a schema type.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+class VisibilityDocumentV1 extends GenericDocument {
+ /**
+ * The Schema type for documents that hold AppSearch's metadata, e.g. visibility settings.
+ */
+ static final String SCHEMA_TYPE = "VisibilityType";
+ /** Namespace of documents that contain visibility settings */
+ static final String NAMESPACE = "";
+
+ /**
+ * Property that holds the list of platform-hidden schemas, as part of the visibility settings.
+ */
+ private static final String NOT_DISPLAYED_BY_SYSTEM_PROPERTY = "notPlatformSurfaceable";
+
+ /** Property that holds the package name that can access a schema. */
+ private static final String PACKAGE_NAME_PROPERTY = "packageName";
+
+ /** Property that holds the SHA 256 certificate of the app that can access a schema. */
+ private static final String SHA_256_CERT_PROPERTY = "sha256Cert";
+
+ /** Property that holds the role can access a schema. */
+ private static final String ROLE_PROPERTY = "role";
+
+ /** Property that holds the required permissions to access the schema. */
+ private static final String PERMISSION_PROPERTY = "permission";
+
+ /**
+ * Schema for the VisibilityStore's documents.
+ */
+ static final AppSearchSchema
+ SCHEMA = new AppSearchSchema.Builder(SCHEMA_TYPE)
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ NOT_DISPLAYED_BY_SYSTEM_PROPERTY)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(PACKAGE_NAME_PROPERTY)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .addProperty(new AppSearchSchema.BytesPropertyConfig.Builder(SHA_256_CERT_PROPERTY)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .addProperty(new AppSearchSchema.LongPropertyConfig.Builder(ROLE_PROPERTY)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .addProperty(new AppSearchSchema.LongPropertyConfig.Builder(PERMISSION_PROPERTY)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .build();
+
+ VisibilityDocumentV1(@NonNull GenericDocument genericDocument) {
+ super(genericDocument);
+ }
+
+ /** Returns whether this schema is visible to the system. */
+ boolean isNotDisplayedBySystem() {
+ return getPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY);
+ }
+
+ /**
+ * Returns a package name array which could access this schema. Use {@link #getSha256Certs()}
+ * to get package's sha 256 certs. The same index of package names array and sha256Certs array
+ * represents same package.
+ */
+ @NonNull
+ String[] getPackageNames() {
+ return getPropertyStringArray(PACKAGE_NAME_PROPERTY);
+ }
+
+ /**
+ * Returns a package sha256Certs array which could access this schema. Use
+ * {@link #getPackageNames()} to get package's name. The same index of package names array
+ * and sha256Certs array represents same package.
+ */
+ @NonNull
+ byte[][] getSha256Certs() {
+ return getPropertyBytesArray(SHA_256_CERT_PROPERTY);
+ }
+
+ /**
+ * Returns an array of Android Roles that have access to the schema this
+ * {@link VisibilityDocumentV1} represents.
+ */
+ @Nullable
+ Set<Integer> getVisibleToRoles() {
+ return toInts(getPropertyLongArray(ROLE_PROPERTY));
+ }
+
+ /**
+ * Returns an array of Android Permissions that caller mush hold to access the schema
+ * this {@link VisibilityDocumentV1} represents.
+ */
+ @Nullable
+ Set<Integer> getVisibleToPermissions() {
+ return toInts(getPropertyLongArray(PERMISSION_PROPERTY));
+ }
+
+ /** Builder for {@link VisibilityDocumentV1}. */
+ static class Builder extends GenericDocument.Builder<Builder> {
+ private final Set<PackageIdentifier> mPackageIdentifiers = new ArraySet<>();
+
+ /**
+ * Creates a {@link Builder} for a {@link VisibilityDocumentV1}.
+ *
+ * @param id The SchemaType of the {@link AppSearchSchema} that this
+ * {@link VisibilityDocumentV1} represents. The package and database prefix will
+ * be added in server side. We are using prefixed schema type to be the final
+ * id of this {@link VisibilityDocumentV1}.
+ */
+ Builder(@NonNull String id) {
+ super(NAMESPACE, id, SCHEMA_TYPE);
+ }
+
+ /** Sets whether this schema has opted out of platform surfacing. */
+ @NonNull
+ Builder setNotDisplayedBySystem(boolean notDisplayedBySystem) {
+ return setPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY,
+ notDisplayedBySystem);
+ }
+
+ /** Add {@link PackageIdentifier} of packages which has access to this schema. */
+ @NonNull
+ Builder addVisibleToPackages(@NonNull Set<PackageIdentifier> packageIdentifiers) {
+ Preconditions.checkNotNull(packageIdentifiers);
+ mPackageIdentifiers.addAll(packageIdentifiers);
+ return this;
+ }
+
+ /** Add {@link PackageIdentifier} of packages which has access to this schema. */
+ @NonNull
+ Builder addVisibleToPackage(@NonNull PackageIdentifier packageIdentifier) {
+ Preconditions.checkNotNull(packageIdentifier);
+ mPackageIdentifiers.add(packageIdentifier);
+ return this;
+ }
+
+ /** Add a set of Android role that has access to the schema this
+ * {@link VisibilityDocumentV1} represents. */
+ @NonNull
+ Builder setVisibleToRoles(@NonNull Set<Integer> visibleToRoles) {
+ Preconditions.checkNotNull(visibleToRoles);
+ setPropertyLong(ROLE_PROPERTY, toLongs(visibleToRoles));
+ return this;
+ }
+
+ /** Add a set of Android role that has access to the schema this
+ * {@link VisibilityDocumentV1} represents. */
+ @NonNull
+ Builder setVisibleToPermissions(@NonNull Set<Integer> visibleToPermissions) {
+ Preconditions.checkNotNull(visibleToPermissions);
+ setPropertyLong(PERMISSION_PROPERTY, toLongs(visibleToPermissions));
+ return this;
+ }
+
+ /** Build a {@link VisibilityDocumentV1} */
+ @Override
+ @NonNull
+ public VisibilityDocumentV1 build() {
+ String[] packageNames = new String[mPackageIdentifiers.size()];
+ byte[][] sha256Certs = new byte[mPackageIdentifiers.size()][32];
+ int i = 0;
+ for (PackageIdentifier packageIdentifier : mPackageIdentifiers) {
+ packageNames[i] = packageIdentifier.getPackageName();
+ sha256Certs[i] = packageIdentifier.getSha256Certificate();
+ ++i;
+ }
+ setPropertyString(PACKAGE_NAME_PROPERTY, packageNames);
+ setPropertyBytes(SHA_256_CERT_PROPERTY, sha256Certs);
+ return new VisibilityDocumentV1(super.build());
+ }
+ }
+
+ @NonNull
+ static long[] toLongs(@NonNull Set<Integer> properties) {
+ long[] outputs = new long[properties.size()];
+ int i = 0;
+ for (int property : properties) {
+ outputs[i++] = property;
+ }
+ return outputs;
+ }
+
+ @Nullable
+ private static Set<Integer> toInts(@Nullable long[] properties) {
+ if (properties == null) {
+ return null;
+ }
+ Set<Integer> outputs = new ArraySet<>(properties.length);
+ for (long property : properties) {
+ outputs.add((int) property);
+ }
+ return outputs;
+ }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java
index d3d754e..957f1be 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStore.java
@@ -15,60 +15,268 @@
*/
package androidx.appsearch.localstorage.visibilitystore;
-import androidx.annotation.NonNull;
-import androidx.annotation.RestrictTo;
-import androidx.annotation.VisibleForTesting;
-import androidx.appsearch.app.PackageIdentifier;
-import androidx.appsearch.exceptions.AppSearchException;
+import static androidx.appsearch.app.AppSearchResult.RESULT_NOT_FOUND;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.appsearch.app.AppSearchResult;
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.InternalSetSchemaResponse;
+import androidx.appsearch.app.VisibilityDocument;
+import androidx.appsearch.app.VisibilityPermissionDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.collection.ArrayMap;
+import androidx.core.util.Preconditions;
+
+import com.google.android.icing.proto.PersistType;
+
+import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
- * An interface for classes that store and validate document visibility data.
+ * Stores all visibility settings for all databases that AppSearchImpl knows about.
+ * Persists the visibility settings and reloads them on initialization.
+ *
+ * <p>The VisibilityStore creates a {@link VisibilityDocument} for each schema. This document holds
+ * the visibility settings that apply to that schema. The VisibilityStore also creates a
+ * schema for these documents and has its own package and database so that its data doesn't
+ * interfere with any clients' data. It persists the document and schema through AppSearchImpl.
+ *
+ * <p>These visibility settings won't be used in AppSearch Jetpack, we only store them for clients
+ * to look up.
*
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public interface VisibilityStore {
+public class VisibilityStore {
+ private static final String TAG = "AppSearchVisibilityStor";
/**
* These cannot have any of the special characters used by AppSearchImpl (e.g. {@code
* AppSearchImpl#PACKAGE_DELIMITER} or {@code AppSearchImpl#DATABASE_DELIMITER}.
*/
- String PACKAGE_NAME = "VS#Pkg";
+ public static final String VISIBILITY_PACKAGE_NAME = "VS#Pkg";
- @VisibleForTesting
- String DATABASE_NAME = "VS#Db";
+ public static final String VISIBILITY_DATABASE_NAME = "VS#Db";
/**
- * Sets visibility settings for the given database. Any previous visibility settings will be
- * overwritten.
+ * Map of PrefixedSchemaType and VisibilityDocument stores visibility information for each
+ * schema type.
+ */
+ private final Map<String, VisibilityDocument> mVisibilityDocumentMap = new ArrayMap<>();
+
+ private final AppSearchImpl mAppSearchImpl;
+
+ public VisibilityStore(@NonNull AppSearchImpl appSearchImpl)
+ throws AppSearchException {
+ mAppSearchImpl = Preconditions.checkNotNull(appSearchImpl);
+
+ GetSchemaResponse getSchemaResponse = mAppSearchImpl.getSchema(
+ VISIBILITY_PACKAGE_NAME,
+ VISIBILITY_DATABASE_NAME,
+ new CallerAccess(/*callingPackageName=*/VISIBILITY_PACKAGE_NAME));
+ List<VisibilityDocumentV1> visibilityDocumentsV1s = null;
+ switch (getSchemaResponse.getVersion()) {
+ case VisibilityDocument.SCHEMA_VERSION_DOC_PER_PACKAGE:
+ // TODO (b/202194495) add VisibilityDocument in version 0 back instead of using
+ // GenericDocument.
+ List<GenericDocument> visibilityDocumentsV0s =
+ VisibilityStoreMigrationHelperFromV0.getVisibilityDocumentsInVersion0(
+ getSchemaResponse, mAppSearchImpl);
+ visibilityDocumentsV1s = VisibilityStoreMigrationHelperFromV0
+ .toVisibilityDocumentV1(visibilityDocumentsV0s);
+ // fall through
+ case VisibilityDocument.SCHEMA_VERSION_DOC_PER_SCHEMA:
+ if (visibilityDocumentsV1s == null) {
+ // We need to read VisibilityDocument in Version 1 from AppSearch instead of
+ // taking from the above step.
+ visibilityDocumentsV1s =
+ VisibilityStoreMigrationHelperFromV1.getVisibilityDocumentsInVersion1(
+ mAppSearchImpl);
+ }
+ setLatestSchemaAndDocuments(VisibilityStoreMigrationHelperFromV1
+ .toVisibilityDocumentsV2(visibilityDocumentsV1s));
+ break;
+ case VisibilityDocument.SCHEMA_VERSION_LATEST:
+ Set<AppSearchSchema> existingVisibilitySchema = getSchemaResponse.getSchemas();
+ if (existingVisibilitySchema.contains(VisibilityDocument.SCHEMA)
+ && existingVisibilitySchema.contains(VisibilityPermissionDocument.SCHEMA)) {
+ // The latest Visibility schema is in AppSearch, we must find our schema type.
+ // Extract all stored Visibility Document into mVisibilityDocumentMap.
+ loadVisibilityDocumentMap();
+ } else {
+ // We must have a broken schema. Reset it to the latest version.
+ // Do NOT set forceOverride to be true here, see comment below.
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ VISIBILITY_PACKAGE_NAME,
+ VISIBILITY_DATABASE_NAME,
+ Arrays.asList(VisibilityDocument.SCHEMA,
+ VisibilityPermissionDocument.SCHEMA),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ false,
+ /*version=*/ VisibilityDocument.SCHEMA_VERSION_LATEST,
+ /*setSchemaStatsBuilder=*/ null);
+ if (!internalSetSchemaResponse.isSuccess()) {
+ // If you hit problem here it means you made a incompatible change in
+ // Visibility Schema without update the version number. You should bump
+ // the version number and create a VisibilityStoreMigrationHelper which
+ // can analyse the different between the old version and the new version
+ // to migration user's visibility settings.
+ throw new AppSearchException(AppSearchResult.RESULT_INTERNAL_ERROR,
+ "Fail to set the latest visibility schema to AppSearch. "
+ + "You may need to update the visibility schema version "
+ + "number.");
+ }
+ }
+ break;
+ default:
+ // We must did something wrong.
+ throw new AppSearchException(AppSearchResult.RESULT_INTERNAL_ERROR,
+ "Found unsupported visibility version: " + getSchemaResponse.getVersion());
+ }
+ }
+
+ /**
+ * Sets visibility settings for the given {@link VisibilityDocument}s. Any previous
+ * {@link VisibilityDocument}s with same prefixed schema type will be overwritten.
*
- * @param packageName Package of app that owns the schemas.
- * @param databaseName Database that owns the schemas.
- * @param schemasNotDisplayedBySystem Set of prefixed schemas that should be hidden from
- * platform surfaces.
- * @param schemasVisibleToPackages Map of prefixed schemas to a list of package identifiers that
- * have access to the schema.
+ * @param prefixedVisibilityDocuments List of prefixed {@link VisibilityDocument} which
+ * contains schema type's visibility information.
* @throws AppSearchException on AppSearchImpl error.
*/
- void setVisibility(
- @NonNull String packageName,
- @NonNull String databaseName,
- @NonNull Set<String> schemasNotDisplayedBySystem,
- @NonNull Map<String, List<PackageIdentifier>> schemasVisibleToPackages)
- throws AppSearchException;
+ public void setVisibility(@NonNull List<VisibilityDocument> prefixedVisibilityDocuments)
+ throws AppSearchException {
+ Preconditions.checkNotNull(prefixedVisibilityDocuments);
+ // Save new setting.
+ for (int i = 0; i < prefixedVisibilityDocuments.size(); i++) {
+ // put VisibilityDocument to AppSearchImpl and mVisibilityDocumentMap. If there is a
+ // VisibilityDocument with same prefixed schema exists, it will be replaced by new
+ // VisibilityDocument in both AppSearch and memory look up map.
+ VisibilityDocument prefixedVisibilityDocument = prefixedVisibilityDocuments.get(i);
+ mAppSearchImpl.putDocument(
+ VISIBILITY_PACKAGE_NAME,
+ VISIBILITY_DATABASE_NAME,
+ prefixedVisibilityDocument,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ mVisibilityDocumentMap.put(prefixedVisibilityDocument.getId(),
+ prefixedVisibilityDocument);
+ }
+ // Now that the visibility document has been written. Persist the newly written data.
+ mAppSearchImpl.persistToDisk(PersistType.Code.LITE);
+ }
/**
- * Checks whether the given package has access to system-surfaceable schemas.
- *
- * @param callerUid UID of the app that wants to see the data.
+ * Remove the visibility setting for the given prefixed schema type from both AppSearch and
+ * memory look up map.
*/
- boolean isSchemaSearchableByCaller(
- @NonNull String packageName,
- @NonNull String databaseName,
- @NonNull String prefixedSchema,
- int callerUid,
- boolean callerHasSystemAccess);
+ public void removeVisibility(@NonNull Set<String> prefixedSchemaTypes)
+ throws AppSearchException {
+ for (String prefixedSchemaType : prefixedSchemaTypes) {
+ if (mVisibilityDocumentMap.remove(prefixedSchemaType) != null) {
+ // The deleted schema is not all-default setting, we need to remove its
+ // VisibilityDocument from Icing.
+ try {
+ mAppSearchImpl.remove(VISIBILITY_PACKAGE_NAME, VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE, prefixedSchemaType,
+ /*removeStatsBuilder=*/null);
+ } catch (AppSearchException e) {
+ if (e.getResultCode() == RESULT_NOT_FOUND) {
+ // We are trying to remove this visibility setting, so it's weird but seems
+ // to be fine if we cannot find it.
+ Log.e(TAG, "Cannot find visibility document for " + prefixedSchemaType
+ + " to remove.");
+ return;
+ }
+ throw e;
+ }
+ }
+ }
+ }
+
+ /** Gets the {@link VisibilityDocument} for the given prefixed schema type. */
+ @Nullable
+ public VisibilityDocument getVisibility(@NonNull String prefixedSchemaType) {
+ return mVisibilityDocumentMap.get(prefixedSchemaType);
+ }
+
+ /**
+ * Loads all stored latest {@link VisibilityDocument} from Icing, and put them into
+ * {@link #mVisibilityDocumentMap}.
+ */
+ private void loadVisibilityDocumentMap() throws AppSearchException {
+ // Populate visibility settings set
+ List<String> cachedSchemaTypes = mAppSearchImpl.getAllPrefixedSchemaTypes();
+ for (int i = 0; i < cachedSchemaTypes.size(); i++) {
+ String prefixedSchemaType = cachedSchemaTypes.get(i);
+ String packageName = PrefixUtil.getPackageName(prefixedSchemaType);
+ if (packageName.equals(VISIBILITY_PACKAGE_NAME)) {
+ continue; // Our own package. Skip.
+ }
+
+ VisibilityDocument visibilityDocument;
+ try {
+ // Note: We use the other clients' prefixed schema type as ids
+ visibilityDocument = new VisibilityDocument(
+ mAppSearchImpl.getDocument(
+ VISIBILITY_PACKAGE_NAME,
+ VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ /*id=*/ prefixedSchemaType,
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ } catch (AppSearchException e) {
+ if (e.getResultCode() == RESULT_NOT_FOUND) {
+ // The schema has all default setting and we won't have a VisibilityDocument for
+ // it.
+ continue;
+ }
+ // Otherwise, this is some other error we should pass up.
+ throw e;
+ }
+ mVisibilityDocumentMap.put(prefixedSchemaType, visibilityDocument);
+ }
+ }
+
+ /**
+ * Set the latest version of {@link VisibilityDocument} and its schema to AppSearch.
+ */
+ private void setLatestSchemaAndDocuments(@NonNull List<VisibilityDocument> migratedDocuments)
+ throws AppSearchException {
+ // The latest schema type doesn't exist yet. Add it. Set forceOverride true to
+ // delete old schema.
+ InternalSetSchemaResponse internalSetSchemaResponse = mAppSearchImpl.setSchema(
+ VISIBILITY_PACKAGE_NAME,
+ VISIBILITY_DATABASE_NAME,
+ Arrays.asList(VisibilityDocument.SCHEMA,
+ VisibilityPermissionDocument.SCHEMA),
+ /*visibilityDocuments=*/ Collections.emptyList(),
+ /*forceOverride=*/ true,
+ /*version=*/ VisibilityDocument.SCHEMA_VERSION_LATEST,
+ /*setSchemaStatsBuilder=*/ null);
+ if (!internalSetSchemaResponse.isSuccess()) {
+ // Impossible case, we just set forceOverride to be true, we should never
+ // fail in incompatible changes.
+ throw new AppSearchException(AppSearchResult.RESULT_INTERNAL_ERROR,
+ internalSetSchemaResponse.getErrorMessage());
+ }
+ for (int i = 0; i < migratedDocuments.size(); i++) {
+ VisibilityDocument migratedDocument = migratedDocuments.get(i);
+ mVisibilityDocumentMap.put(migratedDocument.getId(), migratedDocument);
+ mAppSearchImpl.putDocument(
+ VISIBILITY_PACKAGE_NAME,
+ VISIBILITY_DATABASE_NAME,
+ migratedDocument,
+ /*sendChangeNotifications=*/ false,
+ /*logger=*/ null);
+ }
+ }
}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0.java
new file mode 100644
index 0000000..edff437
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV0.java
@@ -0,0 +1,257 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.localstorage.visibilitystore;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
+import androidx.appsearch.app.AppSearchResult;
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.VisibilityDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.collection.ArrayMap;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * The helper class to store Visibility Document information of version 0 and handle the upgrade to
+ * version 1.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class VisibilityStoreMigrationHelperFromV0 {
+ private VisibilityStoreMigrationHelperFromV0() {}
+ /** Prefix to add to all visibility document ids. IcingSearchEngine doesn't allow empty ids. */
+ private static final String DEPRECATED_ID_PREFIX = "uri:";
+
+ /** Schema type for documents that hold AppSearch's metadata, e.g. visibility settings */
+ @VisibleForTesting
+ static final String DEPRECATED_VISIBILITY_SCHEMA_TYPE = "VisibilityType";
+
+ /**
+ * Property that holds the list of platform-hidden schemas, as part of the visibility settings.
+ */
+ @VisibleForTesting
+ static final String DEPRECATED_NOT_DISPLAYED_BY_SYSTEM_PROPERTY =
+ "notPlatformSurfaceable";
+
+ /** Property that holds nested documents of package accessible schemas. */
+ @VisibleForTesting
+ static final String DEPRECATED_VISIBLE_TO_PACKAGES_PROPERTY = "packageAccessible";
+
+ /**
+ * Property that holds the list of platform-hidden schemas, as part of the visibility settings.
+ */
+ @VisibleForTesting
+ static final String DEPRECATED_PACKAGE_SCHEMA_TYPE = "PackageAccessibleType";
+
+ /** Property that holds the prefixed schema type that is accessible by some package. */
+ @VisibleForTesting
+ static final String DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY = "accessibleSchema";
+
+ /** Property that holds the package name that can access a schema. */
+ @VisibleForTesting
+ static final String DEPRECATED_PACKAGE_NAME_PROPERTY = "packageName";
+
+ /** Property that holds the SHA 256 certificate of the app that can access a schema. */
+ @VisibleForTesting
+ static final String DEPRECATED_SHA_256_CERT_PROPERTY = "sha256Cert";
+
+// The visibility schema of version 0.
+//---------------------------------------------------------------------------------------------
+// Schema of DEPRECATED_VISIBILITY_SCHEMA_TYPE:
+// new AppSearchSchema.Builder(
+// DEPRECATED_VISIBILITY_SCHEMA_TYPE)
+// .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(
+// DEPRECATED_NOT_DISPLAYED_BY_SYSTEM_PROPERTY)
+// .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+// .build())
+// .addProperty(new AppSearchSchema.DocumentPropertyConfig.Builder(
+// DEPRECATED_VISIBLE_TO_PACKAGES_PROPERTY,
+// DEPRECATED_PACKAGE_SCHEMA_TYPE)
+// .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+// .build())
+// .build();
+// Schema of DEPRECATED_PACKAGE_SCHEMA_TYPE:
+// new AppSearchSchema.Builder(DEPRECATED_PACKAGE_SCHEMA_TYPE)
+// .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(
+// DEPRECATED_PACKAGE_NAME_PROPERTY)
+// .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+// .build())
+// .addProperty(new AppSearchSchema.BytesPropertyConfig.Builder(
+// DEPRECATED_SHA_256_CERT_PROPERTY)
+// .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+// .build())
+// .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(
+// DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY)
+// .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+// .build())
+// .build();
+//---------------------------------------------------------------------------------------------
+
+ /** Returns whether the given schema type is deprecated. */
+ static boolean isDeprecatedType(@NonNull String schemaType) {
+ return schemaType.equals(DEPRECATED_VISIBILITY_SCHEMA_TYPE)
+ || schemaType.equals(DEPRECATED_PACKAGE_SCHEMA_TYPE);
+ }
+
+ /**
+ * Adds a prefix to create a deprecated visibility document's id.
+ *
+ * @param packageName Package to which the visibility doc refers.
+ * @param databaseName Database to which the visibility doc refers.
+ * @return deprecated visibility document's id.
+ */
+ @NonNull
+ static String getDeprecatedVisibilityDocumentId(
+ @NonNull String packageName, @NonNull String databaseName) {
+ return DEPRECATED_ID_PREFIX + PrefixUtil.createPrefix(packageName, databaseName);
+ }
+
+ /** Reads all stored deprecated Visibility Document in version 0 from icing. */
+ static List<GenericDocument> getVisibilityDocumentsInVersion0(
+ @NonNull GetSchemaResponse getSchemaResponse,
+ @NonNull AppSearchImpl appSearchImpl) throws AppSearchException {
+ if (!hasDeprecatedType(getSchemaResponse)) {
+ return new ArrayList<>();
+ }
+ Map<String, Set<String>> packageToDatabases = appSearchImpl.getPackageToDatabases();
+ List<GenericDocument> deprecatedDocuments = new ArrayList<>(packageToDatabases.size());
+ for (Map.Entry<String, Set<String>> entry : packageToDatabases.entrySet()) {
+ String packageName = entry.getKey();
+ if (packageName.equals(VisibilityStore.VISIBILITY_PACKAGE_NAME)) {
+ continue; // Our own package. Skip.
+ }
+ for (String databaseName : entry.getValue()) {
+ try {
+ // Note: We use the other clients' prefixed names as ids
+ deprecatedDocuments.add(appSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ getDeprecatedVisibilityDocumentId(packageName, databaseName),
+ /*typePropertyPaths=*/ Collections.emptyMap()));
+ } catch (AppSearchException e) {
+ if (e.getResultCode() == AppSearchResult.RESULT_NOT_FOUND) {
+ // TODO(b/172068212): This indicates some desync error. We were expecting a
+ // document, but didn't find one. Should probably reset AppSearch instead
+ // of ignoring it.
+ continue;
+ }
+ // Otherwise, this is some other error we should pass up.
+ throw e;
+ }
+ }
+ }
+ return deprecatedDocuments;
+ }
+
+ /**
+ * Converts the given list of deprecated Visibility Documents into a Map of {@code
+ * <PrefixedSchemaType, VisibilityDocument.Builder of the latest version>}.
+ *
+ * @param visibilityDocumentV0s The deprecated Visibility Document we found.
+ */
+ @NonNull
+ static List<VisibilityDocumentV1> toVisibilityDocumentV1(
+ @NonNull List<GenericDocument> visibilityDocumentV0s) {
+ Map<String, VisibilityDocumentV1.Builder> documentBuilderMap = new ArrayMap<>();
+
+ // Set all visibility information into documentBuilderMap
+ for (int i = 0; i < visibilityDocumentV0s.size(); i++) {
+ GenericDocument visibilityDocumentV0 = visibilityDocumentV0s.get(i);
+
+ // Read not displayed by system property field.
+ String[] notDisplayedBySystemSchemas = visibilityDocumentV0.getPropertyStringArray(
+ DEPRECATED_NOT_DISPLAYED_BY_SYSTEM_PROPERTY);
+ if (notDisplayedBySystemSchemas != null) {
+ for (String notDisplayedBySystemSchema : notDisplayedBySystemSchemas) {
+ // SetSchemaRequest.Builder.build() make sure all schemas that has visibility
+ // setting must present in the requests.
+ VisibilityDocumentV1.Builder visibilityBuilder = getOrCreateBuilder(
+ documentBuilderMap, notDisplayedBySystemSchema);
+ visibilityBuilder.setNotDisplayedBySystem(true);
+ }
+ }
+
+ // Read visible to packages field.
+ GenericDocument[] deprecatedPackageDocuments = visibilityDocumentV0
+ .getPropertyDocumentArray(DEPRECATED_VISIBLE_TO_PACKAGES_PROPERTY);
+ if (deprecatedPackageDocuments != null) {
+ for (GenericDocument deprecatedPackageDocument : deprecatedPackageDocuments) {
+ String prefixedSchemaType = deprecatedPackageDocument
+ .getPropertyString(DEPRECATED_ACCESSIBLE_SCHEMA_PROPERTY);
+ VisibilityDocumentV1.Builder visibilityBuilder = getOrCreateBuilder(
+ documentBuilderMap, prefixedSchemaType);
+ visibilityBuilder.addVisibleToPackage(new PackageIdentifier(
+ deprecatedPackageDocument.getPropertyString(
+ DEPRECATED_PACKAGE_NAME_PROPERTY),
+ deprecatedPackageDocument.getPropertyBytes(
+ DEPRECATED_SHA_256_CERT_PROPERTY)));
+ }
+ }
+ }
+ List<VisibilityDocumentV1> visibilityDocumentsV1 =
+ new ArrayList<>(documentBuilderMap.size());
+ for (Map.Entry<String, VisibilityDocumentV1.Builder> entry :
+ documentBuilderMap.entrySet()) {
+ visibilityDocumentsV1.add(entry.getValue().build());
+ }
+ return visibilityDocumentsV1;
+ }
+
+ /**
+ * Return whether the database maybe has the oldest version of deprecated schema.
+ *
+ * <p> Since the current version number is 0, it is possible that the database is just empty
+ * and it return 0 as the default version number. So we need to check if the deprecated document
+ * presents to trigger the migration.
+ */
+ private static boolean hasDeprecatedType(@NonNull GetSchemaResponse getSchemaResponse) {
+ for (AppSearchSchema schema : getSchemaResponse.getSchemas()) {
+ if (VisibilityStoreMigrationHelperFromV0
+ .isDeprecatedType(schema.getSchemaType())) {
+ // Found deprecated type, we need to migrate visibility Document. And it's
+ // not possible for us to find the latest visibility schema.
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @NonNull
+ private static VisibilityDocumentV1.Builder getOrCreateBuilder(
+ @NonNull Map<String, VisibilityDocumentV1.Builder> documentBuilderMap,
+ @NonNull String schemaType) {
+ VisibilityDocumentV1.Builder builder = documentBuilderMap.get(schemaType);
+ if (builder == null) {
+ builder = new VisibilityDocumentV1.Builder(/*id=*/ schemaType);
+ documentBuilderMap.put(schemaType, builder);
+ }
+ return builder;
+ }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1.java
new file mode 100644
index 0000000..cd3e2c5
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityStoreMigrationHelperFromV1.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.localstorage.visibilitystore;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
+import androidx.appsearch.app.AppSearchResult;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.SetSchemaRequest;
+import androidx.appsearch.app.VisibilityDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.localstorage.AppSearchImpl;
+import androidx.appsearch.localstorage.util.PrefixUtil;
+import androidx.collection.ArraySet;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * The helper class to store Visibility Document information of version 1 and handle the upgrade to
+ * latest version
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class VisibilityStoreMigrationHelperFromV1 {
+ private VisibilityStoreMigrationHelperFromV1() {}
+
+ /** Enum in {@link androidx.appsearch.app.SetSchemaRequest} AppSearch supported role. */
+ @VisibleForTesting
+ static final int DEPRECATED_ROLE_HOME = 1;
+
+ /** Enum in {@link androidx.appsearch.app.SetSchemaRequest} AppSearch supported role. */
+ @VisibleForTesting
+ static final int DEPRECATED_ROLE_ASSISTANT = 2;
+
+ /** Reads all stored deprecated Visibility Document in version 0 from icing. */
+ static List<VisibilityDocumentV1> getVisibilityDocumentsInVersion1(
+ @NonNull AppSearchImpl appSearchImpl) throws AppSearchException {
+ List<String> allPrefixedSchemaTypes = appSearchImpl.getAllPrefixedSchemaTypes();
+ List<VisibilityDocumentV1> visibilityDocumentV1s =
+ new ArrayList<>(allPrefixedSchemaTypes.size());
+ for (int i = 0; i < allPrefixedSchemaTypes.size(); i++) {
+ String packageName = PrefixUtil.getPackageName(allPrefixedSchemaTypes.get(i));
+ if (packageName.equals(VisibilityStore.VISIBILITY_PACKAGE_NAME)) {
+ continue; // Our own package. Skip.
+ }
+ try {
+ // Note: We use the prefixed schema type as ids
+ visibilityDocumentV1s.add(new VisibilityDocumentV1(appSearchImpl.getDocument(
+ VisibilityStore.VISIBILITY_PACKAGE_NAME,
+ VisibilityStore.VISIBILITY_DATABASE_NAME,
+ VisibilityDocument.NAMESPACE,
+ allPrefixedSchemaTypes.get(i),
+ /*typePropertyPaths=*/ Collections.emptyMap())));
+ } catch (AppSearchException e) {
+ if (e.getResultCode() == AppSearchResult.RESULT_NOT_FOUND) {
+ // TODO(b/172068212): This indicates some desync error. We were expecting a
+ // document, but didn't find one. Should probably reset AppSearch instead
+ // of ignoring it.
+ continue;
+ }
+ // Otherwise, this is some other error we should pass up.
+ throw e;
+ }
+ }
+ return visibilityDocumentV1s;
+ }
+
+ /**
+ * Converts the given list of deprecated Visibility Documents into a Map of {@code
+ * <PrefixedSchemaType, VisibilityDocument.Builder of the latest version>}.
+ *
+ * @param visibilityDocumentV1s The deprecated Visibility Document we found.
+ */
+ @NonNull
+ static List<VisibilityDocument> toVisibilityDocumentsV2(
+ @NonNull List<VisibilityDocumentV1> visibilityDocumentV1s) {
+ List<VisibilityDocument> latestVisibilityDocuments =
+ new ArrayList<>(visibilityDocumentV1s.size());
+ for (int i = 0; i < visibilityDocumentV1s.size(); i++) {
+ VisibilityDocumentV1 visibilityDocumentV1 = visibilityDocumentV1s.get(i);
+ Set<Set<Integer>> visibleToPermissions = new ArraySet<>();
+ Set<Integer> deprecatedVisibleToRoles = visibilityDocumentV1.getVisibleToRoles();
+ if (deprecatedVisibleToRoles != null) {
+ for (int deprecatedVisibleToRole : deprecatedVisibleToRoles) {
+ Set<Integer> visibleToPermission = new ArraySet<>();
+ switch (deprecatedVisibleToRole) {
+ case DEPRECATED_ROLE_HOME:
+ visibleToPermission.add(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA);
+ break;
+ case DEPRECATED_ROLE_ASSISTANT:
+ visibleToPermission.add(SetSchemaRequest
+ .READ_ASSISTANT_APP_SEARCH_DATA);
+ break;
+ }
+ visibleToPermissions.add(visibleToPermission);
+ }
+ }
+ Set<Integer> deprecatedVisibleToPermissions =
+ visibilityDocumentV1.getVisibleToPermissions();
+ if (deprecatedVisibleToPermissions != null) {
+ visibleToPermissions.add(deprecatedVisibleToPermissions);
+ }
+
+ Set<PackageIdentifier> packageIdentifiers = new ArraySet<>();
+ String[] packageNames = visibilityDocumentV1.getPackageNames();
+ byte[][] sha256Certs = visibilityDocumentV1.getSha256Certs();
+ if (packageNames.length == sha256Certs.length) {
+ for (int j = 0; j < packageNames.length; j++) {
+ packageIdentifiers.add(new PackageIdentifier(packageNames[j], sha256Certs[j]));
+ }
+ }
+ VisibilityDocument.Builder latestVisibilityDocumentBuilder =
+ new VisibilityDocument.Builder(visibilityDocumentV1.getId())
+ .setNotDisplayedBySystem(visibilityDocumentV1.isNotDisplayedBySystem())
+ .addVisibleToPackages(packageIdentifiers);
+ if (!visibleToPermissions.isEmpty()) {
+ latestVisibilityDocumentBuilder.setVisibleToPermissions(visibleToPermissions);
+ }
+ latestVisibilityDocuments.add(latestVisibilityDocumentBuilder.build());
+ }
+ return latestVisibilityDocuments;
+ }
+}
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityUtil.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityUtil.java
new file mode 100644
index 0000000..ea04968
--- /dev/null
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/visibilitystore/VisibilityUtil.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.localstorage.visibilitystore;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.core.util.Preconditions;
+
+/**
+ * Utilities for working with {@link VisibilityChecker} and {@link VisibilityStore}.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class VisibilityUtil {
+ private VisibilityUtil() {}
+
+ /**
+ * Determines whether the calling package has access to the given prefixed schema type.
+ *
+ * <p>Correctly handles access to own data and the situation that visibilityStore and
+ * visibilityChecker are not configured.
+ *
+ * @param callerAccess Visibility access info of the calling app
+ * @param targetPackageName The package name of the app that owns the data.
+ * @param prefixedSchema The prefixed schema type the caller wants to access.
+ * @param visibilityStore Store for visibility information. If not provided, only
+ * access to own data will be allowed.
+ * @param visibilityChecker Checker for visibility access. If not provided, only access to
+ * own data will be allowed.
+ * @return Whether access by the caller to this prefixed schema should be allowed.
+ */
+ public static boolean isSchemaSearchableByCaller(
+ @NonNull CallerAccess callerAccess,
+ @NonNull String targetPackageName,
+ @NonNull String prefixedSchema,
+ @Nullable VisibilityStore visibilityStore,
+ @Nullable VisibilityChecker visibilityChecker) {
+ Preconditions.checkNotNull(callerAccess);
+ Preconditions.checkNotNull(targetPackageName);
+ Preconditions.checkNotNull(prefixedSchema);
+
+ if (callerAccess.getCallingPackageName().equals(targetPackageName)) {
+ return true; // Everyone is always allowed to retrieve their own data.
+ }
+ if (visibilityStore == null || visibilityChecker == null) {
+ return false; // No visibility is configured at this time; no other access possible.
+ }
+ return visibilityChecker.isSchemaSearchableByCaller(
+ callerAccess,
+ targetPackageName,
+ prefixedSchema,
+ visibilityStore);
+ }
+}
diff --git a/appsearch/appsearch-platform-storage/api/current.txt b/appsearch/appsearch-platform-storage/api/current.txt
index 881789d..0b3b2e6 100644
--- a/appsearch/appsearch-platform-storage/api/current.txt
+++ b/appsearch/appsearch-platform-storage/api/current.txt
@@ -2,8 +2,10 @@
package androidx.appsearch.platformstorage {
@RequiresApi(android.os.Build.VERSION_CODES.S) public final class PlatformStorage {
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSession(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
+ method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSession(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
+ method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
}
public static final class PlatformStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-platform-storage/api/public_plus_experimental_current.txt b/appsearch/appsearch-platform-storage/api/public_plus_experimental_current.txt
index 881789d..0b3b2e6 100644
--- a/appsearch/appsearch-platform-storage/api/public_plus_experimental_current.txt
+++ b/appsearch/appsearch-platform-storage/api/public_plus_experimental_current.txt
@@ -2,8 +2,10 @@
package androidx.appsearch.platformstorage {
@RequiresApi(android.os.Build.VERSION_CODES.S) public final class PlatformStorage {
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSession(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
+ method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSession(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
+ method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
}
public static final class PlatformStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-platform-storage/api/restricted_current.txt b/appsearch/appsearch-platform-storage/api/restricted_current.txt
index 881789d..0b3b2e6 100644
--- a/appsearch/appsearch-platform-storage/api/restricted_current.txt
+++ b/appsearch/appsearch-platform-storage/api/restricted_current.txt
@@ -2,8 +2,10 @@
package androidx.appsearch.platformstorage {
@RequiresApi(android.os.Build.VERSION_CODES.S) public final class PlatformStorage {
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSession(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
- method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
+ method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSession(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
+ method @Deprecated public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSession(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
}
public static final class PlatformStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-platform-storage/build.gradle b/appsearch/appsearch-platform-storage/build.gradle
index 73bb4b7..e4c1f37 100644
--- a/appsearch/appsearch-platform-storage/build.gradle
+++ b/appsearch/appsearch-platform-storage/build.gradle
@@ -25,8 +25,9 @@
api("androidx.annotation:annotation:1.1.0")
implementation project(":appsearch:appsearch")
+ implementation('androidx.collection:collection:1.2.0')
implementation("androidx.concurrent:concurrent-futures:1.0.0")
- implementation("androidx.core:core:1.2.0")
+ implementation("androidx.core:core:1.7.0")
androidTestImplementation(libs.testCore)
androidTestImplementation(libs.testRules)
diff --git a/appsearch/appsearch-platform-storage/src/androidTest/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverterTest.java b/appsearch/appsearch-platform-storage/src/androidTest/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverterTest.java
new file mode 100644
index 0000000..3ee507c
--- /dev/null
+++ b/appsearch/appsearch-platform-storage/src/androidTest/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverterTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.platformstorage.converter;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertThrows;
+
+import android.os.Build;
+
+import androidx.appsearch.app.AppSearchResult;
+import androidx.concurrent.futures.ResolvableFuture;
+import androidx.test.filters.SdkSuppress;
+
+import org.junit.Test;
+
+import java.util.concurrent.ExecutionException;
+
+public class AppSearchResultToPlatformConverterTest {
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
+ public void testPlatformAppSearchResultToJetpack_catchException() {
+ android.app.appsearch.AppSearchResult<String> platformResult =
+ android.app.appsearch.AppSearchResult.newSuccessfulResult("42");
+ AppSearchResult<Integer> jetpackResult =
+ AppSearchResultToPlatformConverter.platformAppSearchResultToJetpack(
+ platformResult,
+ platformValue -> {
+ throw new IllegalArgumentException("Test exception");
+ }
+ );
+ assertThat(jetpackResult.getResultCode())
+ .isEqualTo(AppSearchResult.RESULT_INVALID_ARGUMENT);
+ assertThat(jetpackResult.getErrorMessage()).contains("Test exception");
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
+ public void testPlatformAppSearchResultToFuture_catchException() {
+ android.app.appsearch.AppSearchResult<String> platformResult =
+ android.app.appsearch.AppSearchResult.newSuccessfulResult("42");
+ ResolvableFuture<Integer> future = ResolvableFuture.create();
+ AppSearchResultToPlatformConverter.platformAppSearchResultToFuture(
+ platformResult,
+ future,
+ platformValue -> {
+ throw new IllegalArgumentException("Test exception");
+ }
+ );
+ ExecutionException e = assertThrows(ExecutionException.class, future::get);
+ assertThat(e).hasCauseThat().isInstanceOf(IllegalArgumentException.class);
+ assertThat(e).hasCauseThat().hasMessageThat().contains("Test exception");
+ }
+}
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
index 34ab614..336b213 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
@@ -17,6 +17,7 @@
import androidx.annotation.NonNull;
import androidx.appsearch.app.Features;
+import androidx.core.os.BuildCompat;
/**
* An implementation of {@link Features}. Feature availability is dependent on Android API
@@ -25,16 +26,23 @@
final class FeaturesImpl implements Features {
@Override
+ // TODO(b/201316758): Remove once BuildCompat.isAtLeastT is removed
+ @BuildCompat.PrereleaseSdkCheck
public boolean isFeatureSupported(@NonNull String feature) {
if (Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH.equals(feature)) {
- // TODO(b/201316758) : Update to reflect support in Android T+ once this feature is
- // synced over into service-appsearch.
- return false;
+ return BuildCompat.isAtLeastT();
}
- if (Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER.equals(feature)) {
- // TODO(b/201316758) : Update to reflect support in Android T+ once this feature is
- // synced over into service-appsearch.
- return false;
+ if (Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK.equals(feature)) {
+ return BuildCompat.isAtLeastT();
+ }
+ if (Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA.equals(feature)) {
+ return BuildCompat.isAtLeastT();
+ }
+ if (Features.GLOBAL_SEARCH_SESSION_GET_BY_ID.equals(feature)) {
+ return BuildCompat.isAtLeastT();
+ }
+ if (Features.ADD_PERMISSIONS_AND_GET_VISIBILITY.equals(feature)) {
+ return BuildCompat.isAtLeastT();
}
return false;
}
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/GlobalSearchSessionImpl.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/GlobalSearchSessionImpl.java
index 0984e13..6ed63ee 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/GlobalSearchSessionImpl.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/GlobalSearchSessionImpl.java
@@ -15,31 +15,48 @@
*/
package androidx.appsearch.platformstorage;
+import android.annotation.SuppressLint;
import android.os.Build;
+import androidx.annotation.GuardedBy;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
+import androidx.appsearch.app.AppSearchBatchResult;
import androidx.appsearch.app.Features;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetByDocumentIdRequest;
+import androidx.appsearch.app.GetSchemaResponse;
import androidx.appsearch.app.GlobalSearchSession;
import androidx.appsearch.app.ReportSystemUsageRequest;
import androidx.appsearch.app.SearchResults;
import androidx.appsearch.app.SearchSpec;
-import androidx.appsearch.observer.AppSearchObserverCallback;
+import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.observer.DocumentChangeInfo;
+import androidx.appsearch.observer.ObserverCallback;
import androidx.appsearch.observer.ObserverSpec;
+import androidx.appsearch.observer.SchemaChangeInfo;
import androidx.appsearch.platformstorage.converter.AppSearchResultToPlatformConverter;
+import androidx.appsearch.platformstorage.converter.GenericDocumentToPlatformConverter;
+import androidx.appsearch.platformstorage.converter.GetSchemaResponseToPlatformConverter;
+import androidx.appsearch.platformstorage.converter.ObserverSpecToPlatformConverter;
import androidx.appsearch.platformstorage.converter.RequestToPlatformConverter;
import androidx.appsearch.platformstorage.converter.SearchSpecToPlatformConverter;
+import androidx.appsearch.platformstorage.util.BatchResultCallbackAdapter;
+import androidx.collection.ArrayMap;
import androidx.concurrent.futures.ResolvableFuture;
+import androidx.core.os.BuildCompat;
import androidx.core.util.Preconditions;
import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Map;
import java.util.concurrent.Executor;
/**
* An implementation of {@link androidx.appsearch.app.GlobalSearchSession} which proxies to a
* platform {@link android.app.appsearch.GlobalSearchSession}.
+ *
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@@ -49,6 +66,11 @@
private final Executor mExecutor;
private final Features mFeatures;
+ // Management of observer callbacks.
+ @GuardedBy("mObserverCallbacksLocked")
+ private final Map<ObserverCallback, android.app.appsearch.observer.ObserverCallback>
+ mObserverCallbacksLocked = new ArrayMap<>();
+
GlobalSearchSessionImpl(
@NonNull android.app.appsearch.GlobalSearchSession platformSession,
@NonNull Executor executor,
@@ -58,6 +80,29 @@
mFeatures = Preconditions.checkNotNull(features);
}
+ @BuildCompat.PrereleaseSdkCheck
+ @NonNull
+ @Override
+ public ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentIdAsync(
+ @NonNull String packageName, @NonNull String databaseName,
+ @NonNull GetByDocumentIdRequest request) {
+ if (!BuildCompat.isAtLeastT()) {
+ throw new UnsupportedOperationException(Features.GLOBAL_SEARCH_SESSION_GET_BY_ID
+ + " is not supported on this AppSearch implementation.");
+ }
+ Preconditions.checkNotNull(packageName);
+ Preconditions.checkNotNull(databaseName);
+ Preconditions.checkNotNull(request);
+ ResolvableFuture<AppSearchBatchResult<String, GenericDocument>> future =
+ ResolvableFuture.create();
+ mPlatformSession.getByDocumentId(packageName, databaseName,
+ RequestToPlatformConverter.toPlatformGetByDocumentIdRequest(request),
+ mExecutor,
+ new BatchResultCallbackAdapter<>(
+ future, GenericDocumentToPlatformConverter::toJetpackGenericDocument));
+ return future;
+ }
+
@Override
@NonNull
public SearchResults search(
@@ -74,7 +119,8 @@
@NonNull
@Override
- public ListenableFuture<Void> reportSystemUsage(@NonNull ReportSystemUsageRequest request) {
+ public ListenableFuture<Void> reportSystemUsageAsync(
+ @NonNull ReportSystemUsageRequest request) {
Preconditions.checkNotNull(request);
ResolvableFuture<Void> future = ResolvableFuture.create();
mPlatformSession.reportSystemUsage(
@@ -85,34 +131,136 @@
return future;
}
+ @BuildCompat.PrereleaseSdkCheck
+ @NonNull
+ @Override
+ public ListenableFuture<GetSchemaResponse> getSchemaAsync(@NonNull String packageName,
+ @NonNull String databaseName) {
+ // Superclass is annotated with @RequiresFeature, so we shouldn't get here on an
+ // unsupported build.
+ if (!BuildCompat.isAtLeastT()) {
+ throw new UnsupportedOperationException(
+ Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA
+ + " is not supported on this AppSearch implementation.");
+ }
+ ResolvableFuture<GetSchemaResponse> future = ResolvableFuture.create();
+ mPlatformSession.getSchema(
+ packageName,
+ databaseName,
+ mExecutor,
+ result -> AppSearchResultToPlatformConverter.platformAppSearchResultToFuture(
+ result,
+ future,
+ GetSchemaResponseToPlatformConverter::toJetpackGetSchemaResponse));
+ return future;
+ }
+
@NonNull
@Override
public Features getFeatures() {
return mFeatures;
}
+ // TODO(b/193494000): Remove these two lines once BuildCompat.isAtLeastT() is removed.
+ @SuppressLint("NewApi")
+ @BuildCompat.PrereleaseSdkCheck
@Override
- public void addObserver(
- @NonNull String observedPackage,
+ public void registerObserverCallback(
+ @NonNull String targetPackageName,
@NonNull ObserverSpec spec,
@NonNull Executor executor,
- @NonNull AppSearchObserverCallback observer) {
- Preconditions.checkNotNull(observedPackage);
+ @NonNull ObserverCallback observer) throws AppSearchException {
+ Preconditions.checkNotNull(targetPackageName);
Preconditions.checkNotNull(spec);
Preconditions.checkNotNull(executor);
Preconditions.checkNotNull(observer);
- // TODO(b/193494000): Support change notifications in the platform backend once the
- // feature is exposed in the Android SDK.
- throw new UnsupportedOperationException("addObserver not supported for platform yet");
+ // Superclass is annotated with @RequiresFeature, so we shouldn't get here on an
+ // unsupported build.
+ if (!BuildCompat.isAtLeastT()) {
+ throw new UnsupportedOperationException(
+ Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK
+ + " is not supported on this AppSearch implementation");
+ }
+
+ synchronized (mObserverCallbacksLocked) {
+ android.app.appsearch.observer.ObserverCallback frameworkCallback =
+ mObserverCallbacksLocked.get(observer);
+ if (frameworkCallback == null) {
+ // No stub is associated with this package and observer, so we must create one.
+ frameworkCallback = new android.app.appsearch.observer.ObserverCallback() {
+ @Override
+ public void onSchemaChanged(
+ @NonNull android.app.appsearch.observer.SchemaChangeInfo
+ platformSchemaChangeInfo) {
+ SchemaChangeInfo jetpackSchemaChangeInfo =
+ ObserverSpecToPlatformConverter.toJetpackSchemaChangeInfo(
+ platformSchemaChangeInfo);
+ observer.onSchemaChanged(jetpackSchemaChangeInfo);
+ }
+
+ @Override
+ public void onDocumentChanged(
+ @NonNull android.app.appsearch.observer.DocumentChangeInfo
+ platformDocumentChangeInfo) {
+ DocumentChangeInfo jetpackDocumentChangeInfo =
+ ObserverSpecToPlatformConverter.toJetpackDocumentChangeInfo(
+ platformDocumentChangeInfo);
+ observer.onDocumentChanged(jetpackDocumentChangeInfo);
+ }
+ };
+ }
+
+ // Regardless of whether this stub was fresh or not, we have to register it again
+ // because the user might be supplying a different spec.
+ try {
+ mPlatformSession.registerObserverCallback(
+ targetPackageName,
+ ObserverSpecToPlatformConverter.toPlatformObserverSpec(spec),
+ executor,
+ frameworkCallback);
+ } catch (android.app.appsearch.exceptions.AppSearchException e) {
+ throw new AppSearchException((int) e.getResultCode(), e.getMessage(), e.getCause());
+ }
+
+ // Now that registration has succeeded, save this stub into our in-memory cache. This
+ // isn't done when errors occur because the user may not call removeObserver if
+ // addObserver threw.
+ mObserverCallbacksLocked.put(observer, frameworkCallback);
+ }
}
+ @SuppressLint("NewApi")
+ @BuildCompat.PrereleaseSdkCheck
@Override
- public void removeObserver(
- @NonNull String observedPackage, @NonNull AppSearchObserverCallback observer) {
- Preconditions.checkNotNull(observedPackage);
+ public void unregisterObserverCallback(
+ @NonNull String targetPackageName, @NonNull ObserverCallback observer)
+ throws AppSearchException {
+ Preconditions.checkNotNull(targetPackageName);
Preconditions.checkNotNull(observer);
- // TODO(b/193494000): Implement removeObserver
- throw new UnsupportedOperationException("removeObserver not supported for platform yet");
+ // Superclass is annotated with @RequiresFeature, so we shouldn't get here on an
+ // unsupported build.
+ if (!BuildCompat.isAtLeastT()) {
+ throw new UnsupportedOperationException(
+ Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK
+ + " is not supported on this AppSearch implementation");
+ }
+
+ android.app.appsearch.observer.ObserverCallback frameworkCallback;
+ synchronized (mObserverCallbacksLocked) {
+ frameworkCallback = mObserverCallbacksLocked.get(observer);
+ if (frameworkCallback == null) {
+ return; // No such observer registered. Nothing to do.
+ }
+
+ try {
+ mPlatformSession.unregisterObserverCallback(targetPackageName, frameworkCallback);
+ } catch (android.app.appsearch.exceptions.AppSearchException e) {
+ throw new AppSearchException((int) e.getResultCode(), e.getMessage(), e.getCause());
+ }
+
+ // Only remove from the in-memory map once removal from the service side succeeds
+ mObserverCallbacksLocked.remove(observer);
+ }
}
@Override
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java
index e45c239..6d0d9b6 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java
@@ -211,7 +211,7 @@
*/
@SuppressLint("WrongConstant")
@NonNull
- public static ListenableFuture<AppSearchSession> createSearchSession(
+ public static ListenableFuture<AppSearchSession> createSearchSessionAsync(
@NonNull SearchContext context) {
Preconditions.checkNotNull(context);
AppSearchManager appSearchManager =
@@ -224,7 +224,7 @@
if (result.isSuccess()) {
future.set(
new SearchSessionImpl(result.getResultValue(), context.mExecutor,
- new FeaturesImpl()));
+ new FeaturesImpl()));
} else {
// Without the SuppressLint annotation on the method, this line causes a
// lint error because getResultCode isn't defined as returning a value from
@@ -238,11 +238,24 @@
}
/**
+ * @deprecated use {@link #createSearchSessionAsync}.
+ *
+ * @param context The {@link SearchContext} contains all information to create a new
+ * {@link AppSearchSession}
+ */
+ @NonNull
+ @Deprecated
+ public static ListenableFuture<AppSearchSession> createSearchSession(
+ @NonNull SearchContext context) {
+ return createSearchSessionAsync(context);
+ }
+
+ /**
* Opens a new {@link GlobalSearchSession} on this storage.
*/
@SuppressLint("WrongConstant")
@NonNull
- public static ListenableFuture<GlobalSearchSession> createGlobalSearchSession(
+ public static ListenableFuture<GlobalSearchSession> createGlobalSearchSessionAsync(
@NonNull GlobalSearchContext context) {
Preconditions.checkNotNull(context);
AppSearchManager appSearchManager =
@@ -266,4 +279,14 @@
});
return future;
}
+
+ /**
+ * @deprecated use {@link #createGlobalSearchSessionAsync}.
+ */
+ @Deprecated
+ @NonNull
+ public static ListenableFuture<GlobalSearchSession> createGlobalSearchSession(
+ @NonNull GlobalSearchContext context) {
+ return createGlobalSearchSessionAsync(context);
+ }
}
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchResultsImpl.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchResultsImpl.java
index ff19a90..e774332 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchResultsImpl.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchResultsImpl.java
@@ -27,6 +27,7 @@
import androidx.appsearch.exceptions.AppSearchException;
import androidx.appsearch.platformstorage.converter.SearchResultToPlatformConverter;
import androidx.concurrent.futures.ResolvableFuture;
+import androidx.core.os.BuildCompat;
import androidx.core.util.Preconditions;
import com.google.common.util.concurrent.ListenableFuture;
@@ -60,23 +61,28 @@
@SuppressLint("WrongConstant")
@Override
@NonNull
- public ListenableFuture<List<SearchResult>> getNextPage() {
+ @BuildCompat.PrereleaseSdkCheck
+ public ListenableFuture<List<SearchResult>> getNextPageAsync() {
ResolvableFuture<List<SearchResult>> future = ResolvableFuture.create();
mPlatformResults.getNextPage(mExecutor, result -> {
if (result.isSuccess()) {
List<android.app.appsearch.SearchResult> frameworkResults = result.getResultValue();
List<SearchResult> jetpackResults = new ArrayList<>(frameworkResults.size());
for (int i = 0; i < frameworkResults.size(); i++) {
- if (Build.VERSION.SDK_INT == Build.VERSION_CODES.S) {
+ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.S
+ || Build.VERSION.SDK_INT == Build.VERSION_CODES.S_V2) {
// This is a patch for b/197361770, framework-appsearch in Android S will
// disable the whole namespace filter if none of given namespaces exist.
- // And that will result in Icing return all documents this query is able
- // to access.
+ // And that will result in Icing returns all documents that this query is
+ // able to access.
if (i == 0 && !mSearchSpec.getFilterNamespaces().isEmpty()
&& !mSearchSpec.getFilterNamespaces().contains(
frameworkResults.get(i).getGenericDocument().getNamespace())) {
- // And in the meantime, since none of the namespace and document that
- // use query for exists, we should just return an empty result.
+ // We should never return a document with a namespace that is not
+ // required in the request. And also since the bug will only happen
+ // when the required namespace doesn't exist, we should just return
+ // an empty result when we found the result contains unexpected
+ // namespace.
future.set(Collections.emptyList());
return;
}
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchSessionImpl.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchSessionImpl.java
index 4d8f2f2..76e6450 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchSessionImpl.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/SearchSessionImpl.java
@@ -31,19 +31,22 @@
import androidx.appsearch.app.ReportUsageRequest;
import androidx.appsearch.app.SearchResults;
import androidx.appsearch.app.SearchSpec;
+import androidx.appsearch.app.SearchSuggestionResult;
+import androidx.appsearch.app.SearchSuggestionSpec;
import androidx.appsearch.app.SetSchemaRequest;
import androidx.appsearch.app.SetSchemaResponse;
import androidx.appsearch.app.StorageInfo;
import androidx.appsearch.exceptions.AppSearchException;
import androidx.appsearch.platformstorage.converter.AppSearchResultToPlatformConverter;
import androidx.appsearch.platformstorage.converter.GenericDocumentToPlatformConverter;
+import androidx.appsearch.platformstorage.converter.GetSchemaResponseToPlatformConverter;
import androidx.appsearch.platformstorage.converter.RequestToPlatformConverter;
import androidx.appsearch.platformstorage.converter.ResponseToPlatformConverter;
-import androidx.appsearch.platformstorage.converter.SchemaToPlatformConverter;
import androidx.appsearch.platformstorage.converter.SearchSpecToPlatformConverter;
import androidx.appsearch.platformstorage.converter.SetSchemaRequestToPlatformConverter;
import androidx.appsearch.platformstorage.util.BatchResultCallbackAdapter;
import androidx.concurrent.futures.ResolvableFuture;
+import androidx.core.os.BuildCompat;
import androidx.core.util.Preconditions;
import com.google.common.util.concurrent.ListenableFuture;
@@ -75,71 +78,49 @@
@Override
@NonNull
- public ListenableFuture<SetSchemaResponse> setSchema(@NonNull SetSchemaRequest request) {
+ @BuildCompat.PrereleaseSdkCheck
+ public ListenableFuture<SetSchemaResponse> setSchemaAsync(@NonNull SetSchemaRequest request) {
Preconditions.checkNotNull(request);
ResolvableFuture<SetSchemaResponse> future = ResolvableFuture.create();
mPlatformSession.setSchema(
SetSchemaRequestToPlatformConverter.toPlatformSetSchemaRequest(request),
mExecutor,
mExecutor,
- result -> {
- if (result.isSuccess()) {
- SetSchemaResponse jetpackResponse =
- SetSchemaRequestToPlatformConverter.toJetpackSetSchemaResponse(
- result.getResultValue());
- future.set(jetpackResponse);
- } else {
- handleFailedPlatformResult(result, future);
- }
- });
+ result -> AppSearchResultToPlatformConverter.platformAppSearchResultToFuture(
+ result,
+ future,
+ SetSchemaRequestToPlatformConverter::toJetpackSetSchemaResponse));
return future;
}
@Override
@NonNull
- public ListenableFuture<GetSchemaResponse> getSchema() {
+ @BuildCompat.PrereleaseSdkCheck
+ public ListenableFuture<GetSchemaResponse> getSchemaAsync() {
ResolvableFuture<GetSchemaResponse> future = ResolvableFuture.create();
mPlatformSession.getSchema(
mExecutor,
- result -> {
- if (result.isSuccess()) {
- android.app.appsearch.GetSchemaResponse platformGetResponse =
- result.getResultValue();
- GetSchemaResponse.Builder jetpackResponseBuilder =
- new GetSchemaResponse.Builder();
- for (android.app.appsearch.AppSearchSchema platformSchema :
- platformGetResponse.getSchemas()) {
- jetpackResponseBuilder.addSchema(
- SchemaToPlatformConverter.toJetpackSchema(platformSchema));
- }
- jetpackResponseBuilder.setVersion(platformGetResponse.getVersion());
- future.set(jetpackResponseBuilder.build());
- } else {
- handleFailedPlatformResult(result, future);
- }
- });
+ result -> AppSearchResultToPlatformConverter.platformAppSearchResultToFuture(
+ result,
+ future,
+ GetSchemaResponseToPlatformConverter::toJetpackGetSchemaResponse));
return future;
}
@NonNull
@Override
- public ListenableFuture<Set<String>> getNamespaces() {
+ public ListenableFuture<Set<String>> getNamespacesAsync() {
ResolvableFuture<Set<String>> future = ResolvableFuture.create();
mPlatformSession.getNamespaces(
mExecutor,
- result -> {
- if (result.isSuccess()) {
- future.set(result.getResultValue());
- } else {
- handleFailedPlatformResult(result, future);
- }
- });
+ result -> AppSearchResultToPlatformConverter.platformAppSearchResultToFuture(
+ result, future));
return future;
}
@Override
@NonNull
- public ListenableFuture<AppSearchBatchResult<String, Void>> put(
+ public ListenableFuture<AppSearchBatchResult<String, Void>> putAsync(
@NonNull PutDocumentsRequest request) {
Preconditions.checkNotNull(request);
ResolvableFuture<AppSearchBatchResult<String, Void>> future = ResolvableFuture.create();
@@ -152,7 +133,7 @@
@Override
@NonNull
- public ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentId(
+ public ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentIdAsync(
@NonNull GetByDocumentIdRequest request) {
Preconditions.checkNotNull(request);
ResolvableFuture<AppSearchBatchResult<String, GenericDocument>> future =
@@ -179,9 +160,18 @@
return new SearchResultsImpl(platformSearchResults, searchSpec, mExecutor);
}
+ @NonNull
+ @Override
+ public ListenableFuture<List<SearchSuggestionResult>> searchSuggestionAsync(
+ @NonNull String suggestionQueryExpression, @NonNull SearchSuggestionSpec searchSpec) {
+ // TODO(b/227356108) Implement this after we export to framework.
+ throw new UnsupportedOperationException(
+ "Search Suggestion is not supported on this AppSearch implementation.");
+ }
+
@Override
@NonNull
- public ListenableFuture<Void> reportUsage(@NonNull ReportUsageRequest request) {
+ public ListenableFuture<Void> reportUsageAsync(@NonNull ReportUsageRequest request) {
Preconditions.checkNotNull(request);
ResolvableFuture<Void> future = ResolvableFuture.create();
mPlatformSession.reportUsage(
@@ -194,7 +184,7 @@
@Override
@NonNull
- public ListenableFuture<AppSearchBatchResult<String, Void>> remove(
+ public ListenableFuture<AppSearchBatchResult<String, Void>> removeAsync(
@NonNull RemoveByDocumentIdRequest request) {
Preconditions.checkNotNull(request);
ResolvableFuture<AppSearchBatchResult<String, Void>> future = ResolvableFuture.create();
@@ -207,14 +197,14 @@
@Override
@NonNull
- public ListenableFuture<Void> remove(
+ @BuildCompat.PrereleaseSdkCheck
+ public ListenableFuture<Void> removeAsync(
@NonNull String queryExpression, @NonNull SearchSpec searchSpec) {
Preconditions.checkNotNull(queryExpression);
Preconditions.checkNotNull(searchSpec);
ResolvableFuture<Void> future = ResolvableFuture.create();
- if (Build.VERSION.SDK_INT == Build.VERSION_CODES.S
- && !searchSpec.getFilterNamespaces().isEmpty()) {
+ if (!BuildCompat.isAtLeastT() && !searchSpec.getFilterNamespaces().isEmpty()) {
// This is a patch for b/197361770, framework-appsearch in Android S will
// disable the given namespace filter if it is not empty and none of given namespaces
// exist.
@@ -223,7 +213,15 @@
mPlatformSession.getNamespaces(
mExecutor,
namespaceResult -> {
- if (namespaceResult.isSuccess()) {
+ if (!namespaceResult.isSuccess()) {
+ future.setException(
+ new AppSearchException(
+ namespaceResult.getResultCode(),
+ namespaceResult.getErrorMessage()));
+ return;
+ }
+
+ try {
Set<String> existingNamespaces = namespaceResult.getResultValue();
List<String> filterNamespaces = searchSpec.getFilterNamespaces();
for (int i = 0; i < filterNamespaces.size(); i++) {
@@ -234,17 +232,18 @@
SearchSpecToPlatformConverter
.toPlatformSearchSpec(searchSpec),
mExecutor,
- removeResult -> AppSearchResultToPlatformConverter
- .platformAppSearchResultToFuture(removeResult,
- future));
+ removeResult ->
+ AppSearchResultToPlatformConverter
+ .platformAppSearchResultToFuture(
+ removeResult, future));
return;
}
}
// None of the namespace in the given namespace filter exists. Return
// early.
future.set(null);
- } else {
- handleFailedPlatformResult(namespaceResult, future);
+ } catch (Throwable t) {
+ future.setException(t);
}
});
} else {
@@ -261,26 +260,19 @@
@Override
@NonNull
- public ListenableFuture<StorageInfo> getStorageInfo() {
+ public ListenableFuture<StorageInfo> getStorageInfoAsync() {
ResolvableFuture<StorageInfo> future = ResolvableFuture.create();
mPlatformSession.getStorageInfo(
mExecutor,
- result -> {
- if (result.isSuccess()) {
- StorageInfo jetpackStorageInfo =
- ResponseToPlatformConverter.toJetpackStorageInfo(
- result.getResultValue());
- future.set(jetpackStorageInfo);
- } else {
- handleFailedPlatformResult(result, future);
- }
- });
+ result -> AppSearchResultToPlatformConverter.platformAppSearchResultToFuture(
+ result, future, ResponseToPlatformConverter::toJetpackStorageInfo)
+ );
return future;
}
@NonNull
@Override
- public ListenableFuture<Void> requestFlush() {
+ public ListenableFuture<Void> requestFlushAsync() {
ResolvableFuture<Void> future = ResolvableFuture.create();
// The data in platform will be flushed by scheduled task. This api won't do anything extra
// flush.
@@ -298,12 +290,4 @@
public void close() {
mPlatformSession.close();
}
-
- private void handleFailedPlatformResult(
- @NonNull android.app.appsearch.AppSearchResult<?> platformResult,
- @NonNull ResolvableFuture<?> future) {
- future.setException(
- new AppSearchException(
- platformResult.getResultCode(), platformResult.getErrorMessage()));
- }
}
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverter.java
index 30a729f..a7d6401 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverter.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/AppSearchResultToPlatformConverter.java
@@ -47,11 +47,18 @@
*/
@SuppressLint("WrongConstant")
@NonNull
- public static <T> AppSearchResult<T> platformAppSearchResultToJetpack(
- @NonNull android.app.appsearch.AppSearchResult<T> platformResult) {
+ public static <PlatformType, JetpackType> AppSearchResult<JetpackType>
+ platformAppSearchResultToJetpack(
+ @NonNull android.app.appsearch.AppSearchResult<PlatformType> platformResult,
+ @NonNull Function<PlatformType, JetpackType> valueMapper) {
Preconditions.checkNotNull(platformResult);
if (platformResult.isSuccess()) {
- return AppSearchResult.newSuccessfulResult(platformResult.getResultValue());
+ try {
+ JetpackType jetpackType = valueMapper.apply(platformResult.getResultValue());
+ return AppSearchResult.newSuccessfulResult(jetpackType);
+ } catch (Throwable t) {
+ return AppSearchResult.throwableToFailedResult(t);
+ }
}
return AppSearchResult.newFailedResult(
// Without the SuppressLint annotation on the method, this line causes a
@@ -62,15 +69,21 @@
/**
* Uses the given {@link android.app.appsearch.AppSearchResult} to populate the given
- * {@link ResolvableFuture}.
+ * {@link ResolvableFuture}, transforming it using {@code valueMapper}.
*/
- public static <T> void platformAppSearchResultToFuture(
- @NonNull android.app.appsearch.AppSearchResult<T> platformResult,
- @NonNull ResolvableFuture<T> future) {
+ public static <PlatformType, JetpackType> void platformAppSearchResultToFuture(
+ @NonNull android.app.appsearch.AppSearchResult<PlatformType> platformResult,
+ @NonNull ResolvableFuture<JetpackType> future,
+ @NonNull Function<PlatformType, JetpackType> valueMapper) {
Preconditions.checkNotNull(platformResult);
Preconditions.checkNotNull(future);
if (platformResult.isSuccess()) {
- future.set(platformResult.getResultValue());
+ try {
+ JetpackType jetpackType = valueMapper.apply(platformResult.getResultValue());
+ future.set(jetpackType);
+ } catch (Throwable t) {
+ future.setException(t);
+ }
} else {
future.setException(
new AppSearchException(
@@ -79,6 +92,16 @@
}
/**
+ * Uses the given {@link android.app.appsearch.AppSearchResult} to populate the given
+ * {@link ResolvableFuture}.
+ */
+ public static <T> void platformAppSearchResultToFuture(
+ @NonNull android.app.appsearch.AppSearchResult<T> platformResult,
+ @NonNull ResolvableFuture<T> future) {
+ platformAppSearchResultToFuture(platformResult, future, Function.identity());
+ }
+
+ /**
* Converts the given platform {@link android.app.appsearch.AppSearchBatchResult} to a Jetpack
* {@link AppSearchBatchResult}.
*
@@ -95,8 +118,13 @@
AppSearchBatchResult.Builder<K, JetpackValue> jetpackResult =
new AppSearchBatchResult.Builder<>();
for (Map.Entry<K, PlatformValue> success : platformResult.getSuccesses().entrySet()) {
- JetpackValue jetpackValue = valueMapper.apply(success.getValue());
- jetpackResult.setSuccess(success.getKey(), jetpackValue);
+ try {
+ JetpackValue jetpackValue = valueMapper.apply(success.getValue());
+ jetpackResult.setSuccess(success.getKey(), jetpackValue);
+ } catch (Throwable t) {
+ jetpackResult.setResult(
+ success.getKey(), AppSearchResult.throwableToFailedResult(t));
+ }
}
for (Map.Entry<K, android.app.appsearch.AppSearchResult<PlatformValue>> failure :
platformResult.getFailures().entrySet()) {
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GenericDocumentToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GenericDocumentToPlatformConverter.java
index 3838191..004fcc4 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GenericDocumentToPlatformConverter.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GenericDocumentToPlatformConverter.java
@@ -61,9 +61,24 @@
} else if (property instanceof boolean[]) {
platformBuilder.setPropertyBoolean(propertyName, (boolean[]) property);
} else if (property instanceof byte[][]) {
- platformBuilder.setPropertyBytes(propertyName, (byte[][]) property);
+ byte[][] byteValues = (byte[][]) property;
+ // This is a patch for b/204677124, framework-appsearch in Android S and S_V2 will
+ // crash if the user put a document with empty byte[][] or document[].
+ if ((Build.VERSION.SDK_INT == Build.VERSION_CODES.S
+ || Build.VERSION.SDK_INT == Build.VERSION_CODES.S_V2)
+ && byteValues.length == 0) {
+ continue;
+ }
+ platformBuilder.setPropertyBytes(propertyName, byteValues);
} else if (property instanceof GenericDocument[]) {
GenericDocument[] documentValues = (GenericDocument[]) property;
+ // This is a patch for b/204677124, framework-appsearch in Android S and S_V2 will
+ // crash if the user put a document with empty byte[][] or document[].
+ if ((Build.VERSION.SDK_INT == Build.VERSION_CODES.S
+ || Build.VERSION.SDK_INT == Build.VERSION_CODES.S_V2)
+ && documentValues.length == 0) {
+ continue;
+ }
android.app.appsearch.GenericDocument[] platformSubDocuments =
new android.app.appsearch.GenericDocument[documentValues.length];
for (int j = 0; j < documentValues.length; j++) {
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GetSchemaResponseToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GetSchemaResponseToPlatformConverter.java
new file mode 100644
index 0000000..b69caca
--- /dev/null
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GetSchemaResponseToPlatformConverter.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.platformstorage.converter;
+
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
+import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.collection.ArraySet;
+import androidx.core.os.BuildCompat;
+import androidx.core.util.Preconditions;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Translates between Platform and Jetpack versions of {@link GetSchemaResponse}.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+@RequiresApi(Build.VERSION_CODES.S)
+public final class GetSchemaResponseToPlatformConverter {
+ private GetSchemaResponseToPlatformConverter() {}
+
+ /**
+ * Translates a platform {@link android.app.appsearch.GetSchemaResponse} into a jetpack
+ * {@link GetSchemaResponse}.
+ */
+ @NonNull
+ @BuildCompat.PrereleaseSdkCheck
+ public static GetSchemaResponse toJetpackGetSchemaResponse(
+ @NonNull android.app.appsearch.GetSchemaResponse platformResponse) {
+ Preconditions.checkNotNull(platformResponse);
+ GetSchemaResponse.Builder jetpackBuilder;
+ if (!BuildCompat.isAtLeastT()) {
+ // Android API level in S-v2 and lower won't have any supported feature.
+ jetpackBuilder = new GetSchemaResponse.Builder(/*getVisibilitySettingSupported=*/false);
+ } else {
+ // The regular builder has all supported features.
+ jetpackBuilder = new GetSchemaResponse.Builder();
+ }
+ for (android.app.appsearch.AppSearchSchema platformSchema : platformResponse.getSchemas()) {
+ jetpackBuilder.addSchema(SchemaToPlatformConverter.toJetpackSchema(platformSchema));
+ }
+ jetpackBuilder.setVersion(platformResponse.getVersion());
+ if (BuildCompat.isAtLeastT()) {
+ // Convert schemas not displayed by system
+ for (String schemaTypeNotDisplayedBySystem :
+ platformResponse.getSchemaTypesNotDisplayedBySystem()) {
+ jetpackBuilder.addSchemaTypeNotDisplayedBySystem(schemaTypeNotDisplayedBySystem);
+ }
+ // Convert schemas visible to packages
+ convertSchemasVisibleToPackages(platformResponse, jetpackBuilder);
+ // Convert schemas visible to permissions
+ for (Map.Entry<String, Set<Set<Integer>>> entry :
+ platformResponse.getRequiredPermissionsForSchemaTypeVisibility().entrySet()) {
+ jetpackBuilder.setRequiredPermissionsForSchemaTypeVisibility(entry.getKey(),
+ entry.getValue());
+ }
+ }
+ return jetpackBuilder.build();
+ }
+
+ /**
+ * Adds package visibilities in a platform {@link android.app.appsearch.GetSchemaResponse} into
+ * the given jetpack {@link GetSchemaResponse}.
+ */
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ private static void convertSchemasVisibleToPackages(
+ @NonNull android.app.appsearch.GetSchemaResponse platformResponse,
+ @NonNull GetSchemaResponse.Builder jetpackBuilder) {
+ // TODO(b/205749173): If there were no packages, getSchemaTypesVisibleToPackages
+ // incorrectly returns {@code null} in some prerelease versions of Android T. Remove
+ // this workaround after the issue is fixed in T.
+ Map<String, Set<android.app.appsearch.PackageIdentifier>> schemaTypesVisibleToPackages =
+ platformResponse.getSchemaTypesVisibleToPackages();
+ if (schemaTypesVisibleToPackages != null) {
+ for (Map.Entry<String, Set<android.app.appsearch.PackageIdentifier>> entry
+ : schemaTypesVisibleToPackages.entrySet()) {
+ Set<PackageIdentifier> jetpackPackageIdentifiers =
+ new ArraySet<>(entry.getValue().size());
+ for (android.app.appsearch.PackageIdentifier frameworkPackageIdentifier
+ : entry.getValue()) {
+ jetpackPackageIdentifiers.add(new PackageIdentifier(
+ frameworkPackageIdentifier.getPackageName(),
+ frameworkPackageIdentifier.getSha256Certificate()));
+ }
+ jetpackBuilder.setSchemaTypeVisibleToPackages(
+ entry.getKey(), jetpackPackageIdentifiers);
+ }
+ }
+ }
+}
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/ObserverSpecToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/ObserverSpecToPlatformConverter.java
new file mode 100644
index 0000000..41ca827
--- /dev/null
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/ObserverSpecToPlatformConverter.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.platformstorage.converter;
+
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
+import androidx.appsearch.observer.DocumentChangeInfo;
+import androidx.appsearch.observer.ObserverSpec;
+import androidx.appsearch.observer.SchemaChangeInfo;
+import androidx.core.util.Preconditions;
+
+/**
+ * Translates between Platform and Jetpack versions of {@link ObserverSpec}.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+public final class ObserverSpecToPlatformConverter {
+ private ObserverSpecToPlatformConverter() {}
+
+ /**
+ * Translates a jetpack {@link ObserverSpec} into a platform
+ * {@link android.app.appsearch.observer.ObserverSpec}.
+ */
+ @NonNull
+ public static android.app.appsearch.observer.ObserverSpec toPlatformObserverSpec(
+ @NonNull ObserverSpec jetpackSpec) {
+ Preconditions.checkNotNull(jetpackSpec);
+ return new android.app.appsearch.observer.ObserverSpec.Builder()
+ .addFilterSchemas(jetpackSpec.getFilterSchemas())
+ .build();
+ }
+
+ /**
+ * Translates a platform {@link androidx.appsearch.observer.SchemaChangeInfo} into a jetpack
+ * {@link SchemaChangeInfo}.
+ */
+ @NonNull
+ public static SchemaChangeInfo toJetpackSchemaChangeInfo(
+ @NonNull android.app.appsearch.observer.SchemaChangeInfo platformInfo) {
+ Preconditions.checkNotNull(platformInfo);
+ return new SchemaChangeInfo(
+ platformInfo.getPackageName(),
+ platformInfo.getDatabaseName(),
+ platformInfo.getChangedSchemaNames());
+ }
+
+ /**
+ * Translates a platform {@link androidx.appsearch.observer.DocumentChangeInfo} into a jetpack
+ * {@link DocumentChangeInfo}.
+ */
+ @NonNull
+ public static DocumentChangeInfo toJetpackDocumentChangeInfo(
+ @NonNull android.app.appsearch.observer.DocumentChangeInfo platformInfo) {
+ Preconditions.checkNotNull(platformInfo);
+ return new DocumentChangeInfo(
+ platformInfo.getPackageName(),
+ platformInfo.getDatabaseName(),
+ platformInfo.getNamespace(),
+ platformInfo.getSchemaName(),
+ platformInfo.getChangedDocumentIds());
+ }
+}
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchResultToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchResultToPlatformConverter.java
index 841cbe7..707234d 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchResultToPlatformConverter.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchResultToPlatformConverter.java
@@ -23,6 +23,7 @@
import androidx.annotation.RestrictTo;
import androidx.appsearch.app.GenericDocument;
import androidx.appsearch.app.SearchResult;
+import androidx.core.os.BuildCompat;
import androidx.core.util.Preconditions;
import java.util.List;
@@ -37,6 +38,7 @@
private SearchResultToPlatformConverter() {}
/** Translates from Platform to Jetpack versions of {@link SearchResult}. */
+ @BuildCompat.PrereleaseSdkCheck
@NonNull
public static SearchResult toJetpackSearchResult(
@NonNull android.app.appsearch.SearchResult platformResult) {
@@ -56,13 +58,13 @@
return builder.build();
}
+ @BuildCompat.PrereleaseSdkCheck
@NonNull
private static SearchResult.MatchInfo toJetpackMatchInfo(
@NonNull android.app.appsearch.SearchResult.MatchInfo platformMatchInfo) {
Preconditions.checkNotNull(platformMatchInfo);
- // TODO(b/201316758) : Copy over submatch range info once it is added to
- // framework-appsearch.
- return new SearchResult.MatchInfo.Builder(platformMatchInfo.getPropertyPath())
+ SearchResult.MatchInfo.Builder builder = new SearchResult.MatchInfo.Builder(
+ platformMatchInfo.getPropertyPath())
.setExactMatchRange(
new SearchResult.MatchRange(
platformMatchInfo.getExactMatchRange().getStart(),
@@ -70,7 +72,13 @@
.setSnippetRange(
new SearchResult.MatchRange(
platformMatchInfo.getSnippetRange().getStart(),
- platformMatchInfo.getSnippetRange().getEnd()))
- .build();
+ platformMatchInfo.getSnippetRange().getEnd()));
+ if (BuildCompat.isAtLeastT()) {
+ builder.setSubmatchRange(
+ new SearchResult.MatchRange(
+ platformMatchInfo.getSubmatchRange().getStart(),
+ platformMatchInfo.getSubmatchRange().getEnd()));
+ }
+ return builder.build();
}
}
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SetSchemaRequestToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SetSchemaRequestToPlatformConverter.java
index ca52112..6950427 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SetSchemaRequestToPlatformConverter.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SetSchemaRequestToPlatformConverter.java
@@ -27,10 +27,12 @@
import androidx.appsearch.app.PackageIdentifier;
import androidx.appsearch.app.SetSchemaRequest;
import androidx.appsearch.app.SetSchemaResponse;
+import androidx.core.os.BuildCompat;
import androidx.core.util.Preconditions;
import java.util.Map;
import java.util.Set;
+import java.util.function.Function;
/**
* Translates between Platform and Jetpack versions of {@link SetSchemaRequest}.
@@ -45,6 +47,7 @@
* Translates a jetpack {@link SetSchemaRequest} into a platform
* {@link android.app.appsearch.SetSchemaRequest}.
*/
+ @BuildCompat.PrereleaseSdkCheck
@NonNull
public static android.app.appsearch.SetSchemaRequest toPlatformSetSchemaRequest(
@NonNull SetSchemaRequest jetpackRequest) {
@@ -70,6 +73,20 @@
jetpackPackageIdentifier.getSha256Certificate()));
}
}
+ if (!jetpackRequest.getRequiredPermissionsForSchemaTypeVisibility().isEmpty()) {
+ if (!BuildCompat.isAtLeastT()) {
+ throw new UnsupportedOperationException(
+ "Set required permissions for schema type visibility are not supported "
+ + "with this backend/Android API level combination.");
+ }
+ for (Map.Entry<String, Set<Set<Integer>>> entry :
+ jetpackRequest.getRequiredPermissionsForSchemaTypeVisibility().entrySet()) {
+ for (Set<Integer> permissionGroup : entry.getValue()) {
+ platformBuilder.addRequiredPermissionsForSchemaTypeVisibility(
+ entry.getKey(), permissionGroup);
+ }
+ }
+ }
for (Map.Entry<String, Migrator> entry : jetpackRequest.getMigrators().entrySet()) {
Migrator jetpackMigrator = entry.getValue();
android.app.appsearch.Migrator platformMigrator = new android.app.appsearch.Migrator() {
@@ -141,7 +158,8 @@
migrationFailure.getDocumentId(),
migrationFailure.getSchemaType(),
AppSearchResultToPlatformConverter.platformAppSearchResultToJetpack(
- migrationFailure.getAppSearchResult())));
+ migrationFailure.getAppSearchResult(), Function.identity()))
+ );
}
return jetpackBuilder.build();
}
diff --git a/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/AppSearchTestUtils.java b/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/AppSearchTestUtils.java
index f578822..3c2943e 100644
--- a/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/AppSearchTestUtils.java
+++ b/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/AppSearchTestUtils.java
@@ -27,6 +27,7 @@
import androidx.appsearch.app.GetByDocumentIdRequest;
import androidx.appsearch.app.SearchResult;
import androidx.appsearch.app.SearchResults;
+import androidx.appsearch.localstorage.visibilitystore.VisibilityChecker;
import java.util.ArrayList;
import java.util.List;
@@ -59,7 +60,7 @@
@NonNull AppSearchSession session, @NonNull String namespace, @NonNull String... ids)
throws Exception {
AppSearchBatchResult<String, GenericDocument> result = checkIsBatchResultSuccess(
- session.getByDocumentId(
+ session.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder(namespace).addIds(ids).build()));
assertThat(result.getSuccesses()).hasSize(ids.length);
assertThat(result.getFailures()).isEmpty();
@@ -76,7 +77,7 @@
@NonNull AppSearchSession session, @NonNull GetByDocumentIdRequest request)
throws Exception {
AppSearchBatchResult<String, GenericDocument> result = checkIsBatchResultSuccess(
- session.getByDocumentId(request));
+ session.getByDocumentIdAsync(request));
Set<String> ids = request.getIds();
assertThat(result.getSuccesses()).hasSize(ids.size());
assertThat(result.getFailures()).isEmpty();
@@ -104,12 +105,24 @@
@NonNull
public static List<SearchResult> retrieveAllSearchResults(@NonNull SearchResults searchResults)
throws Exception {
- List<SearchResult> page = searchResults.getNextPage().get();
+ List<SearchResult> page = searchResults.getNextPageAsync().get();
List<SearchResult> results = new ArrayList<>();
while (!page.isEmpty()) {
results.addAll(page);
- page = searchResults.getNextPage().get();
+ page = searchResults.getNextPageAsync().get();
}
return results;
}
+
+ /**
+ * Creates a mock {@link VisibilityChecker}.
+ * @param visiblePrefixedSchemas Schema types that are accessible to any caller.
+ * @return
+ */
+ @NonNull
+ public static VisibilityChecker createMockVisibilityChecker(
+ @NonNull Set<String> visiblePrefixedSchemas) {
+ return (callerAccess, packageName, prefixedSchema, visibilityStore) ->
+ visiblePrefixedSchemas.contains(prefixedSchema);
+ }
}
diff --git a/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/TestObserverCallback.java b/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/TestObserverCallback.java
index 93cb2ce..a22d02e 100644
--- a/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/TestObserverCallback.java
+++ b/appsearch/appsearch-test-util/src/main/java/androidx/appsearch/testutil/TestObserverCallback.java
@@ -19,15 +19,15 @@
import androidx.annotation.GuardedBy;
import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
-import androidx.appsearch.observer.AppSearchObserverCallback;
import androidx.appsearch.observer.DocumentChangeInfo;
+import androidx.appsearch.observer.ObserverCallback;
import androidx.appsearch.observer.SchemaChangeInfo;
import java.util.ArrayList;
import java.util.List;
/**
- * An implementation of {@link androidx.appsearch.observer.AppSearchObserverCallback} for testing
+ * An implementation of {@link androidx.appsearch.observer.ObserverCallback} for testing
* that caches its notifications in memory.
*
* <p>You should wait for all notifications to be delivered using {@link #waitForNotificationCount}
@@ -36,7 +36,7 @@
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class TestObserverCallback implements AppSearchObserverCallback {
+public class TestObserverCallback implements ObserverCallback {
private final Object mLock = new Object();
private final List<SchemaChangeInfo> mSchemaChanges = new ArrayList<>();
@@ -81,7 +81,11 @@
+ expectedCount
+ " notifications but there are"
+ " already "
- + actualCount);
+ + actualCount
+ + ".\n Schema changes: "
+ + mSchemaChanges
+ + "\n Document changes: "
+ + mDocumentChanges);
} else if (actualCount == expectedCount) {
return;
} else {
@@ -111,6 +115,16 @@
return mDocumentChanges;
}
+ /** Removes all notifications captured by this callback and resets the count to 0. */
+ public void clear() {
+ synchronized (mLock) {
+ mSchemaChanges.clear();
+ mDocumentChanges.clear();
+ mNotificationCountLocked = 0;
+ mLock.notifyAll();
+ }
+ }
+
private void incrementNotificationCountLocked() {
synchronized (mLock) {
mNotificationCountLocked++;
diff --git a/appsearch/appsearch/api/api_lint.ignore b/appsearch/appsearch/api/api_lint.ignore
index 36bb389..aa14c59 100644
--- a/appsearch/appsearch/api/api_lint.ignore
+++ b/appsearch/appsearch/api/api_lint.ignore
@@ -19,6 +19,8 @@
Methods returning com.google.common.util.concurrent.ListenableFuture should have a suffix *Async to reserve unmodified name for a suspend function
AsyncSuffixFuture: androidx.appsearch.app.AppSearchSession#setSchema(androidx.appsearch.app.SetSchemaRequest):
Methods returning com.google.common.util.concurrent.ListenableFuture should have a suffix *Async to reserve unmodified name for a suspend function
+AsyncSuffixFuture: androidx.appsearch.app.GlobalSearchSession#getSchema(String, String):
+ Methods returning com.google.common.util.concurrent.ListenableFuture should have a suffix *Async to reserve unmodified name for a suspend function
AsyncSuffixFuture: androidx.appsearch.app.GlobalSearchSession#reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest):
Methods returning com.google.common.util.concurrent.ListenableFuture should have a suffix *Async to reserve unmodified name for a suspend function
AsyncSuffixFuture: androidx.appsearch.app.SearchResults#getNextPage():
diff --git a/appsearch/appsearch/api/current.txt b/appsearch/appsearch/api/current.txt
index 91b14d5..9818d8b 100644
--- a/appsearch/appsearch/api/current.txt
+++ b/appsearch/appsearch/api/current.txt
@@ -177,18 +177,28 @@
public interface AppSearchSession extends java.io.Closeable {
method public void close();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentId(androidx.appsearch.app.GetByDocumentIdRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentId(androidx.appsearch.app.GetByDocumentIdRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentIdAsync(androidx.appsearch.app.GetByDocumentIdRequest);
method public androidx.appsearch.app.Features getFeatures();
- method public com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespaces();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfo();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> put(androidx.appsearch.app.PutDocumentsRequest);
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> remove(androidx.appsearch.app.RemoveByDocumentIdRequest);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> remove(String, androidx.appsearch.app.SearchSpec);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsage(androidx.appsearch.app.ReportUsageRequest);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlush();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespaces();
+ method public com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespacesAsync();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema();
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchemaAsync();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfo();
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfoAsync();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> put(androidx.appsearch.app.PutDocumentsRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> putAsync(androidx.appsearch.app.PutDocumentsRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> remove(androidx.appsearch.app.RemoveByDocumentIdRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> remove(String, androidx.appsearch.app.SearchSpec);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> removeAsync(androidx.appsearch.app.RemoveByDocumentIdRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> removeAsync(String, androidx.appsearch.app.SearchSpec);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsage(androidx.appsearch.app.ReportUsageRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsageAsync(androidx.appsearch.app.ReportUsageRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlush();
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlushAsync();
method public androidx.appsearch.app.SearchResults search(String, androidx.appsearch.app.SearchSpec);
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchema(androidx.appsearch.app.SetSchemaRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchema(androidx.appsearch.app.SetSchemaRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchemaAsync(androidx.appsearch.app.SetSchemaRequest);
}
public interface DocumentClassFactory<T> {
@@ -200,7 +210,10 @@
public interface Features {
method public boolean isFeatureSupported(String);
- field public static final String GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER = "GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER";
+ field public static final String ADD_PERMISSIONS_AND_GET_VISIBILITY = "ADD_PERMISSIONS_AND_GET_VISIBILITY";
+ field public static final String GLOBAL_SEARCH_SESSION_GET_BY_ID = "GLOBAL_SEARCH_SESSION_GET_BY_ID";
+ field public static final String GLOBAL_SEARCH_SESSION_GET_SCHEMA = "GLOBAL_SEARCH_SESSION_GET_SCHEMA";
+ field public static final String GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK = "GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK";
field public static final String SEARCH_RESULT_MATCH_INFO_SUBMATCH = "SEARCH_RESULT_MATCH_INFO_SUBMATCH";
}
@@ -266,6 +279,9 @@
}
public final class GetSchemaResponse {
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Map<java.lang.String!,java.util.Set<java.util.Set<java.lang.Integer!>!>!> getRequiredPermissionsForSchemaTypeVisibility();
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Set<java.lang.String!> getSchemaTypesNotDisplayedBySystem();
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Map<java.lang.String!,java.util.Set<androidx.appsearch.app.PackageIdentifier!>!> getSchemaTypesVisibleToPackages();
method public java.util.Set<androidx.appsearch.app.AppSearchSchema!> getSchemas();
method @IntRange(from=0) public int getVersion();
}
@@ -273,17 +289,24 @@
public static final class GetSchemaResponse.Builder {
ctor public GetSchemaResponse.Builder();
method public androidx.appsearch.app.GetSchemaResponse.Builder addSchema(androidx.appsearch.app.AppSearchSchema);
+ method public androidx.appsearch.app.GetSchemaResponse.Builder addSchemaTypeNotDisplayedBySystem(String);
method public androidx.appsearch.app.GetSchemaResponse build();
+ method public androidx.appsearch.app.GetSchemaResponse.Builder setRequiredPermissionsForSchemaTypeVisibility(String, java.util.Set<java.util.Set<java.lang.Integer!>!>);
+ method public androidx.appsearch.app.GetSchemaResponse.Builder setSchemaTypeVisibleToPackages(String, java.util.Set<androidx.appsearch.app.PackageIdentifier!>);
method public androidx.appsearch.app.GetSchemaResponse.Builder setVersion(@IntRange(from=0) int);
}
public interface GlobalSearchSession extends java.io.Closeable {
- method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER) public void addObserver(String, androidx.appsearch.observer.ObserverSpec, java.util.concurrent.Executor, androidx.appsearch.observer.AppSearchObserverCallback);
method public void close();
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_BY_ID) public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentIdAsync(String, String, androidx.appsearch.app.GetByDocumentIdRequest);
method public androidx.appsearch.app.Features getFeatures();
- method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER) public void removeObserver(String, androidx.appsearch.observer.AppSearchObserverCallback);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest);
+ method @Deprecated @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA) public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema(String, String);
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA) public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchemaAsync(String, String);
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK) public void registerObserverCallback(String, androidx.appsearch.observer.ObserverSpec, java.util.concurrent.Executor, androidx.appsearch.observer.ObserverCallback) throws androidx.appsearch.exceptions.AppSearchException;
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsageAsync(androidx.appsearch.app.ReportSystemUsageRequest);
method public androidx.appsearch.app.SearchResults search(String, androidx.appsearch.app.SearchSpec);
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK) public void unregisterObserverCallback(String, androidx.appsearch.observer.ObserverCallback) throws androidx.appsearch.exceptions.AppSearchException;
}
public abstract class Migrator {
@@ -299,6 +322,22 @@
method public byte[] getSha256Certificate();
}
+ public class PropertyPath implements java.lang.Iterable<androidx.appsearch.app.PropertyPath.PathSegment> {
+ ctor public PropertyPath(java.util.List<androidx.appsearch.app.PropertyPath.PathSegment!>);
+ ctor public PropertyPath(String);
+ method public androidx.appsearch.app.PropertyPath.PathSegment get(int);
+ method public java.util.Iterator<androidx.appsearch.app.PropertyPath.PathSegment!> iterator();
+ method public int size();
+ }
+
+ public static class PropertyPath.PathSegment {
+ method public static androidx.appsearch.app.PropertyPath.PathSegment create(String, int);
+ method public static androidx.appsearch.app.PropertyPath.PathSegment create(String);
+ method public int getPropertyIndex();
+ method public String getPropertyName();
+ field public static final int NON_REPEATED_CARDINALITY = -1; // 0xffffffff
+ }
+
public final class PutDocumentsRequest {
method public java.util.List<androidx.appsearch.app.GenericDocument!> getGenericDocuments();
}
@@ -373,6 +412,7 @@
method public androidx.appsearch.app.SearchResult.MatchRange getExactMatchRange();
method public String getFullText();
method public String getPropertyPath();
+ method public androidx.appsearch.app.PropertyPath getPropertyPathObject();
method public CharSequence getSnippet();
method public androidx.appsearch.app.SearchResult.MatchRange getSnippetRange();
method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH) public CharSequence getSubmatch();
@@ -395,7 +435,8 @@
public interface SearchResults extends java.io.Closeable {
method public void close();
- method public com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPage();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPage();
+ method public com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPageAsync();
}
public final class SearchSpec {
@@ -453,20 +494,31 @@
public final class SetSchemaRequest {
method public java.util.Map<java.lang.String!,androidx.appsearch.app.Migrator!> getMigrators();
+ method public java.util.Map<java.lang.String!,java.util.Set<java.util.Set<java.lang.Integer!>!>!> getRequiredPermissionsForSchemaTypeVisibility();
method public java.util.Set<androidx.appsearch.app.AppSearchSchema!> getSchemas();
method public java.util.Set<java.lang.String!> getSchemasNotDisplayedBySystem();
method public java.util.Map<java.lang.String!,java.util.Set<androidx.appsearch.app.PackageIdentifier!>!> getSchemasVisibleToPackages();
method @IntRange(from=1) public int getVersion();
method public boolean isForceOverride();
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_ASSISTANT_APP_SEARCH_DATA = 6; // 0x6
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_CALENDAR = 2; // 0x2
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_CONTACTS = 3; // 0x3
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_EXTERNAL_STORAGE = 4; // 0x4
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_HOME_APP_SEARCH_DATA = 5; // 0x5
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_SMS = 1; // 0x1
}
public static final class SetSchemaRequest.Builder {
ctor public SetSchemaRequest.Builder();
method public androidx.appsearch.app.SetSchemaRequest.Builder addDocumentClasses(Class<?>!...) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SetSchemaRequest.Builder addDocumentClasses(java.util.Collection<? extends java.lang.Class<?>>) throws androidx.appsearch.exceptions.AppSearchException;
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder addRequiredPermissionsForDocumentClassVisibility(Class<?>, java.util.Set<java.lang.Integer!>) throws androidx.appsearch.exceptions.AppSearchException;
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder addRequiredPermissionsForSchemaTypeVisibility(String, java.util.Set<java.lang.Integer!>);
method public androidx.appsearch.app.SetSchemaRequest.Builder addSchemas(androidx.appsearch.app.AppSearchSchema!...);
method public androidx.appsearch.app.SetSchemaRequest.Builder addSchemas(java.util.Collection<androidx.appsearch.app.AppSearchSchema!>);
method public androidx.appsearch.app.SetSchemaRequest build();
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder clearRequiredPermissionsForDocumentClassVisibility(Class<?>) throws androidx.appsearch.exceptions.AppSearchException;
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder clearRequiredPermissionsForSchemaTypeVisibility(String);
method public androidx.appsearch.app.SetSchemaRequest.Builder setDocumentClassDisplayedBySystem(Class<?>, boolean) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SetSchemaRequest.Builder setDocumentClassVisibilityForPackage(Class<?>, boolean, androidx.appsearch.app.PackageIdentifier) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SetSchemaRequest.Builder setForceOverride(boolean);
@@ -535,19 +587,20 @@
package androidx.appsearch.observer {
- public interface AppSearchObserverCallback {
- method public void onDocumentChanged(androidx.appsearch.observer.DocumentChangeInfo);
- method public void onSchemaChanged(androidx.appsearch.observer.SchemaChangeInfo);
- }
-
public final class DocumentChangeInfo {
- ctor public DocumentChangeInfo(String, String, String, String);
+ ctor public DocumentChangeInfo(String, String, String, String, java.util.Set<java.lang.String!>);
+ method public java.util.Set<java.lang.String!> getChangedDocumentIds();
method public String getDatabaseName();
method public String getNamespace();
method public String getPackageName();
method public String getSchemaName();
}
+ public interface ObserverCallback {
+ method public void onDocumentChanged(androidx.appsearch.observer.DocumentChangeInfo);
+ method public void onSchemaChanged(androidx.appsearch.observer.SchemaChangeInfo);
+ }
+
public final class ObserverSpec {
method public java.util.Set<java.lang.String!> getFilterSchemas();
}
@@ -562,7 +615,8 @@
}
public final class SchemaChangeInfo {
- ctor public SchemaChangeInfo(String, String);
+ ctor public SchemaChangeInfo(String, String, java.util.Set<java.lang.String!>);
+ method public java.util.Set<java.lang.String!> getChangedSchemaNames();
method public String getDatabaseName();
method public String getPackageName();
}
diff --git a/appsearch/appsearch/api/public_plus_experimental_current.txt b/appsearch/appsearch/api/public_plus_experimental_current.txt
index 91b14d5..9818d8b 100644
--- a/appsearch/appsearch/api/public_plus_experimental_current.txt
+++ b/appsearch/appsearch/api/public_plus_experimental_current.txt
@@ -177,18 +177,28 @@
public interface AppSearchSession extends java.io.Closeable {
method public void close();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentId(androidx.appsearch.app.GetByDocumentIdRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentId(androidx.appsearch.app.GetByDocumentIdRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentIdAsync(androidx.appsearch.app.GetByDocumentIdRequest);
method public androidx.appsearch.app.Features getFeatures();
- method public com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespaces();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfo();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> put(androidx.appsearch.app.PutDocumentsRequest);
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> remove(androidx.appsearch.app.RemoveByDocumentIdRequest);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> remove(String, androidx.appsearch.app.SearchSpec);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsage(androidx.appsearch.app.ReportUsageRequest);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlush();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespaces();
+ method public com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespacesAsync();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema();
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchemaAsync();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfo();
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfoAsync();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> put(androidx.appsearch.app.PutDocumentsRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> putAsync(androidx.appsearch.app.PutDocumentsRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> remove(androidx.appsearch.app.RemoveByDocumentIdRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> remove(String, androidx.appsearch.app.SearchSpec);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> removeAsync(androidx.appsearch.app.RemoveByDocumentIdRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> removeAsync(String, androidx.appsearch.app.SearchSpec);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsage(androidx.appsearch.app.ReportUsageRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsageAsync(androidx.appsearch.app.ReportUsageRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlush();
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlushAsync();
method public androidx.appsearch.app.SearchResults search(String, androidx.appsearch.app.SearchSpec);
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchema(androidx.appsearch.app.SetSchemaRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchema(androidx.appsearch.app.SetSchemaRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchemaAsync(androidx.appsearch.app.SetSchemaRequest);
}
public interface DocumentClassFactory<T> {
@@ -200,7 +210,10 @@
public interface Features {
method public boolean isFeatureSupported(String);
- field public static final String GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER = "GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER";
+ field public static final String ADD_PERMISSIONS_AND_GET_VISIBILITY = "ADD_PERMISSIONS_AND_GET_VISIBILITY";
+ field public static final String GLOBAL_SEARCH_SESSION_GET_BY_ID = "GLOBAL_SEARCH_SESSION_GET_BY_ID";
+ field public static final String GLOBAL_SEARCH_SESSION_GET_SCHEMA = "GLOBAL_SEARCH_SESSION_GET_SCHEMA";
+ field public static final String GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK = "GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK";
field public static final String SEARCH_RESULT_MATCH_INFO_SUBMATCH = "SEARCH_RESULT_MATCH_INFO_SUBMATCH";
}
@@ -266,6 +279,9 @@
}
public final class GetSchemaResponse {
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Map<java.lang.String!,java.util.Set<java.util.Set<java.lang.Integer!>!>!> getRequiredPermissionsForSchemaTypeVisibility();
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Set<java.lang.String!> getSchemaTypesNotDisplayedBySystem();
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Map<java.lang.String!,java.util.Set<androidx.appsearch.app.PackageIdentifier!>!> getSchemaTypesVisibleToPackages();
method public java.util.Set<androidx.appsearch.app.AppSearchSchema!> getSchemas();
method @IntRange(from=0) public int getVersion();
}
@@ -273,17 +289,24 @@
public static final class GetSchemaResponse.Builder {
ctor public GetSchemaResponse.Builder();
method public androidx.appsearch.app.GetSchemaResponse.Builder addSchema(androidx.appsearch.app.AppSearchSchema);
+ method public androidx.appsearch.app.GetSchemaResponse.Builder addSchemaTypeNotDisplayedBySystem(String);
method public androidx.appsearch.app.GetSchemaResponse build();
+ method public androidx.appsearch.app.GetSchemaResponse.Builder setRequiredPermissionsForSchemaTypeVisibility(String, java.util.Set<java.util.Set<java.lang.Integer!>!>);
+ method public androidx.appsearch.app.GetSchemaResponse.Builder setSchemaTypeVisibleToPackages(String, java.util.Set<androidx.appsearch.app.PackageIdentifier!>);
method public androidx.appsearch.app.GetSchemaResponse.Builder setVersion(@IntRange(from=0) int);
}
public interface GlobalSearchSession extends java.io.Closeable {
- method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER) public void addObserver(String, androidx.appsearch.observer.ObserverSpec, java.util.concurrent.Executor, androidx.appsearch.observer.AppSearchObserverCallback);
method public void close();
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_BY_ID) public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentIdAsync(String, String, androidx.appsearch.app.GetByDocumentIdRequest);
method public androidx.appsearch.app.Features getFeatures();
- method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER) public void removeObserver(String, androidx.appsearch.observer.AppSearchObserverCallback);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest);
+ method @Deprecated @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA) public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema(String, String);
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA) public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchemaAsync(String, String);
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK) public void registerObserverCallback(String, androidx.appsearch.observer.ObserverSpec, java.util.concurrent.Executor, androidx.appsearch.observer.ObserverCallback) throws androidx.appsearch.exceptions.AppSearchException;
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsageAsync(androidx.appsearch.app.ReportSystemUsageRequest);
method public androidx.appsearch.app.SearchResults search(String, androidx.appsearch.app.SearchSpec);
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK) public void unregisterObserverCallback(String, androidx.appsearch.observer.ObserverCallback) throws androidx.appsearch.exceptions.AppSearchException;
}
public abstract class Migrator {
@@ -299,6 +322,22 @@
method public byte[] getSha256Certificate();
}
+ public class PropertyPath implements java.lang.Iterable<androidx.appsearch.app.PropertyPath.PathSegment> {
+ ctor public PropertyPath(java.util.List<androidx.appsearch.app.PropertyPath.PathSegment!>);
+ ctor public PropertyPath(String);
+ method public androidx.appsearch.app.PropertyPath.PathSegment get(int);
+ method public java.util.Iterator<androidx.appsearch.app.PropertyPath.PathSegment!> iterator();
+ method public int size();
+ }
+
+ public static class PropertyPath.PathSegment {
+ method public static androidx.appsearch.app.PropertyPath.PathSegment create(String, int);
+ method public static androidx.appsearch.app.PropertyPath.PathSegment create(String);
+ method public int getPropertyIndex();
+ method public String getPropertyName();
+ field public static final int NON_REPEATED_CARDINALITY = -1; // 0xffffffff
+ }
+
public final class PutDocumentsRequest {
method public java.util.List<androidx.appsearch.app.GenericDocument!> getGenericDocuments();
}
@@ -373,6 +412,7 @@
method public androidx.appsearch.app.SearchResult.MatchRange getExactMatchRange();
method public String getFullText();
method public String getPropertyPath();
+ method public androidx.appsearch.app.PropertyPath getPropertyPathObject();
method public CharSequence getSnippet();
method public androidx.appsearch.app.SearchResult.MatchRange getSnippetRange();
method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH) public CharSequence getSubmatch();
@@ -395,7 +435,8 @@
public interface SearchResults extends java.io.Closeable {
method public void close();
- method public com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPage();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPage();
+ method public com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPageAsync();
}
public final class SearchSpec {
@@ -453,20 +494,31 @@
public final class SetSchemaRequest {
method public java.util.Map<java.lang.String!,androidx.appsearch.app.Migrator!> getMigrators();
+ method public java.util.Map<java.lang.String!,java.util.Set<java.util.Set<java.lang.Integer!>!>!> getRequiredPermissionsForSchemaTypeVisibility();
method public java.util.Set<androidx.appsearch.app.AppSearchSchema!> getSchemas();
method public java.util.Set<java.lang.String!> getSchemasNotDisplayedBySystem();
method public java.util.Map<java.lang.String!,java.util.Set<androidx.appsearch.app.PackageIdentifier!>!> getSchemasVisibleToPackages();
method @IntRange(from=1) public int getVersion();
method public boolean isForceOverride();
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_ASSISTANT_APP_SEARCH_DATA = 6; // 0x6
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_CALENDAR = 2; // 0x2
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_CONTACTS = 3; // 0x3
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_EXTERNAL_STORAGE = 4; // 0x4
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_HOME_APP_SEARCH_DATA = 5; // 0x5
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_SMS = 1; // 0x1
}
public static final class SetSchemaRequest.Builder {
ctor public SetSchemaRequest.Builder();
method public androidx.appsearch.app.SetSchemaRequest.Builder addDocumentClasses(Class<?>!...) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SetSchemaRequest.Builder addDocumentClasses(java.util.Collection<? extends java.lang.Class<?>>) throws androidx.appsearch.exceptions.AppSearchException;
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder addRequiredPermissionsForDocumentClassVisibility(Class<?>, java.util.Set<java.lang.Integer!>) throws androidx.appsearch.exceptions.AppSearchException;
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder addRequiredPermissionsForSchemaTypeVisibility(String, java.util.Set<java.lang.Integer!>);
method public androidx.appsearch.app.SetSchemaRequest.Builder addSchemas(androidx.appsearch.app.AppSearchSchema!...);
method public androidx.appsearch.app.SetSchemaRequest.Builder addSchemas(java.util.Collection<androidx.appsearch.app.AppSearchSchema!>);
method public androidx.appsearch.app.SetSchemaRequest build();
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder clearRequiredPermissionsForDocumentClassVisibility(Class<?>) throws androidx.appsearch.exceptions.AppSearchException;
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder clearRequiredPermissionsForSchemaTypeVisibility(String);
method public androidx.appsearch.app.SetSchemaRequest.Builder setDocumentClassDisplayedBySystem(Class<?>, boolean) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SetSchemaRequest.Builder setDocumentClassVisibilityForPackage(Class<?>, boolean, androidx.appsearch.app.PackageIdentifier) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SetSchemaRequest.Builder setForceOverride(boolean);
@@ -535,19 +587,20 @@
package androidx.appsearch.observer {
- public interface AppSearchObserverCallback {
- method public void onDocumentChanged(androidx.appsearch.observer.DocumentChangeInfo);
- method public void onSchemaChanged(androidx.appsearch.observer.SchemaChangeInfo);
- }
-
public final class DocumentChangeInfo {
- ctor public DocumentChangeInfo(String, String, String, String);
+ ctor public DocumentChangeInfo(String, String, String, String, java.util.Set<java.lang.String!>);
+ method public java.util.Set<java.lang.String!> getChangedDocumentIds();
method public String getDatabaseName();
method public String getNamespace();
method public String getPackageName();
method public String getSchemaName();
}
+ public interface ObserverCallback {
+ method public void onDocumentChanged(androidx.appsearch.observer.DocumentChangeInfo);
+ method public void onSchemaChanged(androidx.appsearch.observer.SchemaChangeInfo);
+ }
+
public final class ObserverSpec {
method public java.util.Set<java.lang.String!> getFilterSchemas();
}
@@ -562,7 +615,8 @@
}
public final class SchemaChangeInfo {
- ctor public SchemaChangeInfo(String, String);
+ ctor public SchemaChangeInfo(String, String, java.util.Set<java.lang.String!>);
+ method public java.util.Set<java.lang.String!> getChangedSchemaNames();
method public String getDatabaseName();
method public String getPackageName();
}
diff --git a/appsearch/appsearch/api/restricted_current.txt b/appsearch/appsearch/api/restricted_current.txt
index 91b14d5..9818d8b 100644
--- a/appsearch/appsearch/api/restricted_current.txt
+++ b/appsearch/appsearch/api/restricted_current.txt
@@ -177,18 +177,28 @@
public interface AppSearchSession extends java.io.Closeable {
method public void close();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentId(androidx.appsearch.app.GetByDocumentIdRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentId(androidx.appsearch.app.GetByDocumentIdRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentIdAsync(androidx.appsearch.app.GetByDocumentIdRequest);
method public androidx.appsearch.app.Features getFeatures();
- method public com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespaces();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfo();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> put(androidx.appsearch.app.PutDocumentsRequest);
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> remove(androidx.appsearch.app.RemoveByDocumentIdRequest);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> remove(String, androidx.appsearch.app.SearchSpec);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsage(androidx.appsearch.app.ReportUsageRequest);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlush();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespaces();
+ method public com.google.common.util.concurrent.ListenableFuture<java.util.Set<java.lang.String!>!> getNamespacesAsync();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema();
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchemaAsync();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfo();
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.StorageInfo!> getStorageInfoAsync();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> put(androidx.appsearch.app.PutDocumentsRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> putAsync(androidx.appsearch.app.PutDocumentsRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> remove(androidx.appsearch.app.RemoveByDocumentIdRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> remove(String, androidx.appsearch.app.SearchSpec);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,java.lang.Void!>!> removeAsync(androidx.appsearch.app.RemoveByDocumentIdRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> removeAsync(String, androidx.appsearch.app.SearchSpec);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsage(androidx.appsearch.app.ReportUsageRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportUsageAsync(androidx.appsearch.app.ReportUsageRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlush();
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> requestFlushAsync();
method public androidx.appsearch.app.SearchResults search(String, androidx.appsearch.app.SearchSpec);
- method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchema(androidx.appsearch.app.SetSchemaRequest);
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchema(androidx.appsearch.app.SetSchemaRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.SetSchemaResponse!> setSchemaAsync(androidx.appsearch.app.SetSchemaRequest);
}
public interface DocumentClassFactory<T> {
@@ -200,7 +210,10 @@
public interface Features {
method public boolean isFeatureSupported(String);
- field public static final String GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER = "GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER";
+ field public static final String ADD_PERMISSIONS_AND_GET_VISIBILITY = "ADD_PERMISSIONS_AND_GET_VISIBILITY";
+ field public static final String GLOBAL_SEARCH_SESSION_GET_BY_ID = "GLOBAL_SEARCH_SESSION_GET_BY_ID";
+ field public static final String GLOBAL_SEARCH_SESSION_GET_SCHEMA = "GLOBAL_SEARCH_SESSION_GET_SCHEMA";
+ field public static final String GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK = "GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK";
field public static final String SEARCH_RESULT_MATCH_INFO_SUBMATCH = "SEARCH_RESULT_MATCH_INFO_SUBMATCH";
}
@@ -266,6 +279,9 @@
}
public final class GetSchemaResponse {
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Map<java.lang.String!,java.util.Set<java.util.Set<java.lang.Integer!>!>!> getRequiredPermissionsForSchemaTypeVisibility();
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Set<java.lang.String!> getSchemaTypesNotDisplayedBySystem();
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public java.util.Map<java.lang.String!,java.util.Set<androidx.appsearch.app.PackageIdentifier!>!> getSchemaTypesVisibleToPackages();
method public java.util.Set<androidx.appsearch.app.AppSearchSchema!> getSchemas();
method @IntRange(from=0) public int getVersion();
}
@@ -273,17 +289,24 @@
public static final class GetSchemaResponse.Builder {
ctor public GetSchemaResponse.Builder();
method public androidx.appsearch.app.GetSchemaResponse.Builder addSchema(androidx.appsearch.app.AppSearchSchema);
+ method public androidx.appsearch.app.GetSchemaResponse.Builder addSchemaTypeNotDisplayedBySystem(String);
method public androidx.appsearch.app.GetSchemaResponse build();
+ method public androidx.appsearch.app.GetSchemaResponse.Builder setRequiredPermissionsForSchemaTypeVisibility(String, java.util.Set<java.util.Set<java.lang.Integer!>!>);
+ method public androidx.appsearch.app.GetSchemaResponse.Builder setSchemaTypeVisibleToPackages(String, java.util.Set<androidx.appsearch.app.PackageIdentifier!>);
method public androidx.appsearch.app.GetSchemaResponse.Builder setVersion(@IntRange(from=0) int);
}
public interface GlobalSearchSession extends java.io.Closeable {
- method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER) public void addObserver(String, androidx.appsearch.observer.ObserverSpec, java.util.concurrent.Executor, androidx.appsearch.observer.AppSearchObserverCallback);
method public void close();
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_BY_ID) public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchBatchResult<java.lang.String!,androidx.appsearch.app.GenericDocument!>!> getByDocumentIdAsync(String, String, androidx.appsearch.app.GetByDocumentIdRequest);
method public androidx.appsearch.app.Features getFeatures();
- method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER) public void removeObserver(String, androidx.appsearch.observer.AppSearchObserverCallback);
- method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest);
+ method @Deprecated @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA) public default com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchema(String, String);
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA) public com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GetSchemaResponse!> getSchemaAsync(String, String);
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK) public void registerObserverCallback(String, androidx.appsearch.observer.ObserverSpec, java.util.concurrent.Executor, androidx.appsearch.observer.ObserverCallback) throws androidx.appsearch.exceptions.AppSearchException;
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsage(androidx.appsearch.app.ReportSystemUsageRequest);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> reportSystemUsageAsync(androidx.appsearch.app.ReportSystemUsageRequest);
method public androidx.appsearch.app.SearchResults search(String, androidx.appsearch.app.SearchSpec);
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK) public void unregisterObserverCallback(String, androidx.appsearch.observer.ObserverCallback) throws androidx.appsearch.exceptions.AppSearchException;
}
public abstract class Migrator {
@@ -299,6 +322,22 @@
method public byte[] getSha256Certificate();
}
+ public class PropertyPath implements java.lang.Iterable<androidx.appsearch.app.PropertyPath.PathSegment> {
+ ctor public PropertyPath(java.util.List<androidx.appsearch.app.PropertyPath.PathSegment!>);
+ ctor public PropertyPath(String);
+ method public androidx.appsearch.app.PropertyPath.PathSegment get(int);
+ method public java.util.Iterator<androidx.appsearch.app.PropertyPath.PathSegment!> iterator();
+ method public int size();
+ }
+
+ public static class PropertyPath.PathSegment {
+ method public static androidx.appsearch.app.PropertyPath.PathSegment create(String, int);
+ method public static androidx.appsearch.app.PropertyPath.PathSegment create(String);
+ method public int getPropertyIndex();
+ method public String getPropertyName();
+ field public static final int NON_REPEATED_CARDINALITY = -1; // 0xffffffff
+ }
+
public final class PutDocumentsRequest {
method public java.util.List<androidx.appsearch.app.GenericDocument!> getGenericDocuments();
}
@@ -373,6 +412,7 @@
method public androidx.appsearch.app.SearchResult.MatchRange getExactMatchRange();
method public String getFullText();
method public String getPropertyPath();
+ method public androidx.appsearch.app.PropertyPath getPropertyPathObject();
method public CharSequence getSnippet();
method public androidx.appsearch.app.SearchResult.MatchRange getSnippetRange();
method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH) public CharSequence getSubmatch();
@@ -395,7 +435,8 @@
public interface SearchResults extends java.io.Closeable {
method public void close();
- method public com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPage();
+ method @Deprecated public default com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPage();
+ method public com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.appsearch.app.SearchResult!>!> getNextPageAsync();
}
public final class SearchSpec {
@@ -453,20 +494,31 @@
public final class SetSchemaRequest {
method public java.util.Map<java.lang.String!,androidx.appsearch.app.Migrator!> getMigrators();
+ method public java.util.Map<java.lang.String!,java.util.Set<java.util.Set<java.lang.Integer!>!>!> getRequiredPermissionsForSchemaTypeVisibility();
method public java.util.Set<androidx.appsearch.app.AppSearchSchema!> getSchemas();
method public java.util.Set<java.lang.String!> getSchemasNotDisplayedBySystem();
method public java.util.Map<java.lang.String!,java.util.Set<androidx.appsearch.app.PackageIdentifier!>!> getSchemasVisibleToPackages();
method @IntRange(from=1) public int getVersion();
method public boolean isForceOverride();
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_ASSISTANT_APP_SEARCH_DATA = 6; // 0x6
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_CALENDAR = 2; // 0x2
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_CONTACTS = 3; // 0x3
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_EXTERNAL_STORAGE = 4; // 0x4
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_HOME_APP_SEARCH_DATA = 5; // 0x5
+ field @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public static final int READ_SMS = 1; // 0x1
}
public static final class SetSchemaRequest.Builder {
ctor public SetSchemaRequest.Builder();
method public androidx.appsearch.app.SetSchemaRequest.Builder addDocumentClasses(Class<?>!...) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SetSchemaRequest.Builder addDocumentClasses(java.util.Collection<? extends java.lang.Class<?>>) throws androidx.appsearch.exceptions.AppSearchException;
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder addRequiredPermissionsForDocumentClassVisibility(Class<?>, java.util.Set<java.lang.Integer!>) throws androidx.appsearch.exceptions.AppSearchException;
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder addRequiredPermissionsForSchemaTypeVisibility(String, java.util.Set<java.lang.Integer!>);
method public androidx.appsearch.app.SetSchemaRequest.Builder addSchemas(androidx.appsearch.app.AppSearchSchema!...);
method public androidx.appsearch.app.SetSchemaRequest.Builder addSchemas(java.util.Collection<androidx.appsearch.app.AppSearchSchema!>);
method public androidx.appsearch.app.SetSchemaRequest build();
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder clearRequiredPermissionsForDocumentClassVisibility(Class<?>) throws androidx.appsearch.exceptions.AppSearchException;
+ method @RequiresFeature(enforcement="androidx.appsearch.app.Features#isFeatureSupported", name=androidx.appsearch.app.Features.ADD_PERMISSIONS_AND_GET_VISIBILITY) public androidx.appsearch.app.SetSchemaRequest.Builder clearRequiredPermissionsForSchemaTypeVisibility(String);
method public androidx.appsearch.app.SetSchemaRequest.Builder setDocumentClassDisplayedBySystem(Class<?>, boolean) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SetSchemaRequest.Builder setDocumentClassVisibilityForPackage(Class<?>, boolean, androidx.appsearch.app.PackageIdentifier) throws androidx.appsearch.exceptions.AppSearchException;
method public androidx.appsearch.app.SetSchemaRequest.Builder setForceOverride(boolean);
@@ -535,19 +587,20 @@
package androidx.appsearch.observer {
- public interface AppSearchObserverCallback {
- method public void onDocumentChanged(androidx.appsearch.observer.DocumentChangeInfo);
- method public void onSchemaChanged(androidx.appsearch.observer.SchemaChangeInfo);
- }
-
public final class DocumentChangeInfo {
- ctor public DocumentChangeInfo(String, String, String, String);
+ ctor public DocumentChangeInfo(String, String, String, String, java.util.Set<java.lang.String!>);
+ method public java.util.Set<java.lang.String!> getChangedDocumentIds();
method public String getDatabaseName();
method public String getNamespace();
method public String getPackageName();
method public String getSchemaName();
}
+ public interface ObserverCallback {
+ method public void onDocumentChanged(androidx.appsearch.observer.DocumentChangeInfo);
+ method public void onSchemaChanged(androidx.appsearch.observer.SchemaChangeInfo);
+ }
+
public final class ObserverSpec {
method public java.util.Set<java.lang.String!> getFilterSchemas();
}
@@ -562,7 +615,8 @@
}
public final class SchemaChangeInfo {
- ctor public SchemaChangeInfo(String, String);
+ ctor public SchemaChangeInfo(String, String, java.util.Set<java.lang.String!>);
+ method public java.util.Set<java.lang.String!> getChangedSchemaNames();
method public String getDatabaseName();
method public String getPackageName();
}
diff --git a/appsearch/appsearch/build.gradle b/appsearch/appsearch/build.gradle
index c536467..02e32f9 100644
--- a/appsearch/appsearch/build.gradle
+++ b/appsearch/appsearch/build.gradle
@@ -32,9 +32,9 @@
api('androidx.annotation:annotation:1.1.0')
api(libs.guavaListenableFuture)
+ implementation('androidx.collection:collection:1.2.0')
implementation('androidx.concurrent:concurrent-futures:1.0.0')
- implementation('androidx.core:core:1.2.0')
- implementation('androidx.collection:collection:1.0.0')
+ implementation('androidx.core:core:1.7.0')
androidTestAnnotationProcessor project(':appsearch:appsearch-compiler')
androidTestImplementation project(':appsearch:appsearch-local-storage')
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorLocalTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorLocalTest.java
index b22f8d8..6cf35bb 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorLocalTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorLocalTest.java
@@ -26,9 +26,9 @@
public class AnnotationProcessorLocalTest extends AnnotationProcessorTestBase {
@Override
- protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
Context context = ApplicationProvider.getApplicationContext();
- return LocalStorage.createSearchSession(
+ return LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, dbName).build());
}
}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorPlatformTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorPlatformTest.java
index 5dbb8a2..e53c6aa 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorPlatformTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorPlatformTest.java
@@ -29,9 +29,9 @@
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
public class AnnotationProcessorPlatformTest extends AnnotationProcessorTestBase {
@Override
- protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
Context context = ApplicationProvider.getApplicationContext();
- return PlatformStorage.createSearchSession(
+ return PlatformStorage.createSearchSessionAsync(
new PlatformStorage.SearchContext.Builder(context, dbName).build());
}
}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
index 684e51f..2e657eb 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorTestBase.java
@@ -27,6 +27,7 @@
import androidx.appsearch.annotation.Document;
import androidx.appsearch.testutil.AppSearchEmail;
+import com.google.auto.value.AutoValue;
import com.google.common.util.concurrent.ListenableFuture;
import org.junit.After;
@@ -41,12 +42,12 @@
private AppSearchSession mSession;
private static final String DB_NAME_1 = "";
- protected abstract ListenableFuture<AppSearchSession> createSearchSession(
+ protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
@NonNull String dbName);
@Before
public void setUp() throws Exception {
- mSession = createSearchSession(DB_NAME_1).get();
+ mSession = createSearchSessionAsync(DB_NAME_1).get();
// Cleanup whatever documents may still exist in these databases. This is needed in
// addition to tearDown in case a test exited without completing properly.
@@ -60,7 +61,8 @@
}
private void cleanup() throws Exception {
- mSession.setSchema(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+ mSession.setSchemaAsync(new SetSchemaRequest.Builder()
+ .setForceOverride(true).build()).get();
}
@Document
@@ -297,7 +299,7 @@
public void testAnnotationProcessor() throws Exception {
//TODO(b/156296904) add test for int, float, GenericDocument, and class with
// @Document annotation
- mSession.setSchema(
+ mSession.setSchemaAsync(
new SetSchemaRequest.Builder().addDocumentClasses(Card.class, Gift.class).build())
.get();
@@ -305,7 +307,7 @@
Gift inputDocument = Gift.createPopulatedGift();
// Index the Gift document and query it.
- checkIsBatchResultSuccess(mSession.put(
+ checkIsBatchResultSuccess(mSession.putAsync(
new PutDocumentsRequest.Builder().addDocuments(inputDocument).build()));
SearchResults searchResults = mSession.search("", new SearchSpec.Builder()
.setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
@@ -320,7 +322,7 @@
@Test
public void testAnnotationProcessor_queryByType() throws Exception {
- mSession.setSchema(
+ mSession.setSchemaAsync(
new SetSchemaRequest.Builder()
.addDocumentClasses(Card.class, Gift.class)
.addSchemas(AppSearchEmail.SCHEMA).build())
@@ -340,7 +342,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mSession.put(
+ checkIsBatchResultSuccess(mSession.putAsync(
new PutDocumentsRequest.Builder()
.addDocuments(inputDocument1, inputDocument2)
.addGenericDocuments(email1).build()));
@@ -386,4 +388,88 @@
assertThat(genericDocument1).isNotSameInstanceAs(genericDocument2);
assertThat(genericDocument1).isEqualTo(genericDocument2);
}
+
+ /**
+ * Simple Document to demonstrate use of AutoValue and Document annotations, also nested
+ */
+ @Document
+ @AutoValue
+ public abstract static class SampleAutoValue {
+ @AutoValue.CopyAnnotations
+ @Document.Id
+ abstract String id();
+
+ @AutoValue.CopyAnnotations
+ @Document.Namespace
+ abstract String namespace();
+
+ @AutoValue.CopyAnnotations
+ @Document.StringProperty
+ abstract String property();
+
+ /** AutoValue constructor */
+ public static SampleAutoValue create(String id, String namespace, String property) {
+ return new AutoValue_AnnotationProcessorTestBase_SampleAutoValue(id,
+ namespace, property);
+ }
+ }
+
+
+ /**
+ * Simple Document to demonstrate use of inheritance with Document annotations
+ */
+ @Document
+ static class Pineapple {
+ @Document.Namespace String mNamespace;
+ @Document.Id String mId;
+ }
+
+ @Document
+ static class CoolPineapple extends Pineapple {
+ @Document.StringProperty String mCool;
+
+ @Document.CreationTimestampMillis long mCreationTimestampMillis;
+ }
+
+ @Test
+ public void testGenericDocumentConversion_AutoValue() throws Exception {
+ SampleAutoValue sampleAutoValue = SampleAutoValue.create("id", "namespace", "property");
+ GenericDocument genericDocument = GenericDocument.fromDocumentClass(sampleAutoValue);
+ assertThat(genericDocument.getId()).isEqualTo("id");
+ assertThat(genericDocument.getNamespace()).isEqualTo("namespace");
+ assertThat(genericDocument.getSchemaType()).isEqualTo("SampleAutoValue");
+ assertThat(genericDocument.getPropertyStringArray("property"))
+ .asList().containsExactly("property");
+ }
+
+ @Test
+ public void testGenericDocumentConversion_Superclass() throws Exception {
+ CoolPineapple inputDoc = new CoolPineapple();
+ inputDoc.mId = "id";
+ inputDoc.mNamespace = "namespace";
+ inputDoc.mCool = "very cool";
+ inputDoc.mCreationTimestampMillis = System.currentTimeMillis();
+ GenericDocument genericDocument = GenericDocument.fromDocumentClass(inputDoc);
+ assertThat(genericDocument.getId()).isEqualTo("id");
+ assertThat(genericDocument.getNamespace()).isEqualTo("namespace");
+ assertThat(genericDocument.getSchemaType()).isEqualTo("Pineapple");
+ assertThat(genericDocument.getPropertyStringArray("cool")).asList()
+ .containsExactly("very cool");
+
+ //also try inserting and querying
+ mSession.setSchemaAsync(new SetSchemaRequest.Builder()
+ .addDocumentClasses(CoolPineapple.class).build()).get();
+
+ checkIsBatchResultSuccess(mSession.putAsync(
+ new PutDocumentsRequest.Builder().addDocuments(inputDoc).build()));
+
+ // Query the documents by it's schema type.
+ SearchResults searchResults = mSession.search("",
+ new SearchSpec.Builder()
+ .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+ .addFilterSchemas("Pineapple", AppSearchEmail.SCHEMA_TYPE)
+ .build());
+ List<GenericDocument> documents = convertSearchResultsToDocuments(searchResults);
+ assertThat(documents).containsExactly(genericDocument);
+ }
}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchResultTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchResultInternalTest.java
similarity index 93%
rename from appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchResultTest.java
rename to appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchResultInternalTest.java
index 125e55f..12393de 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchResultTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchResultInternalTest.java
@@ -22,7 +22,8 @@
import org.junit.Test;
-public class AppSearchResultTest {
+/** Tests for private APIs of {@link AppSearchResult}. */
+public class AppSearchResultInternalTest {
@Test
public void testMapNullPointerException() {
NullPointerException e = assertThrows(NullPointerException.class, () -> {
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionInternalTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionInternalTestBase.java
new file mode 100644
index 0000000..38fc851
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionInternalTestBase.java
@@ -0,0 +1,373 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.app;
+
+import static androidx.appsearch.testutil.AppSearchTestUtils.checkIsBatchResultSuccess;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchSchema.PropertyConfig;
+import androidx.appsearch.app.AppSearchSchema.StringPropertyConfig;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+
+// TODO(b/227356108): move this test to cts test once we un-hide search suggestion API.
+public abstract class AppSearchSessionInternalTestBase {
+
+ static final String DB_NAME_1 = "";
+ static final String DB_NAME_2 = "testDb2";
+
+ private AppSearchSession mDb1;
+ private AppSearchSession mDb2;
+
+ protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
+ @NonNull String dbName);
+
+ protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
+ @NonNull String dbName, @NonNull ExecutorService executor);
+
+ @Before
+ public void setUp() throws Exception {
+ mDb1 = createSearchSessionAsync(DB_NAME_1).get();
+ mDb2 = createSearchSessionAsync(DB_NAME_2).get();
+
+ // Cleanup whatever documents may still exist in these databases. This is needed in
+ // addition to tearDown in case a test exited without completing properly.
+ cleanup();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ // Cleanup whatever documents may still exist in these databases.
+ cleanup();
+ }
+
+ private void cleanup() throws Exception {
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+ mDb2.setSchemaAsync(
+ new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+ }
+
+ @Test
+ public void testSearchSuggestion() throws Exception {
+ // Schema registration
+ AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+ new StringPropertyConfig.Builder("body")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .build())
+ .build();
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+ // Index documents
+ GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "Type")
+ .setPropertyString("body", "termOne termTwo termThree termFour")
+ .build();
+ GenericDocument doc2 = new GenericDocument.Builder<>("namespace", "id2", "Type")
+ .setPropertyString("body", "termOne termTwo termThree")
+ .build();
+ GenericDocument doc3 = new GenericDocument.Builder<>("namespace", "id3", "Type")
+ .setPropertyString("body", "termOne termTwo")
+ .build();
+ GenericDocument doc4 = new GenericDocument.Builder<>("namespace", "id4", "Type")
+ .setPropertyString("body", "termOne")
+ .build();
+
+ checkIsBatchResultSuccess(mDb1.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(doc1, doc2, doc3, doc4)
+ .build()));
+
+ SearchSuggestionResult resultOne =
+ new SearchSuggestionResult.Builder().setSuggestedResult("termone").build();
+ SearchSuggestionResult resultTwo =
+ new SearchSuggestionResult.Builder().setSuggestedResult("termtwo").build();
+ SearchSuggestionResult resultThree =
+ new SearchSuggestionResult.Builder().setSuggestedResult("termthree").build();
+ SearchSuggestionResult resultFour =
+ new SearchSuggestionResult.Builder().setSuggestedResult("termfour").build();
+
+ List<SearchSuggestionResult> suggestions = mDb1.searchSuggestionAsync(
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+ assertThat(suggestions).containsExactly(resultOne, resultTwo, resultThree, resultFour)
+ .inOrder();
+
+ // Query first 2 suggestions, and they will be ranked.
+ suggestions = mDb1.searchSuggestionAsync(
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/2).build()).get();
+ assertThat(suggestions).containsExactly(resultOne, resultTwo).inOrder();
+ }
+
+ @Test
+ public void testSearchSuggestion_namespaceFilter() throws Exception {
+ // Schema registration
+ AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+ new StringPropertyConfig.Builder("body")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .build())
+ .build();
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+ // Index documents
+ GenericDocument doc1 = new GenericDocument.Builder<>("namespace1", "id1", "Type")
+ .setPropertyString("body", "fo foo")
+ .build();
+ GenericDocument doc2 = new GenericDocument.Builder<>("namespace2", "id2", "Type")
+ .setPropertyString("body", "foo")
+ .build();
+ GenericDocument doc3 = new GenericDocument.Builder<>("namespace3", "id3", "Type")
+ .setPropertyString("body", "fool")
+ .build();
+
+ checkIsBatchResultSuccess(mDb1.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(doc1, doc2, doc3).build()));
+
+ SearchSuggestionResult resultFo =
+ new SearchSuggestionResult.Builder().setSuggestedResult("fo").build();
+ SearchSuggestionResult resultFoo =
+ new SearchSuggestionResult.Builder().setSuggestedResult("foo").build();
+ SearchSuggestionResult resultFool =
+ new SearchSuggestionResult.Builder().setSuggestedResult("fool").build();
+
+ // namespace1 has 2 results.
+ List<SearchSuggestionResult> suggestions = mDb1.searchSuggestionAsync(
+ /*suggestionQueryExpression=*/"f",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+ .addFilterNamespaces("namespace1").build()).get();
+ assertThat(suggestions).containsExactly(resultFoo, resultFo).inOrder();
+
+ // namespace2 has 1 result.
+ suggestions = mDb1.searchSuggestionAsync(
+ /*suggestionQueryExpression=*/"f",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+ .addFilterNamespaces("namespace2").build()).get();
+ assertThat(suggestions).containsExactly(resultFoo).inOrder();
+
+ // namespace2 and 3 has 2 results.
+ suggestions = mDb1.searchSuggestionAsync(
+ /*suggestionQueryExpression=*/"f",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+ .addFilterNamespaces("namespace2", "namespace3")
+ .build()).get();
+ assertThat(suggestions).containsExactly(resultFoo, resultFool);
+
+ // non exist namespace has 2 results.
+ suggestions = mDb1.searchSuggestionAsync(
+ /*suggestionQueryExpression=*/"f",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10)
+ .addFilterNamespaces("nonExistNamespace").build()).get();
+ assertThat(suggestions).isEmpty();
+ }
+
+ @Test
+ public void testSearchSuggestion_differentPrefix() throws Exception {
+ // Schema registration
+ AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+ new StringPropertyConfig.Builder("body")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .build())
+ .build();
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+ // Index documents
+ GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "Type")
+ .setPropertyString("body", "foo")
+ .build();
+ GenericDocument doc2 = new GenericDocument.Builder<>("namespace", "id2", "Type")
+ .setPropertyString("body", "fool")
+ .build();
+ GenericDocument doc3 = new GenericDocument.Builder<>("namespace", "id3", "Type")
+ .setPropertyString("body", "bar")
+ .build();
+ GenericDocument doc4 = new GenericDocument.Builder<>("namespace", "id4", "Type")
+ .setPropertyString("body", "baz")
+ .build();
+
+ checkIsBatchResultSuccess(mDb1.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(doc1, doc2, doc3, doc4)
+ .build()));
+
+ SearchSuggestionResult resultFoo =
+ new SearchSuggestionResult.Builder().setSuggestedResult("foo").build();
+ SearchSuggestionResult resultFool =
+ new SearchSuggestionResult.Builder().setSuggestedResult("fool").build();
+ SearchSuggestionResult resultBar =
+ new SearchSuggestionResult.Builder().setSuggestedResult("bar").build();
+ SearchSuggestionResult resultBaz =
+ new SearchSuggestionResult.Builder().setSuggestedResult("baz").build();
+
+ // prefix f has 2 results.
+ List<SearchSuggestionResult> suggestions = mDb1.searchSuggestionAsync(
+ /*suggestionQueryExpression=*/"f",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+ assertThat(suggestions).containsExactly(resultFoo, resultFool);
+
+ // prefix b has 2 results.
+ suggestions = mDb1.searchSuggestionAsync(
+ /*suggestionQueryExpression=*/"b",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+ assertThat(suggestions).containsExactly(resultBar, resultBaz);
+ }
+
+ @Test
+ public void testSearchSuggestion_removeDocument() throws Exception {
+ // Schema registration
+ AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+ new StringPropertyConfig.Builder("body")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .build())
+ .build();
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+ // Index documents
+ GenericDocument docTwo = new GenericDocument.Builder<>("namespace", "idTwo", "Type")
+ .setPropertyString("body", "two")
+ .build();
+ GenericDocument docThree = new GenericDocument.Builder<>("namespace", "idThree", "Type")
+ .setPropertyString("body", "three")
+ .build();
+ GenericDocument docTart = new GenericDocument.Builder<>("namespace", "idTart", "Type")
+ .setPropertyString("body", "tart")
+ .build();
+
+ checkIsBatchResultSuccess(mDb1.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(docTwo, docThree, docTart)
+ .build()));
+
+ SearchSuggestionResult resultTwo =
+ new SearchSuggestionResult.Builder().setSuggestedResult("two").build();
+ SearchSuggestionResult resultThree =
+ new SearchSuggestionResult.Builder().setSuggestedResult("three").build();
+ SearchSuggestionResult resultTart =
+ new SearchSuggestionResult.Builder().setSuggestedResult("tart").build();
+
+ // prefix t has 3 results.
+ List<SearchSuggestionResult> suggestions = mDb1.searchSuggestionAsync(
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+ assertThat(suggestions).containsExactly(resultTwo, resultThree, resultTart);
+
+ // Delete the document
+ checkIsBatchResultSuccess(mDb1.removeAsync(
+ new RemoveByDocumentIdRequest.Builder("namespace").addIds(
+ "idTwo").build()));
+
+ // now prefix t has 2 results.
+ suggestions = mDb1.searchSuggestionAsync(
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+ assertThat(suggestions).containsExactly(resultThree, resultTart);
+ }
+
+ @Test
+ public void testSearchSuggestion_replacementDocument() throws Exception {
+ // Schema registration
+ AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+ new StringPropertyConfig.Builder("body")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .build())
+ .build();
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+ // Index documents
+ GenericDocument doc = new GenericDocument.Builder<>("namespace", "id", "Type")
+ .setPropertyString("body", "two three tart")
+ .build();
+
+ checkIsBatchResultSuccess(mDb1.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(doc)
+ .build()));
+
+ SearchSuggestionResult resultTwo =
+ new SearchSuggestionResult.Builder().setSuggestedResult("two").build();
+ SearchSuggestionResult resultThree =
+ new SearchSuggestionResult.Builder().setSuggestedResult("three").build();
+ SearchSuggestionResult resultTart =
+ new SearchSuggestionResult.Builder().setSuggestedResult("tart").build();
+ SearchSuggestionResult resultTwist =
+ new SearchSuggestionResult.Builder().setSuggestedResult("twist").build();
+
+ // prefix t has 3 results.
+ List<SearchSuggestionResult> suggestions = mDb1.searchSuggestionAsync(
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+ assertThat(suggestions).containsExactly(resultTwo, resultThree, resultTart);
+
+ // replace the document
+ GenericDocument replaceDoc = new GenericDocument.Builder<>("namespace", "id", "Type")
+ .setPropertyString("body", "twist three")
+ .build();
+ checkIsBatchResultSuccess(mDb1.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(replaceDoc)
+ .build()));
+
+ // prefix t has 2 results for now.
+ suggestions = mDb1.searchSuggestionAsync(
+ /*suggestionQueryExpression=*/"t",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+ assertThat(suggestions).containsExactly(resultThree, resultTwist);
+ }
+
+ @Test
+ public void testSearchSuggestion_ignoreOperators() throws Exception {
+ // Schema registration
+ AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+ new StringPropertyConfig.Builder("body")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .build())
+ .build();
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+ // Index documents
+ GenericDocument doc = new GenericDocument.Builder<>("namespace", "id", "Type")
+ .setPropertyString("body", "two original")
+ .build();
+
+ checkIsBatchResultSuccess(mDb1.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(doc)
+ .build()));
+
+ SearchSuggestionResult resultTwoOriginal =
+ new SearchSuggestionResult.Builder().setSuggestedResult("two original").build();
+
+ List<SearchSuggestionResult> suggestions = mDb1.searchSuggestionAsync(
+ /*suggestionQueryExpression=*/"two OR",
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/10).build()).get();
+ assertThat(suggestions).containsExactly(resultTwoOriginal);
+ }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionLocalInternalTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionLocalInternalTest.java
new file mode 100644
index 0000000..6bcc933
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionLocalInternalTest.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// @exportToFramework:skipFile()
+package androidx.appsearch.app;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.localstorage.LocalStorage;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.concurrent.ExecutorService;
+
+// TODO(b/227356108): move this test to cts test once we un-hide search suggestion API.
+public class AppSearchSessionLocalInternalTest extends AppSearchSessionInternalTestBase {
+ @Override
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
+ Context context = ApplicationProvider.getApplicationContext();
+ return LocalStorage.createSearchSessionAsync(
+ new LocalStorage.SearchContext.Builder(context, dbName).build());
+ }
+
+ @Override
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(
+ @NonNull String dbName, @NonNull ExecutorService executor) {
+ Context context = ApplicationProvider.getApplicationContext();
+ return LocalStorage.createSearchSessionAsync(
+ new LocalStorage.SearchContext.Builder(context, dbName)
+ .setWorkerExecutor(executor).build());
+ }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionPlatformInternalTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionPlatformInternalTest.java
new file mode 100644
index 0000000..6443c3d
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionPlatformInternalTest.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package androidx.appsearch.app;
+
+import android.content.Context;
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.appsearch.platformstorage.PlatformStorage;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.filters.SdkSuppress;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+import org.junit.Test;
+
+import java.util.concurrent.ExecutorService;
+
+// TODO(b/227356108): move this test to cts test once we un-hide search suggestion API.
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+public class AppSearchSessionPlatformInternalTest extends AppSearchSessionInternalTestBase {
+ @Override
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
+ Context context = ApplicationProvider.getApplicationContext();
+ return PlatformStorage.createSearchSessionAsync(
+ new PlatformStorage.SearchContext.Builder(context, dbName).build());
+ }
+
+ @Override
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(
+ @NonNull String dbName, @NonNull ExecutorService executor) {
+ Context context = ApplicationProvider.getApplicationContext();
+ return PlatformStorage.createSearchSessionAsync(
+ new PlatformStorage.SearchContext.Builder(context, dbName)
+ .setWorkerExecutor(executor).build());
+ }
+
+ @Override
+ @Test
+ public void testSearchSuggestion() throws Exception {
+ // TODO(b/227356108) enable the test when suggestion is ready in platform.
+ }
+
+ @Override
+ @Test
+ public void testSearchSuggestion_namespaceFilter() throws Exception {
+ // TODO(b/227356108) enable the test when suggestion is ready in platform.
+ }
+
+ @Override
+ @Test
+ public void testSearchSuggestion_differentPrefix() throws Exception {
+ // TODO(b/227356108) enable the test when suggestion is ready in platform.
+ }
+
+ @Override
+ @Test
+ public void testSearchSuggestion_removeDocument() throws Exception {
+ // TODO(b/227356108) enable the test when suggestion is ready in platform.
+ }
+
+ @Override
+ @Test
+ public void testSearchSuggestion_replacementDocument() throws Exception {
+ // TODO(b/227356108) enable the test when suggestion is ready in platform.
+ }
+
+ @Override
+ @Test
+ public void testSearchSuggestion_ignoreOperators() throws Exception {
+ // TODO(b/227356108) enable the test when suggestion is ready in platform.
+ }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentInternalTest.java
similarity index 95%
rename from appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentTest.java
rename to appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentInternalTest.java
index c15f290..4d5b6c6 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GenericDocumentInternalTest.java
@@ -23,7 +23,8 @@
import org.junit.Test;
-public class GenericDocumentTest {
+/** Tests for private APIs of {@link GenericDocument}. */
+public class GenericDocumentInternalTest {
@Test
public void testRecreateFromParcel() {
GenericDocument inDoc = new GenericDocument.Builder<>("namespace", "id1", "schema1")
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GetSchemaResponseInternalTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GetSchemaResponseInternalTest.java
new file mode 100644
index 0000000..f764313
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/GetSchemaResponseInternalTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.app;
+
+import static org.junit.Assert.assertThrows;
+
+import org.junit.Test;
+
+/** Tests for private APIs of {@link GetSchemaResponse}. */
+public class GetSchemaResponseInternalTest {
+ // TODO(b/205749173): Expose this API and move this test to CTS. Without this API, clients can't
+ // write unit tests that check their code in an environment where visibility settings are not
+ // supported.
+ @Test
+ public void testRebuild_noSupportedException() {
+ AppSearchSchema schema1 = new AppSearchSchema.Builder("Email1")
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("subject")
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .setIndexingType(
+ AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build()
+ ).build();
+
+ GetSchemaResponse.Builder builder =
+ new GetSchemaResponse.Builder(/*getVisibilitySettingSupported=*/false)
+ .setVersion(42).addSchema(schema1);
+
+ GetSchemaResponse original = builder.build();
+ assertThrows(
+ UnsupportedOperationException.class,
+ () -> original.getSchemaTypesNotDisplayedBySystem());
+ assertThrows(
+ UnsupportedOperationException.class,
+ () -> original.getSchemaTypesVisibleToPackages());
+ assertThrows(
+ UnsupportedOperationException.class,
+ () -> original.getRequiredPermissionsForSchemaTypeVisibility());
+
+ // rebuild will throw same exception
+ GetSchemaResponse rebuild = builder.setVersion(42).build();
+ assertThrows(
+ UnsupportedOperationException.class,
+ () -> rebuild.getSchemaTypesNotDisplayedBySystem());
+ assertThrows(
+ UnsupportedOperationException.class,
+ () -> rebuild.getSchemaTypesVisibleToPackages());
+ assertThrows(
+ UnsupportedOperationException.class,
+ () -> original.getRequiredPermissionsForSchemaTypeVisibility());
+ }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSpecTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSpecInternalTest.java
similarity index 96%
rename from appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSpecTest.java
rename to appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSpecInternalTest.java
index 19ccc63..42de090 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSpecTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSpecInternalTest.java
@@ -22,7 +22,8 @@
import org.junit.Test;
-public class SearchSpecTest {
+/** Tests for private APIs of {@link SearchSpec}. */
+public class SearchSpecInternalTest {
@Test
public void testGetBundle() {
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSuggestionResultTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSuggestionResultTest.java
new file mode 100644
index 0000000..d7a827f
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSuggestionResultTest.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.app;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import org.junit.Test;
+
+// TODO(b/227356108): move this test to cts test once we un-hide search suggestion API.
+public class SearchSuggestionResultTest {
+ @Test
+ public void testBuildDefaultSearchSuggestionResult() {
+ SearchSuggestionResult searchSuggestionResult =
+ new SearchSuggestionResult.Builder().build();
+ assertThat(searchSuggestionResult.getSuggestedResult()).isEmpty();
+ }
+
+ @Test
+ public void testBuildSearchSuggestionResult() {
+ SearchSuggestionResult searchSuggestionResult =
+ new SearchSuggestionResult.Builder()
+ .setSuggestedResult("AppSearch")
+ .build();
+ assertThat(searchSuggestionResult.getSuggestedResult()).isEqualTo("AppSearch");
+ }
+
+ @Test
+ public void testReBuildSearchSuggestionResult() {
+ SearchSuggestionResult.Builder builder =
+ new SearchSuggestionResult.Builder()
+ .setSuggestedResult("AppSearch");
+ SearchSuggestionResult original = builder.build();
+ SearchSuggestionResult rebuild = builder.setSuggestedResult("IcingLib").build();
+ assertThat(original.getSuggestedResult()).isEqualTo("AppSearch");
+ assertThat(rebuild.getSuggestedResult()).isEqualTo("IcingLib");
+ }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSuggestionSpecTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSuggestionSpecTest.java
new file mode 100644
index 0000000..0cc45ff
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SearchSuggestionSpecTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.app;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.collect.ImmutableList;
+
+import org.junit.Test;
+
+// TODO(b/227356108): move this test to cts test once we un-hide search suggestion API.
+public class SearchSuggestionSpecTest {
+ @Test
+ public void testBuildDefaultSearchSuggestionSpec() {
+ SearchSuggestionSpec searchSuggestionSpec =
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/123).build();
+ assertThat(searchSuggestionSpec.getMaximumResultCount()).isEqualTo(123);
+ assertThat(searchSuggestionSpec.getFilterNamespaces()).isEmpty();
+ }
+
+ @Test
+ public void testBuildSearchSuggestionSpec() {
+ SearchSuggestionSpec searchSuggestionSpec =
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/123)
+ .addFilterNamespaces("namespace1", "namespace2")
+ .addFilterNamespaces(ImmutableList.of("namespace3"))
+ .build();
+
+ assertThat(searchSuggestionSpec.getMaximumResultCount()).isEqualTo(123);
+ assertThat(searchSuggestionSpec.getFilterNamespaces())
+ .containsExactly("namespace1", "namespace2", "namespace3");
+ }
+
+ @Test
+ public void testRebuild() {
+ SearchSuggestionSpec.Builder builder =
+ new SearchSuggestionSpec.Builder(/*totalResultCount=*/123)
+ .addFilterNamespaces("namespace1", "namespace2");
+
+ SearchSuggestionSpec original = builder.build();
+
+ builder.addFilterNamespaces("namespace3", "namespace4");
+ SearchSuggestionSpec rebuild = builder.build();
+
+ assertThat(original.getMaximumResultCount()).isEqualTo(123);
+ assertThat(original.getFilterNamespaces())
+ .containsExactly("namespace1", "namespace2");
+ assertThat(rebuild.getMaximumResultCount()).isEqualTo(123);
+ assertThat(rebuild.getFilterNamespaces())
+ .containsExactly("namespace1", "namespace2", "namespace3", "namespace4");
+ }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SetSchemaResponseTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SetSchemaResponseInternalTest.java
similarity index 96%
rename from appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SetSchemaResponseTest.java
rename to appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SetSchemaResponseInternalTest.java
index 8aa6148..799584a 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SetSchemaResponseTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/SetSchemaResponseInternalTest.java
@@ -20,7 +20,8 @@
import org.junit.Test;
-public class SetSchemaResponseTest {
+/** Tests for private APIs of {@link SetSchemaResponse}. */
+public class SetSchemaResponseInternalTest {
@Test
public void testRebuild() {
SetSchemaResponse.MigrationFailure failure1 = new SetSchemaResponse.MigrationFailure(
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchResultCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchResultCtsTest.java
index 91dacdb..80094af 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchResultCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchResultCtsTest.java
@@ -23,6 +23,14 @@
import org.junit.Test;
public class AppSearchResultCtsTest {
+ @Test
+ public void testNewSuccessfulResult() {
+ AppSearchResult<String> result = AppSearchResult.newSuccessfulResult("String");
+ assertThat(result.getResultCode()).isEqualTo(AppSearchResult.RESULT_OK);
+ assertThat(result.getResultValue()).isEqualTo("String");
+ assertThat(result.isSuccess()).isTrue();
+ assertThat(result.getErrorMessage()).isNull();
+ }
@Test
public void testResultEquals_identical() {
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationCtsTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationCtsTestBase.java
index a980a60..59c17f5 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationCtsTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationCtsTestBase.java
@@ -118,12 +118,12 @@
private AppSearchSession mDb;
- protected abstract ListenableFuture<AppSearchSession> createSearchSession(
+ protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
@NonNull String dbName);
@Before
public void setUp() throws Exception {
- mDb = createSearchSession(DB_NAME).get();
+ mDb = createSearchSessionAsync(DB_NAME).get();
// Cleanup whatever documents may still exist in these databases. This is needed in
// addition to tearDown in case a test exited without completing properly.
@@ -135,13 +135,13 @@
.setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.build())
.build();
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(schema).setForceOverride(true).build()).get();
GenericDocument doc = new GenericDocument.Builder<>(
"namespace", "id0", "testSchema")
.setPropertyString("subject", "testPut example1")
.setCreationTimestampMillis(DOCUMENT_CREATION_TIME).build();
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
assertThat(result.getSuccesses()).containsExactly("id0", null);
assertThat(result.getFailures()).isEmpty();
@@ -150,7 +150,7 @@
@After
public void tearDown() throws Exception {
// Cleanup whatever documents may still exist in these databases.
- mDb.setSchema(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
}
@Test
@@ -165,7 +165,7 @@
.build())
.build();
- mDb.setSchema(
+ mDb.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(B_C_Schema)
.setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
.setForceOverride(true)
@@ -185,7 +185,7 @@
.build())
.build();
- mDb.setSchema(
+ mDb.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(B_NC_Schema)
.setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
.setForceOverride(true)
@@ -198,7 +198,7 @@
AppSearchSchema NB_C_Schema = new AppSearchSchema.Builder("testSchema")
.build();
- mDb.setSchema(
+ mDb.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(NB_C_Schema)
.setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
.setForceOverride(true)
@@ -212,7 +212,7 @@
AppSearchSchema NB_C_Schema = new AppSearchSchema.Builder("testSchema")
.build();
- mDb.setSchema(
+ mDb.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(NB_C_Schema)
.setMigrator("testSchema", INACTIVE_MIGRATOR) //ND
.setForceOverride(true)
@@ -226,7 +226,7 @@
AppSearchSchema NB_NC_Schema = new AppSearchSchema.Builder("testSchema")
.build();
- mDb.setSchema(
+ mDb.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(NB_NC_Schema)
.setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
.setForceOverride(true)
@@ -239,7 +239,7 @@
AppSearchSchema $B_$C_Schema = new AppSearchSchema.Builder("testSchema")
.build();
- mDb.setSchema(
+ mDb.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas($B_$C_Schema)
.setMigrator("testSchema", INACTIVE_MIGRATOR) //ND
.setForceOverride(true)
@@ -258,7 +258,7 @@
.build())
.build();
- mDb.setSchema(
+ mDb.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(B_C_Schema)
.setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
.setVersion(2) // upgrade version
@@ -277,7 +277,7 @@
.build())
.build();
- mDb.setSchema(
+ mDb.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(B_NC_Schema)
.setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
.setForceOverride(true)
@@ -290,7 +290,7 @@
AppSearchSchema NB_C_Schema = new AppSearchSchema.Builder("testSchema")
.build();
- mDb.setSchema(
+ mDb.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(NB_C_Schema)
.setMigrator("testSchema", ACTIVE_NOOP_MIGRATOR)
.setVersion(2) // upgrade version
@@ -304,7 +304,7 @@
.build();
ExecutionException exception = assertThrows(ExecutionException.class,
- () -> mDb.setSchema(
+ () -> mDb.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas($B_C_Schema)
.setMigrator("testSchema", INACTIVE_MIGRATOR) //ND
.setVersion(2) // upgrade version
@@ -319,7 +319,7 @@
.build();
ExecutionException exception = assertThrows(ExecutionException.class,
- () -> mDb.setSchema(
+ () -> mDb.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas($B_$C_Schema)
.setMigrator("testSchema", INACTIVE_MIGRATOR) //ND
.build()).get());
@@ -342,7 +342,7 @@
.setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.build())
.build();
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(schema).setForceOverride(true).build()).get();
GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
@@ -354,7 +354,7 @@
.setPropertyString("To", "testTo example2")
.build();
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(doc1, doc2).build()));
assertThat(result.getSuccesses()).containsExactly("id1", null, "id2", null);
assertThat(result.getFailures()).isEmpty();
@@ -406,13 +406,13 @@
};
SetSchemaResponse setSchemaResponse =
- mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(newSchema)
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(newSchema)
.setMigrator("testSchema", migrator)
.setVersion(2) // upgrade version
.build()).get();
// Check the schema has been saved
- assertThat(mDb.getSchema().get().getSchemas()).containsExactly(newSchema);
+ assertThat(mDb.getSchemaAsync().get().getSchemas()).containsExactly(newSchema);
assertThat(setSchemaResponse.getDeletedTypes()).isEmpty();
assertThat(setSchemaResponse.getIncompatibleTypes())
@@ -458,7 +458,7 @@
.setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.build())
.build();
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(schema).setForceOverride(true).setVersion(3).build()).get();
GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
@@ -466,7 +466,7 @@
.setPropertyString("To", "testTo example1")
.build();
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(doc1).build()));
assertThat(result.getSuccesses()).containsExactly("id1", null);
assertThat(result.getFailures()).isEmpty();
@@ -508,13 +508,13 @@
};
SetSchemaResponse setSchemaResponse =
- mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(newSchema)
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(newSchema)
.setMigrator("testSchema", migrator)
.setVersion(1) // downgrade version
.build()).get();
// Check the schema has been saved
- assertThat(mDb.getSchema().get().getSchemas()).containsExactly(newSchema);
+ assertThat(mDb.getSchemaAsync().get().getSchemas()).containsExactly(newSchema);
assertThat(setSchemaResponse.getDeletedTypes()).isEmpty();
assertThat(setSchemaResponse.getIncompatibleTypes())
@@ -546,7 +546,7 @@
.setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.build())
.build();
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(schema).setForceOverride(true).setVersion(3).build()).get();
GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
@@ -554,7 +554,7 @@
.setPropertyString("To", "testTo example1")
.build();
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(doc1).build()));
assertThat(result.getSuccesses()).containsExactly("id1", null);
assertThat(result.getFailures()).isEmpty();
@@ -594,7 +594,7 @@
// SetSchema with forceOverride=false
ExecutionException exception = assertThrows(ExecutionException.class,
- () -> mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(newSchema)
+ () -> mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(newSchema)
.setMigrator("testSchema", migrator)
.setVersion(3) // same version
.build()).get());
@@ -602,12 +602,12 @@
// SetSchema with forceOverride=true
SetSchemaResponse setSchemaResponse =
- mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(newSchema)
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(newSchema)
.setMigrator("testSchema", migrator)
.setVersion(3) // same version
.setForceOverride(true).build()).get();
- assertThat(mDb.getSchema().get().getSchemas()).containsExactly(newSchema);
+ assertThat(mDb.getSchemaAsync().get().getSchemas()).containsExactly(newSchema);
assertThat(setSchemaResponse.getDeletedTypes()).isEmpty();
assertThat(setSchemaResponse.getIncompatibleTypes())
@@ -632,7 +632,7 @@
.setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.build())
.build();
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(schema).setForceOverride(true).setVersion(2).build()).get();
GenericDocument doc1 = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
@@ -640,7 +640,7 @@
.setPropertyString("To", "testTo example1")
.build();
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(doc1).build()));
assertThat(result.getSuccesses()).containsExactly("id1", null);
assertThat(result.getFailures()).isEmpty();
@@ -680,7 +680,7 @@
// SetSchema with forceOverride=false
ExecutionException exception = assertThrows(ExecutionException.class,
- () -> mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(newSchema)
+ () -> mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(newSchema)
.setMigrator("testSchema", migrator)
.setVersion(4) // upgrade version
.build()).get());
@@ -692,14 +692,14 @@
// set the source schema to AppSearch
AppSearchSchema schema = new AppSearchSchema.Builder("sourceSchema")
.build();
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(schema).setForceOverride(true).build()).get();
// save a doc to the source type
GenericDocument doc = new GenericDocument.Builder<>(
"namespace", "id1", "sourceSchema")
.setCreationTimestampMillis(DOCUMENT_CREATION_TIME).build();
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
assertThat(result.getSuccesses()).containsExactly("id1", null);
assertThat(result.getFailures()).isEmpty();
@@ -730,7 +730,7 @@
// SetSchema with forceOverride=false
// Source type exist, destination type doesn't exist.
ExecutionException exception = assertThrows(ExecutionException.class,
- () -> mDb.setSchema(new SetSchemaRequest.Builder()
+ () -> mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(new AppSearchSchema.Builder("emptySchema").build())
.setMigrator("sourceSchema", migrator_sourceToNowhere)
.setVersion(2).build()) // upgrade version
@@ -742,7 +742,7 @@
// SetSchema with forceOverride=true
// Source type exist, destination type doesn't exist.
exception = assertThrows(ExecutionException.class,
- () -> mDb.setSchema(new SetSchemaRequest.Builder()
+ () -> mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(new AppSearchSchema.Builder("emptySchema").build())
.setMigrator("sourceSchema", migrator_sourceToNowhere)
.setForceOverride(true)
@@ -758,7 +758,7 @@
// set the destination schema to AppSearch
AppSearchSchema destinationSchema =
new AppSearchSchema.Builder("destinationSchema").build();
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(destinationSchema).setForceOverride(true).build()).get();
Migrator migrator_nowhereToDestination = new Migrator() {
@@ -787,7 +787,7 @@
// no matter force override or not, the migrator won't be invoked
// SetSchema with forceOverride=false
SetSchemaResponse setSchemaResponse =
- mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(destinationSchema)
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(destinationSchema)
.addSchemas(new AppSearchSchema.Builder("emptySchema").build())
.setMigrator("nonExistSchema", migrator_nowhereToDestination)
.setVersion(2) // upgrade version
@@ -796,7 +796,7 @@
// SetSchema with forceOverride=true
setSchemaResponse =
- mDb.setSchema(new SetSchemaRequest.Builder().addSchemas(destinationSchema)
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(destinationSchema)
.addSchemas(new AppSearchSchema.Builder("emptySchema").build())
.setMigrator("nonExistSchema", migrator_nowhereToDestination)
.setVersion(2) // upgrade version
@@ -807,7 +807,7 @@
@Test
public void testSchemaMigration_nowhereToNowhere() throws Exception {
// set empty schema
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.setForceOverride(true).build()).get();
Migrator migrator_nowhereToNowhere = new Migrator() {
@Override
@@ -835,7 +835,7 @@
// no matter force override or not, the migrator won't be invoked
// SetSchema with forceOverride=false
SetSchemaResponse setSchemaResponse =
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(new AppSearchSchema.Builder("emptySchema").build())
.setMigrator("nonExistSchema", migrator_nowhereToNowhere)
.setVersion(2) // upgrade version
@@ -844,7 +844,7 @@
// SetSchema with forceOverride=true
setSchemaResponse =
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(new AppSearchSchema.Builder("emptySchema").build())
.setMigrator("nonExistSchema", migrator_nowhereToNowhere)
.setVersion(2) // upgrade version
@@ -857,13 +857,13 @@
// set the source schema to AppSearch
AppSearchSchema sourceSchema = new AppSearchSchema.Builder("sourceSchema")
.build();
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(sourceSchema).setForceOverride(true).build()).get();
// save a doc to the source type
GenericDocument doc = new GenericDocument.Builder<>(
"namespace", "id1", "sourceSchema").build();
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
assertThat(result.getSuccesses()).containsExactly("id1", null);
assertThat(result.getFailures()).isEmpty();
@@ -897,7 +897,7 @@
};
// SetSchema with forceOverride=false and increase overall version
- SetSchemaResponse setSchemaResponse = mDb.setSchema(new SetSchemaRequest.Builder()
+ SetSchemaResponse setSchemaResponse = mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(destinationSchema)
.setMigrator("sourceSchema", migrator)
.setForceOverride(false)
@@ -925,7 +925,7 @@
.setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
.build())
.build();
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(sourceSchema).setForceOverride(true).build()).get();
// save a child and an adult to the Person type
@@ -935,7 +935,7 @@
GenericDocument adultDoc = new GenericDocument.Builder<>(
"namespace", "Person2", "Person")
.setPropertyLong("Age", 36).build();
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(childDoc, adultDoc).build()));
assertThat(result.getSuccesses()).containsExactly("Person1", null, "Person2", null);
assertThat(result.getFailures()).isEmpty();
@@ -987,7 +987,7 @@
.build();
// SetSchema with forceOverride=false and increase overall version
- SetSchemaResponse setSchemaResponse = mDb.setSchema(new SetSchemaRequest.Builder()
+ SetSchemaResponse setSchemaResponse = mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(adultSchema, childSchema)
.setMigrator("Person", migrator)
.setForceOverride(false)
@@ -1031,7 +1031,7 @@
.setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REQUIRED)
.build())
.build();
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(sourceSchemaA, sourceSchemaB).setForceOverride(true).build()).get();
// save 100 docs to each type
@@ -1047,7 +1047,7 @@
.setCreationTimestampMillis(DOCUMENT_CREATION_TIME).build();
putRequestBuilder.addGenericDocuments(docInA, docInB);
}
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
putRequestBuilder.build()));
assertThat(result.getFailures()).isEmpty();
@@ -1141,7 +1141,7 @@
};
// SetSchema with forceOverride=false and increase overall version
- SetSchemaResponse setSchemaResponse = mDb.setSchema(new SetSchemaRequest.Builder()
+ SetSchemaResponse setSchemaResponse = mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(destinationSchemaB, destinationSchemaC, destinationSchemaD)
.setMigrator("schemaA", migratorA)
.setMigrator("schemaB", migratorB)
@@ -1280,7 +1280,7 @@
.setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.build())
.build();
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(typeA).setForceOverride(true).setVersion(1).build()).get();
// save a doc to version 1.
@@ -1288,13 +1288,13 @@
"namespace", "id", "TypeA")
.setPropertyString("subject", "subject")
.setCreationTimestampMillis(DOCUMENT_CREATION_TIME).build();
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
assertThat(result.getSuccesses()).containsExactly("id", null);
assertThat(result.getFailures()).isEmpty();
// update to version 4.
- SetSchemaResponse setSchemaResponse = mDb.setSchema(MULTI_STEP_REQUEST).get();
+ SetSchemaResponse setSchemaResponse = mDb.setSchemaAsync(MULTI_STEP_REQUEST).get();
assertThat(setSchemaResponse.getDeletedTypes()).containsExactly("TypeA");
assertThat(setSchemaResponse.getIncompatibleTypes()).isEmpty();
assertThat(setSchemaResponse.getMigratedTypes()).containsExactly("TypeA");
@@ -1329,7 +1329,7 @@
.setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.build())
.build();
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(typeA).setForceOverride(true).setVersion(2).build()).get();
// save a doc to version 2.
@@ -1338,13 +1338,13 @@
.setPropertyString("subject", "subject")
.setPropertyString("body", "bodyFromA")
.setCreationTimestampMillis(DOCUMENT_CREATION_TIME).build();
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
assertThat(result.getSuccesses()).containsExactly("id", null);
assertThat(result.getFailures()).isEmpty();
// update to version 4.
- SetSchemaResponse setSchemaResponse = mDb.setSchema(MULTI_STEP_REQUEST).get();
+ SetSchemaResponse setSchemaResponse = mDb.setSchemaAsync(MULTI_STEP_REQUEST).get();
assertThat(setSchemaResponse.getDeletedTypes()).containsExactly("TypeA");
assertThat(setSchemaResponse.getIncompatibleTypes()).isEmpty();
assertThat(setSchemaResponse.getMigratedTypes()).containsExactly("TypeA");
@@ -1375,7 +1375,7 @@
.setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.build())
.build();
- mDb.setSchema(new SetSchemaRequest.Builder()
+ mDb.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(typeA).setForceOverride(true).setVersion(3).build()).get();
// save a doc to version 2.
@@ -1384,13 +1384,13 @@
.setPropertyString("subject", "subject")
.setPropertyString("body", "bodyFromB")
.setCreationTimestampMillis(DOCUMENT_CREATION_TIME).build();
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
assertThat(result.getSuccesses()).containsExactly("id", null);
assertThat(result.getFailures()).isEmpty();
// update to version 4.
- SetSchemaResponse setSchemaResponse = mDb.setSchema(MULTI_STEP_REQUEST).get();
+ SetSchemaResponse setSchemaResponse = mDb.setSchemaAsync(MULTI_STEP_REQUEST).get();
assertThat(setSchemaResponse.getDeletedTypes()).isEmpty();
assertThat(setSchemaResponse.getIncompatibleTypes()).containsExactly("TypeB");
assertThat(setSchemaResponse.getMigratedTypes()).containsExactly("TypeB");
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationLocalCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationLocalCtsTest.java
index 6525ddd..b6821a0 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationLocalCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationLocalCtsTest.java
@@ -27,9 +27,9 @@
public class AppSearchSchemaMigrationLocalCtsTest extends AppSearchSchemaMigrationCtsTestBase{
@Override
- protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
Context context = ApplicationProvider.getApplicationContext();
- return LocalStorage.createSearchSession(
+ return LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, dbName).build());
}
}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationPlatformCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationPlatformCtsTest.java
index 405d82e..f2b0e7a 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationPlatformCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSchemaMigrationPlatformCtsTest.java
@@ -30,9 +30,9 @@
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
public class AppSearchSchemaMigrationPlatformCtsTest extends AppSearchSchemaMigrationCtsTestBase{
@Override
- protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
Context context = ApplicationProvider.getApplicationContext();
- return PlatformStorage.createSearchSession(
+ return PlatformStorage.createSearchSessionAsync(
new PlatformStorage.SearchContext.Builder(context, dbName).build());
}
}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
index 9d817be..bc1e02c 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
@@ -26,6 +26,8 @@
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;
+import static org.junit.Assume.assumeFalse;
+import static org.junit.Assume.assumeTrue;
import android.content.Context;
@@ -40,6 +42,8 @@
import androidx.appsearch.app.GenericDocument;
import androidx.appsearch.app.GetByDocumentIdRequest;
import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.PropertyPath;
import androidx.appsearch.app.PutDocumentsRequest;
import androidx.appsearch.app.RemoveByDocumentIdRequest;
import androidx.appsearch.app.ReportUsageRequest;
@@ -51,9 +55,11 @@
import androidx.appsearch.cts.app.customer.EmailDocument;
import androidx.appsearch.exceptions.AppSearchException;
import androidx.appsearch.testutil.AppSearchEmail;
+import androidx.collection.ArrayMap;
import androidx.test.core.app.ApplicationProvider;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors;
@@ -62,9 +68,11 @@
import org.junit.Test;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -78,16 +86,16 @@
private AppSearchSession mDb1;
private AppSearchSession mDb2;
- protected abstract ListenableFuture<AppSearchSession> createSearchSession(
+ protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
@NonNull String dbName);
- protected abstract ListenableFuture<AppSearchSession> createSearchSession(
+ protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
@NonNull String dbName, @NonNull ExecutorService executor);
@Before
public void setUp() throws Exception {
- mDb1 = createSearchSession(DB_NAME_1).get();
- mDb2 = createSearchSession(DB_NAME_2).get();
+ mDb1 = createSearchSessionAsync(DB_NAME_1).get();
+ mDb2 = createSearchSessionAsync(DB_NAME_2).get();
// Cleanup whatever documents may still exist in these databases. This is needed in
// addition to tearDown in case a test exited without completing properly.
@@ -101,9 +109,9 @@
}
private void cleanup() throws Exception {
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
- mDb2.setSchema(
+ mDb2.setSchemaAsync(
new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
}
@@ -121,19 +129,19 @@
.setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.build()
).build();
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
}
@Test
public void testSetSchema_Failure() throws Exception {
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
AppSearchSchema emailSchema1 = new AppSearchSchema.Builder(AppSearchEmail.SCHEMA_TYPE)
.build();
Throwable throwable = assertThrows(ExecutionException.class,
- () -> mDb1.setSchema(new SetSchemaRequest.Builder()
+ () -> mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(emailSchema1).build()).get()).getCause();
assertThat(throwable).isInstanceOf(AppSearchException.class);
AppSearchException exception = (AppSearchException) throwable;
@@ -142,7 +150,7 @@
assertThat(exception).hasMessageThat().contains("Incompatible types: {builtin:Email}");
throwable = assertThrows(ExecutionException.class,
- () -> mDb1.setSchema(new SetSchemaRequest.Builder().build()).get()).getCause();
+ () -> mDb1.setSchemaAsync(new SetSchemaRequest.Builder().build()).get()).getCause();
assertThat(throwable).isInstanceOf(AppSearchException.class);
exception = (AppSearchException) throwable;
@@ -166,17 +174,17 @@
.build()
).build();
- mDb1.setSchema(new SetSchemaRequest.Builder().addSchemas(schema)
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema)
.setVersion(1).build()).get();
- Set<AppSearchSchema> actualSchemaTypes = mDb1.getSchema().get().getSchemas();
+ Set<AppSearchSchema> actualSchemaTypes = mDb1.getSchemaAsync().get().getSchemas();
assertThat(actualSchemaTypes).containsExactly(schema);
// increase version number
- mDb1.setSchema(new SetSchemaRequest.Builder().addSchemas(schema)
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema)
.setVersion(2).build()).get();
- GetSchemaResponse getSchemaResponse = mDb1.getSchema().get();
+ GetSchemaResponse getSchemaResponse = mDb1.getSchemaAsync().get();
assertThat(getSchemaResponse.getSchemas()).containsExactly(schema);
assertThat(getSchemaResponse.getVersion()).isEqualTo(2);
}
@@ -197,18 +205,18 @@
).build();
// set different version number to different database.
- mDb1.setSchema(new SetSchemaRequest.Builder().addSchemas(schema)
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema)
.setVersion(135).build()).get();
- mDb2.setSchema(new SetSchemaRequest.Builder().addSchemas(schema)
+ mDb2.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema)
.setVersion(246).build()).get();
// check the version has been set correctly.
- GetSchemaResponse getSchemaResponse = mDb1.getSchema().get();
+ GetSchemaResponse getSchemaResponse = mDb1.getSchemaAsync().get();
assertThat(getSchemaResponse.getSchemas()).containsExactly(schema);
assertThat(getSchemaResponse.getVersion()).isEqualTo(135);
- getSchemaResponse = mDb2.getSchema().get();
+ getSchemaResponse = mDb2.getSchemaAsync().get();
assertThat(getSchemaResponse.getSchemas()).containsExactly(schema);
assertThat(getSchemaResponse.getVersion()).isEqualTo(246);
}
@@ -217,7 +225,7 @@
@Test
public void testSetSchema_addDocumentClasses() throws Exception {
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addDocumentClasses(EmailDocument.class).build()).get();
}
// @exportToFramework:endStrip()
@@ -256,13 +264,13 @@
SetSchemaRequest request2 = new SetSchemaRequest.Builder()
.addSchemas(emailSchema2).addDocumentClasses(EmailDocument.class).build();
- mDb1.setSchema(request1).get();
- mDb2.setSchema(request2).get();
+ mDb1.setSchemaAsync(request1).get();
+ mDb2.setSchemaAsync(request2).get();
- Set<AppSearchSchema> actual1 = mDb1.getSchema().get().getSchemas();
+ Set<AppSearchSchema> actual1 = mDb1.getSchemaAsync().get().getSchemas();
assertThat(actual1).hasSize(2);
assertThat(actual1).isEqualTo(request1.getSchemas());
- Set<AppSearchSchema> actual2 = mDb2.getSchema().get().getSchemas();
+ Set<AppSearchSchema> actual2 = mDb2.getSchemaAsync().get().getSchemas();
assertThat(actual2).hasSize(2);
assertThat(actual2).isEqualTo(request2.getSchemas());
}
@@ -296,9 +304,9 @@
.build();
// Add it to AppSearch and then obtain it again
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(inSchema, AppSearchEmail.SCHEMA).build()).get();
- GetSchemaResponse response = mDb1.getSchema().get();
+ GetSchemaResponse response = mDb1.getSchemaAsync().get();
List<AppSearchSchema> schemas = new ArrayList<>(response.getSchemas());
assertThat(schemas).containsExactly(inSchema, AppSearchEmail.SCHEMA);
AppSearchSchema outSchema;
@@ -351,87 +359,213 @@
}
@Test
+ public void testGetSchema_visibilitySetting() throws Exception {
+ assumeTrue(mDb1.getFeatures().isFeatureSupported(
+ Features.ADD_PERMISSIONS_AND_GET_VISIBILITY));
+ AppSearchSchema emailSchema = new AppSearchSchema.Builder("Email1")
+ .addProperty(new StringPropertyConfig.Builder("subject")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build()
+ ).addProperty(new StringPropertyConfig.Builder("body")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build()
+ ).build();
+
+ byte[] shar256Cert1 = new byte[32];
+ Arrays.fill(shar256Cert1, (byte) 1);
+ byte[] shar256Cert2 = new byte[32];
+ Arrays.fill(shar256Cert2, (byte) 2);
+ PackageIdentifier packageIdentifier1 =
+ new PackageIdentifier("pkgFoo", shar256Cert1);
+ PackageIdentifier packageIdentifier2 =
+ new PackageIdentifier("pkgBar", shar256Cert2);
+ SetSchemaRequest request = new SetSchemaRequest.Builder()
+ .addSchemas(emailSchema)
+ .setSchemaTypeDisplayedBySystem("Email1", /*displayed=*/false)
+ .setSchemaTypeVisibilityForPackage("Email1", /*visible=*/true,
+ packageIdentifier1)
+ .setSchemaTypeVisibilityForPackage("Email1", /*visible=*/true,
+ packageIdentifier2)
+ .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+ ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR))
+ .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA))
+ .build();
+
+ mDb1.setSchemaAsync(request).get();
+
+ GetSchemaResponse getSchemaResponse = mDb1.getSchemaAsync().get();
+ Set<AppSearchSchema> actual = getSchemaResponse.getSchemas();
+ assertThat(actual).hasSize(1);
+ assertThat(actual).isEqualTo(request.getSchemas());
+ assertThat(getSchemaResponse.getSchemaTypesNotDisplayedBySystem())
+ .containsExactly("Email1");
+ assertThat(getSchemaResponse.getSchemaTypesVisibleToPackages())
+ .containsExactly("Email1", ImmutableSet.of(
+ packageIdentifier1, packageIdentifier2));
+ assertThat(getSchemaResponse.getRequiredPermissionsForSchemaTypeVisibility())
+ .containsExactly("Email1", ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_SMS,
+ SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)));
+ }
+
+ @Test
+ public void testGetSchema_visibilitySetting_notSupported() throws Exception {
+ assumeFalse(mDb1.getFeatures().isFeatureSupported(
+ Features.ADD_PERMISSIONS_AND_GET_VISIBILITY));
+ AppSearchSchema emailSchema = new AppSearchSchema.Builder("Email1")
+ .addProperty(new StringPropertyConfig.Builder("subject")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build()
+ ).addProperty(new StringPropertyConfig.Builder("body")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build()
+ ).build();
+
+ byte[] shar256Cert1 = new byte[32];
+ Arrays.fill(shar256Cert1, (byte) 1);
+ byte[] shar256Cert2 = new byte[32];
+ Arrays.fill(shar256Cert2, (byte) 2);
+ PackageIdentifier packageIdentifier1 =
+ new PackageIdentifier("pkgFoo", shar256Cert1);
+ PackageIdentifier packageIdentifier2 =
+ new PackageIdentifier("pkgBar", shar256Cert2);
+ SetSchemaRequest request = new SetSchemaRequest.Builder()
+ .addSchemas(emailSchema)
+ .setSchemaTypeDisplayedBySystem("Email1", /*displayed=*/false)
+ .setSchemaTypeVisibilityForPackage("Email1", /*visible=*/true,
+ packageIdentifier1)
+ .setSchemaTypeVisibilityForPackage("Email1", /*visible=*/true,
+ packageIdentifier2)
+ .build();
+
+ mDb1.setSchemaAsync(request).get();
+
+ GetSchemaResponse getSchemaResponse = mDb1.getSchemaAsync().get();
+ Set<AppSearchSchema> actual = getSchemaResponse.getSchemas();
+ assertThat(actual).hasSize(1);
+ assertThat(actual).isEqualTo(request.getSchemas());
+ assertThrows(
+ UnsupportedOperationException.class,
+ () -> getSchemaResponse.getSchemaTypesNotDisplayedBySystem());
+ assertThrows(
+ UnsupportedOperationException.class,
+ () -> getSchemaResponse.getSchemaTypesVisibleToPackages());
+ assertThrows(
+ UnsupportedOperationException.class,
+ () -> getSchemaResponse.getRequiredPermissionsForSchemaTypeVisibility());
+ }
+
+ @Test
+ public void testSetSchema_visibilitySettingPermission_notSupported() {
+ assumeFalse(mDb1.getFeatures().isFeatureSupported(
+ Features.ADD_PERMISSIONS_AND_GET_VISIBILITY));
+ AppSearchSchema emailSchema = new AppSearchSchema.Builder("Email1").build();
+
+ SetSchemaRequest request = new SetSchemaRequest.Builder()
+ .addSchemas(emailSchema)
+ .setSchemaTypeDisplayedBySystem("Email1", /*displayed=*/false)
+ .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+ ImmutableSet.of(SetSchemaRequest.READ_SMS))
+ .build();
+
+ assertThrows(UnsupportedOperationException.class, () ->
+ mDb1.setSchemaAsync(request).get());
+ }
+
+ @Test
public void testGetNamespaces() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
- assertThat(mDb1.getNamespaces().get()).isEmpty();
+ assertThat(mDb1.getNamespacesAsync().get()).isEmpty();
// Index a document
- checkIsBatchResultSuccess(mDb1.put(new PutDocumentsRequest.Builder()
+ checkIsBatchResultSuccess(mDb1.putAsync(new PutDocumentsRequest.Builder()
.addGenericDocuments(new AppSearchEmail.Builder("namespace1", "id1").build())
.build()));
- assertThat(mDb1.getNamespaces().get()).containsExactly("namespace1");
+ assertThat(mDb1.getNamespacesAsync().get()).containsExactly("namespace1");
// Index additional data
- checkIsBatchResultSuccess(mDb1.put(new PutDocumentsRequest.Builder()
+ checkIsBatchResultSuccess(mDb1.putAsync(new PutDocumentsRequest.Builder()
.addGenericDocuments(
new AppSearchEmail.Builder("namespace2", "id1").build(),
new AppSearchEmail.Builder("namespace2", "id2").build(),
new AppSearchEmail.Builder("namespace3", "id1").build())
.build()));
- assertThat(mDb1.getNamespaces().get()).containsExactly(
+ assertThat(mDb1.getNamespacesAsync().get()).containsExactly(
"namespace1", "namespace2", "namespace3");
// Remove namespace2/id2 -- namespace2 should still exist because of namespace2/id1
checkIsBatchResultSuccess(
- mDb1.remove(new RemoveByDocumentIdRequest.Builder("namespace2").addIds(
+ mDb1.removeAsync(new RemoveByDocumentIdRequest.Builder("namespace2").addIds(
"id2").build()));
- assertThat(mDb1.getNamespaces().get()).containsExactly(
+ assertThat(mDb1.getNamespacesAsync().get()).containsExactly(
"namespace1", "namespace2", "namespace3");
// Remove namespace2/id1 -- namespace2 should now be gone
checkIsBatchResultSuccess(
- mDb1.remove(new RemoveByDocumentIdRequest.Builder("namespace2").addIds(
+ mDb1.removeAsync(new RemoveByDocumentIdRequest.Builder("namespace2").addIds(
"id1").build()));
- assertThat(mDb1.getNamespaces().get()).containsExactly("namespace1", "namespace3");
+ assertThat(mDb1.getNamespacesAsync().get()).containsExactly("namespace1", "namespace3");
// Make sure the list of namespaces is preserved after restart
mDb1.close();
- mDb1 = createSearchSession(DB_NAME_1).get();
- assertThat(mDb1.getNamespaces().get()).containsExactly("namespace1", "namespace3");
+ mDb1 = createSearchSessionAsync(DB_NAME_1).get();
+ assertThat(mDb1.getNamespacesAsync().get()).containsExactly("namespace1", "namespace3");
}
@Test
public void testGetNamespaces_dbIsolation() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
- mDb2.setSchema(
+ mDb2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
- assertThat(mDb1.getNamespaces().get()).isEmpty();
- assertThat(mDb2.getNamespaces().get()).isEmpty();
+ assertThat(mDb1.getNamespacesAsync().get()).isEmpty();
+ assertThat(mDb2.getNamespacesAsync().get()).isEmpty();
// Index documents
- checkIsBatchResultSuccess(mDb1.put(new PutDocumentsRequest.Builder()
+ checkIsBatchResultSuccess(mDb1.putAsync(new PutDocumentsRequest.Builder()
.addGenericDocuments(new AppSearchEmail.Builder("namespace1_db1", "id1").build())
.build()));
- checkIsBatchResultSuccess(mDb1.put(new PutDocumentsRequest.Builder()
+ checkIsBatchResultSuccess(mDb1.putAsync(new PutDocumentsRequest.Builder()
.addGenericDocuments(new AppSearchEmail.Builder("namespace2_db1", "id1").build())
.build()));
- checkIsBatchResultSuccess(mDb2.put(new PutDocumentsRequest.Builder()
+ checkIsBatchResultSuccess(mDb2.putAsync(new PutDocumentsRequest.Builder()
.addGenericDocuments(new AppSearchEmail.Builder("namespace_db2", "id1").build())
.build()));
- assertThat(mDb1.getNamespaces().get()).containsExactly("namespace1_db1", "namespace2_db1");
- assertThat(mDb2.getNamespaces().get()).containsExactly("namespace_db2");
+ assertThat(mDb1.getNamespacesAsync().get())
+ .containsExactly("namespace1_db1", "namespace2_db1");
+ assertThat(mDb2.getNamespacesAsync().get()).containsExactly("namespace_db2");
// Make sure the list of namespaces is preserved after restart
mDb1.close();
- mDb1 = createSearchSession(DB_NAME_1).get();
- assertThat(mDb1.getNamespaces().get()).containsExactly("namespace1_db1", "namespace2_db1");
- assertThat(mDb2.getNamespaces().get()).containsExactly("namespace_db2");
+ mDb1 = createSearchSessionAsync(DB_NAME_1).get();
+ assertThat(mDb1.getNamespacesAsync().get())
+ .containsExactly("namespace1_db1", "namespace2_db1");
+ assertThat(mDb2.getNamespacesAsync().get()).containsExactly("namespace_db2");
}
@Test
public void testGetSchema_emptyDB() throws Exception {
- GetSchemaResponse getSchemaResponse = mDb1.getSchema().get();
+ GetSchemaResponse getSchemaResponse = mDb1.getSchemaAsync().get();
assertThat(getSchemaResponse.getVersion()).isEqualTo(0);
}
@Test
public void testPutDocuments() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index a document
@@ -442,18 +576,135 @@
.setBody("This is the body of the testPut email")
.build();
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
assertThat(result.getSuccesses()).containsExactly("id1", null);
assertThat(result.getFailures()).isEmpty();
}
+ @Test
+ public void testPutDocuments_emptyProperties() throws Exception {
+ // Schema registration. Due to b/204677124 is fixed in Android T. We have different
+ // behaviour when set empty array to bytes and documents between local and platform storage.
+ // This test only test String, long, boolean and double, for byte array and Document will be
+ // test in backend's specific test.
+ AppSearchSchema schema = new AppSearchSchema.Builder("testSchema")
+ .addProperty(new StringPropertyConfig.Builder("string")
+ .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+ .setIndexingType(StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS)
+ .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build())
+ .addProperty(new AppSearchSchema.LongPropertyConfig.Builder("long")
+ .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .addProperty(new AppSearchSchema.DoublePropertyConfig.Builder("double")
+ .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder("boolean")
+ .setCardinality(PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .build();
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
+ .addSchemas(schema, AppSearchEmail.SCHEMA).build()).get();
+
+ // Index a document
+ GenericDocument document = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
+ .setPropertyBoolean("boolean")
+ .setPropertyString("string")
+ .setPropertyDouble("double")
+ .setPropertyLong("long")
+ .build();
+
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(document).build()));
+ assertThat(result.getSuccesses()).containsExactly("id1", null);
+ assertThat(result.getFailures()).isEmpty();
+
+ GetByDocumentIdRequest request = new GetByDocumentIdRequest.Builder("namespace")
+ .addIds("id1")
+ .build();
+ List<GenericDocument> outDocuments = doGet(mDb1, request);
+ assertThat(outDocuments).hasSize(1);
+ GenericDocument outDocument = outDocuments.get(0);
+ assertThat(outDocument.getPropertyBooleanArray("boolean")).isEmpty();
+ assertThat(outDocument.getPropertyStringArray("string")).isEmpty();
+ assertThat(outDocument.getPropertyDoubleArray("double")).isEmpty();
+ assertThat(outDocument.getPropertyLongArray("long")).isEmpty();
+ }
+
+ @Test
+ public void testPutLargeDocumentBatch() throws Exception {
+ // Schema registration
+ AppSearchSchema schema = new AppSearchSchema.Builder("Type").addProperty(
+ new StringPropertyConfig.Builder("body")
+ .setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
+ .setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .build())
+ .build();
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(schema).build()).get();
+
+ // Creates a large batch of Documents, since we have max document size in Framework which is
+ // 512KiB, we will create 1KiB * 4000 docs = 4MiB total size > 1MiB binder transaction limit
+ char[] chars = new char[1024]; // 1KiB
+ Arrays.fill(chars, ' ');
+ String body = String.valueOf(chars) + "the end.";
+ List<GenericDocument> inDocuments = new ArrayList<>();
+ GetByDocumentIdRequest.Builder getByDocumentIdRequestBuilder =
+ new GetByDocumentIdRequest.Builder("namespace");
+ for (int i = 0; i < 4000; i++) {
+ GenericDocument inDocument = new GenericDocument.Builder<>(
+ "namespace", "id" + i, "Type")
+ .setPropertyString("body", body)
+ .build();
+ inDocuments.add(inDocument);
+ getByDocumentIdRequestBuilder.addIds("id" + i);
+ }
+
+ // Index documents.
+ AppSearchBatchResult<String, Void> result =
+ mDb1.putAsync(new PutDocumentsRequest.Builder().addGenericDocuments(inDocuments)
+ .build()).get();
+ assertThat(result.isSuccess()).isTrue();
+
+ // Query those documents and verify they are same with the input. This also verify
+ // AppSearchResult could handle large batch.
+ SearchResults searchResults = mDb1.search("end", new SearchSpec.Builder()
+ .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+ .setResultCountPerPage(4000)
+ .build());
+ List<GenericDocument> outDocuments = convertSearchResultsToDocuments(searchResults);
+
+ // Create a map to assert the output is same to the input in O(n).
+ // containsExactlyElementsIn will create two iterators and the complexity is O(n^2).
+ Map<String, GenericDocument> outMap = new ArrayMap<>(outDocuments.size());
+ for (int i = 0; i < outDocuments.size(); i++) {
+ outMap.put(outDocuments.get(i).getId(), outDocuments.get(i));
+ }
+ for (int i = 0; i < inDocuments.size(); i++) {
+ GenericDocument inDocument = inDocuments.get(i);
+ assertThat(inDocument).isEqualTo(outMap.get(inDocument.getId()));
+ outMap.remove(inDocument.getId());
+ }
+ assertThat(outMap).isEmpty();
+
+ // Get by document ID and verify they are same with the input. This also verify
+ // AppSearchBatchResult could handle large batch.
+ AppSearchBatchResult<String, GenericDocument> batchResult = mDb1.getByDocumentIdAsync(
+ getByDocumentIdRequestBuilder.build()).get();
+ assertThat(batchResult.isSuccess()).isTrue();
+ for (int i = 0; i < inDocuments.size(); i++) {
+ GenericDocument inDocument = inDocuments.get(i);
+ assertThat(batchResult.getSuccesses().get(inDocument.getId())).isEqualTo(inDocument);
+ }
+ }
+
// @exportToFramework:startStrip()
@Test
public void testPut_addDocumentClasses() throws Exception {
// Schema registration
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addDocumentClasses(EmailDocument.class).build()).get();
// Index a document
@@ -463,7 +714,7 @@
email.subject = "testPut example";
email.body = "This is the body of the testPut email";
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addDocuments(email).build()));
assertThat(result.getSuccesses()).containsExactly("id1", null);
assertThat(result.getFailures()).isEmpty();
@@ -497,7 +748,7 @@
.setCardinality(PropertyConfig.CARDINALITY_OPTIONAL)
.build())
.build();
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(oldEmailSchema).build()).get();
// Try to index a gift. This should fail as it's not in the schema.
@@ -505,19 +756,19 @@
new GenericDocument.Builder<>("namespace", "gift1", "Gift").setPropertyLong("price",
5).build();
AppSearchBatchResult<String, Void> result =
- mDb1.put(
+ mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(gift).build()).get();
assertThat(result.isSuccess()).isFalse();
assertThat(result.getFailures().get("gift1").getResultCode())
.isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
// Update the schema to include the gift and update email with a new field
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(newEmailSchema, giftSchema).build()).get();
// Try to index the document again, which should now work
checkIsBatchResultSuccess(
- mDb1.put(
+ mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(gift).build()));
// Indexing an email with a body should also work
@@ -526,7 +777,7 @@
.setBody("This is the body of the testPut email")
.build();
checkIsBatchResultSuccess(
- mDb1.put(
+ mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
}
@@ -540,14 +791,14 @@
.setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.build())
.build();
- mDb1.setSchema(new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
// Index an email and check it present.
AppSearchEmail email = new AppSearchEmail.Builder("namespace", "email1")
.setSubject("testPut example")
.build();
checkIsBatchResultSuccess(
- mDb1.put(
+ mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
List<GenericDocument> outDocuments =
doGet(mDb1, "namespace", "email1");
@@ -558,7 +809,7 @@
// Try to remove the email schema. This should fail as it's an incompatible change.
Throwable failResult1 = assertThrows(
ExecutionException.class,
- () -> mDb1.setSchema(new SetSchemaRequest.Builder().build()).get()).getCause();
+ () -> mDb1.setSchemaAsync(new SetSchemaRequest.Builder().build()).get()).getCause();
assertThat(failResult1).isInstanceOf(AppSearchException.class);
assertThat(failResult1).hasMessageThat().contains("Schema is incompatible");
assertThat(failResult1).hasMessageThat().contains(
@@ -566,10 +817,10 @@
// Try to remove the email schema again, which should now work as we set forceOverride to
// be true.
- mDb1.setSchema(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
// Make sure the indexed email is gone.
- AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+ AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("namespace")
.addIds("email1")
.build()).get();
@@ -581,7 +832,7 @@
AppSearchEmail email2 = new AppSearchEmail.Builder("namespace", "email2")
.setSubject("testPut example")
.build();
- AppSearchBatchResult<String, Void> failResult2 = mDb1.put(
+ AppSearchBatchResult<String, Void> failResult2 = mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email2).build()).get();
assertThat(failResult2.isSuccess()).isFalse();
assertThat(failResult2.getFailures().get("email2").getErrorMessage())
@@ -599,15 +850,15 @@
.setTokenizerType(StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
.build())
.build();
- mDb1.setSchema(new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
- mDb2.setSchema(new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
+ mDb2.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(emailSchema).build()).get();
// Index an email and check it present in database1.
AppSearchEmail email1 = new AppSearchEmail.Builder("namespace", "email1")
.setSubject("testPut example")
.build();
checkIsBatchResultSuccess(
- mDb1.put(
+ mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
List<GenericDocument> outDocuments =
doGet(mDb1, "namespace", "email1");
@@ -620,7 +871,7 @@
.setSubject("testPut example")
.build();
checkIsBatchResultSuccess(
- mDb2.put(
+ mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email2).build()));
outDocuments = doGet(mDb2, "namespace", "email2");
assertThat(outDocuments).hasSize(1);
@@ -631,7 +882,7 @@
// change.
Throwable failResult1 = assertThrows(
ExecutionException.class,
- () -> mDb1.setSchema(new SetSchemaRequest.Builder().build()).get()).getCause();
+ () -> mDb1.setSchemaAsync(new SetSchemaRequest.Builder().build()).get()).getCause();
assertThat(failResult1).isInstanceOf(AppSearchException.class);
assertThat(failResult1).hasMessageThat().contains("Schema is incompatible");
assertThat(failResult1).hasMessageThat().contains(
@@ -639,10 +890,10 @@
// Try to remove the email schema again, which should now work as we set forceOverride to
// be true.
- mDb1.setSchema(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
// Make sure the indexed email is gone in database 1.
- AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+ AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("namespace")
.addIds("email1").build()).get();
assertThat(getResult.isSuccess()).isFalse();
@@ -653,7 +904,7 @@
AppSearchEmail email3 = new AppSearchEmail.Builder("namespace", "email3")
.setSubject("testPut example")
.build();
- AppSearchBatchResult<String, Void> failResult2 = mDb1.put(
+ AppSearchBatchResult<String, Void> failResult2 = mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email3).build()).get();
assertThat(failResult2.isSuccess()).isFalse();
assertThat(failResult2.getFailures().get("email3").getErrorMessage())
@@ -668,14 +919,14 @@
// Make sure email could still be indexed in database 2.
checkIsBatchResultSuccess(
- mDb2.put(
+ mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email2).build()));
}
@Test
public void testGetDocuments() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index a document
@@ -686,7 +937,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
// Get the document
@@ -696,7 +947,7 @@
assertThat(outEmail).isEqualTo(inEmail);
// Can't get the document in the other instance.
- AppSearchBatchResult<String, GenericDocument> failResult = mDb2.getByDocumentId(
+ AppSearchBatchResult<String, GenericDocument> failResult = mDb2.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("namespace").addIds(
"id1").build()).get();
assertThat(failResult.isSuccess()).isFalse();
@@ -709,7 +960,7 @@
@Test
public void testGet_addDocumentClasses() throws Exception {
// Schema registration
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addDocumentClasses(EmailDocument.class).build()).get();
// Index a document
@@ -718,7 +969,7 @@
inEmail.id = "id1";
inEmail.subject = "testPut example";
inEmail.body = "This is the body of the testPut inEmail";
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addDocuments(inEmail).build()));
// Get the document
@@ -735,7 +986,7 @@
@Test
public void testGetDocuments_projection() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.build()).get();
@@ -757,7 +1008,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email1, email2).build()));
@@ -789,7 +1040,7 @@
@Test
public void testGetDocuments_projectionEmpty() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.build()).get();
@@ -811,7 +1062,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email1, email2).build()));
@@ -836,7 +1087,7 @@
@Test
public void testGetDocuments_projectionNonExistentType() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.build()).get();
@@ -858,7 +1109,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email1, email2).build()));
@@ -890,7 +1141,7 @@
@Test
public void testGetDocuments_wildcardProjection() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.build()).get();
@@ -912,7 +1163,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email1, email2).build()));
@@ -945,7 +1196,7 @@
@Test
public void testGetDocuments_wildcardProjectionEmpty() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.build()).get();
@@ -967,7 +1218,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email1, email2).build()));
@@ -993,7 +1244,7 @@
@Test
public void testGetDocuments_wildcardProjectionNonExistentType() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.build()).get();
@@ -1015,7 +1266,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email1, email2).build()));
@@ -1049,7 +1300,7 @@
@Test
public void testQuery() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index a document
@@ -1060,7 +1311,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
// Query for the document
@@ -1083,7 +1334,7 @@
@Test
public void testQuery_getNextPage() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
Set<AppSearchEmail> emailSet = new HashSet<>();
PutDocumentsRequest.Builder putDocumentsRequestBuilder = new PutDocumentsRequest.Builder();
@@ -1099,7 +1350,7 @@
emailSet.add(inEmail);
putDocumentsRequestBuilder.addGenericDocuments(inEmail);
}
- checkIsBatchResultSuccess(mDb1.put(putDocumentsRequestBuilder.build()));
+ checkIsBatchResultSuccess(mDb1.putAsync(putDocumentsRequestBuilder.build()));
// Set number of results per page is 7.
SearchResults searchResults = mDb1.search("body",
@@ -1114,7 +1365,7 @@
// keep loading next page until it's empty.
do {
- results = searchResults.getNextPage().get();
+ results = searchResults.getNextPageAsync().get();
++pageNumber;
for (SearchResult result : results) {
documents.add(result.getGenericDocument());
@@ -1129,7 +1380,7 @@
@Test
public void testQuery_relevanceScoring() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.build()).get();
@@ -1151,7 +1402,7 @@
.setSubject("I'm a little teapot")
.setBody("short and stout. Here is my handle, here is my spout.")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email1, email2).build()));
@@ -1198,7 +1449,7 @@
.setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
.build()
).build();
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.addSchemas(genericSchema)
@@ -1214,7 +1465,7 @@
.build();
GenericDocument inDoc = new GenericDocument.Builder<>("namespace", "id2", "Generic")
.setPropertyString("foo", "body").build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail, inDoc).build()));
// Query for the documents
@@ -1246,7 +1497,7 @@
@Test
public void testQuery_packageFilter() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -1257,7 +1508,7 @@
.setSubject("foo")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
// Query for the document within our package
@@ -1273,14 +1524,14 @@
.setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
.addFilterPackageNames("some.other.package")
.build());
- List<SearchResult> results = searchResults.getNextPage().get();
+ List<SearchResult> results = searchResults.getNextPageAsync().get();
assertThat(results).isEmpty();
}
@Test
public void testQuery_namespaceFilter() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index two documents
@@ -1298,7 +1549,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(expectedEmail, unexpectedEmail).build()));
@@ -1333,7 +1584,7 @@
@Test
public void testQuery_getPackageName() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index a document
@@ -1344,7 +1595,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
// Query for the document
@@ -1356,7 +1607,7 @@
List<GenericDocument> documents = new ArrayList<>();
// keep loading next page until it's empty.
do {
- results = searchResults.getNextPage().get();
+ results = searchResults.getNextPageAsync().get();
for (SearchResult result : results) {
assertThat(result.getGenericDocument()).isEqualTo(inEmail);
assertThat(result.getPackageName()).isEqualTo(
@@ -1370,7 +1621,7 @@
@Test
public void testQuery_getDatabaseName() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index a document
@@ -1381,7 +1632,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
// Query for the document
@@ -1393,7 +1644,7 @@
List<GenericDocument> documents = new ArrayList<>();
// keep loading next page until it's empty.
do {
- results = searchResults.getNextPage().get();
+ results = searchResults.getNextPageAsync().get();
for (SearchResult result : results) {
assertThat(result.getGenericDocument()).isEqualTo(inEmail);
assertThat(result.getDatabaseName()).isEqualTo(DB_NAME_1);
@@ -1403,10 +1654,10 @@
assertThat(documents).hasSize(1);
// Schema registration for another database
- mDb2.setSchema(
+ mDb2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
// Query for the document
@@ -1417,7 +1668,7 @@
documents = new ArrayList<>();
// keep loading next page until it's empty.
do {
- results = searchResults.getNextPage().get();
+ results = searchResults.getNextPageAsync().get();
for (SearchResult result : results) {
assertThat(result.getGenericDocument()).isEqualTo(inEmail);
assertThat(result.getDatabaseName()).isEqualTo(DB_NAME_2);
@@ -1430,7 +1681,7 @@
@Test
public void testQuery_projection() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.addSchemas(new AppSearchSchema.Builder("Note")
@@ -1465,7 +1716,7 @@
.setCreationTimestampMillis(1000)
.setPropertyString("title", "Note title")
.setPropertyString("body", "Note body").build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email, note).build()));
@@ -1495,7 +1746,7 @@
@Test
public void testQuery_projectionEmpty() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.addSchemas(new AppSearchSchema.Builder("Note")
@@ -1530,7 +1781,7 @@
.setCreationTimestampMillis(1000)
.setPropertyString("title", "Note title")
.setPropertyString("body", "Note body").build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email, note).build()));
@@ -1558,7 +1809,7 @@
@Test
public void testQuery_projectionNonExistentType() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.addSchemas(new AppSearchSchema.Builder("Note")
@@ -1593,7 +1844,7 @@
.setCreationTimestampMillis(1000)
.setPropertyString("title", "Note title")
.setPropertyString("body", "Note body").build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email, note).build()));
@@ -1624,7 +1875,7 @@
@Test
public void testQuery_wildcardProjection() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.addSchemas(new AppSearchSchema.Builder("Note")
@@ -1658,7 +1909,7 @@
.setCreationTimestampMillis(1000)
.setPropertyString("title", "Note title")
.setPropertyString("body", "Note body").build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email, note).build()));
@@ -1688,7 +1939,7 @@
@Test
public void testQuery_wildcardProjectionEmpty() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.addSchemas(new AppSearchSchema.Builder("Note")
@@ -1720,7 +1971,7 @@
.setCreationTimestampMillis(1000)
.setPropertyString("title", "Note title")
.setPropertyString("body", "Note body").build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email, note).build()));
@@ -1745,7 +1996,7 @@
@Test
public void testQuery_wildcardProjectionNonExistentType() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.addSchemas(new AppSearchSchema.Builder("Note")
@@ -1780,7 +2031,7 @@
.setCreationTimestampMillis(1000)
.setPropertyString("title", "Note title")
.setPropertyString("body", "Note body").build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email, note).build()));
@@ -1811,9 +2062,9 @@
@Test
public void testQuery_twoInstances() throws Exception {
// Schema registration
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
- mDb2.setSchema(new SetSchemaRequest.Builder()
+ mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index a document to instance 1.
@@ -1824,7 +2075,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1).build()));
// Index a document to instance 2.
@@ -1835,7 +2086,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail2).build()));
// Query for instance 1.
@@ -1865,7 +2116,7 @@
.setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
.build()
).build();
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(genericSchema).build()).get();
// Index a document
@@ -1874,7 +2125,7 @@
.setPropertyString("subject", "A commonly used fake word is foo. "
+ "Another nonsense word that’s used a lot is bar")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(document).build()));
// Query for the document
@@ -1886,7 +2137,7 @@
.setMaxSnippetSize(10)
.setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
.build());
- List<SearchResult> results = searchResults.getNextPage().get();
+ List<SearchResult> results = searchResults.getNextPageAsync().get();
assertThat(results).hasSize(1);
List<SearchResult.MatchInfo> matchInfos = results.get(0).getMatchInfos();
@@ -1923,32 +2174,36 @@
.setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
.build()
).build();
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(genericSchema).build()).get();
// Index documents
- checkIsBatchResultSuccess(mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(
- new GenericDocument.Builder<>("namespace", "id1", "Generic")
- .setPropertyString(
- "subject",
- "I like cats", "I like dogs", "I like birds", "I like fish")
- .setScore(10)
- .build(),
- new GenericDocument.Builder<>("namespace", "id2", "Generic")
- .setPropertyString(
- "subject",
- "I like red", "I like green", "I like blue", "I like yellow")
- .setScore(20)
- .build(),
- new GenericDocument.Builder<>("namespace", "id3", "Generic")
- .setPropertyString(
- "subject",
- "I like cupcakes",
- "I like donuts",
- "I like eclairs",
- "I like froyo")
- .setScore(5)
- .build())
+ checkIsBatchResultSuccess(mDb1.putAsync(new PutDocumentsRequest.Builder()
+ .addGenericDocuments(
+ new GenericDocument.Builder<>("namespace", "id1", "Generic")
+ .setPropertyString(
+ "subject",
+ "I like cats", "I like dogs", "I like birds", "I like fish")
+ .setScore(10)
+ .build(),
+ new GenericDocument.Builder<>("namespace", "id2", "Generic")
+ .setPropertyString(
+ "subject",
+ "I like red",
+ "I like green",
+ "I like blue",
+ "I like yellow")
+ .setScore(20)
+ .build(),
+ new GenericDocument.Builder<>("namespace", "id3", "Generic")
+ .setPropertyString(
+ "subject",
+ "I like cupcakes",
+ "I like donuts",
+ "I like eclairs",
+ "I like froyo")
+ .setScore(5)
+ .build())
.build()));
// Query for the document
@@ -1964,7 +2219,7 @@
.build());
// Check result 1
- List<SearchResult> results = searchResults.getNextPage().get();
+ List<SearchResult> results = searchResults.getNextPageAsync().get();
assertThat(results).hasSize(3);
assertThat(results.get(0).getGenericDocument().getId()).isEqualTo("id2");
@@ -1998,7 +2253,7 @@
.setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
.build()
).build();
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(genericSchema).build()).get();
String japanese =
@@ -2011,7 +2266,7 @@
new GenericDocument.Builder<>("namespace", "id", "Generic")
.setPropertyString("subject", japanese)
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(document).build()));
// Query for the document
@@ -2022,7 +2277,7 @@
.setSnippetCountPerProperty(1)
.setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
.build());
- List<SearchResult> results = searchResults.getNextPage().get();
+ List<SearchResult> results = searchResults.getNextPageAsync().get();
assertThat(results).hasSize(1);
List<SearchResult.MatchInfo> matchInfos = results.get(0).getMatchInfos();
@@ -2048,7 +2303,7 @@
@Test
public void testRemove() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -2066,7 +2321,7 @@
.setSubject("testPut example 2")
.setBody("This is the body of the testPut second email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2).build()));
// Check the presence of the documents
@@ -2074,12 +2329,12 @@
assertThat(doGet(mDb1, "namespace", "id2")).hasSize(1);
// Delete the document
- checkIsBatchResultSuccess(mDb1.remove(
+ checkIsBatchResultSuccess(mDb1.removeAsync(
new RemoveByDocumentIdRequest.Builder("namespace").addIds(
"id1").build()));
// Make sure it's really gone
- AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+ AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("namespace").addIds("id1",
"id2").build())
.get();
@@ -2089,7 +2344,7 @@
assertThat(getResult.getSuccesses().get("id2")).isEqualTo(email2);
// Test if we delete a nonexistent id.
- AppSearchBatchResult<String, Void> deleteResult = mDb1.remove(
+ AppSearchBatchResult<String, Void> deleteResult = mDb1.removeAsync(
new RemoveByDocumentIdRequest.Builder("namespace").addIds(
"id1").build()).get();
@@ -2100,7 +2355,7 @@
@Test
public void testRemove_multipleIds() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -2118,7 +2373,7 @@
.setSubject("testPut example 2")
.setBody("This is the body of the testPut second email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2).build()));
// Check the presence of the documents
@@ -2126,13 +2381,13 @@
assertThat(doGet(mDb1, "namespace", "id2")).hasSize(1);
// Delete the document
- checkIsBatchResultSuccess(mDb1.remove(
+ checkIsBatchResultSuccess(mDb1.removeAsync(
new RemoveByDocumentIdRequest.Builder("namespace").addIds("id1", "id2").build()));
// Make sure it's really gone
- AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
- new GetByDocumentIdRequest.Builder("namespace").addIds("id1",
- "id2").build())
+ AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
+ new GetByDocumentIdRequest.Builder("namespace").addIds("id1",
+ "id2").build())
.get();
assertThat(getResult.isSuccess()).isFalse();
assertThat(getResult.getFailures().get("id1").getResultCode())
@@ -2144,7 +2399,7 @@
@Test
public void testRemoveByQuery() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -2162,7 +2417,7 @@
.setSubject("bar")
.setBody("This is the body of the testPut second email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2).build()));
// Check the presence of the documents
@@ -2170,10 +2425,11 @@
assertThat(doGet(mDb1, "namespace", "id2")).hasSize(1);
// Delete the email 1 by query "foo"
- mDb1.remove("foo",
+ mDb1.removeAsync("foo",
new SearchSpec.Builder().setTermMatch(SearchSpec.TERM_MATCH_PREFIX).build()).get();
- AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
- new GetByDocumentIdRequest.Builder("namespace").addIds("id1", "id2").build())
+ AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
+ new GetByDocumentIdRequest.Builder("namespace")
+ .addIds("id1", "id2").build())
.get();
assertThat(getResult.isSuccess()).isFalse();
assertThat(getResult.getFailures().get("id1").getResultCode())
@@ -2181,10 +2437,10 @@
assertThat(getResult.getSuccesses().get("id2")).isEqualTo(email2);
// Delete the email 2 by query "bar"
- mDb1.remove("bar",
+ mDb1.removeAsync("bar",
new SearchSpec.Builder().setTermMatch(SearchSpec.TERM_MATCH_PREFIX).build()).get();
- getResult = mDb1.getByDocumentId(
- new GetByDocumentIdRequest.Builder("namespace").addIds("id2").build())
+ getResult = mDb1.getByDocumentIdAsync(
+ new GetByDocumentIdRequest.Builder("namespace").addIds("id2").build())
.get();
assertThat(getResult.isSuccess()).isFalse();
assertThat(getResult.getFailures().get("id2").getResultCode())
@@ -2195,7 +2451,7 @@
@Test
public void testRemoveByQuery_nonExistNamespace() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -2213,7 +2469,7 @@
.setSubject("bar")
.setBody("This is the body of the testPut second email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2).build()));
// Check the presence of the documents
@@ -2221,7 +2477,7 @@
assertThat(doGet(mDb1, "namespace2", "id2")).hasSize(1);
// Delete the email by nonExist namespace.
- mDb1.remove("",
+ mDb1.removeAsync("",
new SearchSpec.Builder().setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
.addFilterNamespaces("nonExistNamespace").build()).get();
// None of these emails will be deleted.
@@ -2232,7 +2488,7 @@
@Test
public void testRemoveByQuery_packageFilter() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -2243,7 +2499,7 @@
.setSubject("foo")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
// Check the presence of the documents
@@ -2251,17 +2507,17 @@
// Try to delete email with query "foo", but restricted to a different package name.
// Won't work and email will still exist.
- mDb1.remove("foo",
+ mDb1.removeAsync("foo",
new SearchSpec.Builder().setTermMatch(
SearchSpec.TERM_MATCH_PREFIX).addFilterPackageNames(
"some.other.package").build()).get();
assertThat(doGet(mDb1, "namespace", "id1")).hasSize(1);
// Delete the email by query "foo", restricted to the correct package this time.
- mDb1.remove("foo", new SearchSpec.Builder().setTermMatch(
+ mDb1.removeAsync("foo", new SearchSpec.Builder().setTermMatch(
SearchSpec.TERM_MATCH_PREFIX).addFilterPackageNames(
ApplicationProvider.getApplicationContext().getPackageName()).build()).get();
- AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+ AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("namespace").addIds("id1", "id2").build())
.get();
assertThat(getResult.isSuccess()).isFalse();
@@ -2272,7 +2528,7 @@
@Test
public void testRemove_twoInstances() throws Exception {
// Schema registration
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -2283,32 +2539,32 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
// Check the presence of the documents
assertThat(doGet(mDb1, "namespace", "id1")).hasSize(1);
// Can't delete in the other instance.
- AppSearchBatchResult<String, Void> deleteResult = mDb2.remove(
+ AppSearchBatchResult<String, Void> deleteResult = mDb2.removeAsync(
new RemoveByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
assertThat(deleteResult.getFailures().get("id1").getResultCode()).isEqualTo(
AppSearchResult.RESULT_NOT_FOUND);
assertThat(doGet(mDb1, "namespace", "id1")).hasSize(1);
// Delete the document
- checkIsBatchResultSuccess(mDb1.remove(
+ checkIsBatchResultSuccess(mDb1.removeAsync(
new RemoveByDocumentIdRequest.Builder("namespace").addIds("id1").build()));
// Make sure it's really gone
- AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+ AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
assertThat(getResult.isSuccess()).isFalse();
assertThat(getResult.getFailures().get("id1").getResultCode())
.isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
// Test if we delete a nonexistent id.
- deleteResult = mDb1.remove(
+ deleteResult = mDb1.removeAsync(
new RemoveByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
assertThat(deleteResult.getFailures().get("id1").getResultCode()).isEqualTo(
AppSearchResult.RESULT_NOT_FOUND);
@@ -2318,7 +2574,7 @@
public void testRemoveByTypes() throws Exception {
// Schema registration
AppSearchSchema genericSchema = new AppSearchSchema.Builder("Generic").build();
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).addSchemas(
genericSchema).build()).get();
@@ -2339,7 +2595,7 @@
.build();
GenericDocument document1 =
new GenericDocument.Builder<>("namespace", "id3", "Generic").build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2, document1)
.build()));
@@ -2347,7 +2603,7 @@
assertThat(doGet(mDb1, "namespace", "id1", "id2", "id3")).hasSize(3);
// Delete the email type
- mDb1.remove("",
+ mDb1.removeAsync("",
new SearchSpec.Builder()
.setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
.addFilterSchemas(AppSearchEmail.SCHEMA_TYPE)
@@ -2355,7 +2611,7 @@
.get();
// Make sure it's really gone
- AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+ AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("namespace").addIds("id1", "id2", "id3").build())
.get();
assertThat(getResult.isSuccess()).isFalse();
@@ -2369,9 +2625,9 @@
@Test
public void testRemoveByTypes_twoInstances() throws Exception {
// Schema registration
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
- mDb2.setSchema(new SetSchemaRequest.Builder()
+ mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -2389,9 +2645,9 @@
.setSubject("testPut example 2")
.setBody("This is the body of the testPut second email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email2).build()));
// Check the presence of the documents
@@ -2399,7 +2655,7 @@
assertThat(doGet(mDb2, "namespace", "id2")).hasSize(1);
// Delete the email type in instance 1
- mDb1.remove("",
+ mDb1.removeAsync("",
new SearchSpec.Builder()
.setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
.addFilterSchemas(AppSearchEmail.SCHEMA_TYPE)
@@ -2407,14 +2663,14 @@
.get();
// Make sure it's really gone in instance 1
- AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+ AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
assertThat(getResult.isSuccess()).isFalse();
assertThat(getResult.getFailures().get("id1").getResultCode())
.isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
// Make sure it's still in instance 2.
- getResult = mDb2.getByDocumentId(
+ getResult = mDb2.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("namespace").addIds("id2").build()).get();
assertThat(getResult.isSuccess()).isTrue();
assertThat(getResult.getSuccesses().get("id2")).isEqualTo(email2);
@@ -2430,7 +2686,7 @@
.setIndexingType(StringPropertyConfig.INDEXING_TYPE_PREFIXES)
.build()
).build();
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).addSchemas(
genericSchema).build()).get();
@@ -2452,7 +2708,7 @@
GenericDocument document1 =
new GenericDocument.Builder<>("document", "id3", "Generic")
.setPropertyString("foo", "bar").build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2, document1)
.build()));
@@ -2461,7 +2717,7 @@
assertThat(doGet(mDb1, /*namespace=*/"document", "id3")).hasSize(1);
// Delete the email namespace
- mDb1.remove("",
+ mDb1.removeAsync("",
new SearchSpec.Builder()
.setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
.addFilterNamespaces("email")
@@ -2469,7 +2725,7 @@
.get();
// Make sure it's really gone
- AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+ AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("email")
.addIds("id1", "id2").build()).get();
assertThat(getResult.isSuccess()).isFalse();
@@ -2477,7 +2733,7 @@
.isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
assertThat(getResult.getFailures().get("id2").getResultCode())
.isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
- getResult = mDb1.getByDocumentId(
+ getResult = mDb1.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("document")
.addIds("id3").build()).get();
assertThat(getResult.isSuccess()).isTrue();
@@ -2487,9 +2743,9 @@
@Test
public void testRemoveByNamespaces_twoInstances() throws Exception {
// Schema registration
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
- mDb2.setSchema(new SetSchemaRequest.Builder()
+ mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -2507,9 +2763,9 @@
.setSubject("testPut example 2")
.setBody("This is the body of the testPut second email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email2).build()));
// Check the presence of the documents
@@ -2517,7 +2773,7 @@
assertThat(doGet(mDb2, /*namespace=*/"email", "id2")).hasSize(1);
// Delete the email namespace in instance 1
- mDb1.remove("",
+ mDb1.removeAsync("",
new SearchSpec.Builder()
.setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
.addFilterNamespaces("email")
@@ -2525,7 +2781,7 @@
.get();
// Make sure it's really gone in instance 1
- AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+ AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("email")
.addIds("id1").build()).get();
assertThat(getResult.isSuccess()).isFalse();
@@ -2533,7 +2789,7 @@
.isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
// Make sure it's still in instance 2.
- getResult = mDb2.getByDocumentId(
+ getResult = mDb2.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("email")
.addIds("id2").build()).get();
assertThat(getResult.isSuccess()).isTrue();
@@ -2543,9 +2799,9 @@
@Test
public void testRemoveAll_twoInstances() throws Exception {
// Schema registration
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
- mDb2.setSchema(new SetSchemaRequest.Builder()
+ mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -2563,9 +2819,9 @@
.setSubject("testPut example 2")
.setBody("This is the body of the testPut second email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email2).build()));
// Check the presence of the documents
@@ -2573,21 +2829,21 @@
assertThat(doGet(mDb2, "namespace", "id2")).hasSize(1);
// Delete the all document in instance 1
- mDb1.remove("",
+ mDb1.removeAsync("",
new SearchSpec.Builder()
.setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
.build())
.get();
// Make sure it's really gone in instance 1
- AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+ AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
assertThat(getResult.isSuccess()).isFalse();
assertThat(getResult.getFailures().get("id1").getResultCode())
.isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
// Make sure it's still in instance 2.
- getResult = mDb2.getByDocumentId(
+ getResult = mDb2.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("namespace").addIds("id2").build()).get();
assertThat(getResult.isSuccess()).isTrue();
assertThat(getResult.getSuccesses().get("id2")).isEqualTo(email2);
@@ -2596,9 +2852,9 @@
@Test
public void testRemoveAll_termMatchType() throws Exception {
// Schema registration
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
- mDb2.setSchema(new SetSchemaRequest.Builder()
+ mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -2630,9 +2886,9 @@
.setSubject("testPut example 4")
.setBody("This is the body of the testPut second email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2).build()));
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email3, email4).build()));
// Check the presence of the documents
@@ -2648,7 +2904,7 @@
assertThat(documents).hasSize(2);
// Delete the all document in instance 1 with TERM_MATCH_PREFIX
- mDb1.remove("",
+ mDb1.removeAsync("",
new SearchSpec.Builder()
.setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
.build())
@@ -2660,7 +2916,7 @@
assertThat(documents).isEmpty();
// Delete the all document in instance 2 with TERM_MATCH_EXACT_ONLY
- mDb2.remove("",
+ mDb2.removeAsync("",
new SearchSpec.Builder()
.setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
.build())
@@ -2675,7 +2931,7 @@
@Test
public void testRemoveAllAfterEmpty() throws Exception {
// Schema registration
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -2686,7 +2942,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
// Check the presence of the documents
@@ -2694,23 +2950,22 @@
// Remove the document
checkIsBatchResultSuccess(
- mDb1.remove(new RemoveByDocumentIdRequest.Builder("namespace").addIds(
+ mDb1.removeAsync(new RemoveByDocumentIdRequest.Builder("namespace").addIds(
"id1").build()));
// Make sure it's really gone
- AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentId(
+ AppSearchBatchResult<String, GenericDocument> getResult = mDb1.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
assertThat(getResult.isSuccess()).isFalse();
assertThat(getResult.getFailures().get("id1").getResultCode())
.isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
// Delete the all documents
- mDb1.remove(
- "", new SearchSpec.Builder().setTermMatch(SearchSpec.TERM_MATCH_PREFIX).build())
- .get();
+ mDb1.removeAsync("", new SearchSpec.Builder()
+ .setTermMatch(SearchSpec.TERM_MATCH_PREFIX).build()).get();
// Make sure it's still gone
- getResult = mDb1.getByDocumentId(
+ getResult = mDb1.getByDocumentIdAsync(
new GetByDocumentIdRequest.Builder("namespace").addIds("id1").build()).get();
assertThat(getResult.isSuccess()).isFalse();
assertThat(getResult.getFailures().get("id1").getResultCode())
@@ -2720,7 +2975,7 @@
@Test
public void testCloseAndReopen() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index a document
@@ -2731,12 +2986,12 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
// close and re-open the appSearchSession
mDb1.close();
- mDb1 = createSearchSession(DB_NAME_1).get();
+ mDb1 = createSearchSessionAsync(DB_NAME_1).get();
// Query for the document
SearchResults searchResults = mDb1.search("body", new SearchSpec.Builder()
@@ -2752,12 +3007,12 @@
// Create a same-thread database by inject an executor which could help us maintain the
// execution order of those async tasks.
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession sameThreadDb = createSearchSession(
+ AppSearchSession sameThreadDb = createSearchSessionAsync(
"sameThreadDb", MoreExecutors.newDirectExecutorService()).get();
try {
// Schema registration -- just mutate something
- sameThreadDb.setSchema(
+ sameThreadDb.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Close the database. No further call will be allowed.
@@ -2773,15 +3028,16 @@
} finally {
// To clean the data that has been added in the test, need to re-open the session and
// set an empty schema.
- AppSearchSession reopen = createSearchSession(
+ AppSearchSession reopen = createSearchSessionAsync(
"sameThreadDb", MoreExecutors.newDirectExecutorService()).get();
- reopen.setSchema(new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
+ reopen.setSchemaAsync(new SetSchemaRequest.Builder()
+ .setForceOverride(true).build()).get();
}
}
@Test
public void testReportUsage() throws Exception {
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index two documents.
@@ -2789,19 +3045,19 @@
new AppSearchEmail.Builder("namespace", "id1").build();
AppSearchEmail email2 =
new AppSearchEmail.Builder("namespace", "id2").build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2).build()));
// Email 1 has more usages, but email 2 has more recent usages.
- mDb1.reportUsage(new ReportUsageRequest.Builder("namespace", "id1")
+ mDb1.reportUsageAsync(new ReportUsageRequest.Builder("namespace", "id1")
.setUsageTimestampMillis(1000).build()).get();
- mDb1.reportUsage(new ReportUsageRequest.Builder("namespace", "id1")
+ mDb1.reportUsageAsync(new ReportUsageRequest.Builder("namespace", "id1")
.setUsageTimestampMillis(2000).build()).get();
- mDb1.reportUsage(new ReportUsageRequest.Builder("namespace", "id1")
+ mDb1.reportUsageAsync(new ReportUsageRequest.Builder("namespace", "id1")
.setUsageTimestampMillis(3000).build()).get();
- mDb1.reportUsage(new ReportUsageRequest.Builder("namespace", "id2")
+ mDb1.reportUsageAsync(new ReportUsageRequest.Builder("namespace", "id2")
.setUsageTimestampMillis(10000).build()).get();
- mDb1.reportUsage(new ReportUsageRequest.Builder("namespace", "id2")
+ mDb1.reportUsageAsync(new ReportUsageRequest.Builder("namespace", "id2")
.setUsageTimestampMillis(20000).build()).get();
// Query by number of usages
@@ -2832,19 +3088,19 @@
@Test
public void testReportUsage_invalidNamespace() throws Exception {
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
AppSearchEmail email1 = new AppSearchEmail.Builder("namespace", "id1").build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
// Use the correct namespace; it works
- mDb1.reportUsage(new ReportUsageRequest.Builder("namespace", "id1").build()).get();
+ mDb1.reportUsageAsync(new ReportUsageRequest.Builder("namespace", "id1").build()).get();
// Use an incorrect namespace; it fails
ExecutionException e = assertThrows(
ExecutionException.class,
- () -> mDb1.reportUsage(
+ () -> mDb1.reportUsageAsync(
new ReportUsageRequest.Builder("namespace2", "id1").build()).get());
assertThat(e).hasCauseThat().isInstanceOf(AppSearchException.class);
AppSearchException cause = (AppSearchException) e.getCause();
@@ -2853,26 +3109,26 @@
@Test
public void testGetStorageInfo() throws Exception {
- StorageInfo storageInfo = mDb1.getStorageInfo().get();
+ StorageInfo storageInfo = mDb1.getStorageInfoAsync().get();
assertThat(storageInfo.getSizeBytes()).isEqualTo(0);
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Still no storage space attributed with just a schema
- storageInfo = mDb1.getStorageInfo().get();
+ storageInfo = mDb1.getStorageInfoAsync().get();
assertThat(storageInfo.getSizeBytes()).isEqualTo(0);
// Index two documents.
AppSearchEmail email1 = new AppSearchEmail.Builder("namespace1", "id1").build();
AppSearchEmail email2 = new AppSearchEmail.Builder("namespace1", "id2").build();
AppSearchEmail email3 = new AppSearchEmail.Builder("namespace2", "id1").build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email1, email2,
email3).build()));
// Non-zero size now
- storageInfo = mDb1.getStorageInfo().get();
+ storageInfo = mDb1.getStorageInfoAsync().get();
assertThat(storageInfo.getSizeBytes()).isGreaterThan(0);
assertThat(storageInfo.getAliveDocumentsCount()).isEqualTo(3);
assertThat(storageInfo.getAliveNamespacesCount()).isEqualTo(2);
@@ -2881,7 +3137,7 @@
@Test
public void testFlush() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index a document
@@ -2892,19 +3148,19 @@
.setBody("This is the body of the testPut email")
.build();
- AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.put(
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
assertThat(result.getSuccesses()).containsExactly("id1", null);
assertThat(result.getFailures()).isEmpty();
// The future returned from requestFlush will be set as a void or an Exception on error.
- mDb1.requestFlush().get();
+ mDb1.requestFlushAsync().get();
}
@Test
public void testQuery_ResultGroupingLimits() throws Exception {
// Schema registration
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index four documents.
@@ -2915,7 +3171,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1).build()));
AppSearchEmail inEmail2 =
new AppSearchEmail.Builder("namespace1", "id2")
@@ -2924,7 +3180,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail2).build()));
AppSearchEmail inEmail3 =
new AppSearchEmail.Builder("namespace2", "id3")
@@ -2933,7 +3189,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail3).build()));
AppSearchEmail inEmail4 =
new AppSearchEmail.Builder("namespace2", "id4")
@@ -2942,7 +3198,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail4).build()));
// Query with per package result grouping. Only the last document 'email4' should be
@@ -2979,7 +3235,7 @@
@Test
public void testIndexNestedDocuments() throws Exception {
// Schema registration
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.addSchemas(new AppSearchSchema.Builder("YesNestedIndex")
.addProperty(new AppSearchSchema.DocumentPropertyConfig.Builder(
@@ -3008,7 +3264,7 @@
new GenericDocument.Builder<>("namespace", "noNestedIndex", "NoNestedIndex")
.setPropertyDocument("prop", email)
.build();
- checkIsBatchResultSuccess(mDb1.put(new PutDocumentsRequest.Builder()
+ checkIsBatchResultSuccess(mDb1.putAsync(new PutDocumentsRequest.Builder()
.addGenericDocuments(yesNestedIndex, noNestedIndex).build()));
// Query.
@@ -3017,12 +3273,14 @@
.setSnippetCount(10)
.setSnippetCountPerProperty(10)
.build());
- List<SearchResult> page = searchResults.getNextPage().get();
+ List<SearchResult> page = searchResults.getNextPageAsync().get();
assertThat(page).hasSize(1);
assertThat(page.get(0).getGenericDocument()).isEqualTo(yesNestedIndex);
List<SearchResult.MatchInfo> matches = page.get(0).getMatchInfos();
assertThat(matches).hasSize(1);
assertThat(matches.get(0).getPropertyPath()).isEqualTo("prop.subject");
+ assertThat(matches.get(0).getPropertyPathObject())
+ .isEqualTo(new PropertyPath("prop.subject"));
assertThat(matches.get(0).getFullText()).isEqualTo("This is the body");
assertThat(matches.get(0).getExactMatch()).isEqualTo("body");
}
@@ -3030,7 +3288,7 @@
@Test
public void testCJKTQuery() throws Exception {
// Schema registration
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index a document to instance 1.
@@ -3038,7 +3296,7 @@
new AppSearchEmail.Builder("namespace", "uri1")
.setBody("他是個男孩 is a boy")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1).build()));
// Query for "他" (He)
@@ -3062,4 +3320,90 @@
documents = convertSearchResultsToDocuments(searchResults);
assertThat(documents).containsExactly(inEmail1);
}
+
+ @Test
+ public void testSetSchemaWithIncompatibleNestedSchema() throws Exception {
+ // 1. Set the original schema. This should succeed without any problems.
+ AppSearchSchema originalNestedSchema =
+ new AppSearchSchema.Builder("TypeA").addProperty(new StringPropertyConfig.Builder(
+ "prop1").setCardinality(
+ PropertyConfig.CARDINALITY_OPTIONAL).build()).build();
+ SetSchemaRequest originalRequest =
+ new SetSchemaRequest.Builder().addSchemas(originalNestedSchema).build();
+ mDb1.setSchemaAsync(originalRequest).get();
+
+ // 2. Set a new schema with a new type that refers to "TypeA" and an incompatible change to
+ // "TypeA". This should fail.
+ AppSearchSchema newNestedSchema =
+ new AppSearchSchema.Builder("TypeA").addProperty(new StringPropertyConfig.Builder(
+ "prop1").setCardinality(
+ PropertyConfig.CARDINALITY_REQUIRED).build()).build();
+ AppSearchSchema newSchema =
+ new AppSearchSchema.Builder("TypeB").addProperty(
+ new AppSearchSchema.DocumentPropertyConfig.Builder("prop2",
+ "TypeA").build()).build();
+ final SetSchemaRequest newRequest =
+ new SetSchemaRequest.Builder().addSchemas(newNestedSchema,
+ newSchema).build();
+ Throwable throwable = assertThrows(ExecutionException.class,
+ () -> mDb1.setSchemaAsync(newRequest).get()).getCause();
+ assertThat(throwable).isInstanceOf(AppSearchException.class);
+ AppSearchException exception = (AppSearchException) throwable;
+ assertThat(exception.getResultCode()).isEqualTo(RESULT_INVALID_SCHEMA);
+ assertThat(exception).hasMessageThat().contains("Schema is incompatible.");
+ assertThat(exception).hasMessageThat().contains("Incompatible types: {TypeA}");
+
+ // 3. Now set that same set of schemas but with forceOverride=true. This should succeed.
+ SetSchemaRequest newRequestForced =
+ new SetSchemaRequest.Builder().addSchemas(newNestedSchema,
+ newSchema).setForceOverride(true).build();
+ mDb1.setSchemaAsync(newRequestForced).get();
+ }
+
+ @Test
+ public void testEmojiSnippet() throws Exception {
+ // Schema registration
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
+ .addSchemas(AppSearchEmail.SCHEMA).build()).get();
+
+ // String: "Luca Brasi sleeps with the 🐟🐟🐟."
+ // ^ ^ ^ ^ ^ ^ ^ ^ ^
+ // UTF8 idx: 0 5 11 18 23 27 3135 39
+ // UTF16 idx: 0 5 11 18 23 27 2931 33
+ // Breaks into segments: "Luca", "Brasi", "sleeps", "with", "the", "🐟", "🐟"
+ // and "🐟".
+ // Index a document to instance 1.
+ String sicilianMessage = "Luca Brasi sleeps with the 🐟🐟🐟.";
+ AppSearchEmail inEmail1 =
+ new AppSearchEmail.Builder("namespace", "uri1")
+ .setBody(sicilianMessage)
+ .build();
+ checkIsBatchResultSuccess(mDb1.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1).build()));
+
+ AppSearchEmail inEmail2 =
+ new AppSearchEmail.Builder("namespace", "uri2")
+ .setBody("Some other content.")
+ .build();
+ checkIsBatchResultSuccess(mDb1.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(inEmail2).build()));
+
+ // Query for "🐟"
+ SearchResults searchResults = mDb1.search("🐟", new SearchSpec.Builder()
+ .setTermMatch(SearchSpec.TERM_MATCH_PREFIX)
+ .setSnippetCount(1)
+ .setSnippetCountPerProperty(1)
+ .build());
+ List<SearchResult> page = searchResults.getNextPageAsync().get();
+ assertThat(page).hasSize(1);
+ assertThat(page.get(0).getGenericDocument()).isEqualTo(inEmail1);
+ List<SearchResult.MatchInfo> matches = page.get(0).getMatchInfos();
+ assertThat(matches).hasSize(1);
+ assertThat(matches.get(0).getPropertyPath()).isEqualTo("body");
+ assertThat(matches.get(0).getFullText()).isEqualTo(sicilianMessage);
+ assertThat(matches.get(0).getExactMatch()).isEqualTo("🐟");
+ if (mDb1.getFeatures().isFeatureSupported(Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH)) {
+ assertThat(matches.get(0).getSubmatch()).isEqualTo("🐟");
+ }
+ }
}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionLocalCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionLocalCtsTest.java
index 8d45573..51745dd 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionLocalCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionLocalCtsTest.java
@@ -18,6 +18,7 @@
import static androidx.appsearch.testutil.AppSearchTestUtils.checkIsBatchResultSuccess;
import static androidx.appsearch.testutil.AppSearchTestUtils.convertSearchResultsToDocuments;
+import static androidx.appsearch.testutil.AppSearchTestUtils.doGet;
import static com.google.common.truth.Truth.assertThat;
@@ -30,6 +31,7 @@
import androidx.appsearch.app.AppSearchSession;
import androidx.appsearch.app.Features;
import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetByDocumentIdRequest;
import androidx.appsearch.app.Migrator;
import androidx.appsearch.app.PutDocumentsRequest;
import androidx.appsearch.app.SearchResult;
@@ -53,33 +55,51 @@
public class AppSearchSessionLocalCtsTest extends AppSearchSessionCtsTestBase {
@Override
- protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
Context context = ApplicationProvider.getApplicationContext();
- return LocalStorage.createSearchSession(
+ return LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, dbName).build());
}
@Override
- protected ListenableFuture<AppSearchSession> createSearchSession(
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(
@NonNull String dbName, @NonNull ExecutorService executor) {
Context context = ApplicationProvider.getApplicationContext();
- return LocalStorage.createSearchSession(
+ return LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, dbName)
.setWorkerExecutor(executor).build());
}
+ @Test
+ public void testFeaturesSupported() throws Exception {
+ Context context = ApplicationProvider.getApplicationContext();
+ AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
+ new LocalStorage.SearchContext.Builder(context, DB_NAME_2).build()).get();
+
+ assertThat(db2.getFeatures().isFeatureSupported(
+ Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH)).isTrue();
+ assertThat(db2.getFeatures().isFeatureSupported(
+ Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK)).isTrue();
+ assertThat(db2.getFeatures().isFeatureSupported(
+ Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA)).isTrue();
+ assertThat(db2.getFeatures().isFeatureSupported(
+ Features.GLOBAL_SEARCH_SESSION_GET_BY_ID)).isTrue();
+ assertThat(db2.getFeatures().isFeatureSupported(
+ Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)).isTrue();
+ }
+
// TODO(b/194207451) This test can be moved to CtsTestBase if customized logger is
// supported for platform backend.
@Test
public void testLogger_searchStatsLogged_forEmptyFirstPage() throws Exception {
SimpleTestLogger logger = new SimpleTestLogger();
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = LocalStorage.createSearchSession(
+ AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
.setLogger(logger).build()).get();
// Schema registration
- db2.setSchema(
+ db2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -97,7 +117,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(db2.put(
+ checkIsBatchResultSuccess(db2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
assertThat(logger.mSearchStats).isNull();
@@ -111,7 +131,7 @@
.build());
// Get first page
- List<SearchResult> page = searchResults.getNextPage().get();
+ List<SearchResult> page = searchResults.getNextPageAsync().get();
assertThat(page).hasSize(0);
// Check searchStats has been set. We won't check all the fields here.
@@ -133,12 +153,12 @@
public void testLogger_searchStatsLogged_forNonEmptyFirstPage() throws Exception {
SimpleTestLogger logger = new SimpleTestLogger();
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = LocalStorage.createSearchSession(
+ AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
.setLogger(logger).build()).get();
// Schema registration
- db2.setSchema(
+ db2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -156,7 +176,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(db2.put(
+ checkIsBatchResultSuccess(db2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
assertThat(logger.mSearchStats).isNull();
@@ -170,7 +190,7 @@
.build());
// Get first page
- List<SearchResult> page = searchResults.getNextPage().get();
+ List<SearchResult> page = searchResults.getNextPageAsync().get();
assertThat(page).hasSize(2);
// Check searchStats has been set. We won't check all the fields here.
@@ -192,12 +212,12 @@
public void testLogger_searchStatsLogged_forEmptySecondPage() throws Exception {
SimpleTestLogger logger = new SimpleTestLogger();
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = LocalStorage.createSearchSession(
+ AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
.setLogger(logger).build()).get();
// Schema registration
- db2.setSchema(
+ db2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -215,7 +235,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(db2.put(
+ checkIsBatchResultSuccess(db2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
// Query for the document
@@ -228,12 +248,12 @@
.build());
// Get first page
- List<SearchResult> page = searchResults.getNextPage().get();
+ List<SearchResult> page = searchResults.getNextPageAsync().get();
assertThat(page).hasSize(2);
// Get second(empty) page
logger.mSearchStats = null;
- page = searchResults.getNextPage().get();
+ page = searchResults.getNextPageAsync().get();
assertThat(page).hasSize(0);
// Check searchStats has been set. We won't check all the fields here.
@@ -255,12 +275,12 @@
public void testLogger_searchStatsLogged_forNonEmptySecondPage() throws Exception {
SimpleTestLogger logger = new SimpleTestLogger();
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = LocalStorage.createSearchSession(
+ AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
.setLogger(logger).build()).get();
// Schema registration
- db2.setSchema(
+ db2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -278,7 +298,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(db2.put(
+ checkIsBatchResultSuccess(db2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
// Query for the document
@@ -291,12 +311,12 @@
.build());
// Get first page
- List<SearchResult> page = searchResults.getNextPage().get();
+ List<SearchResult> page = searchResults.getNextPageAsync().get();
assertThat(page).hasSize(1);
// Get second page
logger.mSearchStats = null;
- page = searchResults.getNextPage().get();
+ page = searchResults.getNextPageAsync().get();
assertThat(page).hasSize(1);
// Check searchStats has been set. We won't check all the fields here.
@@ -318,7 +338,7 @@
public void testSetSchemaStats_withoutSchemaMigration() throws Exception {
SimpleTestLogger logger = new SimpleTestLogger();
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = LocalStorage.createSearchSession(
+ AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
.setLogger(logger).build()).get();
AppSearchSchema appSearchSchema = new AppSearchSchema.Builder("testSchema")
@@ -330,7 +350,7 @@
.build())
.build();
- db2.setSchema(
+ db2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(appSearchSchema).build()).get();
assertThat(logger.mSetSchemaStats).isNotNull();
@@ -352,7 +372,7 @@
public void testSetSchemaStats_withSchemaMigration() throws Exception {
SimpleTestLogger logger = new SimpleTestLogger();
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = LocalStorage.createSearchSession(
+ AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
.setLogger(logger).build()).get();
AppSearchSchema schema = new AppSearchSchema.Builder("testSchema")
@@ -407,11 +427,11 @@
}
};
- db2.setSchema(new SetSchemaRequest.Builder().addSchemas(
+ db2.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(
schema).setForceOverride(true).build()).get();
- checkIsBatchResultSuccess(db2.put(
+ checkIsBatchResultSuccess(db2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(doc).build()));
- db2.setSchema(new SetSchemaRequest.Builder().addSchemas(newSchema)
+ db2.setSchemaAsync(new SetSchemaRequest.Builder().addSchemas(newSchema)
.setMigrator("testSchema", migrator)
.setVersion(2) // upgrade version
.build()).get();
@@ -424,16 +444,15 @@
assertThat(schemaMigrationStats.getSavedDocumentCount()).isEqualTo(1);
}
- // TODO(b/185441119) Following test can be moved to CtsTestBase if we fix the binder
- // transaction limit in framework.
+ // Framework has max Document size which is 512KiB, this test should only exists in Jetpack.
@Test
- public void testPutLargeDocument() throws Exception {
+ public void testPutLargeDocumentToIcing() throws Exception {
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = LocalStorage.createSearchSession(
+ AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, DB_NAME_2).build()).get();
// Schema registration
- db2.setSchema(
+ db2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
char[] chars = new char[16_000_000];
@@ -447,7 +466,7 @@
.setSubject("testPut example")
.setBody(body)
.build();
- AppSearchBatchResult<String, Void> result = db2.put(
+ AppSearchBatchResult<String, Void> result = db2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email).build()).get();
assertThat(result.isSuccess()).isTrue();
@@ -460,16 +479,15 @@
assertThat(outEmail).isEqualTo(email);
}
- // TODO(b/185441119) Following test can be moved to CtsTestBase if we fix the binder
- // transaction limit in framework.
+ // Framework has max Document size which is 512KiB, this test should only exists in Jetpack.
@Test
- public void testPutLargeDocument_exceedLimit() throws Exception {
+ public void testPutLargeDocumentToIcing_exceedLimit() throws Exception {
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = LocalStorage.createSearchSession(
+ AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, DB_NAME_2).build()).get();
// Schema registration
- db2.setSchema(
+ db2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Create a String property that make the document exceed the total size limit.
@@ -483,7 +501,7 @@
.setSubject("testPut example")
.setBody(body)
.build();
- AppSearchBatchResult<String, Void> result = db2.put(
+ AppSearchBatchResult<String, Void> result = db2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email).build()).get();
assertThat(result.getFailures()).containsKey("id1");
assertThat(result.getFailures().get("id1").getErrorMessage())
@@ -491,12 +509,42 @@
}
@Test
- public void testCapabilities() throws Exception {
+ public void testPutDocuments_emptyBytesAndDocuments() throws Exception {
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = LocalStorage.createSearchSession(
- new LocalStorage.SearchContext.Builder(context, DB_NAME_2).build()).get();
+ AppSearchSession db = LocalStorage.createSearchSessionAsync(
+ new LocalStorage.SearchContext.Builder(context, DB_NAME_1).build()).get();
+ // Schema registration
+ AppSearchSchema schema = new AppSearchSchema.Builder("testSchema")
+ .addProperty(new AppSearchSchema.BytesPropertyConfig.Builder("bytes")
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .addProperty(new AppSearchSchema.DocumentPropertyConfig.Builder(
+ "document", AppSearchEmail.SCHEMA_TYPE)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .setShouldIndexNestedProperties(true)
+ .build())
+ .build();
+ db.setSchemaAsync(new SetSchemaRequest.Builder()
+ .addSchemas(schema, AppSearchEmail.SCHEMA).build()).get();
- assertThat(db2.getFeatures().isFeatureSupported(
- Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH)).isTrue();
+ // Index a document
+ GenericDocument document = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
+ .setPropertyBytes("bytes")
+ .setPropertyDocument("document")
+ .build();
+
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(db.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(document).build()));
+ assertThat(result.getSuccesses()).containsExactly("id1", null);
+ assertThat(result.getFailures()).isEmpty();
+
+ GetByDocumentIdRequest request = new GetByDocumentIdRequest.Builder("namespace")
+ .addIds("id1")
+ .build();
+ List<GenericDocument> outDocuments = doGet(db, request);
+ assertThat(outDocuments).hasSize(1);
+ GenericDocument outDocument = outDocuments.get(0);
+ assertThat(outDocument.getPropertyBytesArray("bytes")).isEmpty();
+ assertThat(outDocument.getPropertyDocumentArray("document")).isEmpty();
}
}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionPlatformCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionPlatformCtsTest.java
index a0cd21a..ac08790 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionPlatformCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionPlatformCtsTest.java
@@ -16,15 +16,28 @@
// @exportToFramework:skipFile()
package androidx.appsearch.cts.app;
+import static androidx.appsearch.testutil.AppSearchTestUtils.checkIsBatchResultSuccess;
+import static androidx.appsearch.testutil.AppSearchTestUtils.doGet;
+
import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assume.assumeTrue;
+
import android.content.Context;
import android.os.Build;
import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchBatchResult;
+import androidx.appsearch.app.AppSearchSchema;
import androidx.appsearch.app.AppSearchSession;
import androidx.appsearch.app.Features;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetByDocumentIdRequest;
+import androidx.appsearch.app.PutDocumentsRequest;
+import androidx.appsearch.app.SetSchemaRequest;
import androidx.appsearch.platformstorage.PlatformStorage;
+import androidx.appsearch.testutil.AppSearchEmail;
+import androidx.core.os.BuildCompat;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.filters.SdkSuppress;
@@ -32,35 +45,120 @@
import org.junit.Test;
+import java.util.List;
import java.util.concurrent.ExecutorService;
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
public class AppSearchSessionPlatformCtsTest extends AppSearchSessionCtsTestBase {
@Override
- protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
Context context = ApplicationProvider.getApplicationContext();
- return PlatformStorage.createSearchSession(
+ return PlatformStorage.createSearchSessionAsync(
new PlatformStorage.SearchContext.Builder(context, dbName).build());
}
@Override
- protected ListenableFuture<AppSearchSession> createSearchSession(
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(
@NonNull String dbName, @NonNull ExecutorService executor) {
Context context = ApplicationProvider.getApplicationContext();
- return PlatformStorage.createSearchSession(
+ return PlatformStorage.createSearchSessionAsync(
new PlatformStorage.SearchContext.Builder(context, dbName)
.setWorkerExecutor(executor).build());
}
@Test
- public void testCapabilities() throws Exception {
+ public void testFeaturesSupported() throws Exception {
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = PlatformStorage.createSearchSession(
+ AppSearchSession db2 = PlatformStorage.createSearchSessionAsync(
new PlatformStorage.SearchContext.Builder(context, DB_NAME_2).build()).get();
-
- // TODO(b/201316758) Update to reflect support in Android T+ once this feature is synced
- // over into service-appsearch.
assertThat(db2.getFeatures().isFeatureSupported(
- Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH)).isFalse();
+ Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH))
+ .isEqualTo(BuildCompat.isAtLeastT());
+ assertThat(db2.getFeatures().isFeatureSupported(
+ Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK))
+ .isEqualTo(BuildCompat.isAtLeastT());
+ assertThat(db2.getFeatures().isFeatureSupported(
+ Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA))
+ .isEqualTo(BuildCompat.isAtLeastT());
+ assertThat(db2.getFeatures().isFeatureSupported(
+ Features.GLOBAL_SEARCH_SESSION_GET_BY_ID))
+ .isEqualTo(BuildCompat.isAtLeastT());
+ assertThat(db2.getFeatures().isFeatureSupported(
+ Features.ADD_PERMISSIONS_AND_GET_VISIBILITY))
+ .isEqualTo(BuildCompat.isAtLeastT());
+ }
+
+ @Test
+ public void testPutDocuments_emptyBytesAndDocuments() throws Exception {
+ Context context = ApplicationProvider.getApplicationContext();
+ AppSearchSession db = PlatformStorage.createSearchSessionAsync(
+ new PlatformStorage.SearchContext.Builder(context, DB_NAME_1).build()).get();
+ // Schema registration
+ AppSearchSchema schema = new AppSearchSchema.Builder("testSchema")
+ .addProperty(new AppSearchSchema.BytesPropertyConfig.Builder("bytes")
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .addProperty(new AppSearchSchema.DocumentPropertyConfig.Builder(
+ "document", AppSearchEmail.SCHEMA_TYPE)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .setShouldIndexNestedProperties(true)
+ .build())
+ .build();
+ db.setSchemaAsync(new SetSchemaRequest.Builder()
+ .addSchemas(schema, AppSearchEmail.SCHEMA).build()).get();
+
+ // Index a document
+ GenericDocument document = new GenericDocument.Builder<>("namespace", "id1", "testSchema")
+ .setPropertyBytes("bytes")
+ .setPropertyDocument("document")
+ .build();
+
+ AppSearchBatchResult<String, Void> result = checkIsBatchResultSuccess(db.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(document).build()));
+ assertThat(result.getSuccesses()).containsExactly("id1", null);
+ assertThat(result.getFailures()).isEmpty();
+
+ GetByDocumentIdRequest request = new GetByDocumentIdRequest.Builder("namespace")
+ .addIds("id1")
+ .build();
+ List<GenericDocument> outDocuments = doGet(db, request);
+ assertThat(outDocuments).hasSize(1);
+ GenericDocument outDocument = outDocuments.get(0);
+ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.S
+ || Build.VERSION.SDK_INT == Build.VERSION_CODES.S_V2) {
+ // We fixed b/204677124 in Android T, so in S and S_V2, getByteArray and
+ // getDocumentArray will return null if we set empty properties.
+ assertThat(outDocument.getPropertyBytesArray("bytes")).isNull();
+ assertThat(outDocument.getPropertyDocumentArray("document")).isNull();
+ } else {
+ assertThat(outDocument.getPropertyBytesArray("bytes")).isEmpty();
+ assertThat(outDocument.getPropertyDocumentArray("document")).isEmpty();
+ }
+ }
+
+ @Override
+ @Test
+ public void testPutLargeDocumentBatch() throws Exception {
+ // b/185441119 was fixed in Android T, this test will fail on S_V2 devices and below.
+ assumeTrue(BuildCompat.isAtLeastT());
+ super.testPutLargeDocumentBatch();
+ }
+
+ @Override
+ @Test
+ public void testSetSchemaWithIncompatibleNestedSchema() throws Exception {
+ // TODO(b/230879098) This bug was fixed in Android T, but will currently fail on S_V2
+ // devices and below. However, we could implement a workaround in platform-storage.
+ // Implement that workaround and enable on S and S_V2.
+ assumeTrue(BuildCompat.isAtLeastT());
+ super.testSetSchemaWithIncompatibleNestedSchema();
+ }
+
+ @Override
+ @Test
+ public void testEmojiSnippet() throws Exception {
+ // b/229770338 was fixed in Android T, this test will fail on S_V2 devices and below.
+ assumeTrue(BuildCompat.isAtLeastT());
+ super.testEmojiSnippet();
}
}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java
index 88c579d..6a82e79 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GenericDocumentCtsTest.java
@@ -558,37 +558,19 @@
}
@Test
- public void testNestedProperties_unusualPaths() {
- GenericDocument doc = new GenericDocument.Builder<>("namespace", "id1", "schema1")
- .setPropertyString("propString", "Hello", "Goodbye")
- .setPropertyDocument("propDocs1", new GenericDocument.Builder<>("", "", "schema1")
- .setPropertyString("", "Cat", "Dog")
- .build())
- .setPropertyDocument("propDocs2", new GenericDocument.Builder<>("", "", "schema1")
- .setPropertyDocument("", new GenericDocument.Builder<>("", "", "schema1")
- .setPropertyString("", "Red", "Blue")
- .setPropertyString("propString", "Bat", "Hawk")
- .build())
- .build())
- .setPropertyDocument("", new GenericDocument.Builder<>("", "", "schema1")
- .setPropertyDocument("", new GenericDocument.Builder<>("", "", "schema1")
- .setPropertyString("", "Orange", "Green")
- .setPropertyString("propString", "Toad", "Bird")
- .build())
- .build())
- .build();
- assertThat(doc.getPropertyString("propString")).isEqualTo("Hello");
- assertThat(doc.getPropertyString("propString[1]")).isEqualTo("Goodbye");
- assertThat(doc.getPropertyString("propDocs1.")).isEqualTo("Cat");
- assertThat(doc.getPropertyString("propDocs1.[1]")).isEqualTo("Dog");
- assertThat(doc.getPropertyStringArray("propDocs1[0].")).asList()
- .containsExactly("Cat", "Dog").inOrder();
- assertThat(doc.getPropertyString("propDocs2..propString")).isEqualTo("Bat");
- assertThat(doc.getPropertyString("propDocs2..propString[1]")).isEqualTo("Hawk");
- assertThat(doc.getPropertyString("propDocs2..")).isEqualTo("Red");
- assertThat(doc.getPropertyString("propDocs2..[1]")).isEqualTo("Blue");
- assertThat(doc.getPropertyString("[0]..propString[1]")).isEqualTo("Bird");
- assertThat(doc.getPropertyString("[0]..[1]")).isEqualTo("Green");
+ public void testNestedProperties_buildBlankPaths() {
+ Exception e = assertThrows(IllegalArgumentException.class,
+ () -> new GenericDocument.Builder<>("namespace", "id1", "schema1")
+ .setPropertyString("", "foo"));
+ assertThat(e.getMessage()).isEqualTo("Property name cannot be blank.");
+
+ e = assertThrows(IllegalArgumentException.class,
+ () -> new GenericDocument.Builder<>("namespace", "id1", "schema1")
+ .setPropertyDocument("propDoc",
+ new GenericDocument.Builder<>("namespace", "id2", "schema1")
+ .setPropertyString("", "Bat", "Hawk")
+ .build()));
+ assertThat(e.getMessage()).isEqualTo("Property name cannot be blank.");
}
@Test
@@ -600,37 +582,34 @@
.setPropertyDouble("propDoubles", 3.14, 0.42)
.setPropertyBoolean("propBools", false)
.setPropertyBytes("propBytes", new byte[][]{{3, 4}})
- .setPropertyDocument("propDocs", new GenericDocument.Builder<>("", "", "schema1")
- .setPropertyString("", "Cat")
- .build())
+ .setPropertyDocument("propDocs",
+ new GenericDocument.Builder<>("namespace", "id2", "schema1")
+ .setPropertyString("propString", "Cat")
+ .build())
.build();
- // Some paths are invalid because they don't apply to the given document --- these should
+ // These paths are invalid because they don't apply to the given document --- these should
// return null. It's not the querier's fault.
assertThat(doc.getPropertyStringArray("propString.propInts")).isNull();
assertThat(doc.getPropertyStringArray("propDocs.propFoo")).isNull();
assertThat(doc.getPropertyStringArray("propDocs.propNestedString.propFoo")).isNull();
+ }
- // Some paths are invalid because they are malformed. These throw an exception --- the
- // querier shouldn't provide such paths.
- assertThrows(
- IllegalArgumentException.class,
- () -> doc.getPropertyStringArray("propDocs.[0]propInts"));
- assertThrows(
- IllegalArgumentException.class,
- () -> doc.getPropertyStringArray("propString[0"));
- assertThrows(
- IllegalArgumentException.class,
- () -> doc.getPropertyStringArray("propString[0.]"));
- assertThrows(
- IllegalArgumentException.class,
- () -> doc.getPropertyStringArray("propString[banana]"));
- assertThrows(
- IllegalArgumentException.class,
- () -> doc.getPropertyStringArray("propString[-1]"));
- assertThrows(
- IllegalArgumentException.class,
- () -> doc.getPropertyStringArray("propDocs[0]cat"));
+ @Test
+ public void testNestedProperties_arrayTypesInvalidPath() {
+ GenericDocument doc = new GenericDocument.Builder<>("namespace", "id1", "schema1").build();
+ assertThrows(IllegalArgumentException.class, () -> doc.getPropertyString("."));
+ assertThrows(IllegalArgumentException.class, () -> doc.getPropertyDocument("."));
+ assertThrows(IllegalArgumentException.class, () -> doc.getPropertyBoolean("."));
+ assertThrows(IllegalArgumentException.class, () -> doc.getPropertyDouble("."));
+ assertThrows(IllegalArgumentException.class, () -> doc.getPropertyLong("."));
+ assertThrows(IllegalArgumentException.class, () -> doc.getPropertyBytes("."));
+ assertThrows(IllegalArgumentException.class, () -> doc.getPropertyStringArray("."));
+ assertThrows(IllegalArgumentException.class, () -> doc.getPropertyDocumentArray("."));
+ assertThrows(IllegalArgumentException.class, () -> doc.getPropertyBooleanArray("."));
+ assertThrows(IllegalArgumentException.class, () -> doc.getPropertyDoubleArray("."));
+ assertThrows(IllegalArgumentException.class, () -> doc.getPropertyLongArray("."));
+ assertThrows(IllegalArgumentException.class, () -> doc.getPropertyBytesArray("."));
}
@Test
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GetSchemaResponseCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GetSchemaResponseCtsTest.java
index 1220731..72faaef 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GetSchemaResponseCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GetSchemaResponseCtsTest.java
@@ -20,12 +20,24 @@
import androidx.appsearch.app.AppSearchSchema;
import androidx.appsearch.app.GetSchemaResponse;
+import androidx.appsearch.app.PackageIdentifier;
+import androidx.appsearch.app.SetSchemaRequest;
+
+import com.google.common.collect.ImmutableSet;
import org.junit.Test;
+import java.util.Arrays;
+
public class GetSchemaResponseCtsTest {
@Test
public void testRebuild() {
+ byte[] sha256cert1 = new byte[32];
+ byte[] sha256cert2 = new byte[32];
+ Arrays.fill(sha256cert1, (byte) 1);
+ Arrays.fill(sha256cert2, (byte) 2);
+ PackageIdentifier packageIdentifier1 = new PackageIdentifier("Email", sha256cert1);
+ PackageIdentifier packageIdentifier2 = new PackageIdentifier("Email", sha256cert2);
AppSearchSchema schema1 = new AppSearchSchema.Builder("Email1")
.addProperty(new AppSearchSchema.StringPropertyConfig.Builder("subject")
.setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
@@ -44,16 +56,111 @@
).build();
GetSchemaResponse.Builder builder =
- new GetSchemaResponse.Builder().setVersion(42).addSchema(schema1);
+ new GetSchemaResponse.Builder().setVersion(42).addSchema(schema1)
+ .addSchemaTypeNotDisplayedBySystem("Email1")
+ .setSchemaTypeVisibleToPackages("Email1",
+ ImmutableSet.of(packageIdentifier1))
+ .setRequiredPermissionsForSchemaTypeVisibility("Email1",
+ ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_SMS,
+ SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA))
+ );
GetSchemaResponse original = builder.build();
- GetSchemaResponse rebuild = builder.setVersion(37).addSchema(schema2).build();
+ GetSchemaResponse rebuild = builder.setVersion(37).addSchema(schema2)
+ .addSchemaTypeNotDisplayedBySystem("Email2")
+ .setSchemaTypeVisibleToPackages("Email2",
+ ImmutableSet.of(packageIdentifier2))
+ .setRequiredPermissionsForSchemaTypeVisibility("Email2",
+ ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_CONTACTS,
+ SetSchemaRequest.READ_EXTERNAL_STORAGE),
+ ImmutableSet.of(SetSchemaRequest
+ .READ_ASSISTANT_APP_SEARCH_DATA))
+ ).build();
// rebuild won't effect the original object
assertThat(original.getVersion()).isEqualTo(42);
assertThat(original.getSchemas()).containsExactly(schema1);
+ assertThat(original.getSchemaTypesNotDisplayedBySystem())
+ .containsExactly("Email1");
+ assertThat(original.getSchemaTypesVisibleToPackages()).hasSize(1);
+ assertThat(original.getSchemaTypesVisibleToPackages().get("Email1"))
+ .containsExactly(packageIdentifier1);
+ assertThat(original.getRequiredPermissionsForSchemaTypeVisibility()).containsExactly(
+ "Email1",
+ ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_SMS,
+ SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)));
assertThat(rebuild.getVersion()).isEqualTo(37);
assertThat(rebuild.getSchemas()).containsExactly(schema1, schema2);
+ assertThat(rebuild.getSchemaTypesNotDisplayedBySystem())
+ .containsExactly("Email1", "Email2");
+ assertThat(rebuild.getSchemaTypesVisibleToPackages()).hasSize(2);
+ assertThat(rebuild.getSchemaTypesVisibleToPackages().get("Email1"))
+ .containsExactly(packageIdentifier1);
+ assertThat(rebuild.getSchemaTypesVisibleToPackages().get("Email2"))
+ .containsExactly(packageIdentifier2);
+ assertThat(rebuild.getRequiredPermissionsForSchemaTypeVisibility()).containsExactly(
+ "Email1",
+ ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_SMS,
+ SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)),
+ "Email2",
+ ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_CONTACTS,
+ SetSchemaRequest.READ_EXTERNAL_STORAGE),
+ ImmutableSet.of(SetSchemaRequest
+ .READ_ASSISTANT_APP_SEARCH_DATA)));
+ }
+
+ @Test
+ public void setVisibility() {
+ byte[] sha256cert1 = new byte[32];
+ byte[] sha256cert2 = new byte[32];
+ Arrays.fill(sha256cert1, (byte) 1);
+ Arrays.fill(sha256cert2, (byte) 2);
+ PackageIdentifier packageIdentifier1 = new PackageIdentifier("Email", sha256cert1);
+ PackageIdentifier packageIdentifier2 = new PackageIdentifier("Email", sha256cert2);
+
+ GetSchemaResponse getSchemaResponse =
+ new GetSchemaResponse.Builder().setVersion(42)
+ .addSchemaTypeNotDisplayedBySystem("Email")
+ .addSchemaTypeNotDisplayedBySystem("Text")
+ .setSchemaTypeVisibleToPackages("Email",
+ ImmutableSet.of(packageIdentifier1, packageIdentifier2))
+ .setRequiredPermissionsForSchemaTypeVisibility("Email",
+ ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_CONTACTS,
+ SetSchemaRequest.READ_EXTERNAL_STORAGE),
+ ImmutableSet.of(SetSchemaRequest
+ .READ_ASSISTANT_APP_SEARCH_DATA)))
+ .build();
+
+ assertThat(getSchemaResponse.getSchemaTypesNotDisplayedBySystem())
+ .containsExactly("Email", "Text");
+ assertThat(getSchemaResponse.getSchemaTypesVisibleToPackages()).hasSize(1);
+ assertThat(getSchemaResponse.getSchemaTypesVisibleToPackages().get("Email"))
+ .containsExactly(packageIdentifier1, packageIdentifier2);
+ assertThat(getSchemaResponse.getRequiredPermissionsForSchemaTypeVisibility().get("Email"))
+ .containsExactlyElementsIn(ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_CONTACTS,
+ SetSchemaRequest.READ_EXTERNAL_STORAGE),
+ ImmutableSet.of(SetSchemaRequest
+ .READ_ASSISTANT_APP_SEARCH_DATA)));
+ }
+
+ @Test
+ public void getEmptyVisibility() {
+ GetSchemaResponse getSchemaResponse =
+ new GetSchemaResponse.Builder().setVersion(42)
+ .build();
+ assertThat(getSchemaResponse.getSchemaTypesNotDisplayedBySystem()).isEmpty();
+ assertThat(getSchemaResponse.getSchemaTypesVisibleToPackages()).isEmpty();
+ assertThat(getSchemaResponse.getRequiredPermissionsForSchemaTypeVisibility()).isEmpty();
}
}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionCtsTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionCtsTestBase.java
index 1e03d4e..98fa981 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionCtsTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionCtsTestBase.java
@@ -28,13 +28,17 @@
import android.content.Context;
import androidx.annotation.NonNull;
+import androidx.appsearch.app.AppSearchBatchResult;
import androidx.appsearch.app.AppSearchResult;
import androidx.appsearch.app.AppSearchSchema;
import androidx.appsearch.app.AppSearchSchema.PropertyConfig;
import androidx.appsearch.app.AppSearchSession;
import androidx.appsearch.app.Features;
import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.app.GetByDocumentIdRequest;
+import androidx.appsearch.app.GetSchemaResponse;
import androidx.appsearch.app.GlobalSearchSession;
+import androidx.appsearch.app.Migrator;
import androidx.appsearch.app.PutDocumentsRequest;
import androidx.appsearch.app.RemoveByDocumentIdRequest;
import androidx.appsearch.app.ReportSystemUsageRequest;
@@ -45,11 +49,13 @@
import androidx.appsearch.exceptions.AppSearchException;
import androidx.appsearch.observer.DocumentChangeInfo;
import androidx.appsearch.observer.ObserverSpec;
+import androidx.appsearch.observer.SchemaChangeInfo;
import androidx.appsearch.testutil.AppSearchEmail;
import androidx.appsearch.testutil.TestObserverCallback;
import androidx.test.core.app.ApplicationProvider;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import com.google.common.util.concurrent.ListenableFuture;
import org.junit.After;
@@ -75,21 +81,21 @@
protected GlobalSearchSession mGlobalSearchSession;
- protected abstract ListenableFuture<AppSearchSession> createSearchSession(
+ protected abstract ListenableFuture<AppSearchSession> createSearchSessionAsync(
@NonNull String dbName);
- protected abstract ListenableFuture<GlobalSearchSession> createGlobalSearchSession();
+ protected abstract ListenableFuture<GlobalSearchSession> createGlobalSearchSessionAsync();
@Before
public void setUp() throws Exception {
- mDb1 = createSearchSession(DB_NAME_1).get();
- mDb2 = createSearchSession(DB_NAME_2).get();
+ mDb1 = createSearchSessionAsync(DB_NAME_1).get();
+ mDb2 = createSearchSessionAsync(DB_NAME_2).get();
// Cleanup whatever documents may still exist in these databases. This is needed in
// addition to tearDown in case a test exited without completing properly.
cleanup();
- mGlobalSearchSession = createGlobalSearchSession().get();
+ mGlobalSearchSession = createGlobalSearchSessionAsync().get();
}
@After
@@ -99,9 +105,9 @@
}
private void cleanup() throws Exception {
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
- mDb2.setSchema(
+ mDb2.setSchemaAsync(
new SetSchemaRequest.Builder().setForceOverride(true).build()).get();
}
@@ -128,6 +134,61 @@
}
@Test
+ public void testGlobalGetById() throws Exception {
+ assumeTrue(mGlobalSearchSession.getFeatures().isFeatureSupported(
+ Features.GLOBAL_SEARCH_SESSION_GET_BY_ID));
+ SearchSpec exactSearchSpec = new SearchSpec.Builder()
+ .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
+ .build();
+
+ // Schema registration
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
+
+ AppSearchBatchResult<String, GenericDocument> nonExistent =
+ mGlobalSearchSession.getByDocumentIdAsync(mContext.getPackageName(), DB_NAME_1,
+ new GetByDocumentIdRequest.Builder("namespace").addIds("id1")
+ .build()).get();
+
+ assertThat(nonExistent.isSuccess()).isFalse();
+ assertThat(nonExistent.getSuccesses()).isEmpty();
+ assertThat(nonExistent.getFailures()).containsKey("id1");
+ assertThat(nonExistent.getFailures().get("id1").getResultCode())
+ .isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
+
+ // Index a document
+ AppSearchEmail inEmail =
+ new AppSearchEmail.Builder("namespace", "id1")
+ .setFrom("from@example.com")
+ .setTo("to1@example.com", "to2@example.com")
+ .setSubject("testPut example")
+ .setBody("This is the body of the testPut email")
+ .build();
+ checkIsBatchResultSuccess(mDb1.putAsync(
+ new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
+
+ // Query for the document
+ AppSearchBatchResult<String, GenericDocument> afterPutDocuments =
+ mGlobalSearchSession.getByDocumentIdAsync(mContext.getPackageName(), DB_NAME_1,
+ new GetByDocumentIdRequest.Builder("namespace").addIds("id1")
+ .build()).get();
+ assertThat(afterPutDocuments.getSuccesses()).containsExactly("id1", inEmail);
+ }
+
+ @Test
+ public void testGlobalGetById_nonExistentPackage() throws Exception {
+ assumeTrue(mGlobalSearchSession.getFeatures().isFeatureSupported(
+ Features.GLOBAL_SEARCH_SESSION_GET_BY_ID));
+ AppSearchBatchResult<String, GenericDocument> fakePackage =
+ mGlobalSearchSession.getByDocumentIdAsync("fake", DB_NAME_1,
+ new GetByDocumentIdRequest.Builder("namespace").addIds("id1")
+ .build()).get();
+ assertThat(fakePackage.getFailures()).hasSize(1);
+ assertThat(fakePackage.getFailures().get("id1").getResultCode())
+ .isEqualTo(AppSearchResult.RESULT_NOT_FOUND);
+ }
+
+ @Test
public void testGlobalQuery_oneInstance() throws Exception {
// Snapshot what documents may already exist on the device.
SearchSpec exactSearchSpec = new SearchSpec.Builder()
@@ -138,7 +199,7 @@
exactSearchSpec);
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index a document
@@ -149,7 +210,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail).build()));
// Query for the document
@@ -173,9 +234,9 @@
List<GenericDocument> beforeBodyDocuments = snapshotResults("body", exactSearchSpec);
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
- mDb2.setSchema(
+ mDb2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index a document to instance 1.
@@ -186,7 +247,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1).build()));
// Index a document to instance 2.
@@ -197,7 +258,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail2).build()));
// Query across all instances
@@ -215,7 +276,7 @@
List<GenericDocument> beforeBodyDocuments = snapshotResults("body", exactSearchSpec);
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
List<AppSearchEmail> emailList = new ArrayList<>();
PutDocumentsRequest.Builder putDocumentsRequestBuilder = new PutDocumentsRequest.Builder();
@@ -232,7 +293,7 @@
emailList.add(inEmail);
putDocumentsRequestBuilder.addGenericDocuments(inEmail);
}
- checkIsBatchResultSuccess(mDb1.put(putDocumentsRequestBuilder.build()));
+ checkIsBatchResultSuccess(mDb1.putAsync(putDocumentsRequestBuilder.build()));
// Set number of results per page is 7.
int pageSize = 7;
@@ -248,7 +309,7 @@
// keep loading next page until it's empty.
do {
- results = searchResults.getNextPage().get();
+ results = searchResults.getNextPageAsync().get();
++pageNumber;
for (SearchResult result : results) {
documents.add(result.getGenericDocument());
@@ -293,19 +354,19 @@
).build();
// db1 has both "Generic" and "builtin:Email"
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(genericSchema).addSchemas(AppSearchEmail.SCHEMA).build()).get();
// db2 only has "builtin:Email"
- mDb2.setSchema(
+ mDb2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index a generic document into db1
GenericDocument genericDocument = new GenericDocument.Builder<>("namespace", "id2",
"Generic")
.setPropertyString("foo", "body").build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(genericDocument).build()));
@@ -318,9 +379,9 @@
.build();
// Put the email in both databases
- checkIsBatchResultSuccess((mDb1.put(
+ checkIsBatchResultSuccess((mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email).build())));
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(email).build()));
// Query for all documents across types
@@ -352,9 +413,9 @@
exactNamespace1SearchSpec);
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
- mDb2.setSchema(
+ mDb2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index two documents
@@ -365,7 +426,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(document1).build()));
@@ -376,7 +437,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(document2).build()));
// Query for all namespaces
@@ -410,9 +471,9 @@
testPackageSearchSpec);
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
- mDb2.setSchema(
+ mDb2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index two documents
@@ -423,7 +484,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(document1).build()));
@@ -434,7 +495,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(document2).build()));
// Query in some other package
@@ -454,11 +515,11 @@
@Test
public void testGlobalQuery_projectionTwoInstances() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.build()).get();
- mDb2.setSchema(
+ mDb2.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.build()).get();
@@ -472,7 +533,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email1).build()));
@@ -484,7 +545,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email2).build()));
@@ -516,11 +577,11 @@
@Test
public void testGlobalQuery_projectionEmptyTwoInstances() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.build()).get();
- mDb2.setSchema(
+ mDb2.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.build()).get();
@@ -534,7 +595,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email1).build()));
@@ -546,7 +607,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email2).build()));
@@ -573,11 +634,11 @@
@Test
public void testGlobalQuery_projectionNonExistentTypeTwoInstances() throws Exception {
// Schema registration
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.build()).get();
- mDb2.setSchema(
+ mDb2.setSchemaAsync(
new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA)
.build()).get();
@@ -591,7 +652,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email1).build()));
@@ -603,7 +664,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder()
.addGenericDocuments(email2).build()));
@@ -636,9 +697,9 @@
@Test
public void testQuery_ResultGroupingLimits() throws Exception {
// Schema registration
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
- mDb2.setSchema(new SetSchemaRequest.Builder()
+ mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index one document in 'namespace1' and one document in 'namespace2' into db1.
@@ -649,7 +710,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1).build()));
AppSearchEmail inEmail2 =
new AppSearchEmail.Builder("namespace2", "id2")
@@ -658,7 +719,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb1.put(
+ checkIsBatchResultSuccess(mDb1.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail2).build()));
// Index one document in 'namespace1' and one document in 'namespace2' into db2.
@@ -669,7 +730,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail3).build()));
AppSearchEmail inEmail4 =
new AppSearchEmail.Builder("namespace2", "id4")
@@ -678,7 +739,7 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(mDb2.put(
+ checkIsBatchResultSuccess(mDb2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail4).build()));
// Query with per package result grouping. Only the last document 'email4' should be
@@ -716,7 +777,7 @@
@Test
public void testReportSystemUsage_ForbiddenFromNonSystem() throws Exception {
// Index a document
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
AppSearchEmail email1 =
new AppSearchEmail.Builder("namespace", "id1")
@@ -727,7 +788,8 @@
.setBody("This is the body of the testPut email")
.build();
checkIsBatchResultSuccess(
- mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
+ mDb1.putAsync(new PutDocumentsRequest.Builder()
+ .addGenericDocuments(email1).build()));
// Query
List<SearchResult> page;
@@ -735,13 +797,13 @@
.setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
.addFilterSchemas(AppSearchEmail.SCHEMA_TYPE)
.build())) {
- page = results.getNextPage().get();
+ page = results.getNextPageAsync().get();
}
assertThat(page).isNotEmpty();
SearchResult firstResult = page.get(0);
ExecutionException exception = assertThrows(
- ExecutionException.class, () -> mGlobalSearchSession.reportSystemUsage(
+ ExecutionException.class, () -> mGlobalSearchSession.reportSystemUsageAsync(
new ReportSystemUsageRequest.Builder(
firstResult.getPackageName(),
firstResult.getDatabaseName(),
@@ -758,56 +820,63 @@
@Test
public void testAddObserver_notSupported() {
assumeFalse(mGlobalSearchSession.getFeatures()
- .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+ .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
assertThrows(
UnsupportedOperationException.class,
- () -> mGlobalSearchSession.addObserver(
+ () -> mGlobalSearchSession.registerObserverCallback(
mContext.getPackageName(),
new ObserverSpec.Builder().build(),
EXECUTOR,
new TestObserverCallback()));
assertThrows(
UnsupportedOperationException.class,
- () -> mGlobalSearchSession.removeObserver(
+ () -> mGlobalSearchSession.unregisterObserverCallback(
mContext.getPackageName(), new TestObserverCallback()));
}
@Test
public void testAddObserver() throws Exception {
assumeTrue(mGlobalSearchSession.getFeatures()
- .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+ .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
TestObserverCallback observer = new TestObserverCallback();
// Register observer. Note: the type does NOT exist yet!
- mGlobalSearchSession.addObserver(
+ mGlobalSearchSession.registerObserverCallback(
mContext.getPackageName(),
new ObserverSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build(),
EXECUTOR,
observer);
// Index a document
- mDb1.setSchema(
+ mDb1.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
AppSearchEmail email1 = new AppSearchEmail.Builder("namespace", "id1").build();
checkIsBatchResultSuccess(
- mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
+ mDb1.putAsync(new PutDocumentsRequest.Builder()
+ .addGenericDocuments(email1).build()));
// Make sure the notification was received.
- observer.waitForNotificationCount(1);
- assertThat(observer.getSchemaChanges()).isEmpty();
+ observer.waitForNotificationCount(2);
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(),
+ DB_NAME_1,
+ /*changedSchemaNames=*/ImmutableSet.of(AppSearchEmail.SCHEMA_TYPE)));
assertThat(observer.getDocumentChanges()).containsExactly(
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE));
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1"))
+ );
}
@Test
public void testRegisterObserver_MultiType() throws Exception {
assumeTrue(mGlobalSearchSession.getFeatures()
- .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+ .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
TestObserverCallback unfilteredObserver = new TestObserverCallback();
TestObserverCallback emailObserver = new TestObserverCallback();
@@ -816,18 +885,18 @@
AppSearchSchema giftSchema = new AppSearchSchema.Builder("Gift")
.addProperty(new AppSearchSchema.DoublePropertyConfig.Builder("price").build())
.build();
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
- mDb2.setSchema(new SetSchemaRequest.Builder()
+ mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Register two observers. One has no filters, the other filters on email.
- mGlobalSearchSession.addObserver(
+ mGlobalSearchSession.registerObserverCallback(
mContext.getPackageName(),
new ObserverSpec.Builder().build(),
EXECUTOR,
unfilteredObserver);
- mGlobalSearchSession.addObserver(
+ mGlobalSearchSession.registerObserverCallback(
mContext.getPackageName(),
new ObserverSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build(),
EXECUTOR,
@@ -845,14 +914,17 @@
"namespace2", "id2", "Gift").build();
checkIsBatchResultSuccess(
- mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
+ mDb1.putAsync(new PutDocumentsRequest.Builder()
+ .addGenericDocuments(email1).build()));
checkIsBatchResultSuccess(
- mDb1.put(new PutDocumentsRequest.Builder()
+ mDb1.putAsync(new PutDocumentsRequest.Builder()
.addGenericDocuments(email1, gift1).build()));
checkIsBatchResultSuccess(
- mDb2.put(new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
+ mDb2.putAsync(new PutDocumentsRequest.Builder()
+ .addGenericDocuments(email1).build()));
checkIsBatchResultSuccess(
- mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(gift1).build()));
+ mDb1.putAsync(new PutDocumentsRequest.Builder()
+ .addGenericDocuments(gift1).build()));
// Make sure the notification was received.
unfilteredObserver.waitForNotificationCount(5);
@@ -864,27 +936,32 @@
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_1,
"namespace2",
- "Gift"),
+ "Gift",
+ /*changedDocumentIds=*/ImmutableSet.of("id2")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_2,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_1,
"namespace2",
- "Gift")
+ "Gift",
+ /*changedDocumentIds=*/ImmutableSet.of("id2"))
);
// Check the filtered observer
@@ -894,24 +971,27 @@
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_2,
"namespace",
- AppSearchEmail.SCHEMA_TYPE)
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1"))
);
}
@Test
public void testRegisterObserver_removeById() throws Exception {
assumeTrue(mGlobalSearchSession.getFeatures()
- .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+ .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
TestObserverCallback unfilteredObserver = new TestObserverCallback();
TestObserverCallback emailObserver = new TestObserverCallback();
@@ -920,14 +1000,14 @@
AppSearchSchema giftSchema = new AppSearchSchema.Builder("Gift")
.addProperty(new AppSearchSchema.DoublePropertyConfig.Builder("price").build())
.build();
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
- mDb2.setSchema(new SetSchemaRequest.Builder()
+ mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
// Register two observers. One, registered later, has no filters. The other, registered
// now, filters on email.
- mGlobalSearchSession.addObserver(
+ mGlobalSearchSession.registerObserverCallback(
mContext.getPackageName(),
new ObserverSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build(),
EXECUTOR,
@@ -945,27 +1025,29 @@
"namespace2", "id2", "Gift").build();
checkIsBatchResultSuccess(
- mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(email1).build()));
+ mDb1.putAsync(new PutDocumentsRequest.Builder()
+ .addGenericDocuments(email1).build()));
checkIsBatchResultSuccess(
- mDb1.put(new PutDocumentsRequest.Builder()
+ mDb1.putAsync(new PutDocumentsRequest.Builder()
.addGenericDocuments(email1, gift1).build()));
checkIsBatchResultSuccess(
- mDb2.put(new PutDocumentsRequest.Builder()
+ mDb2.putAsync(new PutDocumentsRequest.Builder()
.addGenericDocuments(email1, gift1).build()));
checkIsBatchResultSuccess(
- mDb1.put(new PutDocumentsRequest.Builder().addGenericDocuments(gift1).build()));
+ mDb1.putAsync(new PutDocumentsRequest.Builder()
+ .addGenericDocuments(gift1).build()));
// Register the second observer
- mGlobalSearchSession.addObserver(
+ mGlobalSearchSession.registerObserverCallback(
mContext.getPackageName(),
new ObserverSpec.Builder().build(),
EXECUTOR,
unfilteredObserver);
// Remove some of the documents.
- checkIsBatchResultSuccess(mDb1.remove(
+ checkIsBatchResultSuccess(mDb1.removeAsync(
new RemoveByDocumentIdRequest.Builder("namespace").addIds("id1").build()));
- checkIsBatchResultSuccess(mDb2.remove(
+ checkIsBatchResultSuccess(mDb2.removeAsync(
new RemoveByDocumentIdRequest.Builder("namespace2").addIds("id2").build()));
// Make sure the notification was received. emailObserver should have seen:
@@ -981,22 +1063,26 @@
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_2,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE)
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1"))
);
// Check unfilteredObserver
@@ -1006,19 +1092,21 @@
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_2,
"namespace2",
- "Gift")
+ "Gift",
+ /*changedDocumentIds=*/ImmutableSet.of("id2"))
);
}
@Test
public void testRegisterObserver_removeByQuery() throws Exception {
assumeTrue(mGlobalSearchSession.getFeatures()
- .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+ .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
TestObserverCallback unfilteredObserver = new TestObserverCallback();
TestObserverCallback emailObserver = new TestObserverCallback();
@@ -1027,9 +1115,9 @@
AppSearchSchema giftSchema = new AppSearchSchema.Builder("Gift")
.addProperty(new AppSearchSchema.DoublePropertyConfig.Builder("price").build())
.build();
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
- mDb2.setSchema(new SetSchemaRequest.Builder()
+ mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
// Index some documents
@@ -1040,19 +1128,19 @@
"namespace2", "id3", "Gift").build();
checkIsBatchResultSuccess(
- mDb1.put(new PutDocumentsRequest.Builder()
+ mDb1.putAsync(new PutDocumentsRequest.Builder()
.addGenericDocuments(email1, email2, gift1).build()));
checkIsBatchResultSuccess(
- mDb2.put(new PutDocumentsRequest.Builder().addGenericDocuments(
+ mDb2.putAsync(new PutDocumentsRequest.Builder().addGenericDocuments(
email1, email2, gift1).build()));
// Register observers
- mGlobalSearchSession.addObserver(
+ mGlobalSearchSession.registerObserverCallback(
mContext.getPackageName(),
new ObserverSpec.Builder().build(),
EXECUTOR,
unfilteredObserver);
- mGlobalSearchSession.addObserver(
+ mGlobalSearchSession.registerObserverCallback(
mContext.getPackageName(),
new ObserverSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build(),
EXECUTOR,
@@ -1065,20 +1153,16 @@
assertThat(emailObserver.getDocumentChanges()).isEmpty();
// Remove "cat" emails in db1 and all types in db2
- mDb1.remove(
- "cat",
- new SearchSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build())
+ mDb1.removeAsync("cat",
+ new SearchSpec.Builder()
+ .addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build())
.get();
- mDb2.remove("", new SearchSpec.Builder().build()).get();
+ mDb2.removeAsync("", new SearchSpec.Builder().build()).get();
// Make sure the notification was received. UnfilteredObserver should have seen:
// -db1:id2, -db2:id1, -db2:id2, -db2:id3
// emailObserver should have seen:
// -db1:id2, -db2:id1, -db2:id2
- // TODO(b/193494000): Notifications are currently grouped by
- // (package, database, namespace, schema). This causes -db2:id1 and -db2:id2 to be combined
- // into one notification. Once notifications have IDs, we need to check to make sure all
- // the individual IDs are reported in the combined notification.
unfilteredObserver.waitForNotificationCount(3);
emailObserver.waitForNotificationCount(2);
@@ -1088,17 +1172,20 @@
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id2")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_2,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1", "id2")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_2,
"namespace2",
- "Gift")
+ "Gift",
+ /*changedDocumentIds=*/ImmutableSet.of("id3"))
);
// Check emailObserver
@@ -1108,19 +1195,21 @@
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id2")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_2,
"namespace",
- AppSearchEmail.SCHEMA_TYPE)
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1", "id2"))
);
}
@Test
public void testRegisterObserver_sameCallback_differentSpecs() throws Exception {
assumeTrue(mGlobalSearchSession.getFeatures()
- .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+ .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
TestObserverCallback observer = new TestObserverCallback();
@@ -1128,16 +1217,16 @@
AppSearchSchema giftSchema = new AppSearchSchema.Builder("Gift")
.addProperty(new AppSearchSchema.DoublePropertyConfig.Builder("price").build())
.build();
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
// Register the same observer twice: once for gift, once for email
- mGlobalSearchSession.addObserver(
+ mGlobalSearchSession.registerObserverCallback(
mContext.getPackageName(),
new ObserverSpec.Builder().addFilterSchemas("Gift").build(),
EXECUTOR,
observer);
- mGlobalSearchSession.addObserver(
+ mGlobalSearchSession.registerObserverCallback(
mContext.getPackageName(),
new ObserverSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build(),
EXECUTOR,
@@ -1149,7 +1238,7 @@
"namespace2", "id3", "Gift").build();
checkIsBatchResultSuccess(
- mDb1.put(new PutDocumentsRequest.Builder()
+ mDb1.putAsync(new PutDocumentsRequest.Builder()
.addGenericDocuments(email1, gift1).build()));
// Make sure the same observer received both values
@@ -1160,19 +1249,21 @@
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_1,
"namespace2",
- "Gift")
+ "Gift",
+ /*changedDocumentIds=*/ImmutableSet.of("id3"))
);
}
@Test
public void testRemoveObserver() throws Exception {
assumeTrue(mGlobalSearchSession.getFeatures()
- .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER));
+ .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
TestObserverCallback temporaryObserver = new TestObserverCallback();
TestObserverCallback permanentObserver = new TestObserverCallback();
@@ -1181,24 +1272,24 @@
AppSearchSchema giftSchema = new AppSearchSchema.Builder("Gift")
.addProperty(new AppSearchSchema.DoublePropertyConfig.Builder("price").build())
.build();
- mDb1.setSchema(new SetSchemaRequest.Builder()
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
- mDb2.setSchema(new SetSchemaRequest.Builder()
+ mDb2.setSchemaAsync(new SetSchemaRequest.Builder()
.addSchemas(AppSearchEmail.SCHEMA, giftSchema).build()).get();
// Register both observers. temporaryObserver is registered twice to ensure both instances
// get removed.
- mGlobalSearchSession.addObserver(
+ mGlobalSearchSession.registerObserverCallback(
mContext.getPackageName(),
new ObserverSpec.Builder().addFilterSchemas(AppSearchEmail.SCHEMA_TYPE).build(),
EXECUTOR,
temporaryObserver);
- mGlobalSearchSession.addObserver(
+ mGlobalSearchSession.registerObserverCallback(
mContext.getPackageName(),
new ObserverSpec.Builder().addFilterSchemas("Gift").build(),
EXECUTOR,
temporaryObserver);
- mGlobalSearchSession.addObserver(
+ mGlobalSearchSession.registerObserverCallback(
mContext.getPackageName(),
new ObserverSpec.Builder().build(),
EXECUTOR,
@@ -1220,7 +1311,7 @@
"namespace3", "id4", "Gift").build();
checkIsBatchResultSuccess(
- mDb1.put(new PutDocumentsRequest.Builder()
+ mDb1.putAsync(new PutDocumentsRequest.Builder()
.addGenericDocuments(email1, gift1).build()));
// Make sure the notifications were received.
@@ -1232,12 +1323,14 @@
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_1,
"namespace2",
- "Gift"));
+ "Gift",
+ /*changedDocumentIds=*/ImmutableSet.of("id3")));
assertThat(temporaryObserver.getSchemaChanges()).isEmpty();
assertThat(temporaryObserver.getDocumentChanges())
.containsExactlyElementsIn(expectedChangesOrig);
@@ -1246,11 +1339,12 @@
.containsExactlyElementsIn(expectedChangesOrig);
// Unregister temporaryObserver
- mGlobalSearchSession.removeObserver(mContext.getPackageName(), temporaryObserver);
+ mGlobalSearchSession.unregisterObserverCallback(
+ mContext.getPackageName(), temporaryObserver);
// Index some more documents
checkIsBatchResultSuccess(
- mDb1.put(new PutDocumentsRequest.Builder()
+ mDb1.putAsync(new PutDocumentsRequest.Builder()
.addGenericDocuments(email2, gift2).build()));
// Only the permanent observer should have received this
@@ -1263,25 +1357,477 @@
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id1")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_1,
"namespace2",
- "Gift"),
+ "Gift",
+ /*changedDocumentIds=*/ImmutableSet.of("id3")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_1,
"namespace",
- AppSearchEmail.SCHEMA_TYPE),
+ AppSearchEmail.SCHEMA_TYPE,
+ /*changedDocumentIds=*/ImmutableSet.of("id2")),
new DocumentChangeInfo(
mContext.getPackageName(),
DB_NAME_1,
"namespace3",
- "Gift")
+ "Gift",
+ /*changedDocumentIds=*/ImmutableSet.of("id4"))
);
assertThat(temporaryObserver.getSchemaChanges()).isEmpty();
assertThat(temporaryObserver.getDocumentChanges())
.containsExactlyElementsIn(expectedChangesOrig);
}
+
+ @Test
+ public void testGlobalGetSchema() throws Exception {
+ assumeTrue(mGlobalSearchSession.getFeatures()
+ .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA));
+
+ // One schema should be set with global access and the other should be set with local
+ // access.
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
+ mDb2.setSchemaAsync(
+ new SetSchemaRequest.Builder().addSchemas(
+ AppSearchEmail.SCHEMA).setSchemaTypeDisplayedBySystem(
+ AppSearchEmail.SCHEMA_TYPE, /*displayed=*/false).build()).get();
+
+ GetSchemaResponse response = mGlobalSearchSession.getSchemaAsync(mContext.getPackageName(),
+ DB_NAME_1).get();
+ assertThat(response.getSchemas()).containsExactly(AppSearchEmail.SCHEMA);
+
+ response = mGlobalSearchSession.getSchemaAsync(mContext.getPackageName(), DB_NAME_2).get();
+ assertThat(response.getSchemas()).containsExactly(AppSearchEmail.SCHEMA);
+
+ // A request for a db that doesn't exist should return a response with no schemas.
+ response = mGlobalSearchSession.getSchemaAsync(
+ mContext.getPackageName(), "NonexistentDb").get();
+ assertThat(response.getSchemas()).isEmpty();
+ }
+
+ @Test
+ public void testGlobalGetSchema_notSupported() throws Exception {
+ assumeFalse(mGlobalSearchSession.getFeatures()
+ .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA));
+
+ // One schema should be set with global access and the other should be set with local
+ // access.
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
+
+ UnsupportedOperationException e = assertThrows(UnsupportedOperationException.class,
+ () -> mGlobalSearchSession.getSchemaAsync(mContext.getPackageName(), DB_NAME_1));
+ assertThat(e).hasMessageThat().isEqualTo(Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA
+ + " is not supported on this AppSearch implementation.");
+ }
+
+ @Test
+ public void testGlobalGetByDocumentId_notSupported() throws Exception {
+ assumeFalse(mGlobalSearchSession.getFeatures()
+ .isFeatureSupported(Features.GLOBAL_SEARCH_SESSION_GET_BY_ID));
+
+ Context context = ApplicationProvider.getApplicationContext();
+
+ UnsupportedOperationException e = assertThrows(UnsupportedOperationException.class,
+ () -> mGlobalSearchSession.getByDocumentIdAsync(context.getPackageName(), DB_NAME_1,
+ new GetByDocumentIdRequest.Builder("namespace")
+ .addIds("id").build()));
+
+ assertThat(e).hasMessageThat().isEqualTo(Features.GLOBAL_SEARCH_SESSION_GET_BY_ID
+ + " is not supported on this AppSearch implementation.");
+ }
+
+ @Test
+ public void testAddObserver_schemaChange_added() throws Exception {
+ assumeTrue(mDb1.getFeatures().isFeatureSupported(
+ Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
+
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mGlobalSearchSession.registerObserverCallback(
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ EXECUTOR,
+ observer);
+
+ // Add a schema type
+ assertThat(observer.getSchemaChanges()).isEmpty();
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder()
+ .addSchemas(new AppSearchSchema.Builder("Type1").build())
+ .build())
+ .get();
+
+ observer.waitForNotificationCount(1);
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(),
+ DB_NAME_1,
+ ImmutableSet.of("Type1")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+
+ // Add two more schema types without touching the existing one
+ observer.clear();
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder()
+ .addSchemas(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2").build(),
+ new AppSearchSchema.Builder("Type3").build())
+ .build())
+ .get();
+
+ observer.waitForNotificationCount(1);
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), DB_NAME_1, ImmutableSet.of("Type2", "Type3")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testAddObserver_schemaChange_removed() throws Exception {
+ assumeTrue(mDb1.getFeatures().isFeatureSupported(
+ Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
+
+ // Add a schema type
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder()
+ .addSchemas(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2").build())
+ .build())
+ .get();
+
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mGlobalSearchSession.registerObserverCallback(
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ EXECUTOR,
+ observer);
+
+ // Remove Type2
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder()
+ .addSchemas(new AppSearchSchema.Builder("Type1").build())
+ .setForceOverride(true)
+ .build())
+ .get();
+
+ observer.waitForNotificationCount(1);
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), DB_NAME_1, ImmutableSet.of("Type2")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testAddObserver_schemaChange_contents() throws Exception {
+ assumeTrue(mDb1.getFeatures().isFeatureSupported(
+ Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
+
+ // Add a schema
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder()
+ .addSchemas(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(
+ new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ PropertyConfig.CARDINALITY_REQUIRED)
+ .build())
+ .build())
+ .build())
+ .get();
+
+ // Register an observer
+ TestObserverCallback observer = new TestObserverCallback();
+ mGlobalSearchSession.registerObserverCallback(
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().build(),
+ EXECUTOR,
+ observer);
+
+ // Update the schema, but don't make any actual changes
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder()
+ .addSchemas(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(
+ new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ PropertyConfig.CARDINALITY_REQUIRED)
+ .build())
+ .build())
+ .build())
+ .get();
+
+ // Now update the schema again, but this time actually make a change (cardinality of the
+ // property)
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder()
+ .addSchemas(
+ new AppSearchSchema.Builder("Type1").build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(
+ new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .build())
+ .build())
+ .get();
+
+ // Dispatch notifications
+ observer.waitForNotificationCount(1);
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), DB_NAME_1, ImmutableSet.of("Type2")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testAddObserver_schemaChange_contents_skipBySpec() throws Exception {
+ assumeTrue(mDb1.getFeatures().isFeatureSupported(
+ Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
+
+ // Add a schema
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder()
+ .addSchemas(
+ new AppSearchSchema.Builder("Type1")
+ .addProperty(
+ new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ PropertyConfig.CARDINALITY_REQUIRED)
+ .build())
+ .build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(
+ new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ PropertyConfig.CARDINALITY_REQUIRED)
+ .build())
+ .build())
+ .build())
+ .get();
+
+ // Register an observer that only listens for Type2
+ TestObserverCallback observer = new TestObserverCallback();
+ mGlobalSearchSession.registerObserverCallback(
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().addFilterSchemas("Type2").build(),
+ EXECUTOR,
+ observer);
+
+ // Update both types of the schema (changed cardinalities)
+ mDb1.setSchemaAsync(
+ new SetSchemaRequest.Builder()
+ .addSchemas(
+ new AppSearchSchema.Builder("Type1")
+ .addProperty(
+ new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(
+ new AppSearchSchema.BooleanPropertyConfig.Builder(
+ "booleanProp")
+ .setCardinality(
+ PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .build())
+ .build())
+ .get();
+
+ observer.waitForNotificationCount(1);
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), DB_NAME_1, ImmutableSet.of("Type2")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
+
+ @Test
+ public void testRegisterObserver_schemaMigration() throws Exception {
+ assumeTrue(mDb1.getFeatures().isFeatureSupported(
+ Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK));
+
+ // Add a schema with two types
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
+ .setVersion(1)
+ .addSchemas(
+ new AppSearchSchema.Builder("Type1")
+ .addProperty(
+ new AppSearchSchema.StringPropertyConfig.Builder("strProp1")
+ .build()
+ ).build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(
+ new AppSearchSchema.LongPropertyConfig.Builder("longProp1")
+ .build()
+ ).build()
+ ).build()
+ ).get();
+
+ // Index some documents
+ GenericDocument type1doc1 = new GenericDocument.Builder<GenericDocument.Builder<?>>(
+ "namespace", "t1id1", "Type1")
+ .setPropertyString("strProp1", "t1id1 prop value")
+ .build();
+ GenericDocument type1doc2 = new GenericDocument.Builder<GenericDocument.Builder<?>>(
+ "namespace", "t1id2", "Type1")
+ .setPropertyString("strProp1", "t1id2 prop value")
+ .build();
+ GenericDocument type2doc1 = new GenericDocument.Builder<GenericDocument.Builder<?>>(
+ "namespace", "t2id1", "Type2")
+ .setPropertyLong("longProp1", 41)
+ .build();
+ GenericDocument type2doc2 = new GenericDocument.Builder<GenericDocument.Builder<?>>(
+ "namespace", "t2id2", "Type2")
+ .setPropertyLong("longProp1", 42)
+ .build();
+ mDb1.putAsync(new PutDocumentsRequest.Builder()
+ .addGenericDocuments(type1doc1, type1doc2, type2doc1, type2doc2)
+ .build())
+ .get();
+
+ // Register an observer that only listens for Type1
+ TestObserverCallback observer = new TestObserverCallback();
+ mGlobalSearchSession.registerObserverCallback(
+ /*targetPackageName=*/mContext.getPackageName(),
+ new ObserverSpec.Builder().addFilterSchemas("Type1").build(),
+ EXECUTOR,
+ observer);
+
+ // Update both types of the schema with migration to a new property name
+ mDb1.setSchemaAsync(new SetSchemaRequest.Builder()
+ .setVersion(2)
+ .addSchemas(
+ new AppSearchSchema.Builder("Type1")
+ .addProperty(
+ new AppSearchSchema.StringPropertyConfig.Builder("strProp2")
+ .build()
+ ).build(),
+ new AppSearchSchema.Builder("Type2")
+ .addProperty(
+ new AppSearchSchema.LongPropertyConfig.Builder("longProp2")
+ .build()
+ ).build()
+ )
+ .setMigrator("Type1", new Migrator() {
+ @Override
+ public boolean shouldMigrate(int currentVersion, int finalVersion) {
+ assertThat(currentVersion).isEqualTo(1);
+ assertThat(finalVersion).isEqualTo(2);
+ return true;
+ }
+
+ @NonNull
+ @Override
+ public GenericDocument onUpgrade(
+ int currentVersion,
+ int finalVersion,
+ @NonNull GenericDocument document) {
+ assertThat(currentVersion).isEqualTo(1);
+ assertThat(finalVersion).isEqualTo(2);
+ assertThat(document.getSchemaType()).isEqualTo("Type1");
+ String[] prop = document.getPropertyStringArray("strProp1");
+ assertThat(prop).isNotNull();
+ return new GenericDocument.Builder<GenericDocument.Builder<?>>(
+ document.getNamespace(),
+ document.getId(),
+ document.getSchemaType())
+ .setPropertyString("strProp2", prop)
+ .build();
+ }
+
+ @NonNull
+ @Override
+ public GenericDocument onDowngrade(
+ int currentVersion,
+ int finalVersion,
+ @NonNull GenericDocument document) {
+ // Doesn't happen in this test
+ throw new UnsupportedOperationException();
+ }
+ }).setMigrator("Type2", new Migrator() {
+ @Override
+ public boolean shouldMigrate(int currentVersion, int finalVersion) {
+ assertThat(currentVersion).isEqualTo(1);
+ assertThat(finalVersion).isEqualTo(2);
+ return true;
+ }
+
+ @NonNull
+ @Override
+ public GenericDocument onUpgrade(
+ int currentVersion,
+ int finalVersion,
+ @NonNull GenericDocument document) {
+ assertThat(currentVersion).isEqualTo(1);
+ assertThat(finalVersion).isEqualTo(2);
+ assertThat(document.getSchemaType()).isEqualTo("Type2");
+ long[] prop = document.getPropertyLongArray("longProp1");
+ assertThat(prop).isNotNull();
+ return new GenericDocument.Builder<GenericDocument.Builder<?>>(
+ document.getNamespace(),
+ document.getId(),
+ document.getSchemaType())
+ .setPropertyLong("longProp2", prop[0] + 1000)
+ .build();
+ }
+
+ @NonNull
+ @Override
+ public GenericDocument onDowngrade(
+ int currentVersion,
+ int finalVersion,
+ @NonNull GenericDocument document) {
+ // Doesn't happen in this test
+ throw new UnsupportedOperationException();
+ }
+ })
+ .build()
+ ).get();
+
+ // Make sure the test is valid by checking that migration actually occurred
+ AppSearchBatchResult<String, GenericDocument> getResponse = mDb1.getByDocumentIdAsync(
+ new GetByDocumentIdRequest.Builder("namespace")
+ .addIds("t1id1", "t1id2", "t2id1", "t2id2")
+ .build())
+ .get();
+ assertThat(getResponse.isSuccess()).isTrue();
+ assertThat(getResponse.getSuccesses().get("t1id1").getPropertyString("strProp2"))
+ .isEqualTo("t1id1 prop value");
+ assertThat(getResponse.getSuccesses().get("t1id2").getPropertyString("strProp2"))
+ .isEqualTo("t1id2 prop value");
+ assertThat(getResponse.getSuccesses().get("t2id1").getPropertyLong("longProp2"))
+ .isEqualTo(1041);
+ assertThat(getResponse.getSuccesses().get("t2id2").getPropertyLong("longProp2"))
+ .isEqualTo(1042);
+
+ // Per the observer documentation, for schema migrations, individual document changes are
+ // not dispatched. Only SchemaChangeInfo is dispatched.
+ observer.waitForNotificationCount(1);
+ assertThat(observer.getSchemaChanges()).containsExactly(
+ new SchemaChangeInfo(
+ mContext.getPackageName(), DB_NAME_1, ImmutableSet.of("Type1")));
+ assertThat(observer.getDocumentChanges()).isEmpty();
+ }
}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionLocalCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionLocalCtsTest.java
index 19af478..4c038e9 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionLocalCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionLocalCtsTest.java
@@ -25,7 +25,6 @@
import androidx.annotation.NonNull;
import androidx.appsearch.app.AppSearchResult;
import androidx.appsearch.app.AppSearchSession;
-import androidx.appsearch.app.Features;
import androidx.appsearch.app.GlobalSearchSession;
import androidx.appsearch.app.PutDocumentsRequest;
import androidx.appsearch.app.SearchResult;
@@ -46,39 +45,31 @@
public class GlobalSearchSessionLocalCtsTest extends GlobalSearchSessionCtsTestBase {
@Override
- protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
Context context = ApplicationProvider.getApplicationContext();
- return LocalStorage.createSearchSession(
+ return LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, dbName).build());
}
@Override
- protected ListenableFuture<GlobalSearchSession> createGlobalSearchSession() {
+ protected ListenableFuture<GlobalSearchSession> createGlobalSearchSessionAsync() {
Context context = ApplicationProvider.getApplicationContext();
- return LocalStorage.createGlobalSearchSession(
+ return LocalStorage.createGlobalSearchSessionAsync(
new LocalStorage.GlobalSearchContext.Builder(context).build());
}
- @Test
- public void testFeaturesSupported() {
- assertThat(mDb1.getFeatures().isFeatureSupported(
- Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH)).isTrue();
- assertThat(mDb1.getFeatures().isFeatureSupported(
- Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER)).isTrue();
- }
-
// TODO(b/194207451) This test can be moved to CtsTestBase if customized logger is
// supported for platform backend.
@Test
public void testLogger_searchStatsLogged_forEmptyFirstPage() throws Exception {
SimpleTestLogger logger = new SimpleTestLogger();
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = LocalStorage.createSearchSession(
+ AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
.setLogger(logger).build()).get();
// Schema registration
- db2.setSchema(
+ db2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -96,10 +87,10 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(db2.put(
+ checkIsBatchResultSuccess(db2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
- GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSession(
+ GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSessionAsync(
new LocalStorage.GlobalSearchContext.Builder(context).setLogger(
logger).build()).get();
assertThat(logger.mSearchStats).isNull();
@@ -113,7 +104,7 @@
.build());
// Get first page
- List<SearchResult> page = searchResults.getNextPage().get();
+ List<SearchResult> page = searchResults.getNextPageAsync().get();
assertThat(page).hasSize(0);
// Check searchStats has been set. We won't check all the fields here.
@@ -134,12 +125,12 @@
public void testLogger_searchStatsLogged_forNonEmptyFirstPage() throws Exception {
SimpleTestLogger logger = new SimpleTestLogger();
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = LocalStorage.createSearchSession(
+ AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
.setLogger(logger).build()).get();
// Schema registration
- db2.setSchema(
+ db2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -157,10 +148,10 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(db2.put(
+ checkIsBatchResultSuccess(db2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
- GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSession(
+ GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSessionAsync(
new LocalStorage.GlobalSearchContext.Builder(context).setLogger(
logger).build()).get();
assertThat(logger.mSearchStats).isNull();
@@ -174,7 +165,7 @@
.build());
// Get first page
- List<SearchResult> page = searchResults.getNextPage().get();
+ List<SearchResult> page = searchResults.getNextPageAsync().get();
assertThat(page).hasSize(1);
// Check searchStats has been set. We won't check all the fields here.
@@ -195,12 +186,12 @@
public void testLogger_searchStatsLogged_forEmptySecondPage() throws Exception {
SimpleTestLogger logger = new SimpleTestLogger();
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = LocalStorage.createSearchSession(
+ AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
.setLogger(logger).build()).get();
// Schema registration
- db2.setSchema(
+ db2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -218,10 +209,10 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(db2.put(
+ checkIsBatchResultSuccess(db2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
- GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSession(
+ GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSessionAsync(
new LocalStorage.GlobalSearchContext.Builder(context).setLogger(
logger).build()).get();
assertThat(logger.mSearchStats).isNull();
@@ -235,12 +226,12 @@
.build());
// Get first page
- List<SearchResult> page = searchResults.getNextPage().get();
+ List<SearchResult> page = searchResults.getNextPageAsync().get();
assertThat(page).hasSize(2);
// Get second(empty) page
logger.mSearchStats = null;
- page = searchResults.getNextPage().get();
+ page = searchResults.getNextPageAsync().get();
assertThat(page).hasSize(0);
// Check searchStats has been set. We won't check all the fields here.
@@ -261,12 +252,12 @@
public void testLogger_searchStatsLogged_forNonEmptySecondPage() throws Exception {
SimpleTestLogger logger = new SimpleTestLogger();
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession db2 = LocalStorage.createSearchSession(
+ AppSearchSession db2 = LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, DB_NAME_2)
.setLogger(logger).build()).get();
// Schema registration
- db2.setSchema(
+ db2.setSchemaAsync(
new SetSchemaRequest.Builder().addSchemas(AppSearchEmail.SCHEMA).build()).get();
// Index documents
@@ -284,10 +275,10 @@
.setSubject("testPut example")
.setBody("This is the body of the testPut email")
.build();
- checkIsBatchResultSuccess(db2.put(
+ checkIsBatchResultSuccess(db2.putAsync(
new PutDocumentsRequest.Builder().addGenericDocuments(inEmail1, inEmail2).build()));
- GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSession(
+ GlobalSearchSession globalSearchSession = LocalStorage.createGlobalSearchSessionAsync(
new LocalStorage.GlobalSearchContext.Builder(context).setLogger(
logger).build()).get();
assertThat(logger.mSearchStats).isNull();
@@ -301,12 +292,12 @@
.build());
// Get first page
- List<SearchResult> page = searchResults.getNextPage().get();
+ List<SearchResult> page = searchResults.getNextPageAsync().get();
assertThat(page).hasSize(1);
// Get second page
logger.mSearchStats = null;
- page = searchResults.getNextPage().get();
+ page = searchResults.getNextPageAsync().get();
assertThat(page).hasSize(1);
// Check searchStats has been set. We won't check all the fields here.
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionPlatformCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionPlatformCtsTest.java
index 9d152ff..46aa5c4 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionPlatformCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/GlobalSearchSessionPlatformCtsTest.java
@@ -16,14 +16,11 @@
// @exportToFramework:skipFile()
package androidx.appsearch.cts.app;
-import static com.google.common.truth.Truth.assertThat;
-
import android.content.Context;
import android.os.Build;
import androidx.annotation.NonNull;
import androidx.appsearch.app.AppSearchSession;
-import androidx.appsearch.app.Features;
import androidx.appsearch.app.GlobalSearchSession;
import androidx.appsearch.platformstorage.PlatformStorage;
import androidx.test.core.app.ApplicationProvider;
@@ -31,33 +28,19 @@
import com.google.common.util.concurrent.ListenableFuture;
-import org.junit.Ignore;
-import org.junit.Test;
-
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
public class GlobalSearchSessionPlatformCtsTest extends GlobalSearchSessionCtsTestBase {
@Override
- protected ListenableFuture<AppSearchSession> createSearchSession(@NonNull String dbName) {
+ protected ListenableFuture<AppSearchSession> createSearchSessionAsync(@NonNull String dbName) {
Context context = ApplicationProvider.getApplicationContext();
- return PlatformStorage.createSearchSession(
+ return PlatformStorage.createSearchSessionAsync(
new PlatformStorage.SearchContext.Builder(context, dbName).build());
}
@Override
- protected ListenableFuture<GlobalSearchSession> createGlobalSearchSession() {
+ protected ListenableFuture<GlobalSearchSession> createGlobalSearchSessionAsync() {
Context context = ApplicationProvider.getApplicationContext();
- return PlatformStorage.createGlobalSearchSession(
+ return PlatformStorage.createGlobalSearchSessionAsync(
new PlatformStorage.GlobalSearchContext.Builder(context).build());
}
-
- @Ignore("Unignore this test once these features are implemented in the platform backend.")
- @Test
- public void testFeaturesSupported() {
- assertThat(mDb1.getFeatures().isFeatureSupported(
- Features.SEARCH_RESULT_MATCH_INFO_SUBMATCH))
- .isEqualTo(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S);
- assertThat(mDb1.getFeatures().isFeatureSupported(
- Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER))
- .isEqualTo(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S);
- }
}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PropertyPathCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PropertyPathCtsTest.java
new file mode 100644
index 0000000..5f40eb1
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PropertyPathCtsTest.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.cts.app;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.appsearch.app.PropertyPath;
+
+import com.google.common.collect.ImmutableList;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.List;
+
+public class PropertyPathCtsTest {
+ @Test
+ public void testPropertyPathInvalid() {
+ // These paths are invalid because they are malformed. These throw an exception --- the
+ // querier shouldn't provide such paths.
+ Throwable e;
+ e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath(""));
+ assertThat(e.getMessage()).startsWith("Malformed path (blank property name)");
+
+ e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("]"));
+ assertThat(e.getMessage()).startsWith("Malformed path (no starting '[')");
+
+ e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a["));
+ assertThat(e.getMessage()).startsWith("Malformed path (no ending ']')");
+
+ e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a[]"));
+ assertThat(e.getMessage()).startsWith("Malformed path (\"\" as path index)");
+
+ e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a[b]"));
+ assertThat(e.getMessage()).startsWith("Malformed path (\"b\" as path index)");
+
+ e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a[-1]"));
+ assertThat(e.getMessage()).startsWith("Malformed path (path index less than 0)");
+
+ e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a[0.]"));
+ assertThat(e.getMessage()).startsWith("Malformed path (\"0.\" as path index)");
+
+ e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a[0][0]"));
+ assertThat(e.getMessage()).startsWith("Malformed path (']' not followed by '.')");
+
+ e = Assert.assertThrows(IllegalArgumentException.class, () -> new PropertyPath("a[0]b"));
+ assertThat(e.getMessage()).startsWith("Malformed path (']' not followed by '.')");
+ }
+
+ @Test
+ public void testPropertyPathValid() {
+ PropertyPath path = new PropertyPath("foo.bar[1]");
+ assertThat(path.size()).isEqualTo(2);
+ assertThat(path.get(0).getPropertyName()).isEqualTo("foo");
+ assertThat(path.get(0).getPropertyIndex())
+ .isEqualTo(PropertyPath.PathSegment.NON_REPEATED_CARDINALITY);
+ assertThat(path.get(1).getPropertyName()).isEqualTo("bar");
+ assertThat(path.get(1).getPropertyIndex()).isEqualTo(1);
+
+ path = new PropertyPath("a.b.c.d.e.f.g.h.i.j");
+ assertThat(path.size()).isEqualTo(10);
+ assertThat(path.get(4).getPropertyName()).isEqualTo("e");
+ assertThat(path.get(9).getPropertyName()).isEqualTo("j");
+ }
+
+ @Test
+ public void testPathSegmentInvalid() {
+ Assert.assertThrows(NullPointerException.class,
+ () -> PropertyPath.PathSegment.create(null));
+
+ Throwable e;
+ e = Assert.assertThrows(IllegalArgumentException.class,
+ () -> PropertyPath.PathSegment.create(""));
+ assertThat(e.getMessage()).startsWith("Invalid propertyName value");
+ e = Assert.assertThrows(IllegalArgumentException.class,
+ () -> PropertyPath.PathSegment.create("["));
+ assertThat(e.getMessage()).startsWith("Invalid propertyName value");
+ e = Assert.assertThrows(IllegalArgumentException.class,
+ () -> PropertyPath.PathSegment.create("."));
+ assertThat(e.getMessage()).startsWith("Invalid propertyName value");
+ e = Assert.assertThrows(IllegalArgumentException.class,
+ () -> PropertyPath.PathSegment.create("]"));
+ assertThat(e.getMessage()).startsWith("Invalid propertyName value");
+ e = Assert.assertThrows(IllegalArgumentException.class,
+ () -> PropertyPath.PathSegment.create("foo", -2));
+ assertThat(e.getMessage()).startsWith("Invalid propertyIndex value");
+ }
+
+ @Test
+ public void testPathSegmentValid() {
+ PropertyPath.PathSegment segment = PropertyPath.PathSegment.create("foo", 2);
+ assertThat(segment.toString()).isEqualTo("foo[2]");
+ segment = PropertyPath.PathSegment.create("foo");
+ assertThat(segment.toString()).isEqualTo("foo");
+ assertThat(segment).isEqualTo(PropertyPath.PathSegment.create("foo"));
+ }
+
+ @Test
+ public void testBuildPropertyPathFromSegmentList() {
+ List<PropertyPath.PathSegment> list = ImmutableList.of(
+ PropertyPath.PathSegment.create("foo", 1),
+ PropertyPath.PathSegment.create("bar", 2),
+ PropertyPath.PathSegment.create("name"));
+ PropertyPath path = new PropertyPath(list);
+ assertThat(path.toString()).isEqualTo("foo[1].bar[2].name");
+ assertThat(path).isEqualTo(new PropertyPath("foo[1].bar[2].name"));
+ }
+
+ @Test
+ public void testPropertyPathEquality() {
+ PropertyPath.PathSegment segment = PropertyPath.PathSegment.create("bar");
+ PropertyPath path = new PropertyPath("foo[1].bar");
+ assertThat(path.get(1)).isEqualTo(segment);
+ }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PutDocumentsRequestCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PutDocumentsRequestCtsTest.java
index 372a090..c2b06d4 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PutDocumentsRequestCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/PutDocumentsRequestCtsTest.java
@@ -74,12 +74,12 @@
// A schema with Card must be set in order to be able to add a Card instance to
// PutDocumentsRequest.
Context context = ApplicationProvider.getApplicationContext();
- AppSearchSession session = LocalStorage.createSearchSession(
+ AppSearchSession session = LocalStorage.createSearchSessionAsync(
new LocalStorage.SearchContext.Builder(context, /*databaseName=*/ "")
.build()
).get();
- session.setSchema(new SetSchemaRequest.Builder().addDocumentClasses(Card.class).build())
- .get();
+ session.setSchemaAsync(
+ new SetSchemaRequest.Builder().addDocumentClasses(Card.class).build()).get();
Set<Card> cards = ImmutableSet.of(new Card("cardNamespace", "cardId", "cardProperty"));
PutDocumentsRequest request = new PutDocumentsRequest.Builder().addDocuments(cards)
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SearchResultCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SearchResultCtsTest.java
index 575a37b..cceae16 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SearchResultCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SearchResultCtsTest.java
@@ -20,6 +20,7 @@
import static org.junit.Assert.assertThrows;
+import androidx.appsearch.app.PropertyPath;
import androidx.appsearch.app.SearchResult;
import androidx.appsearch.testutil.AppSearchEmail;
@@ -54,6 +55,7 @@
assertThat(searchResult.getMatchInfos()).hasSize(1);
SearchResult.MatchInfo actualMatchInfo = searchResult.getMatchInfos().get(0);
assertThat(actualMatchInfo.getPropertyPath()).isEqualTo("body");
+ assertThat(actualMatchInfo.getPropertyPathObject()).isEqualTo(new PropertyPath("body"));
assertThat(actualMatchInfo.getExactMatchRange()).isEqualTo(exactMatchRange);
assertThat(actualMatchInfo.getSubmatchRange()).isEqualTo(submatchRange);
assertThat(actualMatchInfo.getSnippetRange()).isEqualTo(snippetMatchRange);
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SetSchemaRequestCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SetSchemaRequestCtsTest.java
index a965ef6..dd47914 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SetSchemaRequestCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SetSchemaRequestCtsTest.java
@@ -220,6 +220,87 @@
}
@Test
+ public void testSetSchemaTypeVisibleForPermissions() {
+ AppSearchSchema schema = new AppSearchSchema.Builder("Schema").build();
+
+ // By default, the schema is displayed.
+ SetSchemaRequest request =
+ new SetSchemaRequest.Builder().addSchemas(schema).build();
+ assertThat(request.getRequiredPermissionsForSchemaTypeVisibility()).isEmpty();
+
+ SetSchemaRequest.Builder setSchemaRequestBuilder = new SetSchemaRequest.Builder()
+ .addSchemas(schema)
+ .addRequiredPermissionsForSchemaTypeVisibility("Schema",
+ ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR))
+ .addRequiredPermissionsForSchemaTypeVisibility("Schema",
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA));
+
+ request = setSchemaRequestBuilder.build();
+
+ assertThat(request.getRequiredPermissionsForSchemaTypeVisibility())
+ .containsExactly("Schema", ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_SMS,
+ SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(SetSchemaRequest
+ .READ_HOME_APP_SEARCH_DATA)));
+ }
+
+ @Test
+ public void testClearSchemaTypeVisibleForPermissions() {
+ SetSchemaRequest.Builder setSchemaRequestBuilder = new SetSchemaRequest.Builder()
+ .addSchemas(
+ new AppSearchSchema.Builder("Schema1").build(),
+ new AppSearchSchema.Builder("Schema2").build())
+ .addRequiredPermissionsForSchemaTypeVisibility(
+ "Schema1",
+ ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR))
+ .addRequiredPermissionsForSchemaTypeVisibility(
+ "Schema1",
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA))
+ .addRequiredPermissionsForSchemaTypeVisibility(
+ "Schema2",
+ ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE));
+
+ SetSchemaRequest request = setSchemaRequestBuilder.build();
+
+ assertThat(request.getRequiredPermissionsForSchemaTypeVisibility())
+ .containsExactly(
+ "Schema1", ImmutableSet.of(
+ ImmutableSet.of(
+ SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(
+ SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)),
+ "Schema2", ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE)
+ )
+ );
+
+ // Clear the permissions in the builder
+ setSchemaRequestBuilder.clearRequiredPermissionsForSchemaTypeVisibility("Schema1");
+
+ // New object should be updated
+ assertThat(setSchemaRequestBuilder.build().getRequiredPermissionsForSchemaTypeVisibility())
+ .containsExactly(
+ "Schema2", ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE)
+ )
+ );
+
+ // Old object should remain unchanged
+ assertThat(request.getRequiredPermissionsForSchemaTypeVisibility())
+ .containsExactly(
+ "Schema1", ImmutableSet.of(
+ ImmutableSet.of(
+ SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(
+ SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)),
+ "Schema2", ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE)
+ )
+ );
+ }
+
+ @Test
public void testSchemaTypeVisibilityForPackage_visible() {
AppSearchSchema schema = new AppSearchSchema.Builder("Schema").build();
@@ -380,6 +461,29 @@
}
@Test
+ public void testSetDocumentClassVisibleForPermission() throws Exception {
+ // By default, the schema is displayed.
+ SetSchemaRequest request =
+ new SetSchemaRequest.Builder().addDocumentClasses(Card.class).build();
+ assertThat(request.getRequiredPermissionsForSchemaTypeVisibility()).isEmpty();
+
+ SetSchemaRequest.Builder setSchemaRequestBuilder = new SetSchemaRequest.Builder()
+ .addDocumentClasses(Card.class)
+ .addRequiredPermissionsForDocumentClassVisibility(Card.class,
+ ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR))
+ .addRequiredPermissionsForDocumentClassVisibility(Card.class,
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA));
+ request = setSchemaRequestBuilder.build();
+
+ assertThat(request.getRequiredPermissionsForSchemaTypeVisibility())
+ .containsExactly("Card", ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_SMS,
+ SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(SetSchemaRequest
+ .READ_HOME_APP_SEARCH_DATA)));
+ }
+
+ @Test
public void testSetDocumentClassVisibilityForPackage_visible() throws Exception {
// By default, the schema is not visible.
SetSchemaRequest request =
@@ -478,6 +582,58 @@
"King");
}
+ @Test
+ public void testClearDocumentClassVisibleForPermissions() throws Exception {
+ SetSchemaRequest.Builder setSchemaRequestBuilder = new SetSchemaRequest.Builder()
+ .addDocumentClasses(King.class, Queen.class)
+ .addRequiredPermissionsForDocumentClassVisibility(
+ King.class,
+ ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR))
+ .addRequiredPermissionsForDocumentClassVisibility(
+ King.class,
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA))
+ .addRequiredPermissionsForDocumentClassVisibility(
+ Queen.class,
+ ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE));
+
+ SetSchemaRequest request = setSchemaRequestBuilder.build();
+
+ assertThat(request.getRequiredPermissionsForSchemaTypeVisibility())
+ .containsExactly(
+ "King", ImmutableSet.of(
+ ImmutableSet.of(
+ SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(
+ SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)),
+ "Queen", ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE)
+ )
+ );
+
+ // Clear the permissions in the builder
+ setSchemaRequestBuilder.clearRequiredPermissionsForDocumentClassVisibility(King.class);
+
+ // New object should be updated
+ assertThat(setSchemaRequestBuilder.build().getRequiredPermissionsForSchemaTypeVisibility())
+ .containsExactly(
+ "Queen", ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE)
+ )
+ );
+
+ // Old object should remain unchanged
+ assertThat(request.getRequiredPermissionsForSchemaTypeVisibility())
+ .containsExactly(
+ "King", ImmutableSet.of(
+ ImmutableSet.of(
+ SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(
+ SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)),
+ "Queen", ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_EXTERNAL_STORAGE)
+ )
+ );
+ }
// @exportToFramework:endStrip()
@Test
@@ -498,4 +654,130 @@
assertThat(exception).hasMessageThat().contains(
"Cannot set version to the request if schema is empty.");
}
+
+ @Test
+ public void testRebuild() {
+ byte[] sha256cert1 = new byte[32];
+ byte[] sha256cert2 = new byte[32];
+ Arrays.fill(sha256cert1, (byte) 1);
+ Arrays.fill(sha256cert2, (byte) 2);
+ PackageIdentifier packageIdentifier1 = new PackageIdentifier("Email", sha256cert1);
+ PackageIdentifier packageIdentifier2 = new PackageIdentifier("Email", sha256cert2);
+ AppSearchSchema schema1 = new AppSearchSchema.Builder("Email1")
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("subject")
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .setIndexingType(
+ AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build()
+ ).build();
+ AppSearchSchema schema2 = new AppSearchSchema.Builder("Email2")
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("subject")
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .setIndexingType(
+ AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build()
+ ).build();
+
+ SetSchemaRequest.Builder builder = new SetSchemaRequest.Builder()
+ .addSchemas(schema1)
+ .setVersion(37)
+ .setSchemaTypeDisplayedBySystem("Email1", /*displayed=*/false)
+ .setSchemaTypeVisibilityForPackage(
+ "Email1", /*visible=*/true, packageIdentifier1)
+ .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+ ImmutableSet.of(SetSchemaRequest.READ_SMS,
+ SetSchemaRequest.READ_CALENDAR))
+ .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA));
+
+ SetSchemaRequest original = builder.build();
+ SetSchemaRequest rebuild = builder.addSchemas(schema2)
+ .setVersion(42)
+ .setSchemaTypeDisplayedBySystem("Email2", /*displayed=*/false)
+ .setSchemaTypeVisibilityForPackage(
+ "Email2", /*visible=*/true, packageIdentifier2)
+ .addRequiredPermissionsForSchemaTypeVisibility("Email2",
+ ImmutableSet.of(SetSchemaRequest.READ_CONTACTS,
+ SetSchemaRequest.READ_EXTERNAL_STORAGE))
+ .addRequiredPermissionsForSchemaTypeVisibility("Email2",
+ ImmutableSet.of(SetSchemaRequest.READ_ASSISTANT_APP_SEARCH_DATA))
+ .build();
+
+ assertThat(original.getSchemas()).containsExactly(schema1);
+ assertThat(original.getVersion()).isEqualTo(37);
+ assertThat(original.getSchemasNotDisplayedBySystem()).containsExactly("Email1");
+ assertThat(original.getSchemasVisibleToPackages()).containsExactly(
+ "Email1", ImmutableSet.of(packageIdentifier1));
+ assertThat(original.getRequiredPermissionsForSchemaTypeVisibility()).containsExactly(
+ "Email1",
+ ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_SMS,
+ SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)));
+
+ assertThat(rebuild.getSchemas()).containsExactly(schema1, schema2);
+ assertThat(rebuild.getVersion()).isEqualTo(42);
+ assertThat(rebuild.getSchemasNotDisplayedBySystem()).containsExactly("Email1", "Email2");
+ assertThat(rebuild.getSchemasVisibleToPackages()).containsExactly(
+ "Email1", ImmutableSet.of(packageIdentifier1),
+ "Email2", ImmutableSet.of(packageIdentifier2));
+ assertThat(rebuild.getRequiredPermissionsForSchemaTypeVisibility()).containsExactly(
+ "Email1",
+ ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_SMS,
+ SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)),
+ "Email2",
+ ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_CONTACTS,
+ SetSchemaRequest.READ_EXTERNAL_STORAGE),
+ ImmutableSet.of(SetSchemaRequest.READ_ASSISTANT_APP_SEARCH_DATA)));
+ }
+
+ @Test
+ public void getAndModify() {
+ byte[] sha256cert1 = new byte[32];
+ byte[] sha256cert2 = new byte[32];
+ Arrays.fill(sha256cert1, (byte) 1);
+ Arrays.fill(sha256cert2, (byte) 2);
+ PackageIdentifier packageIdentifier1 = new PackageIdentifier("Email", sha256cert1);
+ PackageIdentifier packageIdentifier2 = new PackageIdentifier("Email", sha256cert2);
+ AppSearchSchema schema1 = new AppSearchSchema.Builder("Email1")
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("subject")
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .setIndexingType(
+ AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES)
+ .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_PLAIN)
+ .build()
+ ).build();
+
+ SetSchemaRequest request = new SetSchemaRequest.Builder()
+ .addSchemas(schema1)
+ .setVersion(37)
+ .setSchemaTypeDisplayedBySystem("Email1", /*displayed=*/false)
+ .setSchemaTypeVisibilityForPackage(
+ "Email1", /*visible=*/true, packageIdentifier1)
+ .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+ ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR))
+ .addRequiredPermissionsForSchemaTypeVisibility("Email1",
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA))
+ .build();
+
+ // get the visibility setting and modify the output object.
+ // skip getSchemasNotDisplayedBySystem since it returns an unmodifiable object.
+ request.getSchemasVisibleToPackages().put("Email2", ImmutableSet.of(packageIdentifier2));
+ request.getRequiredPermissionsForSchemaTypeVisibility().put("Email2",
+ ImmutableSet.of(ImmutableSet.of(SetSchemaRequest.READ_CALENDAR)));
+
+ // verify we still get the original object.
+ assertThat(request.getSchemasVisibleToPackages()).containsExactly("Email1",
+ ImmutableSet.of(packageIdentifier1));
+ assertThat(request.getRequiredPermissionsForSchemaTypeVisibility()).containsExactly(
+ "Email1",
+ ImmutableSet.of(
+ ImmutableSet.of(SetSchemaRequest.READ_SMS, SetSchemaRequest.READ_CALENDAR),
+ ImmutableSet.of(SetSchemaRequest.READ_HOME_APP_SEARCH_DATA)));
+ }
}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/DocumentChangeInfoCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/DocumentChangeInfoCtsTest.java
new file mode 100644
index 0000000..06f1bd4
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/DocumentChangeInfoCtsTest.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.cts.observer;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.appsearch.observer.DocumentChangeInfo;
+
+import com.google.common.collect.ImmutableSet;
+
+import org.junit.Test;
+
+public class DocumentChangeInfoCtsTest {
+ @Test
+ public void testConstructor() {
+ DocumentChangeInfo DocumentChangeInfo = new DocumentChangeInfo(
+ "packageName",
+ "databaseName",
+ "namespace",
+ "SchemaName",
+ ImmutableSet.of("documentId1", "documentId2"));
+ assertThat(DocumentChangeInfo.getPackageName()).isEqualTo("packageName");
+ assertThat(DocumentChangeInfo.getDatabaseName()).isEqualTo("databaseName");
+ assertThat(DocumentChangeInfo.getNamespace()).isEqualTo("namespace");
+ assertThat(DocumentChangeInfo.getSchemaName()).isEqualTo("SchemaName");
+ assertThat(DocumentChangeInfo.getChangedDocumentIds())
+ .containsExactly("documentId1", "documentId2");
+ }
+
+ @Test
+ public void testEqualsAndHasCode() {
+ DocumentChangeInfo info1Copy1 = new DocumentChangeInfo(
+ "packageName",
+ "databaseName",
+ "namespace",
+ "SchemaName",
+ ImmutableSet.of("documentId1", "documentId2"));
+ DocumentChangeInfo info1Copy2 = new DocumentChangeInfo(
+ "packageName",
+ "databaseName",
+ "namespace",
+ "SchemaName",
+ ImmutableSet.of("documentId1", "documentId2"));
+ DocumentChangeInfo info2 = new DocumentChangeInfo(
+ "packageName",
+ "databaseName",
+ "namespace",
+ "SchemaName",
+ ImmutableSet.of("documentId3", "documentId2"));
+
+ assertThat(info1Copy1).isEqualTo(info1Copy2);
+ assertThat(info1Copy1.hashCode()).isEqualTo(info1Copy2.hashCode());
+ assertThat(info1Copy1).isNotEqualTo(info2);
+ assertThat(info1Copy1.hashCode()).isNotEqualTo(info2.hashCode());
+ }
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/ObserverSpecCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/ObserverSpecCtsTest.java
new file mode 100644
index 0000000..ae321af
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/ObserverSpecCtsTest.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.cts.observer;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.appsearch.annotation.Document;
+import androidx.appsearch.observer.ObserverSpec;
+
+import com.google.common.collect.ImmutableSet;
+
+import org.junit.Test;
+
+public class ObserverSpecCtsTest {
+ @Test
+ public void testFilterSchemas() {
+ ObserverSpec observerSpec = new ObserverSpec.Builder()
+ .addFilterSchemas("Schema1", "Schema2")
+ .addFilterSchemas(ImmutableSet.of("Schema3", "Schema4"))
+ .build();
+ assertThat(observerSpec.getFilterSchemas()).containsExactly(
+ "Schema1", "Schema2", "Schema3", "Schema4");
+ }
+
+// @exportToFramework:startStrip()
+
+ @Document
+ public static class King {
+ @Document.Namespace String mNamespace;
+ @Document.Id String mId;
+ }
+
+ @Document
+ public static class Queen {
+ @Document.Namespace String mNamespace;
+ @Document.Id String mId;
+ }
+
+ @Document
+ public static class Jack {
+ @Document.Namespace String mNamespace;
+ @Document.Id String mId;
+ }
+
+ @Document
+ public static class Ace {
+ @Document.Namespace String mNamespace;
+ @Document.Id String mId;
+ }
+
+ @Test
+ public void testFilterSchemas_documentClass() throws Exception {
+ ObserverSpec observerSpec = new ObserverSpec.Builder()
+ .addFilterSchemas("Schema1", "Schema2")
+ .addFilterDocumentClasses(King.class, Queen.class)
+ .addFilterSchemas(ImmutableSet.of("Schema3", "Schema4"))
+ .addFilterDocumentClasses(ImmutableSet.of(Jack.class, Ace.class))
+ .build();
+ assertThat(observerSpec.getFilterSchemas()).containsExactly(
+ "Schema1", "Schema2", "King", "Queen", "Schema3", "Schema4", "Jack", "Ace");
+ }
+
+// @exportToFramework:endStrip()
+}
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/SchemaChangeInfoCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/SchemaChangeInfoCtsTest.java
new file mode 100644
index 0000000..3289177
--- /dev/null
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/observer/SchemaChangeInfoCtsTest.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.cts.observer;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.appsearch.observer.SchemaChangeInfo;
+
+import com.google.common.collect.ImmutableSet;
+
+import org.junit.Test;
+
+public class SchemaChangeInfoCtsTest {
+ @Test
+ public void testConstructor() {
+ SchemaChangeInfo schemaChangeInfo = new SchemaChangeInfo(
+ "packageName", "databaseName", ImmutableSet.of("schemaName1", "schemaName2"));
+ assertThat(schemaChangeInfo.getPackageName()).isEqualTo("packageName");
+ assertThat(schemaChangeInfo.getDatabaseName()).isEqualTo("databaseName");
+ assertThat(schemaChangeInfo.getChangedSchemaNames())
+ .containsExactly("schemaName1", "schemaName2");
+ }
+
+ @Test
+ public void testEqualsAndHasCode() {
+ SchemaChangeInfo info1Copy1 = new SchemaChangeInfo(
+ "packageName", "databaseName", ImmutableSet.of("schemaName1", "schemaName2"));
+ SchemaChangeInfo info1Copy2 = new SchemaChangeInfo(
+ "packageName", "databaseName", ImmutableSet.of("schemaName1", "schemaName2"));
+ SchemaChangeInfo info2 = new SchemaChangeInfo(
+ "packageName", "databaseName", ImmutableSet.of("schemaName3", "schemaName2"));
+
+ assertThat(info1Copy1).isEqualTo(info1Copy2);
+ assertThat(info1Copy1.hashCode()).isEqualTo(info1Copy2.hashCode());
+ assertThat(info1Copy1).isNotEqualTo(info2);
+ assertThat(info1Copy1.hashCode()).isNotEqualTo(info2.hashCode());
+ }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java b/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java
index 527127f..ef685c1 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/annotation/Document.java
@@ -220,7 +220,7 @@
* <p>This attribute does not apply to properties of a repeated type (e.g. a list).
*
* <p>Please make sure you understand the consequences of required fields on
- * {@link androidx.appsearch.app.AppSearchSession#setSchema schema migration} before setting
+ * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync schema migration} before setting
* this attribute to {@code true}.
*/
boolean required() default false;
@@ -256,7 +256,7 @@
* <p>This attribute does not apply to properties of a repeated type (e.g. a list).
*
* <p>Please make sure you understand the consequences of required fields on
- * {@link androidx.appsearch.app.AppSearchSession#setSchema schema migration} before setting
+ * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync schema migration} before setting
* this attribute to {@code true}.
*/
boolean required() default false;
@@ -280,7 +280,7 @@
* <p>This attribute does not apply to properties of a repeated type (e.g. a list).
*
* <p>Please make sure you understand the consequences of required fields on
- * {@link androidx.appsearch.app.AppSearchSession#setSchema schema migration} before setting
+ * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync schema migration} before setting
* this attribute to {@code true}.
*/
boolean required() default false;
@@ -307,7 +307,7 @@
* <p>This attribute does not apply to properties of a repeated type (e.g. a list).
*
* <p>Please make sure you understand the consequences of required fields on
- * {@link androidx.appsearch.app.AppSearchSession#setSchema schema migration} before setting
+ * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync schema migration} before setting
* this attribute to {@code true}.
*/
boolean required() default false;
@@ -331,7 +331,7 @@
* <p>This attribute does not apply to properties of a repeated type (e.g. a list).
*
* <p>Please make sure you understand the consequences of required fields on
- * {@link androidx.appsearch.app.AppSearchSession#setSchema schema migration} before setting
+ * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync schema migration} before setting
* this attribute to {@code true}.
*/
boolean required() default false;
@@ -355,7 +355,7 @@
* <p>This attribute does not apply to properties of a repeated type (e.g. a list).
*
* <p>Please make sure you understand the consequences of required fields on
- * {@link androidx.appsearch.app.AppSearchSession#setSchema schema migration} before setting
+ * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync schema migration} before setting
* this attribute to {@code true}.
*/
boolean required() default false;
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchBatchResult.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchBatchResult.java
index 4b6ee7c..3cdf6ce 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchBatchResult.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchBatchResult.java
@@ -37,9 +37,9 @@
* @param <KeyType> The type of the keys for which the results will be reported.
* @param <ValueType> The type of the result objects for successful results.
*
- * @see AppSearchSession#put
- * @see AppSearchSession#getByDocumentId
- * @see AppSearchSession#remove
+ * @see AppSearchSession#putAsync
+ * @see AppSearchSession#getByDocumentIdAsync
+ * @see AppSearchSession#removeAsync
*/
public final class AppSearchBatchResult<KeyType, ValueType> {
@NonNull private final Map<KeyType, ValueType> mSuccesses;
@@ -64,9 +64,9 @@
* Returns a {@link Map} of keys mapped to instances of the value type for all successful
* individual results.
*
- * <p>Example: {@link AppSearchSession#getByDocumentId} returns an {@link AppSearchBatchResult}.
- * Each key (the document ID, of {@code String} type) will map to a {@link GenericDocument}
- * object.
+ * <p>Example: {@link AppSearchSession#getByDocumentIdAsync} returns an
+ * {@link AppSearchBatchResult}. Each key (the document ID, of {@code String} type) will map to
+ * a {@link GenericDocument} object.
*
* <p>The values of the {@link Map} will not be {@code null}.
*/
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchResult.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchResult.java
index b204447..31b0a88 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchResult.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchResult.java
@@ -22,6 +22,7 @@
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.util.LogUtil;
import androidx.core.util.ObjectsCompat;
import androidx.core.util.Preconditions;
@@ -219,12 +220,15 @@
public static <ValueType> AppSearchResult<ValueType> throwableToFailedResult(
@NonNull Throwable t) {
// Log for traceability. NOT_FOUND is logged at VERBOSE because this error can occur during
- // the regular operation of the system (b/183550974). Everything else is logged at DEBUG.
+ // the regular operation of the system (b/183550974). Everything else is indicative of an
+ // actual problem and is logged at WARN.
if (t instanceof AppSearchException
&& ((AppSearchException) t).getResultCode() == RESULT_NOT_FOUND) {
- Log.v(TAG, "Converting throwable to failed result: " + t);
+ if (LogUtil.DEBUG) {
+ Log.v(TAG, "Converting throwable to failed result: " + t);
+ }
} else {
- Log.d(TAG, "Converting throwable to failed result.", t);
+ Log.w(TAG, "Converting throwable to failed result.", t);
}
if (t instanceof AppSearchException) {
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSchema.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSchema.java
index 84795f9..c3e8b5e 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSchema.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSchema.java
@@ -44,7 +44,7 @@
*
* <p>The schema consists of type information, properties, and config (like tokenization type).
*
- * @see AppSearchSession#setSchema
+ * @see AppSearchSession#setSchemaAsync
*/
public final class AppSearchSchema {
private static final String SCHEMA_TYPE_FIELD = "schemaType";
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSession.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSession.java
index d423da0..a8d9713 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSession.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchSession.java
@@ -19,10 +19,12 @@
import android.annotation.SuppressLint;
import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
import com.google.common.util.concurrent.ListenableFuture;
import java.io.Closeable;
+import java.util.List;
import java.util.Set;
/**
@@ -32,7 +34,8 @@
* a schema, adding documents, and searching.
*
* <p>Instances of this interface are usually obtained from a storage implementation, e.g.
- * {@code LocalStorage.createSearchSession()} or {@code PlatformStorage.createSearchSession()}.
+ * {@code LocalStorage.createSearchSessionAsync()} or
+ * {@code PlatformStorage.createSearchSessionAsync()}.
*
* <p>All implementations of this interface must be thread safe.
*
@@ -44,42 +47,75 @@
* Sets the schema that represents the organizational structure of data within the AppSearch
* database.
*
- * <p>Upon creating an {@link AppSearchSession}, {@link #setSchema} should be called. If the
- * schema needs to be updated, or it has not been previously set, then the provided schema
- * will be saved and persisted to disk. Otherwise, {@link #setSchema} is handled efficiently
- * as a no-op call.
+ * <p>Upon creating an {@link AppSearchSession}, {@link #setSchemaAsync} should be called. If
+ * the schema needs to be updated, or it has not been previously set, then the provided schema
+ * will be saved and persisted to disk. Otherwise, {@link #setSchemaAsync} is handled
+ * efficiently as a no-op call.
*
* @param request the schema to set or update the AppSearch database to.
* @return a {@link ListenableFuture} which resolves to a {@link SetSchemaResponse} object.
*/
@NonNull
- ListenableFuture<SetSchemaResponse> setSchema(
- @NonNull SetSchemaRequest request);
+ ListenableFuture<SetSchemaResponse> setSchemaAsync(@NonNull SetSchemaRequest request);
/**
- * Retrieves the schema most recently successfully provided to {@link #setSchema}.
+ * @deprecated use {@link #setSchemaAsync}
+ * @param request the schema to set or update the AppSearch database to.
+ * @return a {@link ListenableFuture} which resolves to a {@link SetSchemaResponse} object.
+ */
+ @NonNull
+ @Deprecated
+ default ListenableFuture<SetSchemaResponse> setSchema(
+ @NonNull SetSchemaRequest request) {
+ return setSchemaAsync(request);
+ }
+
+ /**
+ * Retrieves the schema most recently successfully provided to {@link #setSchemaAsync}.
*
* @return The pending {@link GetSchemaResponse} of performing this operation.
*/
// This call hits disk; async API prevents us from treating these calls as properties.
@SuppressLint("KotlinPropertyAccess")
@NonNull
- ListenableFuture<GetSchemaResponse> getSchema();
+ ListenableFuture<GetSchemaResponse> getSchemaAsync();
+
+ /**
+ * @deprecated use {@link #getSchemaAsync}
+ *
+ * @return The pending {@link GetSchemaResponse} of performing this operation.
+ */
+ // This call hits disk; async API prevents us from treating these calls as properties.
+ @SuppressLint("KotlinPropertyAccess")
+ @NonNull
+ @Deprecated
+ default ListenableFuture<GetSchemaResponse> getSchema() {
+ return getSchemaAsync();
+ }
/**
* Retrieves the set of all namespaces in the current database with at least one document.
*
- * @return The pending result of performing this operation.
- */
+ * @return The pending result of performing this operation. */
@NonNull
- ListenableFuture<Set<String>> getNamespaces();
+ ListenableFuture<Set<String>> getNamespacesAsync();
+
+ /**
+ * @deprecated use {@link #getNamespacesAsync()}
+ *
+ * @return The pending result of performing this operation. */
+ @NonNull
+ @Deprecated
+ default ListenableFuture<Set<String>> getNamespaces() {
+ return getNamespacesAsync();
+ }
/**
* Indexes documents into the {@link AppSearchSession} database.
*
* <p>Each {@link GenericDocument} object must have a {@code schemaType} field set to an
* {@link AppSearchSchema} type that has been previously registered by calling the
- * {@link #setSchema} method.
+ * {@link #setSchemaAsync} method.
*
* @param request containing documents to be indexed.
* @return a {@link ListenableFuture} which resolves to an {@link AppSearchBatchResult}.
@@ -88,7 +124,24 @@
* or a failed {@link AppSearchResult} otherwise.
*/
@NonNull
- ListenableFuture<AppSearchBatchResult<String, Void>> put(@NonNull PutDocumentsRequest request);
+ ListenableFuture<AppSearchBatchResult<String, Void>> putAsync(
+ @NonNull PutDocumentsRequest request);
+
+ /**
+ * @deprecated use {@link #putAsync}
+ *
+ * @param request containing documents to be indexed.
+ * @return a {@link ListenableFuture} which resolves to an {@link AppSearchBatchResult}.
+ * The keys of the returned {@link AppSearchBatchResult} are the IDs of the input documents.
+ * The values are either {@code null} if the corresponding document was successfully indexed,
+ * or a failed {@link AppSearchResult} otherwise.
+ */
+ @NonNull
+ @Deprecated
+ default ListenableFuture<AppSearchBatchResult<String, Void>> put(
+ @NonNull PutDocumentsRequest request) {
+ return putAsync(request);
+ }
/**
* Gets {@link GenericDocument} objects by document IDs in a namespace from the
@@ -104,10 +157,29 @@
* {@link AppSearchResult#RESULT_NOT_FOUND}.
*/
@NonNull
- ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentId(
+ ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentIdAsync(
@NonNull GetByDocumentIdRequest request);
/**
+ * @deprecated use {@link #getByDocumentIdAsync}
+ *
+ * @param request a request containing a namespace and IDs to get documents for.
+ * @return A {@link ListenableFuture} which resolves to an {@link AppSearchBatchResult}.
+ * The keys of the {@link AppSearchBatchResult} represent the input document IDs from the
+ * {@link GetByDocumentIdRequest} object. The values are either the corresponding
+ * {@link GenericDocument} object for the ID on success, or an {@link AppSearchResult}
+ * object on failure. For example, if an ID is not found, the value for that ID will be set
+ * to an {@link AppSearchResult} object with result code:
+ * {@link AppSearchResult#RESULT_NOT_FOUND}.
+ */
+ @NonNull
+ @Deprecated
+ default ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentId(
+ @NonNull GetByDocumentIdRequest request) {
+ return getByDocumentIdAsync(request);
+ }
+
+ /**
* Retrieves documents from the open {@link AppSearchSession} that match a given query string
* and type of search provided.
*
@@ -164,7 +236,7 @@
* adding projection, can be set by calling the corresponding {@link SearchSpec.Builder} setter.
*
* <p>This method is lightweight. The heavy work will be done in
- * {@link SearchResults#getNextPage}.
+ * {@link SearchResults#getNextPageAsync}.
*
* @param queryExpression query string to search.
* @param searchSpec spec for setting document filters, adding projection, setting term
@@ -175,13 +247,87 @@
SearchResults search(@NonNull String queryExpression, @NonNull SearchSpec searchSpec);
/**
+ * Retrieves suggested Strings that could be used as {@code queryExpression} in
+ * {@link #search(String, SearchSpec)} API.
+ *
+ * <p>The {@code suggestionQueryExpression} can contain one term with no operators, or contain
+ * multiple terms and operators. Operators will be considered as a normal term. Please see the
+ * operator examples below. The {@code suggestionQueryExpression} must end with a valid term,
+ * the suggestions are generated based on the last term. If the input
+ * {@code suggestionQueryExpression} doesn't have a valid token, AppSearch will return an
+ * empty result list. Please see the invalid examples below.
+ *
+ * <p>Example: if there are following documents with content stored in AppSearch.
+ * <ul>
+ * <li>document1: "term1"
+ * <li>document2: "term1 term2"
+ * <li>document3: "term1 term2 term3"
+ * <li>document4: "org"
+ * </ul>
+ *
+ * <p>Search suggestions with the single term {@code suggestionQueryExpression} "t", the
+ * suggested results are:
+ * <ul>
+ * <li>"term1" - Use it to be queryExpression in {@link #search} could get 3
+ * {@link SearchResult}s, which contains document 1, 2 and 3.
+ * <li>"term2" - Use it to be queryExpression in {@link #search} could get 2
+ * {@link SearchResult}s, which contains document 2 and 3.
+ * <li>"term3" - Use it to be queryExpression in {@link #search} could get 1
+ * {@link SearchResult}, which contains document 3.
+ * </ul>
+ *
+ * <p>Search suggestions with the multiple term {@code suggestionQueryExpression} "org t", the
+ * suggested result will be "org term1" - The last token is completed by the suggested
+ * String, even if it won't return any result.
+ *
+ * <p>Search suggestions with operators. All operators will be considered as a normal term.
+ * <ul>
+ * <li>Search suggestions with the {@code suggestionQueryExpression} "term1 OR", the
+ * suggested result is "term1 org".
+ * <li>Search suggestions with the {@code suggestionQueryExpression} "term3 OR t", the
+ * suggested result is "term3 OR term1".
+ * <li>Search suggestions with the {@code suggestionQueryExpression} "content:t", the
+ * suggested result is empty. It cannot find a document that contains the term "content:t".
+ * </ul>
+ *
+ * <p>Invalid example: All these input {@code suggestionQueryExpression} don't have a valid
+ * last token, AppSearch will return an empty result list.
+ * <ul>
+ * <li>"" - Empty {@code suggestionQueryExpression}.
+ * <li>"(f)" - Ending in a closed brackets.
+ * <li>"f:" - Ending in an operator.
+ * <li>"f " - Ending in trailing space.
+ * </ul>
+ *
+ * @param suggestionQueryExpression the non empty query string to search suggestions
+ * @param searchSuggestionSpec spec for setting document filters
+ * @return The pending result of performing this operation which resolves to a List of
+ * {@link SearchSuggestionResult} on success. The returned suggestion Strings are
+ * ordered by the number of {@link SearchResult} you could get by using that suggestion
+ * in {@link #search}.
+ *
+ * @see #search(String, SearchSpec)
+ * @hide
+ */
+ //TODO(b/227356108) un-hide this API after fix following issues.
+ // 1: support property restrict tokenization, Example: [subject:car] will return ["cart",
+ // "carburetor"] if AppSearch has documents contain those terms.
+ // 2: support multiple terms, Example: [bar f] will return suggestions [bar foo] that could
+ // be used to retrieve documents that contain both terms "bar" and "foo".
+ @NonNull
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ ListenableFuture<List<SearchSuggestionResult>> searchSuggestionAsync(
+ @NonNull String suggestionQueryExpression,
+ @NonNull SearchSuggestionSpec searchSuggestionSpec);
+
+ /**
* Reports usage of a particular document by namespace and ID.
*
* <p>A usage report represents an event in which a user interacted with or viewed a document.
*
- * <p>For each call to {@link #reportUsage}, AppSearch updates usage count and usage recency
- * metrics for that particular document. These metrics are used for ordering {@link #search}
- * results by the {@link SearchSpec#RANKING_STRATEGY_USAGE_COUNT} and
+ * <p>For each call to {@link #reportUsageAsync}, AppSearch updates usage count and usage
+ * recency * metrics for that particular document. These metrics are used for ordering
+ * {@link #search} results by the {@link SearchSpec#RANKING_STRATEGY_USAGE_COUNT} and
* {@link SearchSpec#RANKING_STRATEGY_USAGE_LAST_USED_TIMESTAMP} ranking strategies.
*
* <p>Reporting usage of a document is optional.
@@ -191,14 +337,27 @@
* success.
*/
@NonNull
- ListenableFuture<Void> reportUsage(@NonNull ReportUsageRequest request);
+ ListenableFuture<Void> reportUsageAsync(@NonNull ReportUsageRequest request);
+
+ /**
+ * @deprecated use {@link #reportUsageAsync}
+ *
+ * @param request The usage reporting request.
+ * @return The pending result of performing this operation which resolves to {@code null} on
+ * success.
+ */
+ @NonNull
+ @Deprecated
+ default ListenableFuture<Void> reportUsage(@NonNull ReportUsageRequest request) {
+ return reportUsageAsync(request);
+ }
/**
* Removes {@link GenericDocument} objects by document IDs in a namespace from the
* {@link AppSearchSession} database.
*
* <p>Removed documents will no longer be surfaced by {@link #search} or
- * {@link #getByDocumentId}
+ * {@link #getByDocumentIdAsync}
* calls.
*
* <p>Once the database crosses the document count or byte usage threshold, removed documents
@@ -213,10 +372,28 @@
* {@link AppSearchResult} with a result code of {@link AppSearchResult#RESULT_NOT_FOUND}.
*/
@NonNull
- ListenableFuture<AppSearchBatchResult<String, Void>> remove(
+ ListenableFuture<AppSearchBatchResult<String, Void>> removeAsync(
@NonNull RemoveByDocumentIdRequest request);
/**
+ * @deprecated use {@link #removeAsync}
+ *
+ * @param request {@link RemoveByDocumentIdRequest} with IDs in a namespace to remove from the
+ * index.
+ * @return a {@link ListenableFuture} which resolves to an {@link AppSearchBatchResult}.
+ * The keys of the {@link AppSearchBatchResult} represent the input IDs from the
+ * {@link RemoveByDocumentIdRequest} object. The values are either {@code null} on success,
+ * or a failed {@link AppSearchResult} otherwise. IDs that are not found will return a failed
+ * {@link AppSearchResult} with a result code of {@link AppSearchResult#RESULT_NOT_FOUND}.
+ */
+ @NonNull
+ @Deprecated
+ default ListenableFuture<AppSearchBatchResult<String, Void>> remove(
+ @NonNull RemoveByDocumentIdRequest request) {
+ return removeAsync(request);
+ }
+
+ /**
* Removes {@link GenericDocument}s from the index by Query. Documents will be removed if they
* match the {@code queryExpression} in given namespaces and schemaTypes which is set via
* {@link SearchSpec.Builder#addFilterNamespaces} and
@@ -234,7 +411,24 @@
* @return The pending result of performing this operation.
*/
@NonNull
- ListenableFuture<Void> remove(@NonNull String queryExpression, @NonNull SearchSpec searchSpec);
+ ListenableFuture<Void> removeAsync(@NonNull String queryExpression,
+ @NonNull SearchSpec searchSpec);
+
+ /**
+ * @deprecated use {@link #removeAsync}
+ *
+ * @param queryExpression Query String to search.
+ * @param searchSpec Spec containing schemaTypes, namespaces and query expression
+ * indicates how document will be removed. All specific about how to
+ * scoring, ordering, snippeting and resulting will be ignored.
+ * @return The pending result of performing this operation.
+ */
+ @NonNull
+ @Deprecated
+ default ListenableFuture<Void> remove(@NonNull String queryExpression,
+ @NonNull SearchSpec searchSpec) {
+ return removeAsync(queryExpression, searchSpec);
+ }
/**
* Gets the storage info for this {@link AppSearchSession} database.
@@ -245,7 +439,18 @@
* @return a {@link ListenableFuture} which resolves to a {@link StorageInfo} object.
*/
@NonNull
- ListenableFuture<StorageInfo> getStorageInfo();
+ ListenableFuture<StorageInfo> getStorageInfoAsync();
+
+ /**
+ * @deprecated use {@link #getStorageInfoAsync()}
+ *
+ * @return a {@link ListenableFuture} which resolves to a {@link StorageInfo} object.
+ */
+ @NonNull
+ @Deprecated
+ default ListenableFuture<StorageInfo> getStorageInfo() {
+ return getStorageInfoAsync();
+ }
/**
* Flush all schema and document updates, additions, and deletes to disk if possible.
@@ -259,7 +464,21 @@
* save to disk.
*/
@NonNull
- ListenableFuture<Void> requestFlush();
+ ListenableFuture<Void> requestFlushAsync();
+
+ /**
+ * @deprecated use {@link #requestFlushAsync()}
+ *
+ * @return The pending result of performing this operation.
+ * {@link androidx.appsearch.exceptions.AppSearchException} with
+ * {@link AppSearchResult#RESULT_INTERNAL_ERROR} will be set to the future if we hit error when
+ * save to disk.
+ */
+ @NonNull
+ @Deprecated
+ default ListenableFuture<Void> requestFlush() {
+ return requestFlushAsync();
+ }
/**
* Returns the {@link Features} to check for the availability of certain features
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
index 26ab787..dc530ee 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Features.java
@@ -24,9 +24,9 @@
* <p>Features do not depend on any runtime state, and features will never be removed. Once
* {@link #isFeatureSupported} returns {@code true} for a certain feature, it is safe to assume that
* the feature will be available forever on that AppSearch storage implementation, at that
- * Android API level, on that device form factor.
- * <!--@exportToFramework:hide-->
+ * Android API level, on that device.
*/
+// @exportToFramework:copyToPath(testing/testutils/src/android/app/appsearch/testutil/external/Features.java)
public interface Features {
/**
@@ -38,10 +38,35 @@
/**
* Feature for {@link #isFeatureSupported(String)}. This feature covers
- * {@link GlobalSearchSession#addObserver} and
- * {@link GlobalSearchSession#removeObserver}.
+ * {@link GlobalSearchSession#registerObserverCallback} and
+ * {@link GlobalSearchSession#unregisterObserverCallback}.
*/
- String GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER = "GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER";
+ String GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK =
+ "GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK";
+
+ /**
+ * Feature for {@link #isFeatureSupported(String)}. This feature covers
+ * {@link GlobalSearchSession#getSchemaAsync}.
+ */
+ String GLOBAL_SEARCH_SESSION_GET_SCHEMA = "GLOBAL_SEARCH_SESSION_GET_SCHEMA";
+
+ /**
+ * Feature for {@link #isFeatureSupported(String)}. This feature covers
+ * {@link GlobalSearchSession#getByDocumentIdAsync}.
+ */
+ String GLOBAL_SEARCH_SESSION_GET_BY_ID = "GLOBAL_SEARCH_SESSION_GET_BY_ID";
+
+ /**
+ * Feature for {@link #isFeatureSupported(String)}. This feature covers
+ * {@link SetSchemaRequest.Builder#addAllowedRoleForSchemaTypeVisibility},
+ * {@link SetSchemaRequest.Builder#clearAllowedRolesForSchemaTypeVisibility},
+ * {@link GetSchemaResponse#getSchemaTypesNotDisplayedBySystem()},
+ * {@link GetSchemaResponse#getSchemaTypesVisibleToPackages()},
+ * {@link GetSchemaResponse#getRequiredPermissionsForSchemaTypeVisibility()},
+ * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility} and
+ * {@link SetSchemaRequest.Builder#clearRequiredPermissionsForSchemaTypeVisibility}
+ */
+ String ADD_PERMISSIONS_AND_GET_VISIBILITY = "ADD_PERMISSIONS_AND_GET_VISIBILITY";
/**
* Returns whether a feature is supported at run-time. Feature support depends on the
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
index f1577f7..4f086da 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
@@ -26,6 +26,7 @@
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.appsearch.annotation.Document;
+import androidx.appsearch.app.PropertyPath.PathSegment;
import androidx.appsearch.exceptions.AppSearchException;
import androidx.appsearch.util.BundleUtil;
import androidx.appsearch.util.IndentingStringBuilder;
@@ -51,8 +52,8 @@
* <p>Documents are constructed by using the {@link GenericDocument.Builder}.
* -->
*
- * @see AppSearchSession#put
- * @see AppSearchSession#getByDocumentId
+ * @see AppSearchSession#putAsync
+ * @see AppSearchSession#getByDocumentIdAsync
* @see AppSearchSession#search
*/
public class GenericDocument {
@@ -81,7 +82,7 @@
*
* <p>Indexed properties are properties which are strings where the
* {@link AppSearchSchema.StringPropertyConfig#getIndexingType} value is anything other
- * than {@link AppSearchSchema.StringPropertyConfig.IndexingType#INDEXING_TYPE_NONE}.
+ * than {@link AppSearchSchema.StringPropertyConfig#INDEXING_TYPE_NONE}.
*/
public static int getMaxIndexedProperties() {
return MAX_INDEXED_PROPERTIES;
@@ -205,7 +206,7 @@
* time base, the document will be auto-deleted.
*
* <p>The default value is 0, which means the document is permanent and won't be auto-deleted
- * until the app is uninstalled or {@link AppSearchSession#remove} is called.
+ * until the app is uninstalled or {@link AppSearchSession#removeAsync} is called.
*/
public long getTtlMillis() {
return mBundle.getLong(TTL_MILLIS_FIELD, DEFAULT_TTL_MILLIS);
@@ -296,7 +297,8 @@
@Nullable
public Object getProperty(@NonNull String path) {
Preconditions.checkNotNull(path);
- Object rawValue = getRawPropertyFromRawDocument(path, mBundle);
+ Object rawValue =
+ getRawPropertyFromRawDocument(new PropertyPath(path), /*pathIndex=*/0, mBundle);
// Unpack the raw value into the types the user expects, if required.
if (rawValue instanceof Bundle) {
@@ -357,164 +359,138 @@
*
* <p>The return value may be any of GenericDocument's internal repeated storage types
* (String[], long[], double[], boolean[], ArrayList<Bundle>, Parcelable[]).
+ *
+ * <p>Usually, this method takes a path and loops over it to get a property from the bundle.
+ * But in the case where we collect documents across repeated nested documents, we need to
+ * recurse back into this method, and so we also keep track of the index into the path.
+ *
+ * @param path the PropertyPath object representing the path
+ * @param pathIndex the index into the path we start at
+ * @param documentBundle the bundle that contains the path we are looking up
+ * @return the raw property
*/
@Nullable
@SuppressWarnings("deprecation")
private static Object getRawPropertyFromRawDocument(
- @NonNull String path, @NonNull Bundle documentBundle) {
+ @NonNull PropertyPath path, int pathIndex, @NonNull Bundle documentBundle) {
Preconditions.checkNotNull(path);
Preconditions.checkNotNull(documentBundle);
Bundle properties = Preconditions.checkNotNull(documentBundle.getBundle(PROPERTIES_FIELD));
- // Determine whether the path is just a raw property name with no control characters
- int controlIdx = -1;
- boolean controlIsIndex = false;
- for (int i = 0; i < path.length(); i++) {
- char c = path.charAt(i);
- if (c == '[' || c == '.') {
- controlIdx = i;
- controlIsIndex = c == '[';
- break;
- }
- }
- // Look up the value of the first path element
- Object firstElementValue;
- if (controlIdx == -1) {
- firstElementValue = properties.get(path);
- } else {
- String name = path.substring(0, controlIdx);
- firstElementValue = properties.get(name);
- }
+ for (int i = pathIndex; i < path.size(); i++) {
+ PathSegment segment = path.get(i);
- // If the path has no further elements, we're done.
- if (firstElementValue == null || controlIdx == -1) {
- return firstElementValue;
- }
+ Object currentElementValue = properties.get(segment.getPropertyName());
- // At this point, for a path like "recipients[0]", firstElementValue contains the value of
- // "recipients". If the first element of the path is an indexed value, we now update
- // firstElementValue to contain "recipients[0]" instead.
- String remainingPath;
- if (!controlIsIndex) {
- // Remaining path is everything after the .
- remainingPath = path.substring(controlIdx + 1);
- } else {
- int endBracketIdx = path.indexOf(']', controlIdx);
- if (endBracketIdx == -1) {
- throw new IllegalArgumentException("Malformed path (no ending ']'): " + path);
- }
- if (endBracketIdx + 1 < path.length() && path.charAt(endBracketIdx + 1) != '.') {
- throw new IllegalArgumentException(
- "Malformed path (']' not followed by '.'): " + path);
- }
- String indexStr = path.substring(controlIdx + 1, endBracketIdx);
- int index = Integer.parseInt(indexStr);
- if (index < 0) {
- throw new IllegalArgumentException("Path index less than 0: " + path);
+ if (currentElementValue == null) {
+ return null;
}
- // Remaining path is everything after the [n]
- if (endBracketIdx + 1 < path.length()) {
- // More path remains, and we've already checked that charAt(endBracketIdx+1) == .
- remainingPath = path.substring(endBracketIdx + 2);
+ // If the current PathSegment has an index, we now need to update currentElementValue to
+ // contain the value of the indexed property. For example, for a path segment like
+ // "recipients[0]", currentElementValue now contains the value of "recipients" while we
+ // need the value of "recipients[0]".
+ int index = segment.getPropertyIndex();
+ if (index != PathSegment.NON_REPEATED_CARDINALITY) {
+ // Extract the right array element
+ Object extractedValue = null;
+ if (currentElementValue instanceof String[]) {
+ String[] stringValues = (String[]) currentElementValue;
+ if (index < stringValues.length) {
+ extractedValue = Arrays.copyOfRange(stringValues, index, index + 1);
+ }
+ } else if (currentElementValue instanceof long[]) {
+ long[] longValues = (long[]) currentElementValue;
+ if (index < longValues.length) {
+ extractedValue = Arrays.copyOfRange(longValues, index, index + 1);
+ }
+ } else if (currentElementValue instanceof double[]) {
+ double[] doubleValues = (double[]) currentElementValue;
+ if (index < doubleValues.length) {
+ extractedValue = Arrays.copyOfRange(doubleValues, index, index + 1);
+ }
+ } else if (currentElementValue instanceof boolean[]) {
+ boolean[] booleanValues = (boolean[]) currentElementValue;
+ if (index < booleanValues.length) {
+ extractedValue = Arrays.copyOfRange(booleanValues, index, index + 1);
+ }
+ } else if (currentElementValue instanceof List) {
+ @SuppressWarnings("unchecked")
+ List<Bundle> bundles = (List<Bundle>) currentElementValue;
+ if (index < bundles.size()) {
+ extractedValue = bundles.subList(index, index + 1);
+ }
+ } else if (currentElementValue instanceof Parcelable[]) {
+ // Special optimization: to avoid creating new singleton arrays for traversing
+ // paths we return the bare document Bundle in this particular case.
+ Parcelable[] bundles = (Parcelable[]) currentElementValue;
+ if (index < bundles.length) {
+ extractedValue = (Bundle) bundles[index];
+ }
+ } else {
+ throw new IllegalStateException("Unsupported value type: "
+ + currentElementValue);
+ }
+ currentElementValue = extractedValue;
+ }
+
+ // at the end of the path, either something like "...foo" or "...foo[1]"
+ if (currentElementValue == null || i == path.size() - 1) {
+ return currentElementValue;
+ }
+
+ // currentElementValue is now a Bundle or Parcelable[], we can continue down the path
+ if (currentElementValue instanceof Bundle) {
+ properties = ((Bundle) currentElementValue).getBundle(PROPERTIES_FIELD);
+ } else if (currentElementValue instanceof Parcelable[]) {
+ Parcelable[] parcelables = (Parcelable[]) currentElementValue;
+ if (parcelables.length == 1) {
+ properties = ((Bundle) parcelables[0]).getBundle(PROPERTIES_FIELD);
+ continue;
+ }
+
+ // Slowest path: we're collecting values across repeated nested docs. (Example:
+ // given a path like recipient.name, where recipient is a repeated field, we return
+ // a string array where each recipient's name is an array element).
+ //
+ // Performance note: Suppose that we have a property path "a.b.c" where the "a"
+ // property has N document values and each containing a "b" property with M document
+ // values and each of those containing a "c" property with an int array.
+ //
+ // We'll allocate a new ArrayList for each of the "b" properties, add the M int
+ // arrays from the "c" properties to it and then we'll allocate an int array in
+ // flattenAccumulator before returning that (1 + M allocation per "b" property).
+ //
+ // When we're on the "a" properties, we'll allocate an ArrayList and add the N
+ // flattened int arrays returned from the "b" properties to the list. Then we'll
+ // allocate an int array in flattenAccumulator (1 + N ("b" allocs) allocations per
+ // "a"). // So this implementation could incur 1 + N + NM allocs.
+ //
+ // However, we expect the vast majority of getProperty calls to be either for direct
+ // property names (not paths) or else property paths returned from snippetting,
+ // which always refer to exactly one property value and don't aggregate across
+ // repeated values. The implementation is optimized for these two cases, requiring
+ // no additional allocations. So we've decided that the above performance
+ // characteristics are OK for the less used path.
+ List<Object> accumulator = new ArrayList<>(parcelables.length);
+ for (Parcelable parcelable : parcelables) {
+ // recurse as we need to branch
+ Object value = getRawPropertyFromRawDocument(path, /*pathIndex=*/i + 1,
+ (Bundle) parcelable);
+ if (value != null) {
+ accumulator.add(value);
+ }
+ }
+ // Break the path traversing loop
+ return flattenAccumulator(accumulator);
} else {
- // No more path remains.
- remainingPath = null;
+ Log.e(TAG, "Failed to apply path to document; no nested value found: " + path);
+ return null;
}
-
- // Extract the right array element
- Object extractedValue = null;
- if (firstElementValue instanceof String[]) {
- String[] stringValues = (String[]) firstElementValue;
- if (index < stringValues.length) {
- extractedValue = Arrays.copyOfRange(stringValues, index, index + 1);
- }
- } else if (firstElementValue instanceof long[]) {
- long[] longValues = (long[]) firstElementValue;
- if (index < longValues.length) {
- extractedValue = Arrays.copyOfRange(longValues, index, index + 1);
- }
- } else if (firstElementValue instanceof double[]) {
- double[] doubleValues = (double[]) firstElementValue;
- if (index < doubleValues.length) {
- extractedValue = Arrays.copyOfRange(doubleValues, index, index + 1);
- }
- } else if (firstElementValue instanceof boolean[]) {
- boolean[] booleanValues = (boolean[]) firstElementValue;
- if (index < booleanValues.length) {
- extractedValue = Arrays.copyOfRange(booleanValues, index, index + 1);
- }
- } else if (firstElementValue instanceof List) {
- @SuppressWarnings("unchecked")
- List<Bundle> bundles = (List<Bundle>) firstElementValue;
- if (index < bundles.size()) {
- extractedValue = bundles.subList(index, index + 1);
- }
- } else if (firstElementValue instanceof Parcelable[]) {
- // Special optimization: to avoid creating new singleton arrays for traversing paths
- // we return the bare document Bundle in this particular case.
- Parcelable[] bundles = (Parcelable[]) firstElementValue;
- if (index < bundles.length) {
- extractedValue = (Bundle) bundles[index];
- }
- } else {
- throw new IllegalStateException("Unsupported value type: " + firstElementValue);
- }
- firstElementValue = extractedValue;
}
-
- // If we are at the end of the path or there are no deeper elements in this document, we
- // have nothing to recurse into.
- if (firstElementValue == null || remainingPath == null) {
- return firstElementValue;
- }
-
- // More of the path remains; recursively evaluate it
- if (firstElementValue instanceof Bundle) {
- return getRawPropertyFromRawDocument(remainingPath, (Bundle) firstElementValue);
- } else if (firstElementValue instanceof Parcelable[]) {
- Parcelable[] parcelables = (Parcelable[]) firstElementValue;
- if (parcelables.length == 1) {
- return getRawPropertyFromRawDocument(remainingPath, (Bundle) parcelables[0]);
- }
-
- // Slowest path: we're collecting values across repeated nested docs. (Example: given a
- // path like recipient.name, where recipient is a repeated field, we return a string
- // array where each recipient's name is an array element).
- //
- // Performance note: Suppose that we have a property path "a.b.c" where the "a"
- // property has N document values and each containing a "b" property with M document
- // values and each of those containing a "c" property with an int array.
- //
- // We'll allocate a new ArrayList for each of the "b" properties, add the M int arrays
- // from the "c" properties to it and then we'll allocate an int array in
- // flattenAccumulator before returning that (1 + M allocation per "b" property).
- //
- // When we're on the "a" properties, we'll allocate an ArrayList and add the N
- // flattened int arrays returned from the "b" properties to the list. Then we'll
- // allocate an int array in flattenAccumulator (1 + N ("b" allocs) allocations per "a").
- // So this implementation could incur 1 + N + NM allocs.
- //
- // However, we expect the vast majority of getProperty calls to be either for direct
- // property names (not paths) or else property paths returned from snippetting, which
- // always refer to exactly one property value and don't aggregate across repeated
- // values. The implementation is optimized for these two cases, requiring no additional
- // allocations. So we've decided that the above performance characteristics are OK for
- // the less used path.
- List<Object> accumulator = new ArrayList<>(parcelables.length);
- for (int i = 0; i < parcelables.length; i++) {
- Object value =
- getRawPropertyFromRawDocument(remainingPath, (Bundle) parcelables[i]);
- if (value != null) {
- accumulator.add(value);
- }
- }
- return flattenAccumulator(accumulator);
- } else {
- Log.e(TAG, "Failed to apply path to document; no nested value found: " + path);
- return null;
- }
+ // Only way to get here is with an empty path list
+ return null;
}
/**
@@ -1103,12 +1079,12 @@
* @param id the unique identifier for the {@link GenericDocument} in its namespace.
* @param schemaType the {@link AppSearchSchema} type of the {@link GenericDocument}. The
* provided {@code schemaType} must be defined using
- * {@link AppSearchSession#setSchema} prior
+ * {@link AppSearchSession#setSchemaAsync} prior
* to inserting a document of this {@code schemaType} into the
* AppSearch index using
- * {@link AppSearchSession#put}.
+ * {@link AppSearchSession#putAsync}.
* Otherwise, the document will be rejected by
- * {@link AppSearchSession#put} with result code
+ * {@link AppSearchSession#putAsync} with result code
* {@link AppSearchResult#RESULT_NOT_FOUND}.
*/
@SuppressWarnings("unchecked")
@@ -1177,7 +1153,7 @@
* Sets the schema type of this document, changing the value provided in the constructor.
*
* <p>To successfully index a document, the schema type must match the name of an
- * {@link AppSearchSchema} object previously provided to {@link AppSearchSession#setSchema}.
+ * {@link AppSearchSchema} object previously provided to {@link AppSearchSession#setSchemaAsync}.
* <!--@exportToFramework:hide-->
*/
@NonNull
@@ -1238,7 +1214,7 @@
* {@link System#currentTimeMillis} time base, the document will be auto-deleted.
*
* <p>The default value is 0, which means the document is permanent and won't be
- * auto-deleted until the app is uninstalled or {@link AppSearchSession#remove} is
+ * auto-deleted until the app is uninstalled or {@link AppSearchSession#removeAsync} is
* called.
*
* @param ttlMillis a non-negative duration in milliseconds.
@@ -1262,7 +1238,7 @@
* {@link AppSearchSchema.PropertyConfig#getName}.
* @param values the {@code String} values of the property.
* @throws IllegalArgumentException if no values are provided, or if a passed in
- * {@code String} is {@code null}.
+ * {@code String} is {@code null} or "".
*/
@NonNull
public BuilderType setPropertyString(@NonNull String name, @NonNull String... values) {
@@ -1281,6 +1257,7 @@
* for this property as given in
* {@link AppSearchSchema.PropertyConfig#getName}.
* @param values the {@code boolean} values of the property.
+ * @throws IllegalArgumentException if the name is empty or {@code null}.
*/
@NonNull
public BuilderType setPropertyBoolean(@NonNull String name, @NonNull boolean... values) {
@@ -1299,6 +1276,7 @@
* for this property as given in
* {@link AppSearchSchema.PropertyConfig#getName}.
* @param values the {@code long} values of the property.
+ * @throws IllegalArgumentException if the name is empty or {@code null}.
*/
@NonNull
public BuilderType setPropertyLong(@NonNull String name, @NonNull long... values) {
@@ -1317,6 +1295,7 @@
* for this property as given in
* {@link AppSearchSchema.PropertyConfig#getName}.
* @param values the {@code double} values of the property.
+ * @throws IllegalArgumentException if the name is empty or {@code null}.
*/
@NonNull
public BuilderType setPropertyDouble(@NonNull String name, @NonNull double... values) {
@@ -1335,7 +1314,7 @@
* {@link AppSearchSchema.PropertyConfig#getName}.
* @param values the {@code byte[]} of the property.
* @throws IllegalArgumentException if no values are provided, or if a passed in
- * {@code byte[]} is {@code null}.
+ * {@code byte[]} is {@code null}, or if name is empty.
*/
@NonNull
public BuilderType setPropertyBytes(@NonNull String name, @NonNull byte[]... values) {
@@ -1355,7 +1334,8 @@
* {@link AppSearchSchema.PropertyConfig#getName}.
* @param values the {@link GenericDocument} values of the property.
* @throws IllegalArgumentException if no values are provided, or if a passed in
- * {@link GenericDocument} is {@code null}.
+ * {@link GenericDocument} is {@code null}, or if name
+ * is empty.
*/
@NonNull
public BuilderType setPropertyDocument(
@@ -1385,6 +1365,7 @@
private void putInPropertyBundle(@NonNull String name, @NonNull String[] values)
throws IllegalArgumentException {
+ validatePropertyName(name);
for (int i = 0; i < values.length; i++) {
if (values[i] == null) {
throw new IllegalArgumentException("The String at " + i + " is null.");
@@ -1394,14 +1375,17 @@
}
private void putInPropertyBundle(@NonNull String name, @NonNull boolean[] values) {
+ validatePropertyName(name);
mProperties.putBooleanArray(name, values);
}
private void putInPropertyBundle(@NonNull String name, @NonNull double[] values) {
+ validatePropertyName(name);
mProperties.putDoubleArray(name, values);
}
private void putInPropertyBundle(@NonNull String name, @NonNull long[] values) {
+ validatePropertyName(name);
mProperties.putLongArray(name, values);
}
@@ -1412,6 +1396,7 @@
* into ArrayList<Bundle>, and each elements will contain a one dimension byte[].
*/
private void putInPropertyBundle(@NonNull String name, @NonNull byte[][] values) {
+ validatePropertyName(name);
ArrayList<Bundle> bundles = new ArrayList<>(values.length);
for (int i = 0; i < values.length; i++) {
if (values[i] == null) {
@@ -1425,6 +1410,7 @@
}
private void putInPropertyBundle(@NonNull String name, @NonNull GenericDocument[] values) {
+ validatePropertyName(name);
Parcelable[] documentBundles = new Parcelable[values.length];
for (int i = 0; i < values.length; i++) {
if (values[i] == null) {
@@ -1454,5 +1440,12 @@
mBuilt = false;
}
}
+
+ /** Method to ensure property names are not blank */
+ private void validatePropertyName(@NonNull String name) {
+ if (name.isEmpty()) {
+ throw new IllegalArgumentException("Property name cannot be blank.");
+ }
+ }
}
}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetByDocumentIdRequest.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetByDocumentIdRequest.java
index d9bfc0d..b2ebf3d 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetByDocumentIdRequest.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetByDocumentIdRequest.java
@@ -34,7 +34,7 @@
* Encapsulates a request to retrieve documents by namespace and IDs from the
* {@link AppSearchSession} database.
*
- * @see AppSearchSession#getByDocumentId
+ * @see AppSearchSession#getByDocumentIdAsync
*/
public final class GetByDocumentIdRequest {
/**
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetSchemaResponse.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetSchemaResponse.java
index f169099..ef5320d 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetSchemaResponse.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GetSchemaResponse.java
@@ -16,21 +16,62 @@
package androidx.appsearch.app;
+import android.annotation.SuppressLint;
import android.os.Bundle;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresFeature;
import androidx.annotation.RestrictTo;
+import androidx.collection.ArrayMap;
import androidx.collection.ArraySet;
import androidx.core.util.Preconditions;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
import java.util.Set;
-/** The response class of {@link AppSearchSession#getSchema} */
+/** The response class of {@link AppSearchSession#getSchemaAsync} */
public final class GetSchemaResponse {
private static final String VERSION_FIELD = "version";
private static final String SCHEMAS_FIELD = "schemas";
+ private static final String SCHEMAS_NOT_DISPLAYED_BY_SYSTEM_FIELD =
+ "schemasNotDisplayedBySystem";
+ private static final String SCHEMAS_VISIBLE_TO_PACKAGES_FIELD = "schemasVisibleToPackages";
+ private static final String SCHEMAS_VISIBLE_TO_PERMISSION_FIELD =
+ "schemasVisibleToPermissions";
+ private static final String ALL_REQUIRED_PERMISSION_FIELD =
+ "allRequiredPermission";
+ /**
+ * This Set contains all schemas that are not displayed by the system. All values in the set are
+ * prefixed with the package-database prefix. We do lazy fetch, the object will be created
+ * when the user first time fetch it.
+ */
+ @Nullable
+ private Set<String> mSchemasNotDisplayedBySystem;
+ /**
+ * This map contains all schemas and {@link PackageIdentifier} that has access to the schema.
+ * All keys in the map are prefixed with the package-database prefix. We do lazy fetch, the
+ * object will be created when the user first time fetch it.
+ */
+ @Nullable
+ private Map<String, Set<PackageIdentifier>> mSchemasVisibleToPackages;
+
+ /**
+ * This map contains all schemas and Android Permissions combinations that are required to
+ * access the schema. All keys in the map are prefixed with the package-database prefix. We
+ * do lazy fetch, the object will be created when the user first time fetch it.
+ * The Map is constructed in ANY-ALL cases. The querier could read the {@link GenericDocument}
+ * objects under the {@code schemaType} if they holds ALL required permissions of ANY
+ * combinations.
+ * The value set represents
+ * {@link androidx.appsearch.app.SetSchemaRequest.AppSearchSupportedPermission}.
+ */
+ @Nullable
+ private Map<String, Set<Set<Integer>>> mSchemasVisibleToPermissions;
private final Bundle mBundle;
@@ -60,7 +101,7 @@
/**
* Return the schemas most recently successfully provided to
- * {@link AppSearchSession#setSchema}.
+ * {@link AppSearchSession#setSchemaAsync}.
*
* <p>It is inefficient to call this method repeatedly.
*/
@@ -75,12 +116,160 @@
return schemas;
}
+ /**
+ * Returns all the schema types that are opted out of being displayed and visible on any
+ * system UI surface.
+ */
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ // @exportToFramework:endStrip()
+ @NonNull
+ public Set<String> getSchemaTypesNotDisplayedBySystem() {
+ checkGetVisibilitySettingSupported();
+ if (mSchemasNotDisplayedBySystem == null) {
+ List<String> schemasNotDisplayedBySystemList =
+ mBundle.getStringArrayList(SCHEMAS_NOT_DISPLAYED_BY_SYSTEM_FIELD);
+ mSchemasNotDisplayedBySystem =
+ Collections.unmodifiableSet(new ArraySet<>(schemasNotDisplayedBySystemList));
+ }
+ return mSchemasNotDisplayedBySystem;
+ }
+
+ /**
+ * Returns a mapping of schema types to the set of packages that have access
+ * to that schema type.
+ */
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ // @exportToFramework:endStrip()
+ @NonNull
+ @SuppressWarnings("deprecation")
+ public Map<String, Set<PackageIdentifier>> getSchemaTypesVisibleToPackages() {
+ checkGetVisibilitySettingSupported();
+ if (mSchemasVisibleToPackages == null) {
+ Bundle schemaVisibleToPackagesBundle =
+ mBundle.getBundle(SCHEMAS_VISIBLE_TO_PACKAGES_FIELD);
+ Map<String, Set<PackageIdentifier>> copy = new ArrayMap<>();
+ for (String key : schemaVisibleToPackagesBundle.keySet()) {
+ List<Bundle> PackageIdentifierBundles = schemaVisibleToPackagesBundle
+ .getParcelableArrayList(key);
+ Set<PackageIdentifier> packageIdentifiers =
+ new ArraySet<>(PackageIdentifierBundles.size());
+ for (int i = 0; i < PackageIdentifierBundles.size(); i++) {
+ packageIdentifiers.add(new PackageIdentifier(PackageIdentifierBundles.get(i)));
+ }
+ copy.put(key, packageIdentifiers);
+ }
+ mSchemasVisibleToPackages = Collections.unmodifiableMap(copy);
+ }
+ return mSchemasVisibleToPackages;
+ }
+
+ /**
+ * Returns a mapping of schema types to the Map of {@link android.Manifest.permission}
+ * combinations that querier must hold to access that schema type.
+ *
+ * <p> The querier could read the {@link GenericDocument} objects under the {@code schemaType}
+ * if they holds ALL required permissions of ANY of the individual value sets.
+ *
+ * <p>For example, if the Map contains {@code {% verbatim %}{{permissionA, PermissionB},
+ * { PermissionC, PermissionD}, {PermissionE}}{% endverbatim %}}.
+ * <ul>
+ * <li>A querier holds both PermissionA and PermissionB has access.</li>
+ * <li>A querier holds both PermissionC and PermissionD has access.</li>
+ * <li>A querier holds only PermissionE has access.</li>
+ * <li>A querier holds both PermissionA and PermissionE has access.</li>
+ * <li>A querier holds only PermissionA doesn't have access.</li>
+ * <li>A querier holds both PermissionA and PermissionC doesn't have access.</li>
+ * </ul>
+ *
+ * @return The map contains schema type and all combinations of required permission for querier
+ * to access it. The supported Permission are {@link SetSchemaRequest#READ_SMS},
+ * {@link SetSchemaRequest#READ_CALENDAR}, {@link SetSchemaRequest#READ_CONTACTS},
+ * {@link SetSchemaRequest#READ_EXTERNAL_STORAGE},
+ * {@link SetSchemaRequest#READ_HOME_APP_SEARCH_DATA} and
+ * {@link SetSchemaRequest#READ_ASSISTANT_APP_SEARCH_DATA}.
+ */
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ // @exportToFramework:endStrip()
+ @NonNull
+ @SuppressWarnings("deprecation")
+ public Map<String, Set<Set<Integer>>> getRequiredPermissionsForSchemaTypeVisibility() {
+ checkGetVisibilitySettingSupported();
+ if (mSchemasVisibleToPermissions == null) {
+ Map<String, Set<Set<Integer>>> copy = new ArrayMap<>();
+ Bundle schemaVisibleToPermissionBundle =
+ mBundle.getBundle(SCHEMAS_VISIBLE_TO_PERMISSION_FIELD);
+ for (String key : schemaVisibleToPermissionBundle.keySet()) {
+ ArrayList<Bundle> allRequiredPermissionsBundle =
+ schemaVisibleToPermissionBundle.getParcelableArrayList(key);
+ Set<Set<Integer>> visibleToPermissions = new ArraySet<>();
+ if (allRequiredPermissionsBundle != null) {
+ // This should never be null
+ for (int i = 0; i < allRequiredPermissionsBundle.size(); i++) {
+ visibleToPermissions.add(new ArraySet<>(allRequiredPermissionsBundle.get(i)
+ .getIntegerArrayList(ALL_REQUIRED_PERMISSION_FIELD)));
+ }
+ }
+ copy.put(key, visibleToPermissions);
+ }
+ mSchemasVisibleToPermissions = Collections.unmodifiableMap(copy);
+ }
+ return mSchemasVisibleToPermissions;
+ }
+
+ private void checkGetVisibilitySettingSupported() {
+ if (!mBundle.containsKey(SCHEMAS_VISIBLE_TO_PACKAGES_FIELD)) {
+ throw new UnsupportedOperationException("Get visibility setting is not supported with"
+ + " this backend/Android API level combination.");
+ }
+ }
+
/** Builder for {@link GetSchemaResponse} objects. */
public static final class Builder {
private int mVersion = 0;
private ArrayList<Bundle> mSchemaBundles = new ArrayList<>();
+ /**
+ * Creates the object when we actually set them. If we never set visibility settings, we
+ * should throw {@link UnsupportedOperationException} in the visibility getters.
+ */
+ @Nullable
+ private ArrayList<String> mSchemasNotDisplayedBySystem;
+ private Bundle mSchemasVisibleToPackages;
+ private Bundle mSchemasVisibleToPermissions;
private boolean mBuilt = false;
+ /** Create a {@link Builder} object} */
+ public Builder() {
+ this(/*getVisibilitySettingSupported=*/true);
+ }
+
+ /**
+ * Create a {@link Builder} object}.
+ *
+ * <p>This constructor should only be used in Android API below than T.
+ *
+ * @param getVisibilitySettingSupported whether supported
+ * {@link Features#ADD_PERMISSIONS_AND_GET_VISIBILITY} by this
+ * backend/Android API level.
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public Builder(boolean getVisibilitySettingSupported) {
+ if (getVisibilitySettingSupported) {
+ mSchemasNotDisplayedBySystem = new ArrayList<>();
+ mSchemasVisibleToPackages = new Bundle();
+ mSchemasVisibleToPermissions = new Bundle();
+ }
+ }
+
/**
* Sets the database overall schema version.
*
@@ -102,12 +291,130 @@
return this;
}
+ /**
+ * Sets whether or not documents from the provided {@code schemaType} will be displayed
+ * and visible on any system UI surface.
+ *
+ * @param schemaType The name of an {@link AppSearchSchema} within the same
+ * {@link GetSchemaResponse}, which won't be displayed by system.
+ */
+ // Getter getSchemaTypesNotDisplayedBySystem returns plural objects.
+ @SuppressLint("MissingGetterMatchingBuilder")
+ @NonNull
+ public Builder addSchemaTypeNotDisplayedBySystem(@NonNull String schemaType) {
+ Preconditions.checkNotNull(schemaType);
+ resetIfBuilt();
+ if (mSchemasNotDisplayedBySystem == null) {
+ mSchemasNotDisplayedBySystem = new ArrayList<>();
+ }
+ mSchemasNotDisplayedBySystem.add(schemaType);
+ return this;
+ }
+
+ /**
+ * Sets whether or not documents from the provided {@code schemaType} can be read by the
+ * specified package.
+ *
+ * <p>Each package is represented by a {@link PackageIdentifier}, containing a package name
+ * and a byte array of type {@link android.content.pm.PackageManager#CERT_INPUT_SHA256}.
+ *
+ * <p>To opt into one-way data sharing with another application, the developer will need to
+ * explicitly grant the other application’s package name and certificate Read access to its
+ * data.
+ *
+ * <p>For two-way data sharing, both applications need to explicitly grant Read access to
+ * one another.
+ *
+ * @param schemaType The schema type to set visibility on.
+ * @param packageIdentifiers Represents the package that has access to the given
+ * schema type.
+ */
+ // Getter getSchemaTypesVisibleToPackages returns a map contains all schema types.
+ @SuppressLint("MissingGetterMatchingBuilder")
+ @NonNull
+ public Builder setSchemaTypeVisibleToPackages(
+ @NonNull String schemaType,
+ @NonNull Set<PackageIdentifier> packageIdentifiers) {
+ Preconditions.checkNotNull(schemaType);
+ Preconditions.checkNotNull(packageIdentifiers);
+ resetIfBuilt();
+ ArrayList<Bundle> bundles = new ArrayList<>(packageIdentifiers.size());
+ for (PackageIdentifier packageIdentifier : packageIdentifiers) {
+ bundles.add(packageIdentifier.getBundle());
+ }
+ mSchemasVisibleToPackages.putParcelableArrayList(schemaType, bundles);
+ return this;
+ }
+
+ /**
+ * Sets a set of required {@link android.Manifest.permission} combinations to the given
+ * schema type.
+ *
+ * <p> The querier could read the {@link GenericDocument} objects under the
+ * {@code schemaType} if they holds ALL required permissions of ANY of the individual value
+ * sets.
+ *
+ * <p>For example, if the Map contains {@code {% verbatim %}{{permissionA, PermissionB},
+ * {PermissionC, PermissionD}, {PermissionE}}{% endverbatim %}}.
+ * <ul>
+ * <li>A querier holds both PermissionA and PermissionB has access.</li>
+ * <li>A querier holds both PermissionC and PermissionD has access.</li>
+ * <li>A querier holds only PermissionE has access.</li>
+ * <li>A querier holds both PermissionA and PermissionE has access.</li>
+ * <li>A querier holds only PermissionA doesn't have access.</li>
+ * <li>A querier holds both PermissionA and PermissionC doesn't have access.</li>
+ * </ul>
+ *
+ * @see android.Manifest.permission#READ_SMS
+ * @see android.Manifest.permission#READ_CALENDAR
+ * @see android.Manifest.permission#READ_CONTACTS
+ * @see android.Manifest.permission#READ_EXTERNAL_STORAGE
+ * @see android.Manifest.permission#READ_HOME_APP_SEARCH_DATA
+ * @see android.Manifest.permission#READ_ASSISTANT_APP_SEARCH_DATA
+ *
+ * @param schemaType The schema type to set visibility on.
+ * @param visibleToPermissions The Android permissions that will be required to access
+ * the given schema.
+ */
+ // Getter getRequiredPermissionsForSchemaTypeVisibility returns a map for all schemaTypes.
+ @SuppressLint("MissingGetterMatchingBuilder")
+ @NonNull
+ public Builder setRequiredPermissionsForSchemaTypeVisibility(
+ @NonNull String schemaType,
+ @SetSchemaRequest.AppSearchSupportedPermission @NonNull
+ Set<Set<Integer>> visibleToPermissions) {
+ Preconditions.checkNotNull(schemaType);
+ Preconditions.checkNotNull(visibleToPermissions);
+ resetIfBuilt();
+ ArrayList<Bundle> visibleToPermissionsBundle = new ArrayList<>();
+ for (Set<Integer> allRequiredPermissions : visibleToPermissions) {
+ for (int permission : allRequiredPermissions) {
+ Preconditions.checkArgumentInRange(permission, SetSchemaRequest.READ_SMS,
+ SetSchemaRequest.READ_ASSISTANT_APP_SEARCH_DATA, "permission");
+ }
+ Bundle allRequiredPermissionsBundle = new Bundle();
+ allRequiredPermissionsBundle.putIntegerArrayList(
+ ALL_REQUIRED_PERMISSION_FIELD, new ArrayList<>(allRequiredPermissions));
+ visibleToPermissionsBundle.add(allRequiredPermissionsBundle);
+ }
+ mSchemasVisibleToPermissions.putParcelableArrayList(schemaType,
+ visibleToPermissionsBundle);
+ return this;
+ }
+
/** Builds a {@link GetSchemaResponse} object. */
@NonNull
public GetSchemaResponse build() {
Bundle bundle = new Bundle();
bundle.putInt(VERSION_FIELD, mVersion);
bundle.putParcelableArrayList(SCHEMAS_FIELD, mSchemaBundles);
+ if (mSchemasNotDisplayedBySystem != null) {
+ // Only save the visibility fields if it was actually set.
+ bundle.putStringArrayList(SCHEMAS_NOT_DISPLAYED_BY_SYSTEM_FIELD,
+ mSchemasNotDisplayedBySystem);
+ bundle.putBundle(SCHEMAS_VISIBLE_TO_PACKAGES_FIELD, mSchemasVisibleToPackages);
+ bundle.putBundle(SCHEMAS_VISIBLE_TO_PERMISSION_FIELD, mSchemasVisibleToPermissions);
+ }
mBuilt = true;
return new GetSchemaResponse(bundle);
}
@@ -115,6 +422,16 @@
private void resetIfBuilt() {
if (mBuilt) {
mSchemaBundles = new ArrayList<>(mSchemaBundles);
+ if (mSchemasNotDisplayedBySystem != null) {
+ // Only reset the visibility fields if it was actually set.
+ mSchemasNotDisplayedBySystem = new ArrayList<>(mSchemasNotDisplayedBySystem);
+ Bundle copyVisibleToPackages = new Bundle();
+ copyVisibleToPackages.putAll(mSchemasVisibleToPackages);
+ mSchemasVisibleToPackages = copyVisibleToPackages;
+ Bundle copyVisibleToPermissions = new Bundle();
+ copyVisibleToPermissions.putAll(mSchemasVisibleToPermissions);
+ mSchemasVisibleToPermissions = copyVisibleToPermissions;
+ }
mBuilt = false;
}
}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GlobalSearchSession.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GlobalSearchSession.java
index 6784803..4ce54b4 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GlobalSearchSession.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GlobalSearchSession.java
@@ -16,9 +16,12 @@
// @exportToFramework:skipFile()
package androidx.appsearch.app;
+import android.annotation.SuppressLint;
+
import androidx.annotation.NonNull;
import androidx.annotation.RequiresFeature;
-import androidx.appsearch.observer.AppSearchObserverCallback;
+import androidx.appsearch.exceptions.AppSearchException;
+import androidx.appsearch.observer.ObserverCallback;
import androidx.appsearch.observer.ObserverSpec;
import com.google.common.util.concurrent.ListenableFuture;
@@ -36,6 +39,31 @@
*/
public interface GlobalSearchSession extends Closeable {
/**
+ * Retrieves {@link GenericDocument} documents, belonging to the specified package name and
+ * database name and identified by the namespace and ids in the request, from the
+ * {@link GlobalSearchSession} database. When a call is successful, the result will be
+ * returned in the successes section of the {@link AppSearchBatchResult} object in the callback.
+ * If the package doesn't exist, database doesn't exist, or if the calling package doesn't have
+ * access, these failures will be reflected as {@link AppSearchResult} objects with a
+ * RESULT_NOT_FOUND status code in the failures section of the {@link AppSearchBatchResult}
+ * object.
+ *
+ * @param packageName the name of the package to get from
+ * @param databaseName the name of the database to get from
+ * @param request a request containing a namespace and IDs of the documents to retrieve.
+ */
+ @NonNull
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.GLOBAL_SEARCH_SESSION_GET_BY_ID)
+ // @exportToFramework:endStrip()
+ ListenableFuture<AppSearchBatchResult<String, GenericDocument>> getByDocumentIdAsync(
+ @NonNull String packageName,
+ @NonNull String databaseName,
+ @NonNull GetByDocumentIdRequest request);
+
+ /**
* Retrieves documents from all AppSearch databases that the querying application has access to.
*
* <p>Applications can be granted access to documents by specifying
@@ -51,7 +79,7 @@
* forming a query string.
*
* <p>This method is lightweight. The heavy work will be done in
- * {@link SearchResults#getNextPage}.
+ * {@link SearchResults#getNextPageAsync}.
*
* @param queryExpression query string to search.
* @param searchSpec spec for setting document filters, adding projection, setting term
@@ -64,11 +92,11 @@
/**
* Reports that a particular document has been used from a system surface.
*
- * <p>See {@link AppSearchSession#reportUsage} for a general description of document usage, as
- * well as an API that can be used by the app itself.
+ * <p>See {@link AppSearchSession#reportUsageAsync} for a general description of document usage,
+ * as well as an API that can be used by the app itself.
*
* <p>Usage reported via this method is accounted separately from usage reported via
- * {@link AppSearchSession#reportUsage} and may be accessed using the constants
+ * {@link AppSearchSession#reportUsageAsync} and may be accessed using the constants
* {@link SearchSpec#RANKING_STRATEGY_SYSTEM_USAGE_COUNT} and
* {@link SearchSpec#RANKING_STRATEGY_SYSTEM_USAGE_LAST_USED_TIMESTAMP}.
*
@@ -79,7 +107,70 @@
* is not part of the system.
*/
@NonNull
- ListenableFuture<Void> reportSystemUsage(@NonNull ReportSystemUsageRequest request);
+ ListenableFuture<Void> reportSystemUsageAsync(@NonNull ReportSystemUsageRequest request);
+
+ /**
+ * @deprecated use {@link #reportSystemUsageAsync}
+ *
+ * @return The pending result of performing this operation which resolves to {@code null} on
+ * success. The pending result will be completed with an
+ * {@link androidx.appsearch.exceptions.AppSearchException} with a code of
+ * {@link AppSearchResult#RESULT_SECURITY_ERROR} if this API is invoked by an app which
+ * is not part of the system.
+ */
+ @NonNull
+ @Deprecated
+ default ListenableFuture<Void> reportSystemUsage(@NonNull ReportSystemUsageRequest request) {
+ return reportSystemUsageAsync(request);
+ }
+
+ /**
+ * Retrieves the collection of schemas most recently successfully provided to
+ * {@link AppSearchSession#setSchemaAsync} for any types belonging to the requested package and
+ * database that the caller has been granted access to.
+ *
+ * <p> If the requested package/database combination does not exist or the caller has not been
+ * granted access to it, then an empty GetSchemaResponse will be returned.
+ *
+ *
+ * @param packageName the package that owns the requested {@link AppSearchSchema} instances.
+ * @param databaseName the database that owns the requested {@link AppSearchSchema} instances.
+ * @return The pending {@link GetSchemaResponse} containing the schemas that the caller has
+ * access to or an empty GetSchemaResponse if the request package and database does not
+ * exist, has not set a schema or contains no schemas that are accessible to the caller.
+ */
+ // This call hits disk; async API prevents us from treating these calls as properties.
+ @SuppressLint("KotlinPropertyAccess")
+ @NonNull
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA)
+ // @exportToFramework:endStrip()
+ ListenableFuture<GetSchemaResponse> getSchemaAsync(@NonNull String packageName,
+ @NonNull String databaseName);
+
+ /**
+ * @deprecated use {@link #getSchemaAsync}.
+ *
+ * @param packageName the package that owns the requested {@link AppSearchSchema} instances.
+ * @param databaseName the database that owns the requested {@link AppSearchSchema} instances.
+ * @return The pending {@link GetSchemaResponse} containing the schemas that the caller has
+ * access to or an empty GetSchemaResponse if the request package and database does not
+ * exist, has not set a schema or contains no schemas that are accessible to the caller.
+ */
+ @SuppressLint("KotlinPropertyAccess")
+ @NonNull
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.GLOBAL_SEARCH_SESSION_GET_SCHEMA)
+ // @exportToFramework:endStrip()
+ @Deprecated
+ default ListenableFuture<GetSchemaResponse> getSchema(@NonNull String packageName,
+ @NonNull String databaseName) {
+ return getSchemaAsync(packageName, databaseName);
+ }
/**
* Returns the {@link Features} to check for the availability of certain features
@@ -89,63 +180,75 @@
Features getFeatures();
/**
- * Adds an {@link AppSearchObserverCallback} to monitor changes within the
- * databases owned by {@code observedPackage} if they match the given
+ * Adds an {@link ObserverCallback} to monitor changes within the databases owned by
+ * {@code targetPackageName} if they match the given
* {@link androidx.appsearch.observer.ObserverSpec}.
*
- * <p>If the data owned by {@code observedPackage} is not visible to you, the registration call
- * will succeed but no notifications will be dispatched. Notifications could start flowing later
- * if {@code observedPackage} changes its schema visibility settings.
+ * <p>The observer callback is only triggered for data that changes after it is registered. No
+ * notification about existing data is sent as a result of registering an observer. To find out
+ * about existing data, you must use the {@link GlobalSearchSession#search} API.
*
- * <p>If no package matching {@code observedPackage} exists on the system, the registration call
- * will succeed but no notifications will be dispatched. Notifications could start flowing later
- * if {@code observedPackage} is installed and starts indexing data.
+ * <p>If the data owned by {@code targetPackageName} is not visible to you, the registration
+ * call will succeed but no notifications will be dispatched. Notifications could start flowing
+ * later if {@code targetPackageName} changes its schema visibility settings.
+ *
+ * <p>If no package matching {@code targetPackageName} exists on the system, the registration
+ * call will succeed but no notifications will be dispatched. Notifications could start flowing
+ * later if {@code targetPackageName} is installed and starts indexing data.
*
* <p>This feature may not be available in all implementations. Check
- * {@link Features#GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER} before calling this method.
+ * {@link Features#GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK} before calling this method.
*
- * @param observedPackage Package whose changes to monitor
+ * @param targetPackageName Package whose changes to monitor
* @param spec Specification of what types of changes to listen for
* @param executor Executor on which to call the {@code observer} callback methods.
* @param observer Callback to trigger when a schema or document changes
+ * @throws AppSearchException if an error occurs trying to register the observer
* @throws UnsupportedOperationException if this feature is not available on this
* AppSearch implementation.
*/
// @exportToFramework:startStrip()
@RequiresFeature(
enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
- name = Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER)
+ name = Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK)
// @exportToFramework:endStrip()
- void addObserver(
- @NonNull String observedPackage,
+ void registerObserverCallback(
+ @NonNull String targetPackageName,
@NonNull ObserverSpec spec,
@NonNull Executor executor,
- @NonNull AppSearchObserverCallback observer);
+ @NonNull ObserverCallback observer) throws AppSearchException;
/**
- * Removes previously registered {@link AppSearchObserverCallback} instances from the system.
+ * Removes previously registered {@link ObserverCallback} instances from the system.
*
- * <p>All instances of {@link AppSearchObserverCallback} which are equal to the provided
- * callback using {@link AppSearchObserverCallback#equals} will be removed.
+ * <p>All instances of {@link ObserverCallback} which are registered to observe
+ * {@code targetPackageName} and compare equal to the provided callback using the provided
+ * argument's {@link ObserverCallback#equals} will be removed.
*
* <p>If no matching observers have been registered, this method has no effect. If multiple
* matching observers have been registered, all will be removed.
*
* <p>This feature may not be available in all implementations. Check
- * {@link Features#GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER} before calling this method.
+ * {@link Features#GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK} before calling this method.
*
- * @param observedPackage Package in which the observers to be removed are registered
- * @param observer Callback to unregister
+ * @param targetPackageName Package which the observers to be removed are listening to.
+ * @param observer Callback to unregister.
+ * @throws AppSearchException if an error occurs trying to remove the observer, such
+ * as a failure to communicate with the system service
+ * in the platform backend. Note that no
+ * error will be thrown if the provided observer
+ * doesn't match any registered observer.
* @throws UnsupportedOperationException if this feature is not available on this
* AppSearch implementation.
*/
// @exportToFramework:startStrip()
@RequiresFeature(
enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
- name = Features.GLOBAL_SEARCH_SESSION_ADD_REMOVE_OBSERVER)
+ name = Features.GLOBAL_SEARCH_SESSION_REGISTER_OBSERVER_CALLBACK)
// @exportToFramework:endStrip()
- void removeObserver(
- @NonNull String observedPackage, @NonNull AppSearchObserverCallback observer);
+ void unregisterObserverCallback(
+ @NonNull String targetPackageName, @NonNull ObserverCallback observer)
+ throws AppSearchException;
/** Closes the {@link GlobalSearchSession}. */
@Override
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/InternalSetSchemaResponse.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/InternalSetSchemaResponse.java
new file mode 100644
index 0000000..42aecce
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/InternalSetSchemaResponse.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.app;
+
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.core.util.Preconditions;
+
+/**
+ * An internal wrapper class of {@link SetSchemaResponse}.
+ *
+ * <p>For public users, if the {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync}
+ * failed, we will directly throw an Exception. But AppSearch internal need to divert the
+ * incompatible changes form other call flows. This class adds a {@link #isSuccess()} to indicate
+ * if the call fails because of incompatible change.
+ *
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class InternalSetSchemaResponse {
+
+ private static final String IS_SUCCESS_FIELD = "isSuccess";
+ private static final String SET_SCHEMA_RESPONSE_BUNDLE_FIELD = "setSchemaResponseBundle";
+ private static final String ERROR_MESSAGE_FIELD = "errorMessage";
+
+ private final Bundle mBundle;
+
+ public InternalSetSchemaResponse(@NonNull Bundle bundle) {
+ mBundle = Preconditions.checkNotNull(bundle);
+ }
+
+ private InternalSetSchemaResponse(boolean isSuccess,
+ @NonNull SetSchemaResponse setSchemaResponse,
+ @Nullable String errorMessage) {
+ Preconditions.checkNotNull(setSchemaResponse);
+ mBundle = new Bundle();
+ mBundle.putBoolean(IS_SUCCESS_FIELD, isSuccess);
+ mBundle.putBundle(SET_SCHEMA_RESPONSE_BUNDLE_FIELD, setSchemaResponse.getBundle());
+ mBundle.putString(ERROR_MESSAGE_FIELD, errorMessage);
+ }
+
+ /**
+ * Returns the {@link Bundle} populated by this builder.
+ * @hide
+ */
+ @NonNull
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public Bundle getBundle() {
+ return mBundle;
+ }
+
+ /**
+ * Creates a new successful {@link InternalSetSchemaResponse}.
+ *
+ * @param setSchemaResponse The object this internal object represents.
+ */
+ @NonNull
+ public static InternalSetSchemaResponse newSuccessfulSetSchemaResponse(
+ @NonNull SetSchemaResponse setSchemaResponse) {
+ return new InternalSetSchemaResponse(/*isSuccess=*/ true, setSchemaResponse,
+ /*errorMessage=*/null);
+ }
+
+ /**
+ * Creates a new failed {@link InternalSetSchemaResponse}.
+ *
+ * @param setSchemaResponse The object this internal object represents.
+ * @param errorMessage An string describing the reason or nature of the failure.
+ */
+ @NonNull
+ public static InternalSetSchemaResponse newFailedSetSchemaResponse(
+ @NonNull SetSchemaResponse setSchemaResponse,
+ @NonNull String errorMessage) {
+ return new InternalSetSchemaResponse(/*isSuccess=*/ false, setSchemaResponse,
+ errorMessage);
+ }
+
+ /** Returns {@code true} if the schema request is proceeded successfully. */
+ public boolean isSuccess() {
+ return mBundle.getBoolean(IS_SUCCESS_FIELD);
+ }
+
+ /**
+ * Returns the {@link SetSchemaResponse} of the set schema call.
+ *
+ * <p>The call may or may not success. Check {@link #isSuccess()} before call this method.
+ */
+ @NonNull
+ public SetSchemaResponse getSetSchemaResponse() {
+ return new SetSchemaResponse(mBundle.getBundle(SET_SCHEMA_RESPONSE_BUNDLE_FIELD));
+ }
+
+
+ /**
+ * Returns the error message associated with this response.
+ *
+ * <p>If {@link #isSuccess} is {@code true}, the error message is always {@code null}.
+ */
+ @Nullable
+ public String getErrorMessage() {
+ return mBundle.getString(ERROR_MESSAGE_FIELD);
+ }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Migrator.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Migrator.java
index b47735b..e6a7b2c 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/Migrator.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/Migrator.java
@@ -51,11 +51,11 @@
* higher version number than the current {@link AppSearchSchema} saved in AppSearch.
*
* <p>If this {@link Migrator} is provided to cover a compatible schema change via
- * {@link AppSearchSession#setSchema}, documents under the old version won't be removed
+ * {@link AppSearchSession#setSchemaAsync}, documents under the old version won't be removed
* unless you use the same document ID.
*
* <p>This method will be invoked on the background worker thread provided via
- * {@link AppSearchSession#setSchema}.
+ * {@link AppSearchSession#setSchemaAsync}.
*
* @param currentVersion The current version of the document's schema.
* @param finalVersion The final version that documents need to be migrated to.
@@ -74,7 +74,7 @@
* lower version number than the current {@link AppSearchSchema} saved in AppSearch.
*
* <p>If this {@link Migrator} is provided to cover a compatible schema change via
- * {@link AppSearchSession#setSchema}, documents under the old version won't be removed
+ * {@link AppSearchSession#setSchemaAsync}, documents under the old version won't be removed
* unless you use the same document ID.
*
* <p>This method will be invoked on the background worker thread.
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/PropertyPath.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PropertyPath.java
new file mode 100644
index 0000000..c451624
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PropertyPath.java
@@ -0,0 +1,336 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.app;
+
+import android.annotation.SuppressLint;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.util.ObjectsCompat;
+import androidx.core.util.Preconditions;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Represents a property path returned from searching the AppSearch Database.
+ *
+ * <p> When searching the AppSearch Database, you will get back {@link SearchResult.MatchInfo}
+ * objects that contain a property path signifying the location of a match within the database.
+ * This is a string that may look something like "foo.bar[0]". {@link PropertyPath} parses this
+ * string and breaks it up into a List of {@link PathSegment}s. These may represent either a
+ * property or a property and a 0-based index into the property. For instance, "foo.bar[1]" would
+ * be parsed into a {@link PathSegment} with a property name of foo and a {@link PathSegment}
+ * with a property name of bar and an index of 1. This allows for easier manipulation of the
+ * property path.
+ *
+ * <p> This class won't perform any retrievals, it will only parse the path string. As such, it
+ * may not necessarily refer to a valid path in the database.
+ *
+ * @see SearchResult.MatchInfo
+ */
+public class PropertyPath implements Iterable<PropertyPath.PathSegment> {
+ private final List<PathSegment> mPathList;
+
+ /**
+ * Constructor directly accepting a path list
+ * @param pathList a list of PathSegments
+ */
+ public PropertyPath(@NonNull List<PathSegment> pathList) {
+ mPathList = new ArrayList<>(pathList);
+ }
+
+ /**
+ * Constructor that parses a string representing the path to populate a List of PathSegments
+ * @param path the string to be validated and parsed into PathSegments
+ * @throws IllegalArgumentException when the path is invalid or malformed
+ */
+ public PropertyPath(@NonNull String path) {
+ Preconditions.checkNotNull(path);
+ mPathList = new ArrayList<>();
+ try {
+ recursivePathScan(path);
+ } catch (IllegalArgumentException e) {
+ // Throw the entire path in a new exception, recursivePathScan may only know about part
+ // of the path.
+ throw new IllegalArgumentException(e.getMessage() + ": " + path);
+ }
+ }
+
+ private void recursivePathScan(String path) throws IllegalArgumentException {
+ // Determine whether the path is just a raw property name with no control characters
+ int controlPos = -1;
+ boolean controlIsIndex = false;
+ for (int i = 0; i < path.length(); i++) {
+ char c = path.charAt(i);
+ if (c == ']') {
+ throw new IllegalArgumentException("Malformed path (no starting '[')");
+ }
+ if (c == '[' || c == '.') {
+ controlPos = i;
+ controlIsIndex = c == '[';
+ break;
+ }
+ }
+
+ if (controlPos == 0 || path.isEmpty()) {
+ throw new IllegalArgumentException("Malformed path (blank property name)");
+ }
+
+ // If the path has no further elements, we're done.
+ if (controlPos == -1) {
+ // The property's cardinality may be REPEATED, but this path isn't indexing into it
+ mPathList.add(new PathSegment(path, PathSegment.NON_REPEATED_CARDINALITY));
+ return;
+ }
+
+ String remainingPath;
+ if (!controlIsIndex) {
+ String propertyName = path.substring(0, controlPos);
+ // Remaining path is everything after the .
+ remainingPath = path.substring(controlPos + 1);
+ mPathList.add(new PathSegment(propertyName, PathSegment.NON_REPEATED_CARDINALITY));
+ } else {
+ remainingPath = consumePropertyWithIndex(path, controlPos);
+ // No more path remains, we have nothing to recurse into
+ if (remainingPath == null) {
+ return;
+ }
+ }
+
+ // More of the path remains; recursively evaluate it
+ recursivePathScan(remainingPath);
+ }
+
+ /**
+ * Helper method to parse the parts of the path String that signify indices with square brackets
+ *
+ * <p>For example, when parsing the path "foo[3]", this will be used to parse the "[3]" part of
+ * the path to determine the index into the preceding "foo" property.
+ * @param path the string we are parsing
+ * @param controlPos the position of the start bracket
+ * @return the rest of the path after the end brackets, or null if there is nothing after them
+ */
+ @Nullable
+ private String consumePropertyWithIndex(@NonNull String path, int controlPos) {
+ Preconditions.checkNotNull(path);
+ String propertyName = path.substring(0, controlPos);
+ int endBracketIdx = path.indexOf(']', controlPos);
+ if (endBracketIdx == -1) {
+ throw new IllegalArgumentException("Malformed path (no ending ']')");
+ }
+ if (endBracketIdx + 1 < path.length() && path.charAt(endBracketIdx + 1) != '.') {
+ throw new IllegalArgumentException(
+ "Malformed path (']' not followed by '.'): " + path);
+ }
+ String indexStr = path.substring(controlPos + 1, endBracketIdx);
+ int index;
+ try {
+ index = Integer.parseInt(indexStr);
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException(
+ "Malformed path (\"" + indexStr + "\" as path index)");
+ }
+ if (index < 0) {
+ throw new IllegalArgumentException("Malformed path (path index less than 0)");
+ }
+ mPathList.add(new PathSegment(propertyName, index));
+ // Remaining path is everything after the [n]
+ if (endBracketIdx + 1 < path.length()) {
+ // More path remains, and we've already checked that charAt(endBracketIdx+1) == .
+ return path.substring(endBracketIdx + 2);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the {@link PathSegment} at a specified index of the PropertyPath.
+ *
+ * <p> Calling {@code get(1)} on a {@link PropertyPath} representing "foo.bar[1]" will return
+ * a {@link PathSegment} representing "bar[1]". {@link PathSegment}s both with and without a
+ * property index of {@link PathSegment#NON_REPEATED_CARDINALITY} are retrieved the same.
+ * @param index the position into the PropertyPath
+ * @throws ArrayIndexOutOfBoundsException if index is not a valid index in the path list
+ */
+ // Allow use of the Kotlin indexing operator
+ @SuppressWarnings("KotlinOperator")
+ @SuppressLint("KotlinOperator")
+ @NonNull
+ public PathSegment get(int index) {
+ return mPathList.get(index);
+ }
+
+ /**
+ * Returns the number of {@link PathSegment}s in the PropertyPath.
+ *
+ * <p> Paths representing "foo.bar" and "foo[1].bar[1]" will have the same size, as a property
+ * and an index into that property are stored in one {@link PathSegment}.
+ */
+ public int size() {
+ return mPathList.size();
+ }
+
+ /** Returns a valid path string representing this PropertyPath */
+ @Override
+ @NonNull
+ public String toString() {
+ StringBuilder result = new StringBuilder();
+ for (int i = 0; i < mPathList.size(); i++) {
+ result.append(get(i).toString());
+ if (i < mPathList.size() - 1) {
+ result.append('.');
+ }
+ }
+
+ return result.toString();
+ }
+
+ /** Returns an iterator over the PathSegments within the PropertyPath */
+ @NonNull
+ @Override
+ public Iterator<PathSegment> iterator() {
+ return mPathList.iterator();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null) return false;
+ if (!(o instanceof PropertyPath)) return false;
+ PropertyPath that = (PropertyPath) o;
+ return ObjectsCompat.equals(mPathList, that.mPathList);
+ }
+
+ @Override
+ public int hashCode() {
+ return ObjectsCompat.hash(mPathList);
+ }
+
+ /**
+ * A segment of a PropertyPath, which includes the name of the property and a 0-based index
+ * into this property.
+ *
+ * <p> If the property index is not set to {@link #NON_REPEATED_CARDINALITY}, this represents a
+ * schema property with the "repeated" cardinality, or a path like "foo[1]". Otherwise, this
+ * represents a schema property that could have any cardinality, or a path like "foo".
+ */
+ public static class PathSegment {
+ /**
+ * A marker variable to signify that a PathSegment represents a schema property that isn't
+ * indexed into. The value is chosen to be invalid if used as an array index.
+ */
+ public static final int NON_REPEATED_CARDINALITY = -1;
+
+ @NonNull private final String mPropertyName;
+ private final int mPropertyIndex;
+
+ /**
+ * Creation method that accepts and validates both a property name and the index into the
+ * property.
+ *
+ * <p> The property name may not be blank. It also may not contain square brackets or
+ * dots, as they are control characters in property paths. The index into the property
+ * may not be negative, unless it is {@link #NON_REPEATED_CARDINALITY}, as these are
+ * invalid array indices.
+ * @param propertyName the name of the property
+ * @param propertyIndex the index into the property
+ * @return A new PathSegment
+ * @throws an {@link IllegalArgumentException} if the property name or index is invalid.
+ */
+ @NonNull
+ public static PathSegment create(@NonNull String propertyName, int propertyIndex) {
+ ObjectsCompat.requireNonNull(propertyName);
+ // A path may contain control characters, but a PathSegment may not
+ if (propertyName.isEmpty() || propertyName.contains("[") || propertyName.contains("]")
+ || propertyName.contains(".")) {
+ throw new IllegalArgumentException("Invalid propertyName value:" + propertyName);
+ }
+ // Has to be a positive integer or the special marker
+ if (propertyIndex < 0 && propertyIndex != NON_REPEATED_CARDINALITY) {
+ throw new IllegalArgumentException("Invalid propertyIndex value:" + propertyIndex);
+ }
+ return new PathSegment(propertyName, propertyIndex);
+ }
+
+ /**
+ * Creation method that accepts and validates a property name
+ *
+ * <p> The property index is set to {@link #NON_REPEATED_CARDINALITY}
+ * @param propertyName the name of the property
+ * @return A new PathSegment
+ */
+ @NonNull
+ public static PathSegment create(@NonNull String propertyName) {
+ return create(ObjectsCompat.requireNonNull(propertyName), NON_REPEATED_CARDINALITY);
+ }
+
+ /**
+ * Package-private constructor that accepts a property name and an index into the
+ * property without validating either of them
+ * @param propertyName the name of the property
+ * @param propertyIndex the index into the property
+ */
+ PathSegment(@NonNull String propertyName, int propertyIndex) {
+ mPropertyName = ObjectsCompat.requireNonNull(propertyName);
+ mPropertyIndex = propertyIndex;
+ }
+
+ /**
+ * @return the property name
+ */
+ @NonNull
+ public String getPropertyName() {
+ return mPropertyName;
+ }
+
+ /**
+ * Returns the index into the property, or {@link #NON_REPEATED_CARDINALITY} if this does
+ * not represent a PathSegment with an index.
+ */
+ public int getPropertyIndex() {
+ return mPropertyIndex;
+ }
+
+ /** Returns a path representing a PathSegment, either "foo" or "foo[1]" */
+ @Override
+ @NonNull
+ public String toString() {
+ if (mPropertyIndex != NON_REPEATED_CARDINALITY) {
+ return new StringBuilder(mPropertyName)
+ .append("[").append(mPropertyIndex).append("]").toString();
+ }
+ return mPropertyName;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null) return false;
+ if (!(o instanceof PathSegment)) return false;
+ PathSegment that = (PathSegment) o;
+ return mPropertyIndex == that.mPropertyIndex
+ && mPropertyName.equals(that.mPropertyName);
+ }
+
+ @Override
+ public int hashCode() {
+ return ObjectsCompat.hash(mPropertyName, mPropertyIndex);
+ }
+ }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/PutDocumentsRequest.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PutDocumentsRequest.java
index 4d4a000..dff69b2 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/PutDocumentsRequest.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/PutDocumentsRequest.java
@@ -37,7 +37,7 @@
* {@link GenericDocument}.
* <!--@exportToFramework:else()-->
*
- * @see AppSearchSession#put
+ * @see AppSearchSession#putAsync
*/
public final class PutDocumentsRequest {
private final List<GenericDocument> mDocuments;
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/RemoveByDocumentIdRequest.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/RemoveByDocumentIdRequest.java
index addb96a..38be17a 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/RemoveByDocumentIdRequest.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/RemoveByDocumentIdRequest.java
@@ -29,7 +29,7 @@
* Encapsulates a request to remove documents by namespace and IDs from the
* {@link AppSearchSession} database.
*
- * @see AppSearchSession#remove
+ * @see AppSearchSession#removeAsync
*/
public final class RemoveByDocumentIdRequest {
private final String mNamespace;
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportSystemUsageRequest.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportSystemUsageRequest.java
index db26931..12422eb 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportSystemUsageRequest.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportSystemUsageRequest.java
@@ -23,9 +23,9 @@
* A request to report usage of a document owned by another app from a system UI surface.
*
* <p>Usage reported in this way is measured separately from usage reported via
- * {@link AppSearchSession#reportUsage}.
+ * {@link AppSearchSession#reportUsageAsync}.
*
- * <p>See {@link GlobalSearchSession#reportSystemUsage} for a detailed description of usage
+ * <p>See {@link GlobalSearchSession#reportSystemUsageAsync} for a detailed description of usage
* reporting.
*/
public final class ReportSystemUsageRequest {
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportUsageRequest.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportUsageRequest.java
index 25edaf4..14b70c7 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportUsageRequest.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/ReportUsageRequest.java
@@ -22,9 +22,9 @@
/**
* A request to report usage of a document.
*
- * <p>See {@link AppSearchSession#reportUsage} for a detailed description of usage reporting.
+ * <p>See {@link AppSearchSession#reportUsageAsync} for a detailed description of usage reporting.
*
- * @see AppSearchSession#reportUsage
+ * @see AppSearchSession#reportUsageAsync
*/
public final class ReportUsageRequest {
private final String mNamespace;
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResult.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResult.java
index 7350991..4428927 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResult.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResult.java
@@ -268,52 +268,68 @@
}
/**
- * This class represents a match objects for any Snippets that might be present in
- * {@link SearchResults} from query. Using this class
- * user can get the full text, exact matches and Snippets of document content for a given match.
+ * This class represents match objects for any Snippets that might be present in
+ * {@link SearchResults} from a query. Using this class, the user can get:
+ * <ul>
+ * <li>the full text - all of the text in that String property</li>
+ * <li>the exact term match - the 'term' (full word) that matched the query</li>
+ * <li>the subterm match - the portion of the matched term that appears in the query</li>
+ * <li>a suggested text snippet - a portion of the full text surrounding the exact term
+ * match, set to term boundaries. The size of the snippet is specified in
+ * {@link SearchSpec.Builder#setMaxSnippetSize}</li>
+ * </ul>
+ * for each match in the document.
*
* <p>Class Example 1:
- * A document contains following text in property subject:
- * <p>A commonly used fake word is foo. Another nonsense word that’s used a lot is bar.
+ * <p>A document contains the following text in property "subject":
+ * <p>"A commonly used fake word is foo. Another nonsense word that’s used a lot is bar."
*
- * <p>If the queryExpression is "foo".
- *
- * <p>{@link MatchInfo#getPropertyPath()} returns "subject"
- * <p>{@link MatchInfo#getFullText()} returns "A commonly used fake word is foo. Another
- * nonsense word that’s used a lot is bar."
- * <p>{@link MatchInfo#getExactMatchRange()} returns [29, 32]
- * <p>{@link MatchInfo#getExactMatch()} returns "foo"
- * <p>{@link MatchInfo#getSubmatchRange()} returns [29, 32]
- * <p>{@link MatchInfo#getSubmatch()} returns "foo"
- * <p>{@link MatchInfo#getSnippetRange()} returns [26, 33]
- * <p>{@link MatchInfo#getSnippet()} returns "is foo."
+ * <p>If the queryExpression is "foo" and {@link SearchSpec#getMaxSnippetSize} is 10,
+ * <ul>
+ * <li>{@link MatchInfo#getPropertyPath()} returns "subject"</li>
+ * <li>{@link MatchInfo#getFullText()} returns "A commonly used fake word is foo. Another
+ * nonsense word that’s used a lot is bar."</li>
+ * <li>{@link MatchInfo#getExactMatchRange()} returns [29, 32]</li>
+ * <li>{@link MatchInfo#getExactMatch()} returns "foo"</li>
+ * <li>{@link MatchInfo#getSubmatchRange()} returns [29, 32]</li>
+ * <li>{@link MatchInfo#getSubmatch()} returns "foo"</li>
+ * <li>{@link MatchInfo#getSnippetRange()} returns [26, 33]</li>
+ * <li>{@link MatchInfo#getSnippet()} returns "is foo."</li>
+ * </ul>
* <p>
* <p>Class Example 2:
- * A document contains a property name sender which contains 2 property names name and email, so
- * we will have 2 property paths: {@code sender.name} and {@code sender.email}.
- * <p>Let {@code sender.name = "Test Name Jr."} and
- * {@code sender.email = "TestNameJr@gmail.com"}
+ * <p>A document contains one property named "subject" and one property named "sender" which
+ * contains a "name" property.
*
- * <p>If the queryExpression is "Test". We will have 2 matches.
+ * In this case, we will have 2 property paths: {@code sender.name} and {@code subject}.
+ * <p>Let {@code sender.name = "Test Name Jr."} and
+ * {@code subject = "Testing 1 2 3"}
+ *
+ * <p>If the queryExpression is "Test" with {@link SearchSpec#TERM_MATCH_PREFIX} and
+ * {@link SearchSpec#getMaxSnippetSize} is 10. We will have 2 matches:
*
* <p> Match-1
- * <p>{@link MatchInfo#getPropertyPath()} returns "sender.name"
- * <p>{@link MatchInfo#getFullText()} returns "Test Name Jr."
- * <p>{@link MatchInfo#getExactMatchRange()} returns [0, 4]
- * <p>{@link MatchInfo#getExactMatch()} returns "Test"
- * <p>{@link MatchInfo#getSubmatchRange()} returns [0, 4]
- * <p>{@link MatchInfo#getSubmatch()} returns "Test"
- * <p>{@link MatchInfo#getSnippetRange()} returns [0, 9]
- * <p>{@link MatchInfo#getSnippet()} returns "Test Name"
+ * <ul>
+ * <li>{@link MatchInfo#getPropertyPath()} returns "sender.name"</li>
+ * <li>{@link MatchInfo#getFullText()} returns "Test Name Jr."</li>
+ * <li>{@link MatchInfo#getExactMatchRange()} returns [0, 4]</li>
+ * <li>{@link MatchInfo#getExactMatch()} returns "Test"</li>
+ * <li>{@link MatchInfo#getSubmatchRange()} returns [0, 4]</li>
+ * <li>{@link MatchInfo#getSubmatch()} returns "Test"</li>
+ * <li>{@link MatchInfo#getSnippetRange()} returns [0, 9]</li>
+ * <li>{@link MatchInfo#getSnippet()} returns "Test Name"</li>
+ * </ul>
* <p> Match-2
- * <p>{@link MatchInfo#getPropertyPath()} returns "sender.email"
- * <p>{@link MatchInfo#getFullText()} returns "TestNameJr@gmail.com"
- * <p>{@link MatchInfo#getExactMatchRange()} returns [0, 20]
- * <p>{@link MatchInfo#getExactMatch()} returns "TestNameJr@gmail.com"
- * <p>{@link MatchInfo#getSubmatchRange()} returns [0, 4]
- * <p>{@link MatchInfo#getSubmatch()} returns "Test"
- * <p>{@link MatchInfo#getSnippetRange()} returns [0, 20]
- * <p>{@link MatchInfo#getSnippet()} returns "TestNameJr@gmail.com"
+ * <ul>
+ * <li>{@link MatchInfo#getPropertyPath()} returns "subject"</li>
+ * <li>{@link MatchInfo#getFullText()} returns "Testing 1 2 3"</li>
+ * <li>{@link MatchInfo#getExactMatchRange()} returns [0, 7]</li>
+ * <li>{@link MatchInfo#getExactMatch()} returns "Testing"</li>
+ * <li>{@link MatchInfo#getSubmatchRange()} returns [0, 4]</li>
+ * <li>{@link MatchInfo#getSubmatch()} returns "Test"</li>
+ * <li>{@link MatchInfo#getSnippetRange()} returns [0, 9]</li>
+ * <li>{@link MatchInfo#getSnippet()} returns "Testing 1"</li>
+ * </ul>
*/
public static final class MatchInfo {
/** The path of the matching snippet property. */
@@ -326,6 +342,8 @@
private static final String SNIPPET_RANGE_UPPER_FIELD = "snippetRangeUpper";
private final String mPropertyPath;
+ @Nullable
+ private PropertyPath mPropertyPathObject = null;
final Bundle mBundle;
/**
@@ -377,9 +395,32 @@
}
/**
+ * Gets a {@link PropertyPath} object representing the property path corresponding to the
+ * given entry.
+ *
+ * <p> Methods such as {@link GenericDocument#getPropertyDocument} accept a path as a
+ * string rather than a {@link PropertyPath} object. However, you may want to manipulate
+ * the path before getting a property document. This method returns a {@link PropertyPath}
+ * rather than a String for easier path manipulation, which can then be converted to a
+ * String.
+ *
+ * @see #getPropertyPath
+ * @see PropertyPath
+ */
+ @NonNull
+ public PropertyPath getPropertyPathObject() {
+ if (mPropertyPathObject == null) {
+ mPropertyPathObject = new PropertyPath(mPropertyPath);
+ }
+ return mPropertyPathObject;
+ }
+
+ /**
* Gets the full text corresponding to the given entry.
- * <p>For class example this returns "A commonly used fake word is foo. Another nonsense
+ * <p>Class example 1: this returns "A commonly used fake word is foo. Another nonsense
* word that's used a lot is bar."
+ * <p>Class example 2: for the first {@link MatchInfo}, this returns "Test Name Jr." and,
+ * for the second {@link MatchInfo}, this returns "Testing 1 2 3".
*/
@NonNull
public String getFullText() {
@@ -396,7 +437,7 @@
* Gets the {@link MatchRange} of the exact term of the given entry that matched the query.
* <p>Class example 1: this returns [29, 32].
* <p>Class example 2: for the first {@link MatchInfo}, this returns [0, 4] and, for the
- * second {@link MatchInfo}, this returns [0, 20].
+ * second {@link MatchInfo}, this returns [0, 7].
*/
@NonNull
public MatchRange getExactMatchRange() {
@@ -412,7 +453,7 @@
* Gets the exact term of the given entry that matched the query.
* <p>Class example 1: this returns "foo".
* <p>Class example 2: for the first {@link MatchInfo}, this returns "Test" and, for the
- * second {@link MatchInfo}, this returns "TestNameJr@gmail.com".
+ * second {@link MatchInfo}, this returns "Testing".
*/
@NonNull
public CharSequence getExactMatch() {
@@ -481,7 +522,7 @@
* {@link SearchSpec.Builder#setMaxSnippetSize}.
* <p>Class example 1: this returns [29, 41].
* <p>Class example 2: for the first {@link MatchInfo}, this returns [0, 9] and, for the
- * second {@link MatchInfo}, this returns [0, 20].
+ * second {@link MatchInfo}, this returns [0, 13].
*/
@NonNull
public MatchRange getSnippetRange() {
@@ -501,7 +542,7 @@
* the matched token with content on either side clipped to token boundaries.
* <p>Class example 1: this returns "foo. Another".
* <p>Class example 2: for the first {@link MatchInfo}, this returns "Test Name" and, for
- * the second {@link MatchInfo}, this returns "TestNameJr@gmail.com".
+ * the second {@link MatchInfo}, this returns "Testing 1 2 3".
*/
@NonNull
public CharSequence getSnippet() {
@@ -522,9 +563,6 @@
/** Extracts the matching string from the document. */
private static String getPropertyValues(GenericDocument document, String propertyName) {
- // In IcingLib snippeting is available for only 3 data types i.e String, double and
- // long, so we need to check which of these three are requested.
- // TODO (tytytyww): support double[] and long[].
String result = document.getPropertyString(propertyName);
if (result == null) {
throw new IllegalStateException(
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResults.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResults.java
index 6bf301f..23b6b5d 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResults.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchResults.java
@@ -30,7 +30,7 @@
* objects, referred to as a "page", limited by the size configured by
* {@link SearchSpec.Builder#setResultCountPerPage}.
*
- * <p>To fetch a page of results, call {@link #getNextPage()}.
+ * <p>To fetch a page of results, call {@link #getNextPageAsync()}.
*
* <p>All instances of {@link SearchResults} must call {@link SearchResults#close()} after the
* results are fetched.
@@ -50,7 +50,18 @@
* objects.
*/
@NonNull
- ListenableFuture<List<SearchResult>> getNextPage();
+ ListenableFuture<List<SearchResult>> getNextPageAsync();
+
+ /**
+ * @deprecated use {@link #getNextPageAsync}.
+ * @return a {@link ListenableFuture} which resolves to a list of {@link SearchResult}
+ * objects.
+ */
+ @NonNull
+ @Deprecated
+ default ListenableFuture<List<SearchResult>> getNextPage() {
+ return getNextPageAsync();
+ }
@Override
void close();
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSpec.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSpec.java
index 756cddf..75cdc0e 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSpec.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSpec.java
@@ -43,7 +43,6 @@
* This class represents the specification logic for AppSearch. It can be used to set the type of
* search, like prefix or exact only or apply filters to search for a specific schema type only etc.
*/
-// TODO(sidchhabra) : AddResultSpec fields for Snippets etc.
public final class SearchSpec {
/**
* Schema type to be used in {@link SearchSpec.Builder#addProjection} to apply
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSuggestionResult.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSuggestionResult.java
new file mode 100644
index 0000000..923c1e3
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSuggestionResult.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.app;
+
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.appsearch.util.BundleUtil;
+import androidx.core.util.Preconditions;
+
+/**
+ * The result class of the {@link AppSearchSession#searchSuggestionAsync}.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class SearchSuggestionResult {
+
+ private static final String SUGGESTED_RESULT_FIELD = "suggestedResult";
+ private final Bundle mBundle;
+ @Nullable
+ private Integer mHashCode;
+
+ SearchSuggestionResult(@NonNull Bundle bundle) {
+ mBundle = Preconditions.checkNotNull(bundle);
+ }
+
+ /**
+ * Returns the {@link Bundle} populated by this builder.
+ *
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ @NonNull
+ public Bundle getBundle() {
+ return mBundle;
+ }
+
+ /**
+ * Returns the suggested result that could be used as query expression in the
+ * {@link AppSearchSession#search}.
+ *
+ * <p>The suggested result will never be empty.
+ *
+ * <p>The suggested result only contains lowercase or special characters.
+ */
+ @NonNull
+ public String getSuggestedResult() {
+ return Preconditions.checkNotNull(mBundle.getString(SUGGESTED_RESULT_FIELD));
+ }
+
+ @Override
+ public boolean equals(@Nullable Object other) {
+ if (this == other) {
+ return true;
+ }
+ if (!(other instanceof SearchSuggestionResult)) {
+ return false;
+ }
+ SearchSuggestionResult otherResult = (SearchSuggestionResult) other;
+ return BundleUtil.deepEquals(this.mBundle, otherResult.mBundle);
+ }
+
+ @Override
+ public int hashCode() {
+ if (mHashCode == null) {
+ mHashCode = BundleUtil.deepHashCode(mBundle);
+ }
+ return mHashCode;
+ }
+
+ /** The Builder class of {@link SearchSuggestionResult}. */
+ public static final class Builder {
+ private String mSuggestedResult = "";
+
+ /**
+ * Sets the suggested result that could be used as query expression in the
+ * {@link AppSearchSession#search}.
+ *
+ * <p>The suggested result should only contain lowercase or special characters.
+ */
+ @NonNull
+ public Builder setSuggestedResult(@NonNull String suggestedResult) {
+ Preconditions.checkNotNull(suggestedResult);
+ Preconditions.checkStringNotEmpty(suggestedResult);
+ mSuggestedResult = suggestedResult;
+ return this;
+ }
+
+ /** Build a {@link SearchSuggestionResult} object*/
+ @NonNull
+ public SearchSuggestionResult build() {
+ Bundle bundle = new Bundle();
+ bundle.putString(SUGGESTED_RESULT_FIELD, mSuggestedResult);
+ return new SearchSuggestionResult(bundle);
+ }
+ }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSuggestionSpec.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSuggestionSpec.java
new file mode 100644
index 0000000..865cd89
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SearchSuggestionSpec.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.app;
+import android.os.Bundle;
+
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.core.util.Preconditions;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * This class represents the specification logic for AppSearch. It can be used to set the filter
+ * and settings of search a suggestions.
+ *
+ * @see AppSearchSession#searchSuggestionAsync(String, SearchSuggestionSpec)
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class SearchSuggestionSpec {
+ static final String NAMESPACE_FIELD = "namespace";
+ static final String MAXIMUM_RESULT_COUNT_FIELD = "maximumResultCount";
+
+ private final Bundle mBundle;
+ private final int mMaximumResultCount;
+
+ /** @hide */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public SearchSuggestionSpec(@NonNull Bundle bundle) {
+ Preconditions.checkNotNull(bundle);
+ mBundle = bundle;
+ mMaximumResultCount = bundle.getInt(MAXIMUM_RESULT_COUNT_FIELD);
+ Preconditions.checkArgument(mMaximumResultCount >= 1,
+ "MaximumResultCount must be positive.");
+ }
+
+ /**
+ * Returns the {@link Bundle} populated by this builder.
+ *
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ @NonNull
+ public Bundle getBundle() {
+ return mBundle;
+ }
+
+ /**
+ * Returns the maximum number of wanted suggestion that will be returned in the result object.
+ */
+ public int getMaximumResultCount() {
+ return mMaximumResultCount;
+ }
+
+ /**
+ * Returns the list of namespaces to search over.
+ *
+ * <p>If empty, will search over all namespaces.
+ */
+ @NonNull
+ public List<String> getFilterNamespaces() {
+ List<String> namespaces = mBundle.getStringArrayList(NAMESPACE_FIELD);
+ if (namespaces == null) {
+ return Collections.emptyList();
+ }
+ return Collections.unmodifiableList(namespaces);
+ }
+
+ /** Builder for {@link SearchSuggestionSpec objects}. */
+ public static final class Builder {
+ private ArrayList<String> mNamespaces = new ArrayList<>();
+ private final int mTotalResultCount;
+ private boolean mBuilt = false;
+
+ /**
+ * Creates an {@link SearchSuggestionSpec.Builder} object.
+ *
+ * @param maximumResultCount Sets the maximum number of suggestion in the returned object.
+ */
+ public Builder(@IntRange(from = 1) int maximumResultCount) {
+ Preconditions.checkArgument(maximumResultCount >= 1,
+ "maximumResultCount must be positive.");
+ mTotalResultCount = maximumResultCount;
+ }
+
+ /**
+ * Adds a namespace filter to {@link SearchSuggestionSpec} Entry. Only search for
+ * suggestions that has documents under the specified namespaces.
+ *
+ * <p>If unset, the query will search over all namespaces.
+ */
+ @NonNull
+ public Builder addFilterNamespaces(@NonNull String... namespaces) {
+ Preconditions.checkNotNull(namespaces);
+ resetIfBuilt();
+ return addFilterNamespaces(Arrays.asList(namespaces));
+ }
+
+ /**
+ * Adds a namespace filter to {@link SearchSuggestionSpec} Entry. Only search for
+ * suggestions that has documents under the specified namespaces.
+ *
+ * <p>If unset, the query will search over all namespaces.
+ */
+ @NonNull
+ public Builder addFilterNamespaces(@NonNull Collection<String> namespaces) {
+ Preconditions.checkNotNull(namespaces);
+ resetIfBuilt();
+ mNamespaces.addAll(namespaces);
+ return this;
+ }
+
+ /** Constructs a new {@link SearchSpec} from the contents of this builder. */
+ @NonNull
+ public SearchSuggestionSpec build() {
+ Bundle bundle = new Bundle();
+ bundle.putStringArrayList(NAMESPACE_FIELD, mNamespaces);
+ bundle.putInt(MAXIMUM_RESULT_COUNT_FIELD, mTotalResultCount);
+ mBuilt = true;
+ return new SearchSuggestionSpec(bundle);
+ }
+
+ private void resetIfBuilt() {
+ if (mBuilt) {
+ mNamespaces = new ArrayList<>(mNamespaces);
+ mBuilt = false;
+ }
+ }
+ }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaRequest.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaRequest.java
index e09eec9..52e953a 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaRequest.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaRequest.java
@@ -18,14 +18,18 @@
import android.annotation.SuppressLint;
+import androidx.annotation.IntDef;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
+import androidx.annotation.RequiresFeature;
import androidx.annotation.RestrictTo;
import androidx.appsearch.exceptions.AppSearchException;
import androidx.collection.ArrayMap;
import androidx.collection.ArraySet;
import androidx.core.util.Preconditions;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -76,13 +80,105 @@
* will be set into both {@link SetSchemaResponse#getIncompatibleTypes()} and
* {@link SetSchemaResponse#getMigratedTypes()}. See the migration section below.
* </ul>
- * @see AppSearchSession#setSchema
+ * @see AppSearchSession#setSchemaAsync
* @see Migrator
*/
public final class SetSchemaRequest {
+
+ /**
+ * List of Android Permission are supported in
+ * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+ *
+ * @see android.Manifest.permission
+ * @hide
+ */
+ @IntDef(value = {
+ READ_SMS,
+ READ_CALENDAR,
+ READ_CONTACTS,
+ READ_EXTERNAL_STORAGE,
+ READ_HOME_APP_SEARCH_DATA,
+ READ_ASSISTANT_APP_SEARCH_DATA,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ // @exportToFramework:endStrip()
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public @interface AppSearchSupportedPermission {}
+
+ /**
+ * The {@link android.Manifest.permission#READ_SMS} AppSearch supported in
+ * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+ */
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ // @exportToFramework:endStrip()
+ public static final int READ_SMS = 1;
+
+ /**
+ * The {@link android.Manifest.permission#READ_CALENDAR} AppSearch supported in
+ * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+ */
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ // @exportToFramework:endStrip()
+ public static final int READ_CALENDAR = 2;
+
+ /**
+ * The {@link android.Manifest.permission#READ_CONTACTS} AppSearch supported in
+ * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+ */
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ // @exportToFramework:endStrip()
+ public static final int READ_CONTACTS = 3;
+
+ /**
+ * The {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} AppSearch supported in
+ * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+ */
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ // @exportToFramework:endStrip()
+ public static final int READ_EXTERNAL_STORAGE = 4;
+
+ /**
+ * The {@link android.Manifest.permission#READ_HOME_APP_SEARCH_DATA} AppSearch supported in
+ * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+ */
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ // @exportToFramework:endStrip()
+ public static final int READ_HOME_APP_SEARCH_DATA = 5;
+
+ /**
+ * The {@link android.Manifest.permission#READ_ASSISTANT_APP_SEARCH_DATA} AppSearch supported in
+ * {@link SetSchemaRequest.Builder#addRequiredPermissionsForSchemaTypeVisibility}
+ */
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ // @exportToFramework:endStrip()
+ public static final int READ_ASSISTANT_APP_SEARCH_DATA = 6;
+
private final Set<AppSearchSchema> mSchemas;
private final Set<String> mSchemasNotDisplayedBySystem;
private final Map<String, Set<PackageIdentifier>> mSchemasVisibleToPackages;
+ private final Map<String, Set<Set<Integer>>> mSchemasVisibleToPermissions;
private final Map<String, Migrator> mMigrators;
private final boolean mForceOverride;
private final int mVersion;
@@ -90,12 +186,14 @@
SetSchemaRequest(@NonNull Set<AppSearchSchema> schemas,
@NonNull Set<String> schemasNotDisplayedBySystem,
@NonNull Map<String, Set<PackageIdentifier>> schemasVisibleToPackages,
+ @NonNull Map<String, Set<Set<Integer>>> schemasVisibleToPermissions,
@NonNull Map<String, Migrator> migrators,
boolean forceOverride,
int version) {
mSchemas = Preconditions.checkNotNull(schemas);
mSchemasNotDisplayedBySystem = Preconditions.checkNotNull(schemasNotDisplayedBySystem);
mSchemasVisibleToPackages = Preconditions.checkNotNull(schemasVisibleToPackages);
+ mSchemasVisibleToPermissions = Preconditions.checkNotNull(schemasVisibleToPermissions);
mMigrators = Preconditions.checkNotNull(migrators);
mForceOverride = forceOverride;
mVersion = version;
@@ -125,13 +223,46 @@
@NonNull
public Map<String, Set<PackageIdentifier>> getSchemasVisibleToPackages() {
Map<String, Set<PackageIdentifier>> copy = new ArrayMap<>();
- for (String key : mSchemasVisibleToPackages.keySet()) {
- copy.put(key, new ArraySet<>(mSchemasVisibleToPackages.get(key)));
+ for (Map.Entry<String, Set<PackageIdentifier>> entry :
+ mSchemasVisibleToPackages.entrySet()) {
+ copy.put(entry.getKey(), new ArraySet<>(entry.getValue()));
}
return copy;
}
/**
+ * Returns a mapping of schema types to the Map of {@link android.Manifest.permission}
+ * combinations that querier must hold to access that schema type.
+ *
+ * <p> The querier could read the {@link GenericDocument} objects under the {@code schemaType}
+ * if they holds ALL required permissions of ANY of the individual value sets.
+ *
+ * <p>For example, if the Map contains {@code {% verbatim %}{{permissionA, PermissionB},
+ * {PermissionC, PermissionD}, {PermissionE}}{% endverbatim %}}.
+ * <ul>
+ * <li>A querier holds both PermissionA and PermissionB has access.</li>
+ * <li>A querier holds both PermissionC and PermissionD has access.</li>
+ * <li>A querier holds only PermissionE has access.</li>
+ * <li>A querier holds both PermissionA and PermissionE has access.</li>
+ * <li>A querier holds only PermissionA doesn't have access.</li>
+ * <li>A querier holds both PermissionA and PermissionC doesn't have access.</li>
+ * </ul>
+ *
+ * <p>It’s inefficient to call this method repeatedly.
+ *
+ * @return The map contains schema type and all combinations of required permission for querier
+ * to access it. The supported Permission are {@link SetSchemaRequest#READ_SMS},
+ * {@link SetSchemaRequest#READ_CALENDAR}, {@link SetSchemaRequest#READ_CONTACTS},
+ * {@link SetSchemaRequest#READ_EXTERNAL_STORAGE},
+ * {@link SetSchemaRequest#READ_HOME_APP_SEARCH_DATA} and
+ * {@link SetSchemaRequest#READ_ASSISTANT_APP_SEARCH_DATA}.
+ */
+ @NonNull
+ public Map<String, Set<Set<Integer>>> getRequiredPermissionsForSchemaTypeVisibility() {
+ return deepCopy(mSchemasVisibleToPermissions);
+ }
+
+ /**
* Returns the map of {@link Migrator}, the key will be the schema type of the
* {@link Migrator} associated with.
*/
@@ -174,6 +305,7 @@
private ArraySet<String> mSchemasNotDisplayedBySystem = new ArraySet<>();
private ArrayMap<String, Set<PackageIdentifier>> mSchemasVisibleToPackages =
new ArrayMap<>();
+ private ArrayMap<String, Set<Set<Integer>>> mSchemasVisibleToPermissions = new ArrayMap<>();
private ArrayMap<String, Migrator> mMigrators = new ArrayMap<>();
private boolean mForceOverride = false;
private int mVersion = DEFAULT_VERSION;
@@ -255,7 +387,7 @@
* and visible on any system UI surface.
*
* <p>This setting applies to the provided {@code schemaType} only, and does not persist
- * across {@link AppSearchSession#setSchema} calls.
+ * across {@link AppSearchSession#setSchemaAsync} calls.
*
* <p>The default behavior, if this method is not called, is to allow types to be
* displayed on system UI surfaces.
@@ -280,6 +412,72 @@
}
/**
+ * Adds a set of required Android {@link android.Manifest.permission} combination to the
+ * given schema type.
+ *
+ * <p> If the querier holds ALL of the required permissions in this combination, they will
+ * have access to read {@link GenericDocument} objects of the given schema type.
+ *
+ * <p> You can call this method to add multiple permission combinations, and the querier
+ * will have access if they holds ANY of the combinations.
+ *
+ * <p>The supported Permissions are {@link #READ_SMS}, {@link #READ_CALENDAR},
+ * {@link #READ_CONTACTS}, {@link #READ_EXTERNAL_STORAGE},
+ * {@link #READ_HOME_APP_SEARCH_DATA} and {@link #READ_ASSISTANT_APP_SEARCH_DATA}.
+ *
+ * @see android.Manifest.permission#READ_SMS
+ * @see android.Manifest.permission#READ_CALENDAR
+ * @see android.Manifest.permission#READ_CONTACTS
+ * @see android.Manifest.permission#READ_EXTERNAL_STORAGE
+ * @see android.Manifest.permission#READ_HOME_APP_SEARCH_DATA
+ * @see android.Manifest.permission#READ_ASSISTANT_APP_SEARCH_DATA
+ * @param schemaType The schema type to set visibility on.
+ * @param permissions A set of required Android permissions the caller need to hold
+ * to access {@link GenericDocument} objects that under the given
+ * schema.
+ * @throws IllegalArgumentException – if input unsupported permission.
+ */
+ // Merged list available from getRequiredPermissionsForSchemaTypeVisibility
+ @SuppressLint("MissingGetterMatchingBuilder")
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ // @exportToFramework:endStrip()
+ @NonNull
+ public Builder addRequiredPermissionsForSchemaTypeVisibility(@NonNull String schemaType,
+ @AppSearchSupportedPermission @NonNull Set<Integer> permissions) {
+ Preconditions.checkNotNull(schemaType);
+ Preconditions.checkNotNull(permissions);
+ for (int permission : permissions) {
+ Preconditions.checkArgumentInRange(permission, READ_SMS,
+ READ_ASSISTANT_APP_SEARCH_DATA, "permission");
+ }
+ resetIfBuilt();
+ Set<Set<Integer>> visibleToPermissions = mSchemasVisibleToPermissions.get(schemaType);
+ if (visibleToPermissions == null) {
+ visibleToPermissions = new ArraySet<>();
+ mSchemasVisibleToPermissions.put(schemaType, visibleToPermissions);
+ }
+ visibleToPermissions.add(permissions);
+ return this;
+ }
+
+ /** Clears all required permissions combinations for the given schema type. */
+ // @exportToFramework:startStrip()
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ // @exportToFramework:endStrip()
+ @NonNull
+ public Builder clearRequiredPermissionsForSchemaTypeVisibility(@NonNull String schemaType) {
+ Preconditions.checkNotNull(schemaType);
+ resetIfBuilt();
+ mSchemasVisibleToPermissions.remove(schemaType);
+ return this;
+ }
+
+ /**
* Sets whether or not documents from the provided {@code schemaType} can be read by the
* specified package.
*
@@ -353,7 +551,7 @@
*
* @see SetSchemaRequest.Builder#setVersion
* @see SetSchemaRequest.Builder#addSchemas
- * @see AppSearchSession#setSchema
+ * @see AppSearchSession#setSchemaAsync
*/
@NonNull
@SuppressLint("MissingGetterMatchingBuilder") // Getter return plural objects.
@@ -388,7 +586,7 @@
*
* @see SetSchemaRequest.Builder#setVersion
* @see SetSchemaRequest.Builder#addSchemas
- * @see AppSearchSession#setSchema
+ * @see AppSearchSession#setSchemaAsync
*/
@NonNull
public Builder setMigrators(@NonNull Map<String, Migrator> migrators) {
@@ -406,7 +604,7 @@
* visible on any system UI surface.
*
* <p>This setting applies to the provided {@link androidx.appsearch.annotation.Document}
- * annotated class only, and does not persist across {@link AppSearchSession#setSchema}
+ * annotated class only, and does not persist across {@link AppSearchSession#setSchemaAsync}
* calls.
*
* <p>The default behavior, if this method is not called, is to allow types to be
@@ -469,6 +667,66 @@
return setSchemaTypeVisibilityForPackage(factory.getSchemaName(), visible,
packageIdentifier);
}
+
+ /**
+ * Adds a set of required Android {@link android.Manifest.permission} combination to the
+ * given schema type.
+ *
+ * <p> If the querier holds ALL of the required permissions in this combination, they will
+ * have access to read {@link GenericDocument} objects of the given schema type.
+ *
+ * <p> You can call this method to add multiple permission combinations, and the querier
+ * will have access if they holds ANY of the combinations.
+ *
+ * <p>The supported Permissions are {@link #READ_SMS}, {@link #READ_CALENDAR},
+ * {@link #READ_CONTACTS}, {@link #READ_EXTERNAL_STORAGE},
+ * {@link #READ_HOME_APP_SEARCH_DATA} and {@link #READ_ASSISTANT_APP_SEARCH_DATA}.
+ *
+ * @see android.Manifest.permission#READ_SMS
+ * @see android.Manifest.permission#READ_CALENDAR
+ * @see android.Manifest.permission#READ_CONTACTS
+ * @see android.Manifest.permission#READ_EXTERNAL_STORAGE
+ * @see android.Manifest.permission#READ_HOME_APP_SEARCH_DATA
+ * @see android.Manifest.permission#READ_ASSISTANT_APP_SEARCH_DATA
+ * @param documentClass The {@link androidx.appsearch.annotation.Document} class to set
+ * visibility on.
+ * @param permissions A set of required Android permissions the caller need to hold
+ * to access {@link GenericDocument} objects that under the given
+ * schema.
+ * @throws IllegalArgumentException – if input unsupported permission.
+ */
+ // Merged map available from getRequiredPermissionsForSchemaTypeVisibility
+ @SuppressLint("MissingGetterMatchingBuilder")
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ @NonNull
+ public Builder addRequiredPermissionsForDocumentClassVisibility(
+ @NonNull Class<?> documentClass,
+ @AppSearchSupportedPermission @NonNull Set<Integer> permissions)
+ throws AppSearchException {
+ Preconditions.checkNotNull(documentClass);
+ resetIfBuilt();
+ DocumentClassFactoryRegistry registry = DocumentClassFactoryRegistry.getInstance();
+ DocumentClassFactory<?> factory = registry.getOrCreateFactory(documentClass);
+ return addRequiredPermissionsForSchemaTypeVisibility(
+ factory.getSchemaName(), permissions);
+ }
+
+ /** Clears all required permissions combinations for the given schema type. */
+ @RequiresFeature(
+ enforcement = "androidx.appsearch.app.Features#isFeatureSupported",
+ name = Features.ADD_PERMISSIONS_AND_GET_VISIBILITY)
+ @NonNull
+ public Builder clearRequiredPermissionsForDocumentClassVisibility(
+ @NonNull Class<?> documentClass)
+ throws AppSearchException {
+ Preconditions.checkNotNull(documentClass);
+ resetIfBuilt();
+ DocumentClassFactoryRegistry registry = DocumentClassFactoryRegistry.getInstance();
+ DocumentClassFactory<?> factory = registry.getOrCreateFactory(documentClass);
+ return clearRequiredPermissionsForSchemaTypeVisibility(factory.getSchemaName());
+ }
// @exportToFramework:endStrip()
/**
@@ -497,7 +755,7 @@
*
* <p>Setting a version number that is different from the version number currently stored
* in AppSearch will result in AppSearch calling the {@link Migrator}s provided to
- * {@link AppSearchSession#setSchema} to migrate the documents already in AppSearch from
+ * {@link AppSearchSession#setSchemaAsync} to migrate the documents already in AppSearch from
* the previous version to the one set in this request. The version number can be
* updated without any other changes to the set of schemas.
*
@@ -513,7 +771,7 @@
*
* @throws IllegalArgumentException if the version is negative.
*
- * @see AppSearchSession#setSchema
+ * @see AppSearchSession#setSchemaAsync
* @see Migrator
* @see SetSchemaRequest.Builder#setMigrator
*/
@@ -539,6 +797,7 @@
// Create a copy because we're going to remove from the set for verification purposes.
Set<String> referencedSchemas = new ArraySet<>(mSchemasNotDisplayedBySystem);
referencedSchemas.addAll(mSchemasVisibleToPackages.keySet());
+ referencedSchemas.addAll(mSchemasVisibleToPermissions.keySet());
for (AppSearchSchema schema : mSchemas) {
referencedSchemas.remove(schema.getSchemaType());
@@ -558,6 +817,7 @@
mSchemas,
mSchemasNotDisplayedBySystem,
mSchemasVisibleToPackages,
+ mSchemasVisibleToPermissions,
mMigrators,
mForceOverride,
mVersion);
@@ -573,6 +833,8 @@
}
mSchemasVisibleToPackages = schemasVisibleToPackages;
+ mSchemasVisibleToPermissions = deepCopy(mSchemasVisibleToPermissions);
+
mSchemas = new ArraySet<>(mSchemas);
mSchemasNotDisplayedBySystem = new ArraySet<>(mSchemasNotDisplayedBySystem);
mMigrators = new ArrayMap<>(mMigrators);
@@ -580,4 +842,17 @@
}
}
}
+
+ static ArrayMap<String, Set<Set<Integer>>> deepCopy(@NonNull Map<String,
+ Set<Set<Integer>>> original) {
+ ArrayMap<String, Set<Set<Integer>>> copy = new ArrayMap<>(original.size());
+ for (Map.Entry<String, Set<Set<Integer>>> entry : original.entrySet()) {
+ Set<Set<Integer>> valueCopy = new ArraySet<>();
+ for (Set<Integer> innerValue : entry.getValue()) {
+ valueCopy.add(new ArraySet<>(innerValue));
+ }
+ copy.put(entry.getKey(), valueCopy);
+ }
+ return copy;
+ }
}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaResponse.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaResponse.java
index 88e6645..3f8ce5e 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaResponse.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaResponse.java
@@ -30,7 +30,7 @@
import java.util.List;
import java.util.Set;
-/** The response class of {@link AppSearchSession#setSchema} */
+/** The response class of {@link AppSearchSession#setSchemaAsync} */
public class SetSchemaResponse {
private static final String DELETED_TYPES_FIELD = "deletedTypes";
@@ -102,7 +102,7 @@
*
* <p>A "deleted" type is a schema type that was previously a part of the database schema but
* was not present in the {@link SetSchemaRequest} object provided in the
- * {@link AppSearchSession#setSchema) call.
+ * {@link AppSearchSession#setSchemaAsync} call.
*
* <p>Documents for a deleted type are removed from the database.
*/
@@ -117,7 +117,7 @@
/**
* Returns a {@link Set} of schema type that were migrated by the
- * {@link AppSearchSession#setSchema} call.
+ * {@link AppSearchSession#setSchemaAsync} call.
*
* <p> A "migrated" type is a schema type that has triggered a {@link Migrator} instance to
* migrate documents of the schema type to another schema type, or to another version of the
@@ -139,13 +139,13 @@
/**
* Returns a {@link Set} of schema type whose new definitions set in the
- * {@link AppSearchSession#setSchema} call were incompatible with the pre-existing schema.
+ * {@link AppSearchSession#setSchemaAsync} call were incompatible with the pre-existing schema.
*
* <p>If a {@link Migrator} is provided for this type and the migration is success triggered.
* The type will also appear in {@link #getMigratedTypes()}.
*
* @see SetSchemaRequest
- * @see AppSearchSession#setSchema
+ * @see AppSearchSession#setSchemaAsync
* @see SetSchemaRequest.Builder#setForceOverride
*/
@NonNull
@@ -281,7 +281,7 @@
/**
* The class represents a post-migrated {@link GenericDocument} that failed to be saved by
- * {@link AppSearchSession#setSchema}.
+ * {@link AppSearchSession#setSchemaAsync}.
*/
public static class MigrationFailure {
private static final String SCHEMA_TYPE_FIELD = "schemaType";
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java
new file mode 100644
index 0000000..6f04dc5
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityDocument.java
@@ -0,0 +1,259 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package androidx.appsearch.app;
+
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.collection.ArraySet;
+import androidx.core.util.Preconditions;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Holds the visibility settings that apply to a schema type.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class VisibilityDocument extends GenericDocument {
+ /**
+ * The Schema type for documents that hold AppSearch's metadata, e.g. visibility settings.
+ */
+ public static final String SCHEMA_TYPE = "VisibilityType";
+ /** Namespace of documents that contain visibility settings */
+ public static final String NAMESPACE = "";
+
+ /**
+ * Property that holds the list of platform-hidden schemas, as part of the visibility settings.
+ */
+ private static final String NOT_DISPLAYED_BY_SYSTEM_PROPERTY = "notPlatformSurfaceable";
+
+ /** Property that holds the package name that can access a schema. */
+ private static final String PACKAGE_NAME_PROPERTY = "packageName";
+
+ /** Property that holds the SHA 256 certificate of the app that can access a schema. */
+ private static final String SHA_256_CERT_PROPERTY = "sha256Cert";
+
+ /** Property that holds the required permissions to access the schema. */
+ private static final String PERMISSION_PROPERTY = "permission";
+
+ // The initial schema version, one VisibilityDocument contains all visibility information for
+ // whole package.
+ public static final int SCHEMA_VERSION_DOC_PER_PACKAGE = 0;
+
+ // One VisibilityDocument contains visibility information for a single schema.
+ public static final int SCHEMA_VERSION_DOC_PER_SCHEMA = 1;
+
+ // One VisibilityDocument contains visibility information for a single schema.
+ public static final int SCHEMA_VERSION_NESTED_PERMISSION_SCHEMA = 2;
+
+ public static final int SCHEMA_VERSION_LATEST = SCHEMA_VERSION_NESTED_PERMISSION_SCHEMA;
+
+ /**
+ * Schema for the VisibilityStore's documents.
+ *
+ * <p>NOTE: If you update this, also update {@link #SCHEMA_VERSION_LATEST}.
+ */
+ public static final AppSearchSchema
+ SCHEMA = new AppSearchSchema.Builder(SCHEMA_TYPE)
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder(
+ NOT_DISPLAYED_BY_SYSTEM_PROPERTY)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder(PACKAGE_NAME_PROPERTY)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .addProperty(new AppSearchSchema.BytesPropertyConfig.Builder(SHA_256_CERT_PROPERTY)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .addProperty(new AppSearchSchema.DocumentPropertyConfig.Builder(PERMISSION_PROPERTY,
+ VisibilityPermissionDocument.SCHEMA_TYPE)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .build();
+
+ public VisibilityDocument(@NonNull GenericDocument genericDocument) {
+ super(genericDocument);
+ }
+
+ public VisibilityDocument(@NonNull Bundle bundle) {
+ super(bundle);
+ }
+
+ /** Returns whether this schema is visible to the system. */
+ public boolean isNotDisplayedBySystem() {
+ return getPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY);
+ }
+
+ /**
+ * Returns a package name array which could access this schema. Use {@link #getSha256Certs()}
+ * to get package's sha 256 certs. The same index of package names array and sha256Certs array
+ * represents same package.
+ */
+ @NonNull
+ public String[] getPackageNames() {
+ return getPropertyStringArray(PACKAGE_NAME_PROPERTY);
+ }
+
+ /**
+ * Returns a package sha256Certs array which could access this schema. Use
+ * {@link #getPackageNames()} to get package's name. The same index of package names array
+ * and sha256Certs array represents same package.
+ */
+ @NonNull
+ public byte[][] getSha256Certs() {
+ return getPropertyBytesArray(SHA_256_CERT_PROPERTY);
+ }
+
+ /**
+ * Returns an array of Android Permissions that caller mush hold to access the schema
+ * this {@link VisibilityDocument} represents.
+ */
+ @Nullable
+ public Set<Set<Integer>> getVisibleToPermissions() {
+ GenericDocument[] permissionDocuments = getPropertyDocumentArray(PERMISSION_PROPERTY);
+ if (permissionDocuments == null) {
+ return Collections.emptySet();
+ }
+ Set<Set<Integer>> visibleToPermissions = new ArraySet<>(permissionDocuments.length);
+ for (GenericDocument permissionDocument : permissionDocuments) {
+ visibleToPermissions.add(
+ new VisibilityPermissionDocument(permissionDocument)
+ .getAllRequiredPermissions());
+ }
+ return visibleToPermissions;
+ }
+
+ /** Builder for {@link VisibilityDocument}. */
+ public static class Builder extends GenericDocument.Builder<Builder> {
+ private final Set<PackageIdentifier> mPackageIdentifiers = new ArraySet<>();
+
+ /**
+ * Creates a {@link Builder} for a {@link VisibilityDocument}.
+ *
+ * @param id The SchemaType of the {@link AppSearchSchema} that this
+ * {@link VisibilityDocument} represents. The package and database prefix will be
+ * added in server side. We are using prefixed schema type to be the final id of
+ * this {@link VisibilityDocument}.
+ */
+ public Builder(@NonNull String id) {
+ super(NAMESPACE, id, SCHEMA_TYPE);
+ }
+
+ /** Sets whether this schema has opted out of platform surfacing. */
+ @NonNull
+ public Builder setNotDisplayedBySystem(boolean notDisplayedBySystem) {
+ return setPropertyBoolean(NOT_DISPLAYED_BY_SYSTEM_PROPERTY,
+ notDisplayedBySystem);
+ }
+
+ /** Add {@link PackageIdentifier} of packages which has access to this schema. */
+ @NonNull
+ public Builder addVisibleToPackages(@NonNull Set<PackageIdentifier> packageIdentifiers) {
+ Preconditions.checkNotNull(packageIdentifiers);
+ mPackageIdentifiers.addAll(packageIdentifiers);
+ return this;
+ }
+
+ /** Add {@link PackageIdentifier} of packages which has access to this schema. */
+ @NonNull
+ public Builder addVisibleToPackage(@NonNull PackageIdentifier packageIdentifier) {
+ Preconditions.checkNotNull(packageIdentifier);
+ mPackageIdentifiers.add(packageIdentifier);
+ return this;
+ }
+
+ /**
+ * Set required permission sets for a package needs to hold to the schema this
+ * {@link VisibilityDocument} represents.
+ *
+ * <p> The querier could have access if they holds ALL required permissions of ANY of the
+ * individual value sets.
+ */
+ @NonNull
+ public Builder setVisibleToPermissions(@NonNull Set<Set<Integer>> visibleToPermissions) {
+ Preconditions.checkNotNull(visibleToPermissions);
+ VisibilityPermissionDocument[] permissionDocuments =
+ new VisibilityPermissionDocument[visibleToPermissions.size()];
+ int i = 0;
+ for (Set<Integer> allRequiredPermissions : visibleToPermissions) {
+ permissionDocuments[i++] = new VisibilityPermissionDocument
+ .Builder(NAMESPACE, /*id=*/String.valueOf(i))
+ .setVisibleToAllRequiredPermissions(allRequiredPermissions)
+ .build();
+ }
+ setPropertyDocument(PERMISSION_PROPERTY, permissionDocuments);
+ return this;
+ }
+
+ /** Build a {@link VisibilityDocument} */
+ @Override
+ @NonNull
+ public VisibilityDocument build() {
+ String[] packageNames = new String[mPackageIdentifiers.size()];
+ byte[][] sha256Certs = new byte[mPackageIdentifiers.size()][32];
+ int i = 0;
+ for (PackageIdentifier packageIdentifier : mPackageIdentifiers) {
+ packageNames[i] = packageIdentifier.getPackageName();
+ sha256Certs[i] = packageIdentifier.getSha256Certificate();
+ ++i;
+ }
+ setPropertyString(PACKAGE_NAME_PROPERTY, packageNames);
+ setPropertyBytes(SHA_256_CERT_PROPERTY, sha256Certs);
+ return new VisibilityDocument(super.build());
+ }
+ }
+
+
+ /** Build the List of {@link VisibilityDocument} from visibility settings. */
+ @NonNull
+ public static List<VisibilityDocument> toVisibilityDocuments(
+ @NonNull SetSchemaRequest setSchemaRequest) {
+ Set<AppSearchSchema> searchSchemas = setSchemaRequest.getSchemas();
+ Set<String> schemasNotDisplayedBySystem = setSchemaRequest.getSchemasNotDisplayedBySystem();
+ Map<String, Set<PackageIdentifier>> schemasVisibleToPackages =
+ setSchemaRequest.getSchemasVisibleToPackages();
+ Map<String, Set<Set<Integer>>> schemasVisibleToPermissions =
+ setSchemaRequest.getRequiredPermissionsForSchemaTypeVisibility();
+
+ List<VisibilityDocument> visibilityDocuments = new ArrayList<>(searchSchemas.size());
+
+ for (AppSearchSchema searchSchema : searchSchemas) {
+ String schemaType = searchSchema.getSchemaType();
+ VisibilityDocument.Builder documentBuilder =
+ new VisibilityDocument.Builder(/*id=*/searchSchema.getSchemaType());
+ documentBuilder.setNotDisplayedBySystem(
+ schemasNotDisplayedBySystem.contains(schemaType));
+
+ if (schemasVisibleToPackages.containsKey(schemaType)) {
+ documentBuilder.addVisibleToPackages(schemasVisibleToPackages.get(schemaType));
+ }
+
+ if (schemasVisibleToPermissions.containsKey(schemaType)) {
+ documentBuilder.setVisibleToPermissions(
+ schemasVisibleToPermissions.get(schemaType));
+ }
+ visibilityDocuments.add(documentBuilder.build());
+ }
+ return visibilityDocuments;
+ }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java
new file mode 100644
index 0000000..e859cb9
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/VisibilityPermissionDocument.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.app;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
+import androidx.collection.ArraySet;
+
+import java.util.Set;
+
+/**
+ * The nested document that holds all required permissions for a caller need to hold to access the
+ * schema which the outer {@link VisibilityDocument} represents.
+ * @hide
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class VisibilityPermissionDocument extends GenericDocument {
+
+ /**
+ * The Schema type for documents that hold AppSearch's metadata, e.g. visibility settings.
+ */
+ public static final String SCHEMA_TYPE = "VisibilityPermissionType";
+
+ /** Property that holds the required permissions to access the schema. */
+ private static final String ALL_REQUIRED_PERMISSIONS_PROPERTY = "allRequiredPermissions";
+
+ /**
+ * Schema for the VisibilityStore's documents.
+ *
+ * <p>NOTE: If you update this, also update {@link VisibilityDocument#SCHEMA_VERSION_LATEST}.
+ */
+ public static final AppSearchSchema
+ SCHEMA = new AppSearchSchema.Builder(SCHEMA_TYPE)
+ .addProperty(new AppSearchSchema.LongPropertyConfig
+ .Builder(ALL_REQUIRED_PERMISSIONS_PROPERTY)
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_REPEATED)
+ .build())
+ .build();
+
+ VisibilityPermissionDocument(@NonNull GenericDocument genericDocument) {
+ super(genericDocument);
+ }
+
+ /**
+ * Returns an array of Android Permissions that caller mush hold to access the schema
+ * that the outer {@link VisibilityDocument} represents.
+ */
+ @Nullable
+ public Set<Integer> getAllRequiredPermissions() {
+ return toInts(getPropertyLongArray(ALL_REQUIRED_PERMISSIONS_PROPERTY));
+ }
+
+ /** Builder for {@link VisibilityPermissionDocument}. */
+ public static class Builder extends GenericDocument.Builder<Builder> {
+
+ /**
+ * Creates a {@link VisibilityDocument.Builder} for a {@link VisibilityDocument}.
+ */
+ public Builder(@NonNull String namespace, @NonNull String id) {
+ super(namespace, id, SCHEMA_TYPE);
+ }
+
+ /** Sets whether this schema has opted out of platform surfacing. */
+ @NonNull
+ public Builder setVisibleToAllRequiredPermissions(
+ @NonNull Set<Integer> allRequiredPermissions) {
+ setPropertyLong(ALL_REQUIRED_PERMISSIONS_PROPERTY, toLongs(allRequiredPermissions));
+ return this;
+ }
+
+ /** Build a {@link VisibilityPermissionDocument} */
+ @Override
+ @NonNull
+ public VisibilityPermissionDocument build() {
+ return new VisibilityPermissionDocument(super.build());
+ }
+ }
+
+ @NonNull
+ static long[] toLongs(@NonNull Set<Integer> properties) {
+ long[] outputs = new long[properties.size()];
+ int i = 0;
+ for (int property : properties) {
+ outputs[i++] = property;
+ }
+ return outputs;
+ }
+
+ @Nullable
+ private static Set<Integer> toInts(@Nullable long[] properties) {
+ if (properties == null) {
+ return null;
+ }
+ Set<Integer> outputs = new ArraySet<>(properties.length);
+ for (long property : properties) {
+ outputs.add((int) property);
+ }
+ return outputs;
+ }
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/AppSearchObserverCallback.java b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/AppSearchObserverCallback.java
index c040aa2..c01917e 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/AppSearchObserverCallback.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/AppSearchObserverCallback.java
@@ -16,23 +16,13 @@
package androidx.appsearch.observer;
-import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
/**
- * An interface which apps can implement to subscribe to notifications of changes to AppSearch data.
+ * @deprecated use {@link ObserverCallback} instead.
+ * @hide
*/
-public interface AppSearchObserverCallback {
- /**
- * Callback to trigger after schema changes (schema type added, updated or removed).
- *
- * @param changeInfo Information about the nature of the change.
- */
- void onSchemaChanged(@NonNull SchemaChangeInfo changeInfo);
-
- /**
- * Callback to trigger after document changes (documents added, updated or removed).
- *
- * @param changeInfo Information about the nature of the change.
- */
- void onDocumentChanged(@NonNull DocumentChangeInfo changeInfo);
-}
+// TODO(b/209734214): Remove this after dogfooders and devices have migrated away from this class.
+@Deprecated
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public interface AppSearchObserverCallback extends ObserverCallback {}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/DocumentChangeInfo.java b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/DocumentChangeInfo.java
index 0fd9ae2..1fc52a0 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/DocumentChangeInfo.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/DocumentChangeInfo.java
@@ -21,8 +21,11 @@
import androidx.core.util.ObjectsCompat;
import androidx.core.util.Preconditions;
+import java.util.Collections;
+import java.util.Set;
+
/**
- * Contains information about an individual change detected by an {@link AppSearchObserverCallback}.
+ * Contains information about an individual change detected by an {@link ObserverCallback}.
*
* <p>This class reports information about document changes, i.e. when documents were added, updated
* or removed.
@@ -30,8 +33,11 @@
* <p>Changes are grouped by package, database, schema type and namespace. Each unique
* combination of these items will generate a unique {@link DocumentChangeInfo}.
*
+ * <p>Notifications are only sent for documents whose schema type matches an observer's schema
+ * filters (as determined by {@link ObserverSpec#getFilterSchemas}).
+ *
* <p>Note that document changes that happen during schema migration from calling
- * {@link androidx.appsearch.app.AppSearchSession#setSchema} are not reported via this class.
+ * {@link androidx.appsearch.app.AppSearchSession#setSchemaAsync} are not reported via this class.
* Such changes are reported through {@link SchemaChangeInfo}.
*/
public final class DocumentChangeInfo {
@@ -39,8 +45,7 @@
private final String mDatabase;
private final String mNamespace;
private final String mSchemaName;
-
- // TODO(b/193494000): Add the set of changed document IDs to this class
+ private final Set<String> mChangedDocumentIds;
/**
* Constructs a new {@link DocumentChangeInfo}.
@@ -49,16 +54,21 @@
* @param database The database in which the documents that changed reside.
* @param namespace The namespace in which the documents that changed reside.
* @param schemaName The name of the schema type that contains the changed documents.
+ * @param changedDocumentIds The set of document IDs that have been changed as part of this
+ * notification.
*/
public DocumentChangeInfo(
@NonNull String packageName,
@NonNull String database,
@NonNull String namespace,
- @NonNull String schemaName) {
+ @NonNull String schemaName,
+ @NonNull Set<String> changedDocumentIds) {
mPackageName = Preconditions.checkNotNull(packageName);
mDatabase = Preconditions.checkNotNull(database);
mNamespace = Preconditions.checkNotNull(namespace);
mSchemaName = Preconditions.checkNotNull(schemaName);
+ mChangedDocumentIds = Collections.unmodifiableSet(
+ Preconditions.checkNotNull(changedDocumentIds));
}
/** Returns the package name of the app which owns the documents that changed. */
@@ -85,20 +95,38 @@
return mSchemaName;
}
+ /**
+ * Returns the set of document IDs that have been changed as part of this notification.
+ *
+ * <p>This will never be empty.
+ */
+ @NonNull
+ public Set<String> getChangedDocumentIds() {
+ return mChangedDocumentIds;
+ }
+
@Override
public boolean equals(@Nullable Object o) {
- if (this == o) return true;
- if (!(o instanceof DocumentChangeInfo)) return false;
+ if (this == o) {
+ return true;
+ }
+
+ if (!(o instanceof DocumentChangeInfo)) {
+ return false;
+ }
+
DocumentChangeInfo that = (DocumentChangeInfo) o;
return mPackageName.equals(that.mPackageName)
&& mDatabase.equals(that.mDatabase)
&& mNamespace.equals(that.mNamespace)
- && mSchemaName.equals(that.mSchemaName);
+ && mSchemaName.equals(that.mSchemaName)
+ && mChangedDocumentIds.equals(that.mChangedDocumentIds);
}
@Override
public int hashCode() {
- return ObjectsCompat.hash(mPackageName, mDatabase, mNamespace, mSchemaName);
+ return ObjectsCompat.hash(
+ mPackageName, mDatabase, mNamespace, mSchemaName, mChangedDocumentIds);
}
@NonNull
@@ -109,6 +137,7 @@
+ ", database='" + mDatabase + '\''
+ ", namespace='" + mNamespace + '\''
+ ", schemaName='" + mSchemaName + '\''
+ + ", changedDocumentIds='" + mChangedDocumentIds + '\''
+ '}';
}
}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverCallback.java b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverCallback.java
new file mode 100644
index 0000000..cae945a
--- /dev/null
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverCallback.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appsearch.observer;
+
+import androidx.annotation.NonNull;
+
+/**
+ * An interface which apps can implement to subscribe to notifications of changes to AppSearch data.
+ */
+public interface ObserverCallback {
+ /**
+ * Callback to trigger after schema changes (schema type added, updated or removed).
+ *
+ * @param changeInfo Information about the nature of the change.
+ */
+ void onSchemaChanged(@NonNull SchemaChangeInfo changeInfo);
+
+ /**
+ * Callback to trigger after document changes (documents added, updated or removed).
+ *
+ * @param changeInfo Information about the nature of the change.
+ */
+ void onDocumentChanged(@NonNull DocumentChangeInfo changeInfo);
+}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverSpec.java b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverSpec.java
index e8979e5..6e3705e 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverSpec.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/ObserverSpec.java
@@ -37,8 +37,8 @@
import java.util.Set;
/**
- * Configures the types, namespaces and other properties that {@link AppSearchObserverCallback}
- * instances match against.
+ * Configures the types, namespaces and other properties that {@link ObserverCallback} instances
+ * match against.
*/
public final class ObserverSpec {
private static final String FILTER_SCHEMA_FIELD = "filterSchema";
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/SchemaChangeInfo.java b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/SchemaChangeInfo.java
index 6eff8c4..a70858d 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/observer/SchemaChangeInfo.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/observer/SchemaChangeInfo.java
@@ -21,11 +21,15 @@
import androidx.core.util.ObjectsCompat;
import androidx.core.util.Preconditions;
+import java.util.Collections;
+import java.util.Set;
+
/**
- * Contains information about a schema change detected by an {@link AppSearchObserverCallback}.
+ * Contains information about a schema change detected by an {@link ObserverCallback}.
*
* <p>This object will be sent when a schema type having a name matching an observer's schema
- * type filters has been added, updated, or removed.
+ * filters (as determined by {@link ObserverSpec#getFilterSchemas}) has been added, updated, or
+ * removed.
*
* <p>Note that schema changes may cause documents to be migrated or removed. When this happens,
* individual document updates will NOT be dispatched via {@link DocumentChangeInfo}. The only
@@ -35,18 +39,23 @@
public final class SchemaChangeInfo {
private final String mPackageName;
private final String mDatabaseName;
-
- // TODO(b/193494000): Add the set of changed schema names to this class
+ private final Set<String> mChangedSchemaNames;
/**
* Constructs a new {@link SchemaChangeInfo}.
*
* @param packageName The package name of the app which owns the schema that changed.
* @param databaseName The database in which the schema that changed resides.
+ * @param changedSchemaNames Names of schemas that have changed as part of this notification.
*/
- public SchemaChangeInfo(@NonNull String packageName, @NonNull String databaseName) {
+ public SchemaChangeInfo(
+ @NonNull String packageName,
+ @NonNull String databaseName,
+ @NonNull Set<String> changedSchemaNames) {
mPackageName = Preconditions.checkNotNull(packageName);
mDatabaseName = Preconditions.checkNotNull(databaseName);
+ mChangedSchemaNames = Collections.unmodifiableSet(
+ Preconditions.checkNotNull(changedSchemaNames));
}
/** Returns the package name of the app which owns the schema that changed. */
@@ -61,17 +70,35 @@
return mDatabaseName;
}
+ /**
+ * Returns the names of schema types affected by this change notification.
+ *
+ * <p>This will never be empty.
+ */
+ @NonNull
+ public Set<String> getChangedSchemaNames() {
+ return mChangedSchemaNames;
+ }
+
@Override
public boolean equals(@Nullable Object o) {
- if (this == o) return true;
- if (!(o instanceof SchemaChangeInfo)) return false;
+ if (this == o) {
+ return true;
+ }
+
+ if (!(o instanceof SchemaChangeInfo)) {
+ return false;
+ }
+
SchemaChangeInfo that = (SchemaChangeInfo) o;
- return mPackageName.equals(that.mPackageName) && mDatabaseName.equals(that.mDatabaseName);
+ return mPackageName.equals(that.mPackageName)
+ && mDatabaseName.equals(that.mDatabaseName)
+ && mChangedSchemaNames.equals(that.mChangedSchemaNames);
}
@Override
public int hashCode() {
- return ObjectsCompat.hash(mPackageName, mDatabaseName);
+ return ObjectsCompat.hash(mPackageName, mDatabaseName, mChangedSchemaNames);
}
@NonNull
@@ -80,6 +107,7 @@
return "SchemaChangeInfo{"
+ "packageName='" + mPackageName + '\''
+ ", databaseName='" + mDatabaseName + '\''
+ + ", changedSchemaNames='" + mChangedSchemaNames + '\''
+ '}';
}
}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/util/LogUtil.java b/appsearch/appsearch/src/main/java/androidx/appsearch/util/LogUtil.java
index b360ea0..2392374 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/util/LogUtil.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/util/LogUtil.java
@@ -21,7 +21,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
-import androidx.core.util.Preconditions;
+import androidx.annotation.Size;
/**
* Utilities for logging to logcat.
@@ -29,6 +29,11 @@
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public final class LogUtil {
+ /** Whether to log {@link Log#VERBOSE} and {@link Log#DEBUG} logs. */
+ // TODO(b/232285376): If it becomes possible to detect an eng build, turn this on by default
+ // for eng builds.
+ public static final boolean DEBUG = false;
+
/**
* The {@link #piiTrace} logs are intended for sensitive data that can't be enabled in
* production, so they are build-gated by this constant.
@@ -41,14 +46,10 @@
*/
private static final int PII_TRACE_LEVEL = 0;
- private final String mTag;
-
- public LogUtil(@NonNull String tag) {
- mTag = Preconditions.checkNotNull(tag);
- }
+ private LogUtil() {}
/** Returns whether piiTrace() is enabled (PII_TRACE_LEVEL > 0). */
- public boolean isPiiTraceEnabled() {
+ public static boolean isPiiTraceEnabled() {
return PII_TRACE_LEVEL > 0;
}
@@ -58,8 +59,9 @@
*
* <p>If {@link #PII_TRACE_LEVEL} is 0, nothing is logged and this method returns immediately.
*/
- public void piiTrace(@NonNull String message) {
- piiTrace(message, /*fastTraceObj=*/null, /*fullTraceObj=*/null);
+ public static void piiTrace(
+ @Size(min = 0, max = 23) @NonNull String tag, @NonNull String message) {
+ piiTrace(tag, message, /*fastTraceObj=*/null, /*fullTraceObj=*/null);
}
/**
@@ -69,8 +71,11 @@
* <p>If {@link #PII_TRACE_LEVEL} is 0, nothing is logged and this method returns immediately.
* <p>Otherwise, {@code traceObj} is logged if it is non-null.
*/
- public void piiTrace(@NonNull String message, @Nullable Object traceObj) {
- piiTrace(message, /*fastTraceObj=*/traceObj, /*fullTraceObj=*/null);
+ public static void piiTrace(
+ @Size(min = 0, max = 23) @NonNull String tag,
+ @NonNull String message,
+ @Nullable Object traceObj) {
+ piiTrace(tag, message, /*fastTraceObj=*/traceObj, /*fullTraceObj=*/null);
}
/**
@@ -82,8 +87,11 @@
* <p>If {@link #PII_TRACE_LEVEL} is 2, {@code fullTraceObj} is logged if it is non-null, else
* {@code fastTraceObj} is logged if it is non-null..
*/
- public void piiTrace(
- @NonNull String message, @Nullable Object fastTraceObj, @Nullable Object fullTraceObj) {
+ public static void piiTrace(
+ @Size(min = 0, max = 23) @NonNull String tag,
+ @NonNull String message,
+ @Nullable Object fastTraceObj,
+ @Nullable Object fullTraceObj) {
if (PII_TRACE_LEVEL == 0) {
return;
}
@@ -95,6 +103,6 @@
} else if (PII_TRACE_LEVEL == 2 && fastTraceObj != null) {
builder.append(": ").append(fastTraceObj);
}
- Log.i(mTag, builder.toString());
+ Log.i(tag, builder.toString());
}
}
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/util/SchemaMigrationUtil.java b/appsearch/appsearch/src/main/java/androidx/appsearch/util/SchemaMigrationUtil.java
index 1408fb8..8fbbd61 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/util/SchemaMigrationUtil.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/util/SchemaMigrationUtil.java
@@ -16,10 +16,12 @@
package androidx.appsearch.util;
+import static androidx.appsearch.app.AppSearchResult.RESULT_INVALID_SCHEMA;
+
import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
-import androidx.appsearch.app.AppSearchResult;
import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.InternalSetSchemaResponse;
import androidx.appsearch.app.Migrator;
import androidx.appsearch.app.SetSchemaResponse;
import androidx.appsearch.exceptions.AppSearchException;
@@ -75,8 +77,12 @@
* all {@link Migrator} has been triggered.
*/
public static void checkDeletedAndIncompatibleAfterMigration(
- @NonNull SetSchemaResponse setSchemaResponse,
+ @NonNull InternalSetSchemaResponse internalSetSchemaResponse,
@NonNull Set<String> activeMigrators) throws AppSearchException {
+ if (internalSetSchemaResponse.isSuccess()) {
+ return;
+ }
+ SetSchemaResponse setSchemaResponse = internalSetSchemaResponse.getSetSchemaResponse();
Set<String> unmigratedIncompatibleTypes =
new ArraySet<>(setSchemaResponse.getIncompatibleTypes());
unmigratedIncompatibleTypes.removeAll(activeMigrators);
@@ -86,23 +92,13 @@
unmigratedDeletedTypes.removeAll(activeMigrators);
// check if there are any unmigrated incompatible types or deleted types. If there
- // are, we will getActiveMigratorsthrow an exception. That's the only case we
- // swallowed in the AppSearchImpl#setSchema().
+ // are, we will throw an exception. That's the only case we swallowed in the
+ // AppSearchImpl#setSchema().
// Since the force override is false, the schema will not have been set if there are
// any incompatible or deleted types.
- checkDeletedAndIncompatible(unmigratedDeletedTypes,
- unmigratedIncompatibleTypes);
- }
-
- /** Checks the setSchema() call won't delete any types or has incompatible types. */
- public static void checkDeletedAndIncompatible(@NonNull Set<String> deletedTypes,
- @NonNull Set<String> incompatibleTypes) throws AppSearchException {
- if (deletedTypes.size() > 0
- || incompatibleTypes.size() > 0) {
- String newMessage = "Schema is incompatible."
- + "\n Deleted types: " + deletedTypes
- + "\n Incompatible types: " + incompatibleTypes;
- throw new AppSearchException(AppSearchResult.RESULT_INVALID_SCHEMA, newMessage);
+ if (!unmigratedIncompatibleTypes.isEmpty() || !unmigratedDeletedTypes.isEmpty()) {
+ throw new AppSearchException(RESULT_INVALID_SCHEMA,
+ internalSetSchemaResponse.getErrorMessage());
}
}
}
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java
index 90f31aa..b59bea9 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/AppSearchCompiler.java
@@ -89,20 +89,22 @@
Set<TypeElement> documentElements =
typesIn(elementsByAnnotation.get(
IntrospectionHelper.DOCUMENT_ANNOTATION_CLASS));
+
+ ImmutableSet.Builder<Element> nextRound = new ImmutableSet.Builder<>();
for (TypeElement document : documentElements) {
try {
processDocument(document);
} catch (MissingTypeException e) {
// Save it for next round to wait for the AutoValue annotation processor to
// be run first.
- return ImmutableSet.of(e.getTypeName());
+ nextRound.add(document);
} catch (ProcessingException e) {
// Prints error message.
e.printDiagnostic(mMessager);
}
}
- // No elements will be passed to next round of processing.
- return ImmutableSet.of();
+ // Pass elements to next round of processing.
+ return nextRound.build();
}
private void processDocument(@NonNull TypeElement element)
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java
index f74e2bb..44cc1f0 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/CodeGenerator.java
@@ -82,7 +82,7 @@
*/
private TypeSpec createClass() throws ProcessingException {
// Gets the full name of target class.
- String qualifiedName = mModel.getClassElement().getQualifiedName().toString();
+ String qualifiedName = mModel.getQualifiedDocumentClassName();
String className = qualifiedName.substring(mOutputPackage.length() + 1);
ClassName genClassName = mHelper.getDocumentClassFactoryForClass(mOutputPackage, className);
@@ -94,7 +94,7 @@
TypeSpec.Builder genClass = TypeSpec
.classBuilder(genClassName)
.addOriginatingElement(mModel.getClassElement())
- .addModifiers(Modifier.PUBLIC)
+ .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
.addSuperinterface(factoryType);
// Add the @Generated annotation to avoid static analysis running on these files
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentModel.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentModel.java
index 9603065..6f207da 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentModel.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/DocumentModel.java
@@ -16,6 +16,7 @@
package androidx.appsearch.compiler;
import static androidx.appsearch.compiler.IntrospectionHelper.DOCUMENT_ANNOTATION_CLASS;
+import static androidx.appsearch.compiler.IntrospectionHelper.generateClassHierarchy;
import static androidx.appsearch.compiler.IntrospectionHelper.getDocumentAnnotation;
import androidx.annotation.NonNull;
@@ -24,6 +25,7 @@
import androidx.appsearch.compiler.IntrospectionHelper.PropertyClass;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.EnumMap;
import java.util.HashMap;
@@ -44,6 +46,7 @@
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.util.ElementFilter;
+import javax.lang.model.util.Types;
/**
* Processes @Document annotations.
@@ -64,7 +67,10 @@
private final IntrospectionHelper mHelper;
private final TypeElement mClass;
- private final AnnotationMirror mDocumentAnnotation;
+ private final Types mTypeUtil;
+ // The name of the original class annotated with @Document
+ private final String mQualifiedDocumentClassName;
+ private String mSchemaName;
// Warning: if you change this to a HashSet, we may choose different getters or setters from
// run to run, causing the generated code to bounce.
private final Set<ExecutableElement> mAllMethods = new LinkedHashSet<>();
@@ -77,9 +83,11 @@
private final Map<String, ExecutableElement> mSetterMethods = new HashMap<>();
// Warning: if you change this to a HashMap, we may assign fields in a different order from run
// to run, causing the generated code to bounce.
+ // Keeps tracks of all AppSearch fields so we can find creation and access methods for them all
private final Map<String, VariableElement> mAllAppSearchFields = new LinkedHashMap<>();
// Warning: if you change this to a HashMap, we may assign fields in a different order from run
// to run, causing the generated code to bounce.
+ // Keeps track of property fields so we don't allow multiple annotated fields of the same name
private final Map<String, VariableElement> mPropertyFields = new LinkedHashMap<>();
private final Map<SpecialField, String> mSpecialFieldNames = new EnumMap<>(SpecialField.class);
private final Map<VariableElement, ReadKind> mReadKinds = new HashMap<>();
@@ -101,7 +109,7 @@
mHelper = new IntrospectionHelper(env);
mClass = clazz;
- mDocumentAnnotation = getDocumentAnnotation(mClass);
+ mTypeUtil = env.getTypeUtils();
if (generatedAutoValueElement != null) {
mIsAutoValueDocument = true;
@@ -116,6 +124,7 @@
mAllMethods.addAll(
ElementFilter.methodsIn(generatedAutoValueElement.getEnclosedElements()));
+ mQualifiedDocumentClassName = generatedAutoValueElement.getQualifiedName().toString();
scanFields(generatedAutoValueElement);
scanCreationMethods(creationMethods);
} else {
@@ -135,6 +144,7 @@
}
}
+ mQualifiedDocumentClassName = clazz.getQualifiedName().toString();
scanFields(mClass);
scanCreationMethods(creationMethods);
}
@@ -169,15 +179,18 @@
return mClass;
}
+ /**
+ * The name of the original class annotated with @Document
+ * @return the class name
+ */
+ @NonNull
+ public String getQualifiedDocumentClassName() {
+ return mQualifiedDocumentClassName;
+ }
+
@NonNull
public String getSchemaName() {
- Map<String, Object> params =
- mHelper.getAnnotationParams(mDocumentAnnotation);
- String name = params.get("name").toString();
- if (name.isEmpty()) {
- return mClass.getSimpleName().toString();
- }
- return name;
+ return mSchemaName;
}
@NonNull
@@ -274,110 +287,158 @@
Set<Modifier> methodModifiers = method.getModifiers();
return methodModifiers.contains(Modifier.STATIC)
&& !methodModifiers.contains(Modifier.PRIVATE)
- && method.getReturnType() == mClass.asType();
+ && mTypeUtil.isSameType(method.getReturnType(), mClass.asType());
}
- private void scanFields(TypeElement element) throws ProcessingException {
- Element namespaceField = null;
- Element idField = null;
- Element creationTimestampField = null;
- Element ttlField = null;
- Element scoreField = null;
- List<? extends Element> enclosedElements = element.getEnclosedElements();
- for (int i = 0; i < enclosedElements.size(); i++) {
- Element childElement = enclosedElements.get(i);
- if (mIsAutoValueDocument && childElement.getKind() != ElementKind.METHOD) {
+ /**
+ * Scan the annotations of a field to determine the fields type and handle it accordingly
+ *
+ * @param classElements all the field elements of a class, annotated and non-annotated
+ * @param childElement the member of class elements currently being scanned
+ * @throws ProcessingException
+ */
+ private void scanAnnotatedField(@NonNull List<? extends Element> classElements,
+ @NonNull Element childElement) throws ProcessingException {
+ String fieldName = childElement.getSimpleName().toString();
+
+ // a property field shouldn't be able to override a special field
+ if (mSpecialFieldNames.containsValue(fieldName)) {
+ throw new ProcessingException(
+ "Non-annotated field overriding special annotated fields named: "
+ + fieldName, mAllAppSearchFields.get(fieldName));
+ }
+
+ // no annotation mirrors -> non-indexable field
+ for (AnnotationMirror annotation : childElement.getAnnotationMirrors()) {
+ String annotationFq = annotation.getAnnotationType().toString();
+ if (!annotationFq.startsWith(DOCUMENT_ANNOTATION_CLASS)) {
continue;
}
- String fieldName = childElement.getSimpleName().toString();
- for (AnnotationMirror annotation : childElement.getAnnotationMirrors()) {
- String annotationFq = annotation.getAnnotationType().toString();
- if (!annotationFq.startsWith(DOCUMENT_ANNOTATION_CLASS)) {
+ VariableElement child;
+ if (mIsAutoValueDocument) {
+ child = findFieldForFunctionWithSameName(classElements, childElement);
+ } else {
+ if (childElement.getKind() == ElementKind.METHOD) {
+ throw new ProcessingException("AppSearch annotation is not applicable to "
+ + "methods for Non-AutoValue class", childElement);
+ } else if (childElement.getKind() == ElementKind.CLASS) {
+ continue;
+ } else {
+ child = (VariableElement) childElement;
+ }
+ }
+
+ switch (annotationFq) {
+ case IntrospectionHelper.ID_CLASS:
+ if (mSpecialFieldNames.containsKey(SpecialField.ID)) {
+ throw new ProcessingException(
+ "Class hierarchy contains multiple fields annotated @Id", child);
+ }
+ mSpecialFieldNames.put(SpecialField.ID, fieldName);
+ break;
+ case IntrospectionHelper.NAMESPACE_CLASS:
+ if (mSpecialFieldNames.containsKey(SpecialField.NAMESPACE)) {
+ throw new ProcessingException(
+ "Class hierarchy contains multiple fields annotated @Namespace",
+ child);
+ }
+ mSpecialFieldNames.put(SpecialField.NAMESPACE, fieldName);
+ break;
+ case IntrospectionHelper.CREATION_TIMESTAMP_MILLIS_CLASS:
+ if (mSpecialFieldNames.containsKey(SpecialField.CREATION_TIMESTAMP_MILLIS)) {
+ throw new ProcessingException("Class hierarchy contains multiple fields "
+ + "annotated @CreationTimestampMillis", child);
+ }
+ mSpecialFieldNames.put(
+ SpecialField.CREATION_TIMESTAMP_MILLIS, fieldName);
+ break;
+ case IntrospectionHelper.TTL_MILLIS_CLASS:
+ if (mSpecialFieldNames.containsKey(SpecialField.TTL_MILLIS)) {
+ throw new ProcessingException(
+ "Class hierarchy contains multiple fields annotated @TtlMillis",
+ child);
+ }
+ mSpecialFieldNames.put(SpecialField.TTL_MILLIS, fieldName);
+ break;
+ case IntrospectionHelper.SCORE_CLASS:
+ if (mSpecialFieldNames.containsKey(SpecialField.SCORE)) {
+ throw new ProcessingException(
+ "Class hierarchy contains multiple fields annotated @Score", child);
+ }
+ mSpecialFieldNames.put(SpecialField.SCORE, fieldName);
+ break;
+ default:
+ PropertyClass propertyClass = getPropertyClass(annotationFq);
+ if (propertyClass != null) {
+ checkFieldTypeForPropertyAnnotation(child, propertyClass);
+ if (mPropertyFields.containsKey(fieldName)) {
+ throw new ProcessingException(
+ "Class hierarchy contains multiple annotated fields named: "
+ + fieldName, child);
+ }
+ mPropertyFields.put(fieldName, child);
+ }
+ }
+
+ mAllAppSearchFields.put(fieldName, child);
+ }
+ }
+
+ /**
+ * Scans all the fields of the class, as well as superclasses annotated with @Document,
+ * to get AppSearch fields such as id
+ * @param element the class to scan
+ */
+ private void scanFields(@NonNull TypeElement element) throws ProcessingException {
+ Collection<TypeElement> hierarchy = generateClassHierarchy(element, mIsAutoValueDocument);
+
+ for (TypeElement clazz: hierarchy) {
+
+ List<? extends Element> enclosedElements = clazz.getEnclosedElements();
+ for (int i = 0; i < enclosedElements.size(); i++) {
+ Element childElement = enclosedElements.get(i);
+
+ // The only fields relevant to @Document in an AutoValue class are the abstract
+ // accessor methods
+ if (mIsAutoValueDocument && childElement.getKind() != ElementKind.METHOD) {
continue;
}
- VariableElement child;
- if (mIsAutoValueDocument) {
- child = findFieldForFunctionWithSameName(enclosedElements, childElement);
- } else {
- if (childElement.getKind() == ElementKind.METHOD) {
- throw new ProcessingException(
- "AppSearch annotation is not applicable to methods for "
- + "Non-AutoValue class",
- childElement);
- } else {
- child = (VariableElement) childElement;
- }
- }
- switch (annotationFq) {
- case IntrospectionHelper.ID_CLASS:
- if (idField != null) {
- throw new ProcessingException(
- "Class contains multiple fields annotated @Id", child);
- }
- idField = child;
- mSpecialFieldNames.put(SpecialField.ID, fieldName);
- break;
- case IntrospectionHelper.NAMESPACE_CLASS:
- if (namespaceField != null) {
- throw new ProcessingException(
- "Class contains multiple fields annotated @Namespace",
- child);
- }
- namespaceField = child;
- mSpecialFieldNames.put(SpecialField.NAMESPACE, fieldName);
- break;
- case IntrospectionHelper.CREATION_TIMESTAMP_MILLIS_CLASS:
- if (creationTimestampField != null) {
- throw new ProcessingException(
- "Class contains multiple fields annotated "
- + "@CreationTimestampMillis",
- child);
- }
- creationTimestampField = child;
- mSpecialFieldNames.put(SpecialField.CREATION_TIMESTAMP_MILLIS, fieldName);
- break;
- case IntrospectionHelper.TTL_MILLIS_CLASS:
- if (ttlField != null) {
- throw new ProcessingException(
- "Class contains multiple fields annotated @TtlMillis",
- child);
- }
- ttlField = child;
- mSpecialFieldNames.put(SpecialField.TTL_MILLIS, fieldName);
- break;
- case IntrospectionHelper.SCORE_CLASS:
- if (scoreField != null) {
- throw new ProcessingException(
- "Class contains multiple fields annotated @Score", child);
- }
- scoreField = child;
- mSpecialFieldNames.put(SpecialField.SCORE, fieldName);
- break;
- default:
- PropertyClass propertyClass = getPropertyClass(annotationFq);
- if (propertyClass != null) {
- checkFieldTypeForPropertyAnnotation(child, propertyClass);
- mPropertyFields.put(fieldName, child);
- }
- }
- mAllAppSearchFields.put(fieldName, child);
+
+ scanAnnotatedField(enclosedElements, childElement);
}
}
// Every document must always have a namespace
- if (namespaceField == null) {
+ if (!mSpecialFieldNames.containsKey(SpecialField.NAMESPACE)) {
throw new ProcessingException(
"All @Document classes must have exactly one field annotated with @Namespace",
mClass);
}
// Every document must always have an ID
- if (idField == null) {
+ if (!mSpecialFieldNames.containsKey(SpecialField.ID)) {
throw new ProcessingException(
"All @Document classes must have exactly one field annotated with @Id",
mClass);
}
+ // The schema name of the class at the top of the hierarchy will be used, so that
+ // performing a query on the base @Document class will also return child @Document classes
+ TypeElement topDocumentClass = hierarchy.iterator().next();
+ AnnotationMirror annotationMirror = getDocumentAnnotation(topDocumentClass);
+ if (annotationMirror == null) {
+ mSchemaName = mClass.getSimpleName().toString();
+ } else {
+ Map<String, Object> params = mHelper.getAnnotationParams(annotationMirror);
+ String name = params.get("name").toString();
+ // Documents don't need an explicit name annotation, can use the class name
+ if (!name.isEmpty()) {
+ mSchemaName = name;
+ } else {
+ mSchemaName = topDocumentClass.getSimpleName().toString();
+ }
+ }
+
for (VariableElement appSearchField : mAllAppSearchFields.values()) {
chooseAccessKinds(appSearchField);
}
@@ -560,6 +621,17 @@
+ remainingFields);
continue creationMethodSearch;
}
+
+ // If the field is set in the constructor, choose creation method for the write kind
+ for (String param : creationMethodParamFields) {
+ for (VariableElement appSearchField : mAllAppSearchFields.values()) {
+ if (appSearchField.getSimpleName().toString().equals(param)) {
+ mWriteKinds.put(appSearchField, WriteKind.CREATION_METHOD);
+ break;
+ }
+ }
+ }
+
// Found one!
mChosenCreationMethod = method;
mChosenCreationMethodParams = creationMethodParamFields;
@@ -569,8 +641,10 @@
// If we got here, we couldn't find any creation methods.
ProcessingException e =
new ProcessingException(
- "Failed to find any suitable creation methods to build this class. See "
- + "warnings for details.", mClass);
+ "Failed to find any suitable creation methods to build class \""
+ + mClass.getQualifiedName()
+ + "\". See warnings for details.",
+ mClass);
// Inform the developer why we started looking for creation methods in the first place.
for (VariableElement field : creationMethodWrittenFields.values()) {
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/FromGenericDocumentCodeGenerator.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/FromGenericDocumentCodeGenerator.java
index 05b9752..9bb751f 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/FromGenericDocumentCodeGenerator.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/FromGenericDocumentCodeGenerator.java
@@ -348,9 +348,7 @@
// The propertyType is not an element, this is not a type 1c list.
return false;
}
- try {
- getDocumentAnnotation(element);
- } catch (ProcessingException e) {
+ if (getDocumentAnnotation(element) == null) {
// The propertyType doesn't have @Document annotation, this is not a type 1c
// list.
return false;
@@ -548,9 +546,7 @@
// The propertyType is not an element, this is not a type 2c array.
return false;
}
- try {
- getDocumentAnnotation(element);
- } catch (ProcessingException e) {
+ if (getDocumentAnnotation(element) == null) {
// The propertyType doesn't have @Document annotation, this is not a type 2c
// array.
return false;
@@ -735,9 +731,7 @@
// The propertyType is not an element, this is not a type 3c field.
return false;
}
- try {
- getDocumentAnnotation(element);
- } catch (ProcessingException e) {
+ if (getDocumentAnnotation(element) == null) {
// The propertyType doesn't have @Document annotation, this is not a type 3c
// field.
return false;
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/IntrospectionHelper.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/IntrospectionHelper.java
index dd9b510..cf6e5a9 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/IntrospectionHelper.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/IntrospectionHelper.java
@@ -16,12 +16,17 @@
package androidx.appsearch.compiler;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.annotation.VisibleForTesting;
+import com.google.auto.common.MoreTypes;
+import com.google.auto.value.AutoValue;
import com.squareup.javapoet.ClassName;
+import java.util.ArrayDeque;
import java.util.Collection;
+import java.util.Deque;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -32,6 +37,7 @@
import javax.lang.model.element.AnnotationValue;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
+import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.ArrayType;
import javax.lang.model.type.DeclaredType;
@@ -105,13 +111,10 @@
/**
* Returns {@code androidx.appsearch.annotation.Document} annotation element from the input
- * element's annotations.
- *
- * @throws ProcessingException if no such annotation is found.
+ * element's annotations. Returns null if no such annotation is found.
*/
- @NonNull
- public static AnnotationMirror getDocumentAnnotation(@NonNull Element element)
- throws ProcessingException {
+ @Nullable
+ public static AnnotationMirror getDocumentAnnotation(@NonNull Element element) {
Objects.requireNonNull(element);
for (AnnotationMirror annotation : element.getAnnotationMirrors()) {
String annotationFq = annotation.getAnnotationType().toString();
@@ -119,8 +122,7 @@
return annotation;
}
}
- throw new ProcessingException(
- "Missing annotation " + IntrospectionHelper.DOCUMENT_ANNOTATION_CLASS, element);
+ return null;
}
/** Checks whether the property data type is one of the valid types. */
@@ -150,20 +152,18 @@
*/
public boolean isFieldOfDocumentType(VariableElement property) {
TypeMirror propertyType = property.asType();
- try {
- if (propertyType.getKind() == TypeKind.ARRAY) {
- getDocumentAnnotation(
- mTypeUtils.asElement(((ArrayType) property.asType()).getComponentType()));
- } else if (mTypeUtils.isAssignable(mTypeUtils.erasure(propertyType), mCollectionType)) {
- getDocumentAnnotation(mTypeUtils.asElement(
- ((DeclaredType) propertyType).getTypeArguments().get(0)));
- } else {
- getDocumentAnnotation(mTypeUtils.asElement(propertyType));
- }
- } catch (ProcessingException e) {
- return false;
+ AnnotationMirror documentAnnotation = null;
+
+ if (propertyType.getKind() == TypeKind.ARRAY) {
+ documentAnnotation = getDocumentAnnotation(
+ mTypeUtils.asElement(((ArrayType) property.asType()).getComponentType()));
+ } else if (mTypeUtils.isAssignable(mTypeUtils.erasure(propertyType), mCollectionType)) {
+ documentAnnotation = getDocumentAnnotation(mTypeUtils.asElement(
+ ((DeclaredType) propertyType).getTypeArguments().get(0)));
+ } else {
+ documentAnnotation = getDocumentAnnotation(mTypeUtils.asElement(propertyType));
}
- return true;
+ return documentAnnotation != null;
}
public Map<String, Object> getAnnotationParams(@NonNull AnnotationMirror annotation) {
@@ -204,6 +204,51 @@
return ClassName.get(APPSEARCH_EXCEPTION_PKG, APPSEARCH_EXCEPTION_SIMPLE_NAME);
}
+ /**
+ * Get a list of super classes of element annotated with @Document, in order starting with the
+ * class at the top of the hierarchy and descending down the class hierarchy
+ */
+ @NonNull
+ public static Collection<TypeElement> generateClassHierarchy(@NonNull TypeElement element,
+ boolean isAutoValueDocument)
+ throws ProcessingException {
+ Deque<TypeElement> hierarchy = new ArrayDeque<>();
+ if (isAutoValueDocument) {
+ // We don't allow classes annotated with both Document and AutoValue to extend classes.
+ // Because of how AutoValue is set up, there is no way to add a constructor to
+ // populate fields of super classes.
+ // There should just be the generated class and the original annotated class
+ TypeElement superClass = MoreTypes.asTypeElement(
+ MoreTypes.asTypeElement(element.getSuperclass()).getSuperclass());
+
+ if (!superClass.getQualifiedName().contentEquals(Object.class.getCanonicalName())) {
+ throw new ProcessingException(
+ "A class annotated with AutoValue and Document cannot have a superclass",
+ element);
+ }
+ hierarchy.add(element);
+ } else {
+ TypeElement currentClass = element;
+ while (!currentClass.getQualifiedName()
+ .contentEquals(Object.class.getCanonicalName())) {
+ // If you inherit from an AutoValue class, you have to implement the static methods.
+ // That defeats the purpose of AutoValue
+ if (currentClass.getAnnotation(AutoValue.class) != null) {
+ throw new ProcessingException(
+ "A class annotated with Document cannot inherit from a class "
+ + "annotated with AutoValue", element);
+ }
+
+ if (getDocumentAnnotation(currentClass) != null) {
+ hierarchy.addFirst(currentClass);
+ }
+
+ currentClass = MoreTypes.asTypeElement(currentClass.getSuperclass());
+ }
+ }
+ return hierarchy;
+ }
+
enum PropertyClass {
BOOLEAN_PROPERTY_CLASS("androidx.appsearch.annotation.Document.BooleanProperty"),
BYTES_PROPERTY_CLASS("androidx.appsearch.annotation.Document.BytesProperty"),
diff --git a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/ToGenericDocumentCodeGenerator.java b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/ToGenericDocumentCodeGenerator.java
index 1679c84..a44867a 100644
--- a/appsearch/compiler/src/main/java/androidx/appsearch/compiler/ToGenericDocumentCodeGenerator.java
+++ b/appsearch/compiler/src/main/java/androidx/appsearch/compiler/ToGenericDocumentCodeGenerator.java
@@ -325,9 +325,7 @@
// The propertyType is not an element, this is not a type 1c list.
return false;
}
- try {
- getDocumentAnnotation(element);
- } catch (ProcessingException e) {
+ if (getDocumentAnnotation(element) == null) {
// The propertyType doesn't have @Document annotation, this is not a type 1c
// list.
return false;
@@ -479,7 +477,7 @@
}
body.addStatement(
- "builder.$N($S, $NCopy)", setPropertyMethod, propertyName, fieldName)
+ "builder.$N($S, $NCopy)", setPropertyMethod, propertyName, fieldName)
.unindent().add("}\n");
method.add(body.build());
@@ -504,9 +502,7 @@
// The propertyType is not an element, this is not a type 1c list.
return false;
}
- try {
- getDocumentAnnotation(element);
- } catch (ProcessingException e) {
+ if (getDocumentAnnotation(element) == null) {
// The propertyType doesn't have @Document annotation, this is not a type 1c
// list.
return false;
@@ -589,7 +585,7 @@
}
body.addStatement(
- "builder.$N($S, $NCopy)", setPropertyMethod, propertyName, fieldName)
+ "builder.$N($S, $NCopy)", setPropertyMethod, propertyName, fieldName)
.unindent().add("}\n");
method.add(body.build());
@@ -643,9 +639,7 @@
// The propertyType is not an element, this is not a type 3c field.
return false;
}
- try {
- getDocumentAnnotation(element);
- } catch (ProcessingException e) {
+ if (getDocumentAnnotation(element) == null) {
// The propertyType doesn't have @Document annotation, this is not a type 3c
// field.
return false;
diff --git a/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java b/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
index 45a6f8f..3d13c38 100644
--- a/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
+++ b/appsearch/compiler/src/test/java/androidx/appsearch/compiler/AppSearchCompilerTest.java
@@ -106,6 +106,256 @@
}
@Test
+ public void testAutoValueInheritance() throws Exception {
+ Compilation docExtendsAutoValueDoc = compile(
+ "import com.google.auto.value.AutoValue;\n"
+ + "import com.google.auto.value.AutoValue.*;\n"
+ + "@AutoValue\n"
+ + "@Document\n"
+ + "public abstract class Gift {\n"
+ + " @CopyAnnotations @Document.Id abstract String id();\n"
+ + " @CopyAnnotations @Document.Namespace abstract String namespace();\n"
+ + " public static Gift create(String id, String namespace) {\n"
+ + " return new AutoValue_Gift(id,namespace);\n"
+ + " }\n"
+ + " @Document\n"
+ + " static abstract class CoolGift extends Gift {\n"
+ + " @Document.BooleanProperty boolean cool;\n"
+ + " CoolGift(String id, String namespace, boolean cool) {\n"
+ + " super(id, message);\n"
+ + " this.cool = cool;\n"
+ + " }\n"
+ + " }\n"
+ + "}\n");
+ assertThat(docExtendsAutoValueDoc).hadErrorContaining(
+ "A class annotated with Document cannot inherit from a class annotated with "
+ + "AutoValue");
+
+ Compilation autoValueDocExtendsDoc = compile(
+ "import com.google.auto.value.AutoValue;\n"
+ + "import com.google.auto.value.AutoValue.*;\n"
+ + "@Document\n"
+ + "public class Gift {\n"
+ + " @Document.Id String id;\n"
+ + " @Document.Namespace String namespace;\n"
+ + " @AutoValue\n"
+ + " @Document\n"
+ + " static abstract class CoolGift extends Gift {\n"
+ + " @CopyAnnotations @Document.BooleanProperty abstract boolean cool()"
+ + ";\n"
+ + " public static CoolGift create(String id, String namespace, boolean"
+ + " cool) {\n"
+ + " return new AutoValue_Gift_CoolGift(cool);\n"
+ + " }\n"
+ + " }\n"
+ + "}\n");
+ assertThat(autoValueDocExtendsDoc).hadErrorContaining(
+ "A class annotated with AutoValue and Document cannot have a superclass");
+ }
+
+ @Test
+ public void testSuperClassErrors() throws Exception {
+ Compilation specialFieldReassigned = compile(
+ "@Document\n"
+ + "public class Gift {\n"
+ + " @Document.Namespace String namespace;\n"
+ + " @Document.Id String id;\n"
+ + " @Document.StringProperty String prop;\n"
+ + " Gift(String id, String namespace, String prop) {\n"
+ + " this.id = id;\n"
+ + " this.namespace = namespace;\n"
+ + " this.prop = prop;\n"
+ + " }\n"
+ + "}\n"
+ + "@Document\n"
+ + "class CoolGift extends Gift {\n"
+ + " @Document.StringProperty String id;\n"
+ + " CoolGift(String id, String namespace) {\n"
+ + " super(id, namespace, \"\");\n"
+ + " this.id = id;\n"
+ + " }\n"
+ + "}\n");
+ assertThat(specialFieldReassigned).hadErrorContaining(
+ "Non-annotated field overriding special annotated fields named: id");
+
+ Compilation nonAnnotatedFieldHasSameName = compile(
+ "@Document\n"
+ + "public class Gift {\n"
+ + " @Document.Namespace String namespace;\n"
+ + " @Document.Id String id;\n"
+ + " Gift(String id, String namespace) {\n"
+ + " this.id = id;\n"
+ + " this.namespace = namespace;\n"
+ + " }\n"
+ + "}\n"
+ + "@Document\n"
+ + "class CoolGift extends Gift {\n"
+ + " String id;\n"
+ + " CoolGift(String id, String namespace) {\n"
+ + " super(id, namespace);\n"
+ + " }\n"
+ + " public String getId() { return id; }\n"
+ + "}\n");
+ assertThat(nonAnnotatedFieldHasSameName).hadErrorContaining(
+ "Non-annotated field overriding special annotated fields named: id");
+
+ Compilation propertyCollision = compile(
+ "@Document\n"
+ + "public class Gift {\n"
+ + " @Document.Namespace String namespace;\n"
+ + " @Document.Id String id;\n"
+ + " @Document.StringProperty String prop;\n"
+ + " Gift(String id, String namespace, String prop) {\n"
+ + " this.id = id;\n"
+ + " this.namespace = namespace;\n"
+ + " this.prop = prop;\n"
+ + " }\n"
+ + "}\n"
+ + "@Document\n"
+ + "class CoolGift extends Gift {\n"
+ + " @Document.BooleanProperty Boolean prop;\n"
+ + " CoolGift(String id, String namespace, String prop) {\n"
+ + " super(id, namespace, prop);\n"
+ + " }\n"
+ + "}\n");
+ assertThat(propertyCollision).hadErrorContaining(
+ "Class hierarchy contains multiple annotated fields named: prop");
+
+ //error on collision
+ Compilation idCollision = compile(
+ "@Document\n"
+ + "public class Gift {\n"
+ + " @Document.Namespace String namespace;\n"
+ + " @Document.Id String id;\n"
+ + " Gift(String id, String namespace) {\n"
+ + " this.id = id;\n"
+ + " this.namespace = namespace;\n"
+ + " }\n"
+ + "}\n"
+ + "@Document\n"
+ + "class CoolGift extends Gift {\n"
+ + " @Document.BooleanProperty private final boolean cool;\n"
+ + " @Document.Id String badId;\n"
+ + " CoolGift(String id, String namespace, String badId) {\n"
+ + " super(id, namespace);\n"
+ + " this.badId = badId;\n"
+ + " }\n"
+ + " public boolean getBadId() { return badId; }\n"
+ + "}\n");
+ assertThat(idCollision).hadErrorContaining(
+ "Class hierarchy contains multiple fields annotated @Id");
+
+ Compilation nsCollision = compile(
+ "@Document\n"
+ + "public class Gift {\n"
+ + " @Document.Namespace String namespace;\n"
+ + " @Document.Id String id;\n"
+ + " Gift(String id, String namespace) {\n"
+ + " this.id = id;\n"
+ + " this.namespace = namespace;\n"
+ + " }\n"
+ + "}\n"
+ + "@Document\n"
+ + "class CoolGift extends Gift {\n"
+ + " @Document.Namespace String badNamespace;\n"
+ + " CoolGift(String id, String namespace, String badId) {\n"
+ + " super(id, namespace);\n"
+ + " this.badNamespace = namespace;\n"
+ + " }\n"
+ + "}\n");
+ assertThat(nsCollision).hadErrorContaining(
+ "Class hierarchy contains multiple fields annotated @Namespace");
+ }
+
+ @Test
+ public void testSuperClass() throws Exception {
+ // Try multiple levels of inheritance, nested, with properties, overriding properties
+ Compilation compilation = compile(
+ "@Document\n"
+ + "class Ancestor {\n"
+ + " @Document.Namespace String namespace;\n"
+ + " @Document.Id String id;\n"
+ + " @Document.StringProperty String note;\n"
+ + " int score;\n"
+ + " Ancestor(String id, String namespace, String note) {\n"
+ + " this.id = id;\n"
+ + " this.namespace = namespace;\n"
+ + " this.note = note;\n"
+ + " }\n"
+ + " public String getNote() { return note; }\n"
+ + "}\n"
+ + "class Parent extends Ancestor {\n"
+ + " Parent(String id, String namespace, String note) {\n"
+ + " super(id, namespace, note);\n"
+ + " }\n"
+ + "}\n"
+ + "@Document\n"
+ + "class Gift extends Parent {\n"
+ + " @Document.StringProperty String sender;\n"
+ + " Gift(String id, String namespace, String sender) {\n"
+ + " super(id, namespace, \"note\");\n"
+ + " this.sender = sender;\n"
+ + " }\n"
+ + " public String getSender() { return sender; }\n"
+ + " @Document\n"
+ + " class FooGift extends Gift {\n"
+ + " @Document.Score int score;\n"
+ + " @Document.BooleanProperty boolean foo;\n"
+ + " FooGift(String id, String namespace, String note, int score, "
+ + "boolean foo) {\n"
+ + " super(id, namespace, note);\n"
+ + " this.score = score;\n"
+ + " this.foo = foo;\n"
+ + " }\n"
+ + " }\n"
+ + "}\n");
+ assertThat(compilation).succeededWithoutWarnings();
+ checkEqualsGolden("Gift$$__FooGift.java");
+ }
+
+ @Test
+ public void testSuperClassPojoAncestor() throws Exception {
+ // Try multiple levels of inheritance, nested, with properties, overriding properties
+ Compilation compilation = compile(
+ "class Ancestor {\n"
+ + "}\n"
+ + "@Document\n"
+ + "class Parent extends Ancestor {\n"
+ + " @Document.Namespace String namespace;\n"
+ + " @Document.Id String id;\n"
+ + " @Document.StringProperty String note;\n"
+ + " int score;\n"
+ + " Parent(String id, String namespace, String note) {\n"
+ + " this.id = id;\n"
+ + " this.namespace = namespace;\n"
+ + " this.note = note;\n"
+ + " }\n"
+ + "}\n"
+ + "@Document\n"
+ + "class Gift extends Parent {\n"
+ + " @Document.StringProperty String sender;\n"
+ + " Gift(String id, String namespace, String sender) {\n"
+ + " super(id, namespace, \"note\");\n"
+ + " this.sender = sender;\n"
+ + " }\n"
+ + " public String getSender() { return sender; }\n"
+ + " @Document\n"
+ + " class FooGift extends Gift {\n"
+ + " @Document.Score int score;\n"
+ + " @Document.BooleanProperty boolean foo;\n"
+ + " FooGift(String id, String namespace, String note, int score, "
+ + "boolean foo) {\n"
+ + " super(id, namespace, note);\n"
+ + " this.score = score;\n"
+ + " this.foo = foo;\n"
+ + " }\n"
+ + " }\n"
+ + "}\n");
+ assertThat(compilation).succeededWithoutWarnings();
+ checkEqualsGolden("Gift$$__FooGift.java");
+ }
+
+ @Test
public void testManyCreationTimestamp() {
Compilation compilation = compile(
"@Document\n"
@@ -324,7 +574,8 @@
+ "}\n");
assertThat(compilation).hadErrorContaining(
- "Failed to find any suitable creation methods to build this class");
+ "Failed to find any suitable creation methods to build class "
+ + "\"com.example.appsearch.Gift\"");
assertThat(compilation).hadWarningContainingMatch(
"Field cannot be written .* failed to find a suitable setter for field \"price\"");
assertThat(compilation).hadWarningContaining(
@@ -345,7 +596,8 @@
+ "}\n");
assertThat(compilation).hadErrorContaining(
- "Failed to find any suitable creation methods to build this class");
+ "Failed to find any suitable creation methods to build class "
+ + "\"com.example.appsearch.Gift\"");
assertThat(compilation).hadWarningContainingMatch(
"Field cannot be written .* failed to find a suitable setter for field \"price\"");
assertThat(compilation).hadWarningContaining(
@@ -368,7 +620,8 @@
+ "}\n");
assertThat(compilation).hadErrorContaining(
- "Failed to find any suitable creation methods to build this class");
+ "Failed to find any suitable creation methods to build class "
+ + "\"com.example.appsearch.Gift\"");
assertThat(compilation).hadWarningContainingMatch(
"Field cannot be written .* failed to find a suitable setter for field \"price\"");
assertThat(compilation).hadWarningContaining(
@@ -407,7 +660,8 @@
+ "}\n");
assertThat(compilation).hadErrorContaining(
- "Failed to find any suitable creation methods to build this class");
+ "Failed to find any suitable creation methods to build class "
+ + "\"com.example.appsearch.Gift\"");
assertThat(compilation).hadWarningContaining("Creation method is private");
}
@@ -423,7 +677,8 @@
+ "}\n");
assertThat(compilation).hadErrorContaining(
- "Failed to find any suitable creation methods to build this class");
+ "Failed to find any suitable creation methods to build class "
+ + "\"com.example.appsearch.Gift\"");
assertThat(compilation).hadWarningContaining(
"doesn't have parameters for the following fields: [id]");
}
@@ -541,7 +796,8 @@
+ "}\n");
assertThat(compilation).hadErrorContaining(
- "Failed to find any suitable creation methods to build this class");
+ "Failed to find any suitable creation methods to build class "
+ + "\"com.example.appsearch.Gift\"");
assertThat(compilation).hadWarningContaining(
"Parameter \"unknownParam\" is not an AppSearch parameter; don't know how to "
+ "supply it");
@@ -917,6 +1173,45 @@
}
@Test
+ public void testMultipleNestedAutoValueDocument() throws IOException {
+ Compilation compilation = compile(
+ "import com.google.auto.value.AutoValue;\n"
+ + "import com.google.auto.value.AutoValue.*;\n"
+ + "@Document\n"
+ + "@AutoValue\n"
+ + "public abstract class Gift {\n"
+ + " @CopyAnnotations @Document.Id abstract String id();\n"
+ + " @CopyAnnotations @Document.Namespace abstract String namespace();\n"
+ + " @CopyAnnotations\n"
+ + " @Document.StringProperty abstract String property();\n"
+ + " public static Gift create(String id, String namespace, String"
+ + " property) {\n"
+ + " return new AutoValue_Gift(id, namespace, property);\n"
+ + " }\n"
+ + " @Document\n"
+ + " @AutoValue\n"
+ + " abstract static class B {\n"
+ + " @CopyAnnotations @Document.Id abstract String id();\n"
+ + " @CopyAnnotations @Document.Namespace abstract String namespace();\n"
+ + " public static B create(String id, String namespace) {\n"
+ + " return new AutoValue_Gift_B(id, namespace);\n"
+ + " }\n"
+ + " }\n"
+ + " @Document\n"
+ + " @AutoValue\n"
+ + " abstract static class A {\n"
+ + " @CopyAnnotations @Document.Id abstract String id();\n"
+ + " @CopyAnnotations @Document.Namespace abstract String namespace();\n"
+ + " public static A create(String id, String namespace) {\n"
+ + " return new AutoValue_Gift_A(id, namespace);\n"
+ + " }\n"
+ + " }\n"
+ + "}\n");
+ assertThat(compilation).succeededWithoutWarnings();
+ checkEqualsGolden("AutoValue_Gift_A.java");
+ }
+
+ @Test
public void testAutoValueDocument() throws IOException {
Compilation compilation = compile(
"import com.google.auto.value.AutoValue;\n"
@@ -935,7 +1230,7 @@
+ "}\n");
assertThat(compilation).succeededWithoutWarnings();
- checkEqualsGolden("Gift.java");
+ checkEqualsGolden("AutoValue_Gift.java");
}
@Test
@@ -956,6 +1251,35 @@
checkEqualsGolden("Gift$$__InnerGift.java");
}
+ @Test
+ public void testOneBadConstructor() throws Exception {
+ Compilation compilation = compile(
+ "@Document\n"
+ + "public class Gift {\n"
+ + " @Document.Id private String mId;\n"
+ + " @Document.Namespace private String mNamespace;\n"
+ + " public Gift(String id, String namespace, boolean nonAppSearchParam){\n"
+ + " mId = id;\n"
+ + " mNamespace = namespace;\n"
+ + " }\n"
+ + " public Gift(String id){\n"
+ + " mId = id;\n"
+ + " }\n"
+ + " public String getId(){"
+ + " return mId;"
+ + " }\n"
+ + " public String getNamespace(){"
+ + " return mNamespace;"
+ + " }\n"
+ + " public void setNamespace(String namespace){\n"
+ + " mNamespace = namespace;"
+ + " }\n"
+ + "}\n");
+
+ assertThat(compilation).succeededWithoutWarnings();
+ checkEqualsGolden("Gift.java");
+ }
+
private Compilation compile(String classBody) {
return compile("Gift", classBody);
}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSingleTypes.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSingleTypes.JAVA
index 47ce7aa..968b553 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSingleTypes.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSingleTypes.JAVA
@@ -14,7 +14,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_field.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_field.JAVA
index 1814a8e..68db9fc 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_field.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_field.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_getter.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_getter.JAVA
index e442931..70bfe77 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_getter.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAllSpecialFields_getter.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocument.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocument.JAVA
index 47e6df5..ab783ed 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocument.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testAutoValueDocument.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__AutoValue_Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testCardinality.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testCardinality.JAVA
index 1e87ce2..0f275a7 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testCardinality.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testCardinality.JAVA
@@ -12,7 +12,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDifferentTypeName.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDifferentTypeName.JAVA
index 6441fce..7a7bca6 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDifferentTypeName.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testDifferentTypeName.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "DifferentType";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testGetterAndSetterFunctions_withFieldName.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testGetterAndSetterFunctions_withFieldName.JAVA
index 8b49559..8ce94af 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testGetterAndSetterFunctions_withFieldName.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testGetterAndSetterFunctions_withFieldName.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testIndexingType.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testIndexingType.JAVA
index 662376d..810a16f 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testIndexingType.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testIndexingType.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInnerClass.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInnerClass.JAVA
index 08987f0..ac333bc 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInnerClass.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testInnerClass.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift$$__InnerGift implements DocumentClassFactory<Gift.InnerGift> {
+public final class $$__AppSearch__Gift$$__InnerGift implements DocumentClassFactory<Gift.InnerGift> {
public static final String SCHEMA_NAME = "InnerGift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testMultipleNestedAutoValueDocument.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testMultipleNestedAutoValueDocument.JAVA
new file mode 100644
index 0000000..31c563e
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testMultipleNestedAutoValueDocument.JAVA
@@ -0,0 +1,40 @@
+package com.example.appsearch;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.DocumentClassFactory;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import java.lang.Override;
+import java.lang.String;
+import javax.annotation.processing.Generated;
+
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__AutoValue_Gift_A implements DocumentClassFactory<Gift.A> {
+ public static final String SCHEMA_NAME = "A";
+
+ @Override
+ public String getSchemaName() {
+ return SCHEMA_NAME;
+ }
+
+ @Override
+ public AppSearchSchema getSchema() throws AppSearchException {
+ return new AppSearchSchema.Builder(SCHEMA_NAME)
+ .build();
+ }
+
+ @Override
+ public GenericDocument toGenericDocument(Gift.A document) throws AppSearchException {
+ GenericDocument.Builder<?> builder =
+ new GenericDocument.Builder<>(document.namespace(), document.id(), SCHEMA_NAME);
+ return builder.build();
+ }
+
+ @Override
+ public Gift.A fromGenericDocument(GenericDocument genericDoc) throws AppSearchException {
+ String idConv = genericDoc.getId();
+ String namespaceConv = genericDoc.getNamespace();
+ Gift.A document = Gift.A.create(idConv, namespaceConv);
+ return document;
+ }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testOneBadConstructor.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testOneBadConstructor.JAVA
new file mode 100644
index 0000000..f0d8cb5
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testOneBadConstructor.JAVA
@@ -0,0 +1,41 @@
+package com.example.appsearch;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.DocumentClassFactory;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import java.lang.Override;
+import java.lang.String;
+import javax.annotation.processing.Generated;
+
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+ public static final String SCHEMA_NAME = "Gift";
+
+ @Override
+ public String getSchemaName() {
+ return SCHEMA_NAME;
+ }
+
+ @Override
+ public AppSearchSchema getSchema() throws AppSearchException {
+ return new AppSearchSchema.Builder(SCHEMA_NAME)
+ .build();
+ }
+
+ @Override
+ public GenericDocument toGenericDocument(Gift document) throws AppSearchException {
+ GenericDocument.Builder<?> builder =
+ new GenericDocument.Builder<>(document.getNamespace(), document.getId(), SCHEMA_NAME);
+ return builder.build();
+ }
+
+ @Override
+ public Gift fromGenericDocument(GenericDocument genericDoc) throws AppSearchException {
+ String mIdConv = genericDoc.getId();
+ String mNamespaceConv = genericDoc.getNamespace();
+ Gift document = new Gift(mIdConv);
+ document.setNamespace(mNamespaceConv);
+ return document;
+ }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPropertyName.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPropertyName.JAVA
index 155394b..f6672c0 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPropertyName.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testPropertyName.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_MultipleGetters.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_MultipleGetters.JAVA
index 9ab9158..8efe655 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_MultipleGetters.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_MultipleGetters.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_isGetterForBoolean.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_isGetterForBoolean.JAVA
index 17c4bcd..9e828fd 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_isGetterForBoolean.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRead_isGetterForBoolean.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRepeatedFields.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRepeatedFields.JAVA
index e12c97f..cd2dd3b 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRepeatedFields.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testRepeatedFields.JAVA
@@ -14,7 +14,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuccessSimple.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuccessSimple.JAVA
index 49a157ac..b147ff4 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuccessSimple.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuccessSimple.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
@@ -50,7 +50,6 @@
boolean catConv = genericDoc.getPropertyBoolean("cat");
boolean dogConv = genericDoc.getPropertyBoolean("dog");
Gift document = new Gift(dogConv, idConv, namespaceConv);
- document.namespace = namespaceConv;
document.price = priceConv;
document.cat = catConv;
return document;
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuperClass.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuperClass.JAVA
new file mode 100644
index 0000000..ef1410d
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuperClass.JAVA
@@ -0,0 +1,76 @@
+package com.example.appsearch;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.DocumentClassFactory;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import java.lang.Override;
+import java.lang.String;
+import javax.annotation.processing.Generated;
+
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__Gift$$__FooGift implements DocumentClassFactory<Gift.FooGift> {
+ public static final String SCHEMA_NAME = "Ancestor";
+
+ @Override
+ public String getSchemaName() {
+ return SCHEMA_NAME;
+ }
+
+ @Override
+ public AppSearchSchema getSchema() throws AppSearchException {
+ return new AppSearchSchema.Builder(SCHEMA_NAME)
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("note")
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_NONE)
+ .setIndexingType(AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_NONE)
+ .build())
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("sender")
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_NONE)
+ .setIndexingType(AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_NONE)
+ .build())
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder("foo")
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .build();
+ }
+
+ @Override
+ public GenericDocument toGenericDocument(Gift.FooGift document) throws AppSearchException {
+ GenericDocument.Builder<?> builder =
+ new GenericDocument.Builder<>(document.namespace, document.id, SCHEMA_NAME);
+ builder.setScore(document.score);
+ String noteCopy = document.note;
+ if (noteCopy != null) {
+ builder.setPropertyString("note", noteCopy);
+ }
+ String senderCopy = document.sender;
+ if (senderCopy != null) {
+ builder.setPropertyString("sender", senderCopy);
+ }
+ builder.setPropertyBoolean("foo", document.foo);
+ return builder.build();
+ }
+
+ @Override
+ public Gift.FooGift fromGenericDocument(GenericDocument genericDoc) throws AppSearchException {
+ String idConv = genericDoc.getId();
+ String namespaceConv = genericDoc.getNamespace();
+ int scoreConv = genericDoc.getScore();
+ String[] noteCopy = genericDoc.getPropertyStringArray("note");
+ String noteConv = null;
+ if (noteCopy != null && noteCopy.length != 0) {
+ noteConv = noteCopy[0];
+ }
+ String[] senderCopy = genericDoc.getPropertyStringArray("sender");
+ String senderConv = null;
+ if (senderCopy != null && senderCopy.length != 0) {
+ senderConv = senderCopy[0];
+ }
+ boolean fooConv = genericDoc.getPropertyBoolean("foo");
+ Gift.FooGift document = new Gift.FooGift(idConv, namespaceConv, noteConv, scoreConv, fooConv);
+ document.sender = senderConv;
+ return document;
+ }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuperClassPojoAncestor.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuperClassPojoAncestor.JAVA
new file mode 100644
index 0000000..f51fa57
--- /dev/null
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testSuperClassPojoAncestor.JAVA
@@ -0,0 +1,76 @@
+package com.example.appsearch;
+
+import androidx.appsearch.app.AppSearchSchema;
+import androidx.appsearch.app.DocumentClassFactory;
+import androidx.appsearch.app.GenericDocument;
+import androidx.appsearch.exceptions.AppSearchException;
+import java.lang.Override;
+import java.lang.String;
+import javax.annotation.processing.Generated;
+
+@Generated("androidx.appsearch.compiler.AppSearchCompiler")
+public final class $$__AppSearch__Gift$$__FooGift implements DocumentClassFactory<Gift.FooGift> {
+ public static final String SCHEMA_NAME = "Parent";
+
+ @Override
+ public String getSchemaName() {
+ return SCHEMA_NAME;
+ }
+
+ @Override
+ public AppSearchSchema getSchema() throws AppSearchException {
+ return new AppSearchSchema.Builder(SCHEMA_NAME)
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("note")
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_NONE)
+ .setIndexingType(AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_NONE)
+ .build())
+ .addProperty(new AppSearchSchema.StringPropertyConfig.Builder("sender")
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .setTokenizerType(AppSearchSchema.StringPropertyConfig.TOKENIZER_TYPE_NONE)
+ .setIndexingType(AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_NONE)
+ .build())
+ .addProperty(new AppSearchSchema.BooleanPropertyConfig.Builder("foo")
+ .setCardinality(AppSearchSchema.PropertyConfig.CARDINALITY_OPTIONAL)
+ .build())
+ .build();
+ }
+
+ @Override
+ public GenericDocument toGenericDocument(Gift.FooGift document) throws AppSearchException {
+ GenericDocument.Builder<?> builder =
+ new GenericDocument.Builder<>(document.namespace, document.id, SCHEMA_NAME);
+ builder.setScore(document.score);
+ String noteCopy = document.note;
+ if (noteCopy != null) {
+ builder.setPropertyString("note", noteCopy);
+ }
+ String senderCopy = document.sender;
+ if (senderCopy != null) {
+ builder.setPropertyString("sender", senderCopy);
+ }
+ builder.setPropertyBoolean("foo", document.foo);
+ return builder.build();
+ }
+
+ @Override
+ public Gift.FooGift fromGenericDocument(GenericDocument genericDoc) throws AppSearchException {
+ String idConv = genericDoc.getId();
+ String namespaceConv = genericDoc.getNamespace();
+ int scoreConv = genericDoc.getScore();
+ String[] noteCopy = genericDoc.getPropertyStringArray("note");
+ String noteConv = null;
+ if (noteCopy != null && noteCopy.length != 0) {
+ noteConv = noteCopy[0];
+ }
+ String[] senderCopy = genericDoc.getPropertyStringArray("sender");
+ String senderConv = null;
+ if (senderCopy != null && senderCopy.length != 0) {
+ senderConv = senderCopy[0];
+ }
+ boolean fooConv = genericDoc.getPropertyBoolean("foo");
+ Gift.FooGift document = new Gift.FooGift(idConv, namespaceConv, noteConv, scoreConv, fooConv);
+ document.sender = senderConv;
+ return document;
+ }
+}
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testToGenericDocument_allSupportedTypes.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testToGenericDocument_allSupportedTypes.JAVA
index 8b8c007..a3dc0a5 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testToGenericDocument_allSupportedTypes.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testToGenericDocument_allSupportedTypes.JAVA
@@ -19,7 +19,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testTokenizerType.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testTokenizerType.JAVA
index 3f4b783..b6ccd81 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testTokenizerType.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testTokenizerType.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleConventions.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleConventions.JAVA
index 049d8d1..f5e50d2 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleConventions.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleConventions.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleSetters.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleSetters.JAVA
index 9ab9158..8efe655 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleSetters.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_multipleSetters.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
diff --git a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_usableFactoryMethod_unusableConstructor.JAVA b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_usableFactoryMethod_unusableConstructor.JAVA
index 83bbb53..d0663af 100644
--- a/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_usableFactoryMethod_unusableConstructor.JAVA
+++ b/appsearch/compiler/src/test/resources/androidx/appsearch/compiler/goldens/testWrite_usableFactoryMethod_unusableConstructor.JAVA
@@ -9,7 +9,7 @@
import javax.annotation.processing.Generated;
@Generated("androidx.appsearch.compiler.AppSearchCompiler")
-public class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
+public final class $$__AppSearch__Gift implements DocumentClassFactory<Gift> {
public static final String SCHEMA_NAME = "Gift";
@Override
@@ -40,8 +40,6 @@
String namespaceConv = genericDoc.getNamespace();
int priceConv = (int) genericDoc.getPropertyLong("price");
Gift document = Gift.create(idConv, namespaceConv, priceConv);
- document.namespace = namespaceConv;
- document.price = priceConv;
return document;
}
}
diff --git a/appsearch/exportToFramework.py b/appsearch/exportToFramework.py
index e3d4c59..48ec64b 100755
--- a/appsearch/exportToFramework.py
+++ b/appsearch/exportToFramework.py
@@ -71,7 +71,7 @@
'../../../prebuilts/tools/common/google-java-format/google-java-format')
# Miscellaneous constants
-CHANGEID_FILE_NAME = 'synced_jetpack_changeid.txt'
+SHA_FILE_NAME = 'synced_jetpack_sha.txt'
class ExportToFramework:
@@ -96,6 +96,10 @@
print('Skipping: "%s" -> "%s"' % (source_path, dest_path), file=sys.stderr)
return
+ copyToPath = re.search(r'@exportToFramework:copyToPath\(([^)]+)\)', contents)
+ if copyToPath:
+ dest_path = os.path.join(self._framework_appsearch_root, copyToPath.group(1))
+
print('Copy: "%s" -> "%s"' % (source_path, dest_path), file=sys.stderr)
if transform_func:
contents = transform_func(contents)
@@ -133,7 +137,7 @@
flags=re.MULTILINE)
# Apply in-place replacements
- return (contents
+ contents = (contents
.replace('androidx.appsearch.app', 'android.app.appsearch')
.replace(
'androidx.appsearch.localstorage.',
@@ -161,11 +165,20 @@
.replace('@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)', '')
.replace('Preconditions.checkNotNull(', 'Objects.requireNonNull(')
.replace('ObjectsCompat.', 'Objects.')
+
.replace('/*@exportToFramework:CurrentTimeMillisLong*/', '@CurrentTimeMillisLong')
.replace('/*@exportToFramework:UnsupportedAppUsage*/', '@UnsupportedAppUsage')
.replace('<!--@exportToFramework:hide-->', '@hide')
.replace('// @exportToFramework:skipFile()', '')
)
+ contents = re.sub(r'\/\/ @exportToFramework:copyToPath\([^)]+\)', '', contents)
+
+ # Jetpack methods have the Async suffix, but framework doesn't. Strip the Async suffix
+ # to allow the same documentation to compile for both.
+ contents = re.sub(r'(#[a-zA-Z0-9_]+)Async}', r'\1}', contents)
+ contents = re.sub(
+ r'(\@see [^#]+#[a-zA-Z0-9_]+)Async$', r'\1', contents, flags=re.MULTILINE)
+ return contents
def _TransformTestCode(self, contents):
contents = (contents
@@ -318,19 +331,26 @@
self._ExportImplCode()
self._FormatWrittenFiles()
- def WriteChangeIdFile(self, changeid):
- """Copies the changeid of the most recent public CL into a file on the framework side.
+ def WriteShaFile(self, sha):
+ """Copies the git sha of the most recent public CL into a file on the framework side.
This file is used for tracking, to determine what framework is synced to.
- You must always provide a changeid of an exported, preferably even submitted CL. If you
- abandon the CL pointed to by this changeid, the next person syncing framework will be unable
- to find what CL it is synced to.
+ You must always provide a sha of a submitted submitted git commit. If you abandon the CL
+ pointed to by this sha, the next person syncing framework will be unable to find what CL it
+ is synced to.
+
+ The previous content of the sha file, if any, is returned.
"""
- file_path = os.path.join(self._framework_appsearch_root, CHANGEID_FILE_NAME)
+ file_path = os.path.join(self._framework_appsearch_root, SHA_FILE_NAME)
+ old_sha = None
+ if os.path.isfile(file_path):
+ with open(file_path, 'r') as fh:
+ old_sha = fh.read().rstrip()
with open(file_path, 'w') as fh:
- print(changeid, file=fh)
+ print(sha, file=fh)
print('Wrote "%s"' % file_path)
+ return old_sha
if __name__ == '__main__':
@@ -339,6 +359,12 @@
sys.argv[0]),
file=sys.stderr)
sys.exit(1)
+ if sys.argv[2].startswith('I'):
+ print('Error: Git sha "%s" looks like a changeid. Please provide a git sha instead.' % (
+ sys.argv[2]),
+ file=sys.stderr)
+ sys.exit(1)
+
source_dir = os.path.normpath(os.path.dirname(sys.argv[0]))
dest_dir = os.path.normpath(sys.argv[1])
dest_dir = os.path.join(dest_dir, 'packages/modules/AppSearch')
@@ -349,4 +375,10 @@
sys.exit(1)
exporter = ExportToFramework(source_dir, dest_dir)
exporter.ExportCode()
- exporter.WriteChangeIdFile(sys.argv[2])
+
+ # Update the sha file
+ new_sha = sys.argv[2]
+ old_sha = exporter.WriteShaFile(new_sha)
+ if old_sha and old_sha != new_sha:
+ print('Command to diff old version to new version:')
+ print(' git log %s..%s -- appsearch/' % (old_sha, new_sha))
diff --git a/benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml b/benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
index b42a78b..44f53ab 100644
--- a/benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
+++ b/benchmark/integration-tests/macrobenchmark-target/src/main/AndroidManifest.xml
@@ -70,7 +70,6 @@
</intent-filter>
</activity>
-
<activity
android:name=".BackgroundWorkActivity"
android:exported="true">
@@ -81,6 +80,16 @@
</activity>
<activity
+ android:name=".SingleColorActivity"
+ android:exported="true"
+ android:theme="@style/Theme.AppCompat.NoActionBar">
+ <intent-filter>
+ <action android:name="androidx.benchmark.integration.macrobenchmark.target.SINGLE_COLOR_ACTIVITY" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+
+ <activity
android:name=".NotExportedActivity"
android:exported="false"> <!-- intentionally not exported -->
<intent-filter>
diff --git a/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/SingleColorActivity.kt b/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/SingleColorActivity.kt
new file mode 100644
index 0000000..6aea7c0
--- /dev/null
+++ b/benchmark/integration-tests/macrobenchmark-target/src/main/java/androidx/benchmark/integration/macrobenchmark/target/SingleColorActivity.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.benchmark.integration.macrobenchmark.target
+
+import android.graphics.Color
+import android.os.Build
+import android.os.Bundle
+import android.view.Window
+import android.view.WindowInsets
+import androidx.annotation.DoNotInline
+import androidx.annotation.RequiresApi
+import androidx.appcompat.app.AppCompatActivity
+import androidx.constraintlayout.widget.ConstraintLayout
+
+class SingleColorActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.single_color)
+ if (Build.VERSION.SDK_INT >= 30) {
+ Api30Fullscreen.hideStatusBar(getWindow())
+ }
+
+ val bg = findViewById<ConstraintLayout>(R.id.color_background)
+ val color = intent.getIntExtra(BG_COLOR, Color.RED)
+ bg.setBackgroundColor(color)
+ }
+
+ companion object {
+ const val BG_COLOR = "bg_color"
+ }
+
+ @RequiresApi(30)
+ private object Api30Fullscreen {
+ @JvmStatic
+ @DoNotInline
+ fun hideStatusBar(window: Window) {
+ window.insetsController?.hide(WindowInsets.Type.statusBars())
+ }
+ }
+}
diff --git a/benchmark/integration-tests/macrobenchmark-target/src/main/res/layout/single_color.xml b/benchmark/integration-tests/macrobenchmark-target/src/main/res/layout/single_color.xml
new file mode 100644
index 0000000..52601f5
--- /dev/null
+++ b/benchmark/integration-tests/macrobenchmark-target/src/main/res/layout/single_color.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2022 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/color_background"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:background="#FF000000">
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/benchmark/integration-tests/macrobenchmark/src/androidTest/java/androidx/benchmark/integration/macrobenchmark/SingleColorPowerBenchmark.kt b/benchmark/integration-tests/macrobenchmark/src/androidTest/java/androidx/benchmark/integration/macrobenchmark/SingleColorPowerBenchmark.kt
new file mode 100644
index 0000000..70de30b
--- /dev/null
+++ b/benchmark/integration-tests/macrobenchmark/src/androidTest/java/androidx/benchmark/integration/macrobenchmark/SingleColorPowerBenchmark.kt
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.benchmark.integration.macrobenchmark
+
+import android.os.Bundle
+import android.content.Intent
+import android.graphics.Color
+import androidx.benchmark.macro.BatteryCharge
+import androidx.benchmark.macro.CompilationMode
+import androidx.benchmark.macro.ExperimentalMetricApi
+import androidx.benchmark.macro.PowerCategory
+import androidx.benchmark.macro.PowerCategoryDisplayLevel
+import androidx.benchmark.macro.PowerMetric
+import androidx.benchmark.macro.PowerRail
+import androidx.benchmark.macro.StartupMode
+import androidx.benchmark.macro.junit4.MacrobenchmarkRule
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import org.junit.Assume.assumeTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+@SdkSuppress(minSdkVersion = 29)
+@OptIn(ExperimentalMetricApi::class)
+class SingleColorPowerBenchmark {
+ @get:Rule
+ val benchmarkRule = MacrobenchmarkRule()
+
+ @Before
+ fun validateDeviceState() {
+ assumeTrue(PowerRail.hasMetrics())
+ assumeTrue(BatteryCharge.hasMinimumCharge())
+ }
+
+ fun measureScreenColorPower(color: Int) {
+ benchmarkRule.measureRepeated(
+ packageName = PACKAGE_NAME,
+ metrics = listOf(
+ PowerMetric(
+ PowerMetric.Power(
+ mapOf(PowerCategory.DISPLAY to PowerCategoryDisplayLevel.BREAKDOWN)
+ )
+ ),
+ ),
+ compilationMode = CompilationMode.None(),
+ startupMode = StartupMode.COLD,
+ iterations = 5,
+ setupBlock = {
+ val intent = Intent()
+ val bundle = Bundle()
+ bundle.putInt("bg_color", color)
+ intent.action = ACTION
+ intent.putExtras(bundle)
+ startActivityAndWait(intent)
+ }
+ ) {
+ Thread.sleep(DURATION_MS.toLong())
+ }
+ }
+
+ @Test
+ fun measureDarkScreenPower() {
+ measureScreenColorPower(Color.BLACK)
+ }
+
+ @Test
+ fun measureLightScreenPower() {
+ measureScreenColorPower(Color.WHITE)
+ }
+
+ companion object {
+ private const val PACKAGE_NAME = "androidx.benchmark.integration.macrobenchmark.target"
+ private const val ACTION = "$PACKAGE_NAME.SINGLE_COLOR_ACTIVITY"
+ private const val DURATION_MS = 5000
+ }
+}
\ No newline at end of file
diff --git a/browser/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java b/browser/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java
index 862a9ff..88036ff 100644
--- a/browser/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java
+++ b/browser/browser/src/main/java/androidx/browser/browseractions/BrowserActionsIntent.java
@@ -381,6 +381,7 @@
* @hide
*/
@RestrictTo(LIBRARY)
+ @SuppressWarnings("deprecation")
@NonNull
public static List<ResolveInfo> getBrowserActionsIntentHandlers(@NonNull Context context) {
Intent intent =
@@ -389,7 +390,7 @@
return pm.queryIntentActivities(intent, PackageManager.MATCH_ALL);
}
- @SuppressWarnings("NullAway") // TODO: b/141869398
+ @SuppressWarnings({"NullAway", "deprecation"}) // TODO: b/141869398
private static void openFallbackBrowserActionsMenu(Context context, Intent intent) {
Uri uri = intent.getData();
ArrayList<Bundle> bundles = intent.getParcelableArrayListExtra(EXTRA_MENU_ITEMS);
diff --git a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsSessionToken.java b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsSessionToken.java
index 40386b6..f1675f2 100644
--- a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsSessionToken.java
+++ b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsSessionToken.java
@@ -86,6 +86,7 @@
* {@link CustomTabsIntent#EXTRA_SESSION}.
* @return The token that was generated.
*/
+ @SuppressWarnings("deprecation")
public static @Nullable CustomTabsSessionToken getSessionTokenFromIntent(
@NonNull Intent intent) {
Bundle b = intent.getExtras();
diff --git a/browser/browser/src/main/java/androidx/browser/customtabs/TrustedWebUtils.java b/browser/browser/src/main/java/androidx/browser/customtabs/TrustedWebUtils.java
index b95bd78..37d604e 100644
--- a/browser/browser/src/main/java/androidx/browser/customtabs/TrustedWebUtils.java
+++ b/browser/browser/src/main/java/androidx/browser/customtabs/TrustedWebUtils.java
@@ -119,6 +119,7 @@
* @return Whether the specified Custom Tabs provider supports the specified splash screen
* feature/version.
*/
+ @SuppressWarnings("deprecation")
public static boolean areSplashScreensSupported(@NonNull Context context,
@NonNull String packageName, @NonNull String version) {
Intent serviceIntent = new Intent()
diff --git a/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java b/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
index f3fd01e..4a5ac59 100644
--- a/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
+++ b/browser/browser/src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java
@@ -274,6 +274,7 @@
assertNullSessionInExtras(intent);
}
+ @SuppressWarnings("deprecation")
@Test
public void putsSessionBinderAndId_IfSuppliedInConstructor() {
CustomTabsSession session = TestUtil.makeMockSession();
@@ -283,6 +284,7 @@
assertEquals(session.getId(), intent.getParcelableExtra(CustomTabsIntent.EXTRA_SESSION_ID));
}
+ @SuppressWarnings("deprecation")
@Test
public void putsSessionBinderAndId_IfSuppliedInSetter() {
CustomTabsSession session = TestUtil.makeMockSession();
@@ -292,6 +294,7 @@
assertEquals(session.getId(), intent.getParcelableExtra(CustomTabsIntent.EXTRA_SESSION_ID));
}
+ @SuppressWarnings("deprecation")
@Test
public void putsPendingSessionId() {
CustomTabsSession.PendingSession pendingSession = TestUtil.makeMockPendingSession();
diff --git a/browser/browser/src/test/java/androidx/browser/customtabs/TestUtil.java b/browser/browser/src/test/java/androidx/browser/customtabs/TestUtil.java
index 318a99a..fa0c171 100644
--- a/browser/browser/src/test/java/androidx/browser/customtabs/TestUtil.java
+++ b/browser/browser/src/test/java/androidx/browser/customtabs/TestUtil.java
@@ -55,6 +55,7 @@
return PendingIntent.getBroadcast(mock(Context.class), 0, new Intent(), 0);
}
+ @SuppressWarnings("deprecation")
public static void assertIntentHasSession(@NonNull Intent intent,
@NonNull CustomTabsSession session) {
assertEquals(session.getBinder(), intent.getExtras().getBinder(
diff --git a/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt b/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt
index 047cce2..cad190a 100644
--- a/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt
+++ b/buildSrc/public/src/main/kotlin/androidx/build/SupportConfig.kt
@@ -34,7 +34,7 @@
* Either an integer value or a pre-release platform code, prefixed with "android-" (ex.
* "android-28" or "android-Q") as you would see within the SDK's platforms directory.
*/
- const val COMPILE_SDK_VERSION = "android-32"
+ const val COMPILE_SDK_VERSION = "android-33"
/**
* The Android SDK version to use for targetSdkVersion meta-data.
diff --git a/busytown/impl/check_translations.sh b/busytown/impl/check_translations.sh
index f18ec2b..35501ad 100755
--- a/busytown/impl/check_translations.sh
+++ b/busytown/impl/check_translations.sh
@@ -19,12 +19,13 @@
expect="$tempdir/expect.txt"
find . \
\( \
- -iname '*samples*' \
+ -iname '*sample*' \
+ -o -iname '*donottranslate*' \
-o -iname '*debug*' \
-o -iname '*test*' \
\) \
-prune -o \
- -path '*/res/values/strings.xml' \
+ -path '*/res/values/*strings.xml' \
-print \
| sed -n 's/.\///p' \
| sort \
@@ -33,16 +34,16 @@
# Scrape string.xml files for platform branch
actual="$tempdir/actual.txt"
grep 'androidx-platform-dev' "$exports" \
- | grep -Eo '[^ ]+/strings\.xml' \
+ | grep -Eo '[^ ]+strings\.xml' \
| sort \
> "$actual"
# Compare and report
diff=$(diff "${expect}" "${actual}" | { grep '<' || true; })
if [ -n "$diff" ]; then
- echo "Missing files in $exports:" &> 2
- diff "$expect" "$actual" | grep strings.xml | sed -n 's/< //p' &> 2
- echo &> 2
- echo 'See go/androidx/playbook#translations for more information' &> 2
+ echo "Missing files in $exports:" >&2
+ diff "$expect" "$actual" | grep strings.xml | sed -n 's/< //p' >&2
+ echo >&2
+ echo 'See go/androidx/playbook#translations for more information' >&2
exit 1
fi
diff --git a/camera/camera-camera2/lint-baseline.xml b/camera/camera-camera2/lint-baseline.xml
index ec11370..e9b274c 100644
--- a/camera/camera-camera2/lint-baseline.xml
+++ b/camera/camera-camera2/lint-baseline.xml
@@ -169,7 +169,8 @@
errorLine1=" CaptureRequest.CONTROL_AF_REGIONS, mAfRects);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ column="21"/>
</issue>
<issue
@@ -178,7 +179,9 @@
errorLine1=" CaptureRequest.CONTROL_AF_REGIONS, mAfRects);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="193"
+ column="56"/>
</issue>
<issue
@@ -187,7 +190,9 @@
errorLine1=" configBuilder.setCaptureRequestOption("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="196"
+ column="27"/>
</issue>
<issue
@@ -196,7 +201,9 @@
errorLine1=" CaptureRequest.CONTROL_AE_REGIONS, mAeRects);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="197"
+ column="21"/>
</issue>
<issue
@@ -205,7 +212,9 @@
errorLine1=" CaptureRequest.CONTROL_AE_REGIONS, mAeRects);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="197"
+ column="56"/>
</issue>
<issue
@@ -214,7 +223,9 @@
errorLine1=" configBuilder.setCaptureRequestOption("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="200"
+ column="27"/>
</issue>
<issue
@@ -223,7 +234,9 @@
errorLine1=" CaptureRequest.CONTROL_AWB_REGIONS, mAwbRects);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="201"
+ column="21"/>
</issue>
<issue
@@ -232,7 +245,9 @@
errorLine1=" CaptureRequest.CONTROL_AWB_REGIONS, mAwbRects);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="201"
+ column="57"/>
</issue>
<issue
@@ -241,7 +256,9 @@
errorLine1=" Camera2ImplConfig.Builder configBuilder = new Camera2ImplConfig.Builder();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="376"
+ column="51"/>
</issue>
<issue
@@ -250,7 +267,9 @@
errorLine1=" configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AF_TRIGGER,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="377"
+ column="23"/>
</issue>
<issue
@@ -259,7 +278,9 @@
errorLine1=" configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AF_TRIGGER,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="377"
+ column="47"/>
</issue>
<issue
@@ -268,7 +289,9 @@
errorLine1=" CaptureRequest.CONTROL_AF_TRIGGER_START);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="378"
+ column="17"/>
</issue>
<issue
@@ -277,7 +300,9 @@
errorLine1=" configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_MODE,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="385"
+ column="27"/>
</issue>
<issue
@@ -286,7 +311,9 @@
errorLine1=" configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_MODE,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="385"
+ column="51"/>
</issue>
<issue
@@ -295,7 +322,9 @@
errorLine1=" mCameraControl.getSupportedAeMode(CaptureRequest.CONTROL_AE_MODE_ON));"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="386"
+ column="21"/>
</issue>
<issue
@@ -304,7 +333,9 @@
errorLine1=" builder.addImplementationOptions(configBuilder.build());"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="388"
+ column="56"/>
</issue>
<issue
@@ -313,7 +344,9 @@
errorLine1=" Camera2ImplConfig.Builder configBuilder = new Camera2ImplConfig.Builder();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="436"
+ column="51"/>
</issue>
<issue
@@ -322,7 +355,9 @@
errorLine1=" configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="437"
+ column="23"/>
</issue>
<issue
@@ -331,7 +366,9 @@
errorLine1=" configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="437"
+ column="47"/>
</issue>
<issue
@@ -340,7 +377,9 @@
errorLine1=" CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_START);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="438"
+ column="17"/>
</issue>
<issue
@@ -349,7 +388,9 @@
errorLine1=" builder.addImplementationOptions(configBuilder.build());"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="439"
+ column="56"/>
</issue>
<issue
@@ -358,7 +399,9 @@
errorLine1=" Camera2ImplConfig.Builder configBuilder = new Camera2ImplConfig.Builder();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="478"
+ column="51"/>
</issue>
<issue
@@ -367,7 +410,9 @@
errorLine1=" configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AF_TRIGGER,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="480"
+ column="27"/>
</issue>
<issue
@@ -376,7 +421,9 @@
errorLine1=" configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AF_TRIGGER,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="480"
+ column="51"/>
</issue>
<issue
@@ -385,7 +432,9 @@
errorLine1=" CaptureRequest.CONTROL_AF_TRIGGER_CANCEL);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="481"
+ column="21"/>
</issue>
<issue
@@ -394,7 +443,9 @@
errorLine1=" configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="484"
+ column="27"/>
</issue>
<issue
@@ -403,7 +454,9 @@
errorLine1=" configBuilder.setCaptureRequestOption(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="484"
+ column="51"/>
</issue>
<issue
@@ -412,7 +465,9 @@
errorLine1=" CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="485"
+ column="21"/>
</issue>
<issue
@@ -421,7 +476,9 @@
errorLine1=" builder.addImplementationOptions(configBuilder.build());"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/FocusMeteringControl.java"
+ line="487"
+ column="56"/>
</issue>
<issue
@@ -430,7 +487,9 @@
errorLine1=" Camera2ImplConfig.Builder camera2ConfigBuilder = new Camera2ImplConfig.Builder();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpacker.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpacker.java"
+ line="54"
+ column="58"/>
</issue>
<issue
@@ -439,7 +498,9 @@
errorLine1=" builder.addImplementationOptions(camera2ConfigBuilder.build());"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpacker.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpacker.java"
+ line="61"
+ column="63"/>
</issue>
<issue
@@ -448,7 +509,9 @@
errorLine1=" @RequiresApi(21)"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi24Impl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi24Impl.java"
+ line="102"
+ column="5"/>
</issue>
<issue
@@ -457,7 +520,9 @@
errorLine1=" @RequiresApi(21)"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi26Impl.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi26Impl.java"
+ line="167"
+ column="5"/>
</issue>
<issue
@@ -466,7 +531,9 @@
errorLine1=" public static List<OutputConfiguration> transformFromCompat("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+ line="137"
+ column="19"/>
</issue>
<issue
@@ -475,7 +542,9 @@
errorLine1=" public List<OutputConfigurationCompat> getOutputConfigurations() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+ line="162"
+ column="12"/>
</issue>
<issue
@@ -484,7 +553,9 @@
errorLine1=" public CameraCaptureSession.StateCallback getStateCallback() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+ line="171"
+ column="12"/>
</issue>
<issue
@@ -493,7 +564,9 @@
errorLine1=" public Executor getExecutor() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+ line="180"
+ column="12"/>
</issue>
<issue
@@ -502,7 +575,9 @@
errorLine1=" public InputConfigurationCompat getInputConfiguration() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+ line="189"
+ column="12"/>
</issue>
<issue
@@ -511,7 +586,9 @@
errorLine1=" public CaptureRequest getSessionParameters() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+ line="211"
+ column="12"/>
</issue>
<issue
@@ -520,7 +597,9 @@
errorLine1=" public void setSessionParameters(CaptureRequest params) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"/>
+ file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+ line="233"
+ column="38"/>
</issue>
</issues>
diff --git a/camera/camera-core/lint-baseline.xml b/camera/camera-core/lint-baseline.xml
index b82f249..ffdd0b5 100644
--- a/camera/camera-core/lint-baseline.xml
+++ b/camera/camera-core/lint-baseline.xml
@@ -40,7 +40,9 @@
errorLine1=" ListenableFuture<O> apply(@Nullable I input) throws Exception;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/utils/futures/AsyncFunction.java"/>
+ file="src/main/java/androidx/camera/core/impl/utils/futures/AsyncFunction.java"
+ line="50"
+ column="5"/>
</issue>
<issue
@@ -49,7 +51,9 @@
errorLine1=" boolean checkSupported(String cameraId, List<SurfaceConfig> surfaceConfigList);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"/>
+ file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"
+ line="65"
+ column="28"/>
</issue>
<issue
@@ -58,7 +62,9 @@
errorLine1=" boolean checkSupported(String cameraId, List<SurfaceConfig> surfaceConfigList);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"/>
+ file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"
+ line="65"
+ column="45"/>
</issue>
<issue
@@ -67,7 +73,9 @@
errorLine1=" SurfaceConfig transformSurfaceConfig(String cameraId, int imageFormat, Size size);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"/>
+ file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"
+ line="75"
+ column="5"/>
</issue>
<issue
@@ -76,7 +84,9 @@
errorLine1=" SurfaceConfig transformSurfaceConfig(String cameraId, int imageFormat, Size size);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"/>
+ file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"
+ line="75"
+ column="42"/>
</issue>
<issue
@@ -85,7 +95,9 @@
errorLine1=" SurfaceConfig transformSurfaceConfig(String cameraId, int imageFormat, Size size);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"/>
+ file="src/main/java/androidx/camera/core/impl/CameraDeviceSurfaceManager.java"
+ line="75"
+ column="76"/>
</issue>
<issue
@@ -94,7 +106,9 @@
errorLine1=" public CameraInfoUnavailableException(String s, Throwable e) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/camera/core/CameraInfoUnavailableException.java"/>
+ file="src/main/java/androidx/camera/core/CameraInfoUnavailableException.java"
+ line="28"
+ column="43"/>
</issue>
<issue
@@ -103,7 +117,9 @@
errorLine1=" public CameraInfoUnavailableException(String s, Throwable e) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/CameraInfoUnavailableException.java"/>
+ file="src/main/java/androidx/camera/core/CameraInfoUnavailableException.java"
+ line="28"
+ column="53"/>
</issue>
<issue
@@ -112,7 +128,9 @@
errorLine1=" public CameraInfoUnavailableException(String s) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/camera/core/CameraInfoUnavailableException.java"/>
+ file="src/main/java/androidx/camera/core/CameraInfoUnavailableException.java"
+ line="34"
+ column="43"/>
</issue>
<issue
@@ -121,7 +139,9 @@
errorLine1=" void onOutputSurface(Surface surface, int imageFormat);"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"/>
+ file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"
+ line="39"
+ column="26"/>
</issue>
<issue
@@ -130,7 +150,9 @@
errorLine1=" void process(ImageProxyBundle bundle);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"/>
+ file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"
+ line="52"
+ column="18"/>
</issue>
<issue
@@ -139,7 +161,9 @@
errorLine1=" void onResolutionUpdate(Size size);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"/>
+ file="src/main/java/androidx/camera/core/impl/CaptureProcessor.java"
+ line="59"
+ column="29"/>
</issue>
<issue
@@ -148,7 +172,9 @@
errorLine1=" CaptureConfig getCaptureConfig();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/CaptureStage.java"/>
+ file="src/main/java/androidx/camera/core/impl/CaptureStage.java"
+ line="33"
+ column="5"/>
</issue>
<issue
@@ -157,7 +183,9 @@
errorLine1=" public CaptureConfig getCaptureConfig() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/CaptureStage.java"/>
+ file="src/main/java/androidx/camera/core/impl/CaptureStage.java"
+ line="52"
+ column="16"/>
</issue>
<issue
@@ -166,7 +194,9 @@
errorLine1=" void onFailure(Throwable t);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/utils/futures/FutureCallback.java"/>
+ file="src/main/java/androidx/camera/core/impl/utils/futures/FutureCallback.java"
+ line="51"
+ column="20"/>
</issue>
<issue
@@ -175,7 +205,9 @@
errorLine1=" public static Handler getInstance() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/utils/MainThreadAsyncHandler.java"/>
+ file="src/main/java/androidx/camera/core/impl/utils/MainThreadAsyncHandler.java"
+ line="37"
+ column="19"/>
</issue>
<issue
@@ -184,7 +216,9 @@
errorLine1=" public static <T> Optional<T> absent() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
+ file="src/main/java/androidx/camera/core/impl/utils/Optional.java"
+ line="80"
+ column="23"/>
</issue>
<issue
@@ -193,7 +227,9 @@
errorLine1=" public static <T> Optional<T> of(T reference) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
+ file="src/main/java/androidx/camera/core/impl/utils/Optional.java"
+ line="92"
+ column="23"/>
</issue>
<issue
@@ -202,7 +238,9 @@
errorLine1=" public static <T> Optional<T> fromNullable(@Nullable T nullableReference) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
+ file="src/main/java/androidx/camera/core/impl/utils/Optional.java"
+ line="104"
+ column="23"/>
</issue>
<issue
@@ -211,7 +249,9 @@
errorLine1=" public abstract Optional<T> or(Optional<? extends T> secondChoice);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
+ file="src/main/java/androidx/camera/core/impl/utils/Optional.java"
+ line="179"
+ column="21"/>
</issue>
<issue
@@ -220,7 +260,9 @@
errorLine1=" public abstract Optional<T> or(Optional<? extends T> secondChoice);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
+ file="src/main/java/androidx/camera/core/impl/utils/Optional.java"
+ line="179"
+ column="36"/>
</issue>
<issue
@@ -229,7 +271,9 @@
errorLine1=" public abstract T or(Supplier<? extends T> supplier);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/utils/Optional.java"/>
+ file="src/main/java/androidx/camera/core/impl/utils/Optional.java"
+ line="191"
+ column="26"/>
</issue>
<issue
@@ -238,7 +282,9 @@
errorLine1=" public static SurfaceSizeDefinition create("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+ file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+ line="51"
+ column="19"/>
</issue>
<issue
@@ -247,7 +293,9 @@
errorLine1=" Size analysisSize,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+ file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+ line="52"
+ column="13"/>
</issue>
<issue
@@ -256,7 +304,9 @@
errorLine1=" Size previewSize,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+ file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+ line="53"
+ column="13"/>
</issue>
<issue
@@ -265,7 +315,9 @@
errorLine1=" Size recordSize) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+ file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+ line="54"
+ column="13"/>
</issue>
<issue
@@ -274,7 +326,9 @@
errorLine1=" public abstract Size getAnalysisSize();"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+ file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+ line="59"
+ column="21"/>
</issue>
<issue
@@ -283,7 +337,9 @@
errorLine1=" public abstract Size getPreviewSize();"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+ file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+ line="62"
+ column="21"/>
</issue>
<issue
@@ -292,7 +348,9 @@
errorLine1=" public abstract Size getRecordSize();"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"/>
+ file="src/main/java/androidx/camera/core/impl/SurfaceSizeDefinition.java"
+ line="65"
+ column="21"/>
</issue>
</issues>
diff --git a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/validation/ExtensionValidationResultActivity.kt b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/validation/ExtensionValidationResultActivity.kt
index c3a2051..89dbe9f 100644
--- a/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/validation/ExtensionValidationResultActivity.kt
+++ b/camera/integration-tests/extensionstestapp/src/main/java/androidx/camera/integration/extensions/validation/ExtensionValidationResultActivity.kt
@@ -48,7 +48,7 @@
private val imageValidationActivityRequestCode =
ImageValidationActivity::class.java.hashCode() % 1000
- @Suppress("UNCHECKED_CAST")
+ @Suppress("UNCHECKED_CAST", "DEPRECATION")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.full_listview)
diff --git a/car/app/app-projected/src/test/java/androidx/car/app/hardware/common/CarResultStubMapTest.java b/car/app/app-projected/src/test/java/androidx/car/app/hardware/common/CarResultStubMapTest.java
index 04e9656..0b75733 100644
--- a/car/app/app-projected/src/test/java/androidx/car/app/hardware/common/CarResultStubMapTest.java
+++ b/car/app/app-projected/src/test/java/androidx/car/app/hardware/common/CarResultStubMapTest.java
@@ -121,7 +121,7 @@
Integer desiredResult = 5;
Bundleable desiredBundleable = Bundleable.create(desiredResult);
int desiredResultType = ICarHardwareResultTypes.TYPE_SENSOR_ACCELEROMETER;
- Integer unsupportedResult = new Integer(-1);
+ Integer unsupportedResult = -1;
String param = "param";
Bundleable paramBundle = Bundleable.create(param);
@@ -193,7 +193,7 @@
public void addListener_multiple_listener_multiple_param() throws BundlerException,
RemoteException {
int desiredResultType = ICarHardwareResultTypes.TYPE_SENSOR_ACCELEROMETER;
- Integer unsupportedResult = new Integer(-1);
+ Integer unsupportedResult = -1;
CarResultStubMap<Integer, Integer> carResultStubMap = new CarResultStubMap<>(
desiredResultType,
diff --git a/car/app/app/lint-baseline.xml b/car/app/app/lint-baseline.xml
index fc546b9..a2f983e 100644
--- a/car/app/app/lint-baseline.xml
+++ b/car/app/app/lint-baseline.xml
@@ -70,7 +70,9 @@
errorLine1=" ZonedDateTime zonedDateTime = ZonedDateTime.parse("2020-05-14T19:57:00-07:00[US/Pacific]");"
errorLine2=" ~~~~~">
<location
- file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+ file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+ line="135"
+ column="53"/>
</issue>
<issue
@@ -79,7 +81,9 @@
errorLine1=" DateTimeWithZone dateTimeWithZone = DateTimeWithZone.create(zonedDateTime);"
errorLine2=" ~~~~~~">
<location
- file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+ file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+ line="136"
+ column="62"/>
</issue>
<issue
@@ -88,7 +92,9 @@
errorLine1=" assertDateTimeWithZoneEquals(zonedDateTime, dateTimeWithZone);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+ file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+ line="138"
+ column="9"/>
</issue>
<issue
@@ -97,7 +103,9 @@
errorLine1=" DateTimeWithZone.create(null);"
errorLine2=" ~~~~~~">
<location
- file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+ file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+ line="147"
+ column="38"/>
</issue>
<issue
@@ -106,7 +114,9 @@
errorLine1=" Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+ file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+ line="156"
+ column="77"/>
</issue>
<issue
@@ -115,7 +125,9 @@
errorLine1=" Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
errorLine2=" ~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+ file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+ line="156"
+ column="26"/>
</issue>
<issue
@@ -124,7 +136,9 @@
errorLine1=" Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+ file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+ line="174"
+ column="77"/>
</issue>
<issue
@@ -133,7 +147,9 @@
errorLine1=" Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
errorLine2=" ~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+ file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+ line="174"
+ column="26"/>
</issue>
<issue
@@ -142,7 +158,9 @@
errorLine1=" Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+ file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+ line="193"
+ column="77"/>
</issue>
<issue
@@ -151,7 +169,9 @@
errorLine1=" Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
errorLine2=" ~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+ file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+ line="193"
+ column="26"/>
</issue>
<issue
@@ -160,7 +180,9 @@
errorLine1=" Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+ file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+ line="212"
+ column="77"/>
</issue>
<issue
@@ -169,7 +191,9 @@
errorLine1=" Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
errorLine2=" ~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"/>
+ file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+ line="212"
+ column="26"/>
</issue>
<issue
@@ -178,7 +202,9 @@
errorLine1=" .stream()"
errorLine2=" ~~~~~~">
<location
- file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"/>
+ file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"
+ line="132"
+ column="18"/>
</issue>
<issue
@@ -187,7 +213,9 @@
errorLine1=" .mapToLong(List::size)"
errorLine2=" ~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"/>
+ file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"
+ line="133"
+ column="18"/>
</issue>
<issue
@@ -196,7 +224,9 @@
errorLine1=" .sum()).isEqualTo(6);"
errorLine2=" ~~~">
<location
- file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"/>
+ file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"
+ line="134"
+ column="18"/>
</issue>
<issue
@@ -205,7 +235,9 @@
errorLine1=" packageInfo.signingInfo = mock(SigningInfo.class);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"/>
+ file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"
+ line="109"
+ column="40"/>
</issue>
<issue
@@ -214,7 +246,9 @@
errorLine1=" packageInfo.signingInfo = mock(SigningInfo.class);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"/>
+ file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"
+ line="109"
+ column="9"/>
</issue>
<issue
@@ -223,7 +257,9 @@
errorLine1=" when(packageInfo.signingInfo.getSigningCertificateHistory()).thenReturn(signatures);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"/>
+ file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"
+ line="110"
+ column="38"/>
</issue>
<issue
@@ -232,7 +268,9 @@
errorLine1=" when(packageInfo.signingInfo.getSigningCertificateHistory()).thenReturn(signatures);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"/>
+ file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"
+ line="110"
+ column="14"/>
</issue>
<issue
@@ -241,7 +279,9 @@
errorLine1=" ZonedDateTime arrivalTime = ZonedDateTime.parse("2020-05-14T19:57:00-07:00[US/Pacific]");"
errorLine2=" ~~~~~">
<location
- file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+ file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+ line="69"
+ column="51"/>
</issue>
<issue
@@ -250,7 +290,9 @@
errorLine1=" Duration remainingTime = Duration.ofHours(10);"
errorLine2=" ~~~~~~~">
<location
- file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+ file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+ line="70"
+ column="43"/>
</issue>
<issue
@@ -259,7 +301,9 @@
errorLine1=" new TravelEstimate.Builder(mRemainingDistance, arrivalTime).setRemainingTime("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+ file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+ line="73"
+ column="17"/>
</issue>
<issue
@@ -268,7 +312,9 @@
errorLine1=" new TravelEstimate.Builder(mRemainingDistance, arrivalTime).setRemainingTime("
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+ file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+ line="73"
+ column="77"/>
</issue>
<issue
@@ -277,7 +323,9 @@
errorLine1=" assertThat(travelEstimate.getRemainingTimeSeconds()).isEqualTo(remainingTime.getSeconds());"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+ file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+ line="77"
+ column="86"/>
</issue>
<issue
@@ -286,7 +334,9 @@
errorLine1=" assertDateTimeWithZoneEquals(arrivalTime, travelEstimate.getArrivalTimeAtDestination());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+ file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+ line="78"
+ column="9"/>
</issue>
<issue
@@ -295,7 +345,9 @@
errorLine1=" ZonedDateTime arrivalTime = ZonedDateTime.parse("2020-05-14T19:57:00-07:00[US/Pacific]");"
errorLine2=" ~~~~~">
<location
- file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+ file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+ line="115"
+ column="51"/>
</issue>
<issue
@@ -304,7 +356,9 @@
errorLine1=" new TravelEstimate.Builder("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+ file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+ line="119"
+ column="17"/>
</issue>
<issue
@@ -313,7 +367,9 @@
errorLine1=" remainingDistance, arrivalTime).setRemainingTime("
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+ file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+ line="120"
+ column="57"/>
</issue>
<issue
@@ -322,7 +378,9 @@
errorLine1=" Duration.ofSeconds(REMAINING_TIME_UNKNOWN)).build();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+ file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+ line="121"
+ column="34"/>
</issue>
<issue
@@ -331,7 +389,9 @@
errorLine1=" assertDateTimeWithZoneEquals(arrivalTime, travelEstimate.getArrivalTimeAtDestination());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"/>
+ file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+ line="125"
+ column="9"/>
</issue>
<issue
@@ -340,7 +400,9 @@
errorLine1=" mCarAppApiLevel = handshakeInfo.getHostCarAppApiLevel();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/car/app/CarContext.java"/>
+ file="src/main/java/androidx/car/app/CarContext.java"
+ line="646"
+ column="27"/>
</issue>
<issue
@@ -349,7 +411,9 @@
errorLine1=" enumName = (String) nameMethod.invoke(obj);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/car/app/serialization/Bundler.java"/>
+ file="src/main/java/androidx/car/app/serialization/Bundler.java"
+ line="343"
+ column="33"/>
</issue>
<issue
@@ -358,7 +422,9 @@
errorLine1=" Object obj = converter.invoke(null, binder);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/car/app/serialization/Bundler.java"/>
+ file="src/main/java/androidx/car/app/serialization/Bundler.java"
+ line="428"
+ column="26"/>
</issue>
<issue
@@ -367,7 +433,9 @@
errorLine1=" return nameMethod.invoke(null, enumName);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/car/app/serialization/Bundler.java"/>
+ file="src/main/java/androidx/car/app/serialization/Bundler.java"
+ line="517"
+ column="20"/>
</issue>
<issue
diff --git a/car/app/app/src/main/java/androidx/car/app/notification/CarAppNotificationBroadcastReceiver.java b/car/app/app/src/main/java/androidx/car/app/notification/CarAppNotificationBroadcastReceiver.java
index 9a9bd33..49c96d4 100644
--- a/car/app/app/src/main/java/androidx/car/app/notification/CarAppNotificationBroadcastReceiver.java
+++ b/car/app/app/src/main/java/androidx/car/app/notification/CarAppNotificationBroadcastReceiver.java
@@ -47,6 +47,7 @@
public class CarAppNotificationBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = LogTags.TAG + ".NBR";
+ @SuppressWarnings("deprecation")
@Override
public void onReceive(@NonNull Context context, @NonNull Intent intent) {
ComponentName appComponent =
diff --git a/car/app/app/src/test/java/androidx/car/app/notification/CarPendingIntentTest.java b/car/app/app/src/test/java/androidx/car/app/notification/CarPendingIntentTest.java
index 5a03bb1..86daab0 100644
--- a/car/app/app/src/test/java/androidx/car/app/notification/CarPendingIntentTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/notification/CarPendingIntentTest.java
@@ -52,6 +52,7 @@
private final ComponentName mComponentName = new ComponentName(mContext, CarAppService.class);
private final Intent mIntent = new Intent("fooAction").setComponent(mComponentName);
+ @SuppressWarnings("deprecation")
@Test
public void getCarApp_returnsTheExpectedPendingIntent() throws PendingIntent.CanceledException {
PendingIntent pendingIntent = CarPendingIntent.getCarApp(mContext, 1, mIntent,
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollAccessibilityTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollAccessibilityTest.kt
index 26edb9b..dea797b 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollAccessibilityTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollAccessibilityTest.kt
@@ -213,7 +213,7 @@
private fun verifyNodeInfoScrollActions(expectForward: Boolean, expectBackward: Boolean) {
val nodeInfo = rule.onNodeWithTag(scrollerTag).withSemanticsNode {
rule.runOnUiThread {
- accessibilityNodeProvider.createAccessibilityNodeInfo(id)
+ accessibilityNodeProvider.createAccessibilityNodeInfo(id)!!
}
}
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollAccessibilityTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollAccessibilityTest.kt
index f2a9052..a3a9ef1 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollAccessibilityTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollAccessibilityTest.kt
@@ -226,7 +226,7 @@
private fun verifyNodeInfoScrollActions(expectForward: Boolean, expectBackward: Boolean) {
val nodeInfo = rule.onNodeWithTag(scrollerTag).withSemanticsNode {
rule.runOnUiThread {
- accessibilityNodeProvider.createAccessibilityNodeInfo(id)
+ accessibilityNodeProvider.createAccessibilityNodeInfo(id)!!
}
}
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollAccessibilityTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollAccessibilityTest.kt
index 0b2aa0e..87f9928 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollAccessibilityTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollAccessibilityTest.kt
@@ -233,7 +233,7 @@
private fun verifyNodeInfoScrollActions(expectForward: Boolean, expectBackward: Boolean) {
val nodeInfo = rule.onNodeWithTag(scrollerTag).withSemanticsNode {
rule.runOnUiThread {
- accessibilityNodeProvider.createAccessibilityNodeInfo(id)
+ accessibilityNodeProvider.createAccessibilityNodeInfo(id)!!
}
}
diff --git a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/tooling/Tooling.kt b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/tooling/Tooling.kt
index b099042..c415400 100644
--- a/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/tooling/Tooling.kt
+++ b/compose/integration-tests/docs-snippets/src/main/java/androidx/compose/integration/docs/tooling/Tooling.kt
@@ -19,8 +19,10 @@
package androidx.compose.integration.docs.tooling
+import android.content.res.Configuration.UI_MODE_NIGHT_YES
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
+import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@@ -64,6 +66,45 @@
}
}
+private class ToolingSnippetMultipreviewDefinition {
+ @Preview(
+ name = "small font",
+ group = "font scales",
+ fontScale = 0.5f
+ )
+ @Preview(
+ name = "large font",
+ group = "font scales",
+ fontScale = 1.5f
+ )
+ annotation class FontScalePreviews
+}
+
+private class ToolingSnippetMultipreviewUsage {
+ @FontScalePreviews
+ @Composable
+ fun HelloWorldPreview() {
+ Text("Hello World")
+ }
+}
+
+private class ToolingSnippetMultipreviewCombine {
+ @Preview(
+ name = "dark theme",
+ group = "themes",
+ uiMode = UI_MODE_NIGHT_YES
+ )
+ @FontScalePreviews
+ @DevicePreviews
+ annotation class CompletePreviews
+
+ @CompletePreviews
+ @Composable
+ fun HelloWorldPreview() {
+ MyTheme { Surface { Text("Hello world") } }
+ }
+}
+
private class ToolingSnippet3 {
@Preview(showBackground = true, backgroundColor = 0xFF00FF00)
@Composable
@@ -146,6 +187,12 @@
}
}
+private annotation class FontScalePreviews
+private annotation class DevicePreviews
+
+@Composable
+private fun MyTheme(content: @Composable () -> Unit) {}
+
/*
* Fakes needed for snippets to build:
*/
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTextSelectionColorsScreenshotTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTextSelectionColorsScreenshotTest.kt
index 26fe952..dc04bd0 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTextSelectionColorsScreenshotTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTextSelectionColorsScreenshotTest.kt
@@ -86,7 +86,7 @@
.isEqualTo(darkPrimary.copy(alpha = 0.375f))
}
- @FlakyTest(bugId = 191141357)
+ @FlakyTest(bugId = 230475771)
@Test
fun text_lightThemeSelectionColors() {
rule.setContent {
diff --git a/compose/ui/ui-text/build.gradle b/compose/ui/ui-text/build.gradle
index 29431bf..2173042 100644
--- a/compose/ui/ui-text/build.gradle
+++ b/compose/ui/ui-text/build.gradle
@@ -45,7 +45,7 @@
implementation(project(":compose:ui:ui-util"))
implementation(libs.kotlinStdlib)
- implementation("androidx.core:core:1.5.0")
+ implementation("androidx.core:core:1.7.0")
implementation('androidx.collection:collection:1.0.0')
testImplementation(project(":internal-testutils-fonts"))
@@ -126,7 +126,7 @@
androidMain.dependencies {
api("androidx.annotation:annotation:1.1.0")
- implementation("androidx.core:core:1.5.0")
+ implementation("androidx.core:core:1.7.0")
implementation('androidx.collection:collection:1.0.0')
}
diff --git a/coordinatorlayout/coordinatorlayout/lint-baseline.xml b/coordinatorlayout/coordinatorlayout/lint-baseline.xml
index 4d6e46f..11cf628 100644
--- a/coordinatorlayout/coordinatorlayout/lint-baseline.xml
+++ b/coordinatorlayout/coordinatorlayout/lint-baseline.xml
@@ -160,7 +160,8 @@
errorLine1=" public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ column="52"/>
</issue>
<issue
@@ -169,7 +170,9 @@
errorLine1=" public boolean onStartNestedScroll(View child, View target, int axes, int type) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1792"
+ column="40"/>
</issue>
<issue
@@ -178,7 +181,9 @@
errorLine1=" public boolean onStartNestedScroll(View child, View target, int axes, int type) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1792"
+ column="52"/>
</issue>
<issue
@@ -187,7 +192,9 @@
errorLine1=" public void onNestedScrollAccepted(View child, View target, int axes) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1817"
+ column="40"/>
</issue>
<issue
@@ -196,7 +203,9 @@
errorLine1=" public void onNestedScrollAccepted(View child, View target, int axes) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1817"
+ column="52"/>
</issue>
<issue
@@ -205,7 +214,9 @@
errorLine1=" public void onNestedScrollAccepted(View child, View target, int axes, int type) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1823"
+ column="40"/>
</issue>
<issue
@@ -214,7 +225,9 @@
errorLine1=" public void onNestedScrollAccepted(View child, View target, int axes, int type) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1823"
+ column="52"/>
</issue>
<issue
@@ -223,7 +236,9 @@
errorLine1=" public void onStopNestedScroll(View target) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1844"
+ column="36"/>
</issue>
<issue
@@ -232,7 +247,9 @@
errorLine1=" public void onStopNestedScroll(View target, int type) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1850"
+ column="36"/>
</issue>
<issue
@@ -241,7 +258,9 @@
errorLine1=" public void onNestedScroll(View target, int dxConsumed, int dyConsumed,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1872"
+ column="32"/>
</issue>
<issue
@@ -250,7 +269,9 @@
errorLine1=" public void onNestedScroll(View target, int dxConsumed, int dyConsumed,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1879"
+ column="32"/>
</issue>
<issue
@@ -259,7 +280,9 @@
errorLine1=" public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1934"
+ column="35"/>
</issue>
<issue
@@ -268,7 +291,9 @@
errorLine1=" public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1934"
+ column="64"/>
</issue>
<issue
@@ -277,7 +302,9 @@
errorLine1=" public void onNestedPreScroll(View target, int dx, int dy, int[] consumed, int type) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1940"
+ column="35"/>
</issue>
<issue
@@ -286,7 +313,9 @@
errorLine1=" public void onNestedPreScroll(View target, int dx, int dy, int[] consumed, int type) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1940"
+ column="64"/>
</issue>
<issue
@@ -295,7 +324,9 @@
errorLine1=" public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="1983"
+ column="34"/>
</issue>
<issue
@@ -304,7 +335,9 @@
errorLine1=" public boolean onNestedPreFling(View target, float velocityX, float velocityY) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="2013"
+ column="37"/>
</issue>
<issue
@@ -313,7 +346,9 @@
errorLine1=" public Behavior(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="2124"
+ column="25"/>
</issue>
<issue
@@ -322,7 +357,9 @@
errorLine1=" public Behavior(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="2124"
+ column="42"/>
</issue>
<issue
@@ -331,7 +368,9 @@
errorLine1=" public LayoutParams(LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="2929"
+ column="29"/>
</issue>
<issue
@@ -340,7 +379,9 @@
errorLine1=" public LayoutParams(MarginLayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="2933"
+ column="29"/>
</issue>
<issue
@@ -349,7 +390,9 @@
errorLine1=" public LayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="2937"
+ column="29"/>
</issue>
<issue
@@ -358,7 +401,9 @@
errorLine1=" protected void onRestoreInstanceState(Parcelable state) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="3262"
+ column="43"/>
</issue>
<issue
@@ -367,7 +412,9 @@
errorLine1=" protected Parcelable onSaveInstanceState() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="3290"
+ column="15"/>
</issue>
<issue
@@ -376,7 +423,9 @@
errorLine1=" public boolean requestChildRectangleOnScreen(View child, Rect rectangle, boolean immediate) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="3314"
+ column="50"/>
</issue>
<issue
@@ -385,7 +434,9 @@
errorLine1=" public boolean requestChildRectangleOnScreen(View child, Rect rectangle, boolean immediate) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java"
+ line="3314"
+ column="62"/>
</issue>
<issue
@@ -394,7 +445,9 @@
errorLine1=" public static void getDescendantRect(ViewGroup parent, View descendant, Rect out) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"
+ line="76"
+ column="42"/>
</issue>
<issue
@@ -403,7 +456,9 @@
errorLine1=" public static void getDescendantRect(ViewGroup parent, View descendant, Rect out) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"
+ line="76"
+ column="60"/>
</issue>
<issue
@@ -412,7 +467,9 @@
errorLine1=" public static void getDescendantRect(ViewGroup parent, View descendant, Rect out) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"/>
+ file="src/main/java/androidx/coordinatorlayout/widget/ViewGroupUtils.java"
+ line="76"
+ column="77"/>
</issue>
</issues>
diff --git a/core/core-animation-integration-tests/testapp/src/androidTest/java/androidx/core/animation/ObjectAnimatorTest.java b/core/core-animation-integration-tests/testapp/src/androidTest/java/androidx/core/animation/ObjectAnimatorTest.java
index f85edaa..aed16bd 100644
--- a/core/core-animation-integration-tests/testapp/src/androidTest/java/androidx/core/animation/ObjectAnimatorTest.java
+++ b/core/core-animation-integration-tests/testapp/src/androidTest/java/androidx/core/animation/ObjectAnimatorTest.java
@@ -312,7 +312,7 @@
String propertyName = "backgroundColor";
int startColor = Color.RED;
int endColor = Color.BLUE;
- Object[] values = {new Integer(startColor), new Integer(endColor)};
+ Object[] values = {startColor, endColor};
ArgbEvaluator evaluator = ArgbEvaluator.getInstance();
ObjectAnimator colorAnimator = ObjectAnimator.ofObject(object, propertyName,
evaluator, values);
@@ -360,7 +360,7 @@
String propertyName = "backgroundColor";
int startColor = Color.RED;
int endColor = Color.BLUE;
- Object[] values = {new Integer(startColor), new Integer(endColor)};
+ Object[] values = {startColor, endColor};
ArgbEvaluator evaluator = ArgbEvaluator.getInstance();
ObjectAnimator colorAnimator = ObjectAnimator.ofObject(object, propertyName,
evaluator, values);
diff --git a/core/core-appdigest/src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java b/core/core-appdigest/src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java
index 960b604..194bb74 100644
--- a/core/core-appdigest/src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java
+++ b/core/core-appdigest/src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java
@@ -662,6 +662,7 @@
@SdkSuppress(minSdkVersion = 29)
@LargeTest
@Test
+ @SuppressWarnings("deprecation")
public void testFixedAllFileChecksumsSingleThread() throws Exception {
installPackage(TEST_FIXED_APK);
assertTrue(isAppInstalled(FIXED_PACKAGE_NAME));
@@ -961,6 +962,7 @@
trustedInstallers);
}
+ @SuppressWarnings("deprecation")
private Checksum[] getFileChecksums(@NonNull String packageName,
@Checksum.Type int required, @NonNull List<Certificate> trustedInstallers)
throws Exception {
@@ -1194,6 +1196,7 @@
}
}
+ @SuppressWarnings("deprecation")
static Certificate getInstallerCertificate(Context context) throws Exception {
PackageManager pm = context.getPackageManager();
PackageInfo installerPackageInfo = pm.getPackageInfo(INSTALLER_PACKAGE_NAME,
diff --git a/core/core-ktx/api/1.8.0-beta01.txt b/core/core-ktx/api/1.8.0-beta01.txt
deleted file mode 100644
index 521f26c..0000000
--- a/core/core-ktx/api/1.8.0-beta01.txt
+++ /dev/null
@@ -1,629 +0,0 @@
-// Signature format: 4.0
-package androidx.core.animation {
-
- public final class AnimatorKt {
- method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onRepeat);
- method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onPause);
- method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- }
-
-}
-
-package androidx.core.content {
-
- public final class ContentValuesKt {
- method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
- }
-
- public final class ContextKt {
- method public static inline <reified T> T! getSystemService(android.content.Context);
- method public static inline void withStyledAttributes(android.content.Context, optional android.util.AttributeSet? set, int[] attrs, optional @AttrRes int defStyleAttr, optional @StyleRes int defStyleRes, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
- method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
- }
-
- public final class SharedPreferencesKt {
- method public static inline void edit(android.content.SharedPreferences, optional boolean commit, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
- }
-
-}
-
-package androidx.core.content.res {
-
- public final class TypedArrayKt {
- method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static CharSequence![] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static inline <R> R! use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
- }
-
-}
-
-package androidx.core.database {
-
- public final class CursorKt {
- method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
- method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
- method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
- method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
- method public static inline Long? getLongOrNull(android.database.Cursor, int index);
- method public static inline Short? getShortOrNull(android.database.Cursor, int index);
- method public static inline String? getStringOrNull(android.database.Cursor, int index);
- }
-
-}
-
-package androidx.core.database.sqlite {
-
- public final class SQLiteDatabaseKt {
- method public static inline <T> T! transaction(android.database.sqlite.SQLiteDatabase, optional boolean exclusive, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
- }
-
-}
-
-package androidx.core.graphics {
-
- public final class BitmapKt {
- method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
- method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
- method public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config);
- method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config, optional boolean hasAlpha, optional android.graphics.ColorSpace colorSpace);
- method public static inline operator int get(android.graphics.Bitmap, int x, int y);
- method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, optional boolean filter);
- method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
- }
-
- public final class CanvasKt {
- method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withMatrix(android.graphics.Canvas, optional android.graphics.Matrix matrix, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withRotation(android.graphics.Canvas, optional float degrees, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withScale(android.graphics.Canvas, optional float x, optional float y, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withSkew(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withTranslation(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- }
-
- public final class ColorKt {
- method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
- method public static inline operator int component1(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component1(@ColorLong long);
- method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
- method public static inline operator int component2(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component2(@ColorLong long);
- method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
- method public static inline operator int component3(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component3(@ColorLong long);
- method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
- method public static inline operator int component4(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
- method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
- method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
- method public static inline int getAlpha(@ColorInt int);
- method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
- method public static inline int getBlue(@ColorInt int);
- method @RequiresApi(26) public static inline float getBlue(@ColorLong long);
- method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(@ColorLong long);
- method public static inline int getGreen(@ColorInt int);
- method @RequiresApi(26) public static inline float getGreen(@ColorLong long);
- method @RequiresApi(26) public static inline float getLuminance(@ColorInt int);
- method @RequiresApi(26) public static inline float getLuminance(@ColorLong long);
- method public static inline int getRed(@ColorInt int);
- method @RequiresApi(26) public static inline float getRed(@ColorLong long);
- method @RequiresApi(26) public static inline boolean isSrgb(@ColorLong long);
- method @RequiresApi(26) public static inline boolean isWideGamut(@ColorLong long);
- method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
- method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
- method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
- method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
- method @ColorInt public static inline int toColorInt(String);
- method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
- }
-
- public final class ImageDecoderKt {
- method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
- method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
- }
-
- public final class MatrixKt {
- method public static android.graphics.Matrix rotationMatrix(float degrees, optional float px, optional float py);
- method public static android.graphics.Matrix scaleMatrix(optional float sx, optional float sy);
- method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
- method public static android.graphics.Matrix translationMatrix(optional float tx, optional float ty);
- method public static inline float[] values(android.graphics.Matrix);
- }
-
- public final class PaintKt {
- method public static inline boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat? blendModeCompat);
- }
-
- public final class PathKt {
- method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, optional float error);
- method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
- }
-
- public final class PictureKt {
- method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- }
-
- public final class PointKt {
- method public static inline operator int component1(android.graphics.Point);
- method public static inline operator float component1(android.graphics.PointF);
- method public static inline operator int component2(android.graphics.Point);
- method public static inline operator float component2(android.graphics.PointF);
- method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
- method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
- method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
- method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
- method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
- method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
- method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
- method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
- method public static inline android.graphics.Point toPoint(android.graphics.PointF);
- method public static inline android.graphics.PointF toPointF(android.graphics.Point);
- method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
- method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
- }
-
- public final class PorterDuffKt {
- method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
- method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
- }
-
- public final class RectKt {
- method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
- method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator int component1(android.graphics.Rect);
- method public static inline operator float component1(android.graphics.RectF);
- method public static inline operator int component2(android.graphics.Rect);
- method public static inline operator float component2(android.graphics.RectF);
- method public static inline operator int component3(android.graphics.Rect);
- method public static inline operator float component3(android.graphics.RectF);
- method public static inline operator int component4(android.graphics.Rect);
- method public static inline operator float component4(android.graphics.RectF);
- method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
- method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
- method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
- method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
- method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
- method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
- method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
- method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
- method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
- method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
- method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
- method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
- method public static inline android.graphics.Rect toRect(android.graphics.RectF);
- method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
- method public static inline android.graphics.Region toRegion(android.graphics.Rect);
- method public static inline android.graphics.Region toRegion(android.graphics.RectF);
- method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
- method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
- method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
- }
-
- public final class RegionKt {
- method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
- method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
- method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
- method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
- method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
- method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
- method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
- method public static inline operator android.graphics.Region not(android.graphics.Region);
- method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
- method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
- method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
- method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
- method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
- method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
- method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
- }
-
- public final class ShaderKt {
- method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
- }
-
-}
-
-package androidx.core.graphics.drawable {
-
- public final class BitmapDrawableKt {
- method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
- }
-
- public final class ColorDrawableKt {
- method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
- method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
- }
-
- public final class DrawableKt {
- method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
- method public static android.graphics.Bitmap? toBitmapOrNull(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
- method public static void updateBounds(android.graphics.drawable.Drawable, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
- }
-
- public final class IconKt {
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
- }
-
-}
-
-package androidx.core.location {
-
- public final class LocationKt {
- method public static inline operator double component1(android.location.Location);
- method public static inline operator double component2(android.location.Location);
- }
-
-}
-
-package androidx.core.net {
-
- public final class UriKt {
- method public static java.io.File toFile(android.net.Uri);
- method public static inline android.net.Uri toUri(String);
- method public static inline android.net.Uri toUri(java.io.File);
- }
-
-}
-
-package androidx.core.os {
-
- public final class BundleKt {
- method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
- method public static android.os.Bundle bundleOf();
- }
-
- public final class HandlerKt {
- method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- }
-
- @RequiresApi(31) public final class OutcomeReceiverKt {
- method @RequiresApi(31) public static <R, E extends java.lang.Throwable> android.os.OutcomeReceiver<R,E> asOutcomeReceiver(kotlin.coroutines.Continuation<? super R>);
- }
-
- public final class PersistableBundleKt {
- method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
- method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf();
- method @RequiresApi(21) public static android.os.PersistableBundle toPersistableBundle(java.util.Map<java.lang.String,?>);
- }
-
- public final class TraceKt {
- method @Deprecated public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
- }
-
-}
-
-package androidx.core.text {
-
- public final class CharSequenceKt {
- method public static inline boolean isDigitsOnly(CharSequence);
- method public static inline int trimmedLength(CharSequence);
- }
-
- public final class HtmlKt {
- method public static inline android.text.Spanned parseAsHtml(String, optional int flags, optional android.text.Html.ImageGetter? imageGetter, optional android.text.Html.TagHandler? tagHandler);
- method public static inline String toHtml(android.text.Spanned, optional int option);
- }
-
- public final class LocaleKt {
- method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
- }
-
- public final class SpannableStringBuilderKt {
- method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- }
-
- public final class SpannableStringKt {
- method public static inline void clearSpans(android.text.Spannable);
- method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
- method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
- method public static inline android.text.Spannable toSpannable(CharSequence);
- }
-
- public final class SpannedStringKt {
- method public static inline <reified T> T![]! getSpans(android.text.Spanned, optional int start, optional int end);
- method public static inline android.text.Spanned toSpanned(CharSequence);
- }
-
- public final class StringKt {
- method public static inline String htmlEncode(String);
- }
-
-}
-
-package androidx.core.transition {
-
- public final class TransitionKt {
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onPause);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- }
-
-}
-
-package androidx.core.util {
-
- public final class AndroidXConsumerKt {
- method public static <T> androidx.core.util.Consumer<T> asAndroidXConsumer(kotlin.coroutines.Continuation<? super T>);
- }
-
- public final class AtomicFileKt {
- method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
- method @RequiresApi(17) public static String readText(android.util.AtomicFile, optional java.nio.charset.Charset charset);
- method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
- method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
- method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, optional java.nio.charset.Charset charset);
- }
-
- @RequiresApi(24) public final class ConsumerKt {
- method @RequiresApi(24) public static <T> java.util.function.Consumer<T> asConsumer(kotlin.coroutines.Continuation<? super T>);
- }
-
- public final class HalfKt {
- method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
- method @RequiresApi(26) public static inline android.util.Half toHalf(float);
- method @RequiresApi(26) public static inline android.util.Half toHalf(double);
- method @RequiresApi(26) public static inline android.util.Half toHalf(String);
- }
-
- public final class LongSparseArrayKt {
- method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
- method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
- method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T? value);
- method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
- method @RequiresApi(16) public static inline <T> T! getOrDefault(android.util.LongSparseArray<T>, long key, T? defaultValue);
- method @RequiresApi(16) public static inline <T> T! getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
- method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
- method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
- method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T? value);
- method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T? value);
- method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
- }
-
- public final class LruCacheKt {
- method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
- }
-
- public final class PairKt {
- method public static inline operator <F, S> F! component1(androidx.core.util.Pair<F,S>);
- method public static inline operator <F, S> F! component1(android.util.Pair<F,S>);
- method public static inline operator <F, S> S! component2(androidx.core.util.Pair<F,S>);
- method public static inline operator <F, S> S! component2(android.util.Pair<F,S>);
- method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
- method public static inline <F, S> androidx.core.util.Pair<F,S> toAndroidXPair(kotlin.Pair<? extends F,? extends S>);
- method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
- method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
- }
-
- public final class RangeKt {
- method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
- method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
- method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
- method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
- method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
- method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
- }
-
- public final class RunnableKt {
- method public static Runnable asRunnable(kotlin.coroutines.Continuation<? super kotlin.Unit>);
- }
-
- public final class SizeKt {
- method @RequiresApi(21) public static inline operator int component1(android.util.Size);
- method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
- method public static inline operator float component1(androidx.core.util.SizeFCompat);
- method @RequiresApi(21) public static inline operator int component2(android.util.Size);
- method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
- method public static inline operator float component2(androidx.core.util.SizeFCompat);
- }
-
- public final class SparseArrayKt {
- method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
- method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
- method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T? value);
- method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
- method public static inline <T> T! getOrDefault(android.util.SparseArray<T>, int key, T? defaultValue);
- method public static inline <T> T! getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
- method public static inline <T> int getSize(android.util.SparseArray<T>);
- method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
- method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
- method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
- method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
- method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
- method public static <T> boolean remove(android.util.SparseArray<T>, int key, T? value);
- method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T? value);
- method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
- }
-
- public final class SparseBooleanArrayKt {
- method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
- method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
- method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
- method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
- method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
- method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
- method public static inline int getSize(android.util.SparseBooleanArray);
- method public static inline boolean isEmpty(android.util.SparseBooleanArray);
- method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
- method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
- method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
- method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
- method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
- method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
- method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
- }
-
- public final class SparseIntArrayKt {
- method public static inline operator boolean contains(android.util.SparseIntArray, int key);
- method public static inline boolean containsKey(android.util.SparseIntArray, int key);
- method public static inline boolean containsValue(android.util.SparseIntArray, int value);
- method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
- method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
- method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
- method public static inline int getSize(android.util.SparseIntArray);
- method public static inline boolean isEmpty(android.util.SparseIntArray);
- method public static inline boolean isNotEmpty(android.util.SparseIntArray);
- method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
- method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
- method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
- method public static boolean remove(android.util.SparseIntArray, int key, int value);
- method public static inline operator void set(android.util.SparseIntArray, int key, int value);
- method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
- }
-
- public final class SparseLongArrayKt {
- method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
- method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
- method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
- method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
- method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
- method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
- method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
- method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
- method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
- method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
- method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
- method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
- method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
- method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
- method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
- }
-
-}
-
-package androidx.core.view {
-
- public final class MenuKt {
- method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
- method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
- method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
- method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
- method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
- method public static inline int getSize(android.view.Menu);
- method public static inline boolean isEmpty(android.view.Menu);
- method public static inline boolean isNotEmpty(android.view.Menu);
- method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
- method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
- }
-
- public final class ViewGroupKt {
- method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
- method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
- method public static operator android.view.View get(android.view.ViewGroup, int index);
- method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
- method public static kotlin.sequences.Sequence<android.view.View> getDescendants(android.view.ViewGroup);
- method public static inline kotlin.ranges.IntRange getIndices(android.view.ViewGroup);
- method public static inline int getSize(android.view.ViewGroup);
- method public static inline boolean isEmpty(android.view.ViewGroup);
- method public static inline boolean isNotEmpty(android.view.ViewGroup);
- method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
- method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
- method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
- method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
- method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
- method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
- }
-
- public final class ViewKt {
- method public static inline void doOnAttach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void doOnDetach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static android.graphics.Bitmap drawToBitmap(android.view.View, optional android.graphics.Bitmap.Config config);
- method public static kotlin.sequences.Sequence<android.view.View> getAllViews(android.view.View);
- method public static kotlin.sequences.Sequence<android.view.ViewParent> getAncestors(android.view.View);
- method public static inline int getMarginBottom(android.view.View);
- method public static inline int getMarginEnd(android.view.View);
- method public static inline int getMarginLeft(android.view.View);
- method public static inline int getMarginRight(android.view.View);
- method public static inline int getMarginStart(android.view.View);
- method public static inline int getMarginTop(android.view.View);
- method public static inline boolean isGone(android.view.View);
- method public static inline boolean isInvisible(android.view.View);
- method public static inline boolean isVisible(android.view.View);
- method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- method @RequiresApi(16) public static inline Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- method public static inline void setGone(android.view.View, boolean);
- method public static inline void setInvisible(android.view.View, boolean);
- method public static inline void setPadding(android.view.View, @Px int size);
- method public static inline void setVisible(android.view.View, boolean);
- method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
- method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> block);
- method public static inline void updatePadding(android.view.View, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
- method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
- }
-
-}
-
-package androidx.core.widget {
-
- public final class TextViewKt {
- method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> onTextChanged, optional kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged);
- method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
- method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
- method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
- }
-
-}
-
diff --git a/core/core-ktx/api/public_plus_experimental_1.8.0-beta01.txt b/core/core-ktx/api/public_plus_experimental_1.8.0-beta01.txt
deleted file mode 100644
index 521f26c..0000000
--- a/core/core-ktx/api/public_plus_experimental_1.8.0-beta01.txt
+++ /dev/null
@@ -1,629 +0,0 @@
-// Signature format: 4.0
-package androidx.core.animation {
-
- public final class AnimatorKt {
- method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onRepeat);
- method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onPause);
- method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- }
-
-}
-
-package androidx.core.content {
-
- public final class ContentValuesKt {
- method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
- }
-
- public final class ContextKt {
- method public static inline <reified T> T! getSystemService(android.content.Context);
- method public static inline void withStyledAttributes(android.content.Context, optional android.util.AttributeSet? set, int[] attrs, optional @AttrRes int defStyleAttr, optional @StyleRes int defStyleRes, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
- method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
- }
-
- public final class SharedPreferencesKt {
- method public static inline void edit(android.content.SharedPreferences, optional boolean commit, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
- }
-
-}
-
-package androidx.core.content.res {
-
- public final class TypedArrayKt {
- method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static CharSequence![] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static inline <R> R! use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
- }
-
-}
-
-package androidx.core.database {
-
- public final class CursorKt {
- method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
- method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
- method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
- method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
- method public static inline Long? getLongOrNull(android.database.Cursor, int index);
- method public static inline Short? getShortOrNull(android.database.Cursor, int index);
- method public static inline String? getStringOrNull(android.database.Cursor, int index);
- }
-
-}
-
-package androidx.core.database.sqlite {
-
- public final class SQLiteDatabaseKt {
- method public static inline <T> T! transaction(android.database.sqlite.SQLiteDatabase, optional boolean exclusive, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
- }
-
-}
-
-package androidx.core.graphics {
-
- public final class BitmapKt {
- method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
- method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
- method public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config);
- method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config, optional boolean hasAlpha, optional android.graphics.ColorSpace colorSpace);
- method public static inline operator int get(android.graphics.Bitmap, int x, int y);
- method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, optional boolean filter);
- method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
- }
-
- public final class CanvasKt {
- method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withMatrix(android.graphics.Canvas, optional android.graphics.Matrix matrix, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withRotation(android.graphics.Canvas, optional float degrees, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withScale(android.graphics.Canvas, optional float x, optional float y, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withSkew(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withTranslation(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- }
-
- public final class ColorKt {
- method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
- method public static inline operator int component1(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component1(@ColorLong long);
- method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
- method public static inline operator int component2(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component2(@ColorLong long);
- method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
- method public static inline operator int component3(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component3(@ColorLong long);
- method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
- method public static inline operator int component4(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
- method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
- method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
- method public static inline int getAlpha(@ColorInt int);
- method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
- method public static inline int getBlue(@ColorInt int);
- method @RequiresApi(26) public static inline float getBlue(@ColorLong long);
- method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(@ColorLong long);
- method public static inline int getGreen(@ColorInt int);
- method @RequiresApi(26) public static inline float getGreen(@ColorLong long);
- method @RequiresApi(26) public static inline float getLuminance(@ColorInt int);
- method @RequiresApi(26) public static inline float getLuminance(@ColorLong long);
- method public static inline int getRed(@ColorInt int);
- method @RequiresApi(26) public static inline float getRed(@ColorLong long);
- method @RequiresApi(26) public static inline boolean isSrgb(@ColorLong long);
- method @RequiresApi(26) public static inline boolean isWideGamut(@ColorLong long);
- method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
- method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
- method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
- method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
- method @ColorInt public static inline int toColorInt(String);
- method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
- }
-
- public final class ImageDecoderKt {
- method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
- method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
- }
-
- public final class MatrixKt {
- method public static android.graphics.Matrix rotationMatrix(float degrees, optional float px, optional float py);
- method public static android.graphics.Matrix scaleMatrix(optional float sx, optional float sy);
- method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
- method public static android.graphics.Matrix translationMatrix(optional float tx, optional float ty);
- method public static inline float[] values(android.graphics.Matrix);
- }
-
- public final class PaintKt {
- method public static inline boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat? blendModeCompat);
- }
-
- public final class PathKt {
- method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, optional float error);
- method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
- }
-
- public final class PictureKt {
- method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- }
-
- public final class PointKt {
- method public static inline operator int component1(android.graphics.Point);
- method public static inline operator float component1(android.graphics.PointF);
- method public static inline operator int component2(android.graphics.Point);
- method public static inline operator float component2(android.graphics.PointF);
- method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
- method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
- method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
- method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
- method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
- method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
- method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
- method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
- method public static inline android.graphics.Point toPoint(android.graphics.PointF);
- method public static inline android.graphics.PointF toPointF(android.graphics.Point);
- method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
- method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
- }
-
- public final class PorterDuffKt {
- method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
- method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
- }
-
- public final class RectKt {
- method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
- method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator int component1(android.graphics.Rect);
- method public static inline operator float component1(android.graphics.RectF);
- method public static inline operator int component2(android.graphics.Rect);
- method public static inline operator float component2(android.graphics.RectF);
- method public static inline operator int component3(android.graphics.Rect);
- method public static inline operator float component3(android.graphics.RectF);
- method public static inline operator int component4(android.graphics.Rect);
- method public static inline operator float component4(android.graphics.RectF);
- method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
- method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
- method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
- method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
- method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
- method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
- method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
- method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
- method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
- method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
- method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
- method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
- method public static inline android.graphics.Rect toRect(android.graphics.RectF);
- method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
- method public static inline android.graphics.Region toRegion(android.graphics.Rect);
- method public static inline android.graphics.Region toRegion(android.graphics.RectF);
- method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
- method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
- method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
- }
-
- public final class RegionKt {
- method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
- method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
- method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
- method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
- method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
- method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
- method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
- method public static inline operator android.graphics.Region not(android.graphics.Region);
- method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
- method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
- method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
- method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
- method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
- method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
- method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
- }
-
- public final class ShaderKt {
- method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
- }
-
-}
-
-package androidx.core.graphics.drawable {
-
- public final class BitmapDrawableKt {
- method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
- }
-
- public final class ColorDrawableKt {
- method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
- method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
- }
-
- public final class DrawableKt {
- method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
- method public static android.graphics.Bitmap? toBitmapOrNull(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
- method public static void updateBounds(android.graphics.drawable.Drawable, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
- }
-
- public final class IconKt {
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
- }
-
-}
-
-package androidx.core.location {
-
- public final class LocationKt {
- method public static inline operator double component1(android.location.Location);
- method public static inline operator double component2(android.location.Location);
- }
-
-}
-
-package androidx.core.net {
-
- public final class UriKt {
- method public static java.io.File toFile(android.net.Uri);
- method public static inline android.net.Uri toUri(String);
- method public static inline android.net.Uri toUri(java.io.File);
- }
-
-}
-
-package androidx.core.os {
-
- public final class BundleKt {
- method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
- method public static android.os.Bundle bundleOf();
- }
-
- public final class HandlerKt {
- method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- }
-
- @RequiresApi(31) public final class OutcomeReceiverKt {
- method @RequiresApi(31) public static <R, E extends java.lang.Throwable> android.os.OutcomeReceiver<R,E> asOutcomeReceiver(kotlin.coroutines.Continuation<? super R>);
- }
-
- public final class PersistableBundleKt {
- method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
- method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf();
- method @RequiresApi(21) public static android.os.PersistableBundle toPersistableBundle(java.util.Map<java.lang.String,?>);
- }
-
- public final class TraceKt {
- method @Deprecated public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
- }
-
-}
-
-package androidx.core.text {
-
- public final class CharSequenceKt {
- method public static inline boolean isDigitsOnly(CharSequence);
- method public static inline int trimmedLength(CharSequence);
- }
-
- public final class HtmlKt {
- method public static inline android.text.Spanned parseAsHtml(String, optional int flags, optional android.text.Html.ImageGetter? imageGetter, optional android.text.Html.TagHandler? tagHandler);
- method public static inline String toHtml(android.text.Spanned, optional int option);
- }
-
- public final class LocaleKt {
- method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
- }
-
- public final class SpannableStringBuilderKt {
- method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- }
-
- public final class SpannableStringKt {
- method public static inline void clearSpans(android.text.Spannable);
- method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
- method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
- method public static inline android.text.Spannable toSpannable(CharSequence);
- }
-
- public final class SpannedStringKt {
- method public static inline <reified T> T![]! getSpans(android.text.Spanned, optional int start, optional int end);
- method public static inline android.text.Spanned toSpanned(CharSequence);
- }
-
- public final class StringKt {
- method public static inline String htmlEncode(String);
- }
-
-}
-
-package androidx.core.transition {
-
- public final class TransitionKt {
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onPause);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- }
-
-}
-
-package androidx.core.util {
-
- public final class AndroidXConsumerKt {
- method public static <T> androidx.core.util.Consumer<T> asAndroidXConsumer(kotlin.coroutines.Continuation<? super T>);
- }
-
- public final class AtomicFileKt {
- method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
- method @RequiresApi(17) public static String readText(android.util.AtomicFile, optional java.nio.charset.Charset charset);
- method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
- method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
- method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, optional java.nio.charset.Charset charset);
- }
-
- @RequiresApi(24) public final class ConsumerKt {
- method @RequiresApi(24) public static <T> java.util.function.Consumer<T> asConsumer(kotlin.coroutines.Continuation<? super T>);
- }
-
- public final class HalfKt {
- method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
- method @RequiresApi(26) public static inline android.util.Half toHalf(float);
- method @RequiresApi(26) public static inline android.util.Half toHalf(double);
- method @RequiresApi(26) public static inline android.util.Half toHalf(String);
- }
-
- public final class LongSparseArrayKt {
- method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
- method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
- method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T? value);
- method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
- method @RequiresApi(16) public static inline <T> T! getOrDefault(android.util.LongSparseArray<T>, long key, T? defaultValue);
- method @RequiresApi(16) public static inline <T> T! getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
- method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
- method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
- method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T? value);
- method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T? value);
- method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
- }
-
- public final class LruCacheKt {
- method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
- }
-
- public final class PairKt {
- method public static inline operator <F, S> F! component1(androidx.core.util.Pair<F,S>);
- method public static inline operator <F, S> F! component1(android.util.Pair<F,S>);
- method public static inline operator <F, S> S! component2(androidx.core.util.Pair<F,S>);
- method public static inline operator <F, S> S! component2(android.util.Pair<F,S>);
- method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
- method public static inline <F, S> androidx.core.util.Pair<F,S> toAndroidXPair(kotlin.Pair<? extends F,? extends S>);
- method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
- method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
- }
-
- public final class RangeKt {
- method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
- method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
- method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
- method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
- method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
- method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
- }
-
- public final class RunnableKt {
- method public static Runnable asRunnable(kotlin.coroutines.Continuation<? super kotlin.Unit>);
- }
-
- public final class SizeKt {
- method @RequiresApi(21) public static inline operator int component1(android.util.Size);
- method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
- method public static inline operator float component1(androidx.core.util.SizeFCompat);
- method @RequiresApi(21) public static inline operator int component2(android.util.Size);
- method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
- method public static inline operator float component2(androidx.core.util.SizeFCompat);
- }
-
- public final class SparseArrayKt {
- method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
- method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
- method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T? value);
- method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
- method public static inline <T> T! getOrDefault(android.util.SparseArray<T>, int key, T? defaultValue);
- method public static inline <T> T! getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
- method public static inline <T> int getSize(android.util.SparseArray<T>);
- method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
- method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
- method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
- method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
- method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
- method public static <T> boolean remove(android.util.SparseArray<T>, int key, T? value);
- method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T? value);
- method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
- }
-
- public final class SparseBooleanArrayKt {
- method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
- method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
- method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
- method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
- method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
- method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
- method public static inline int getSize(android.util.SparseBooleanArray);
- method public static inline boolean isEmpty(android.util.SparseBooleanArray);
- method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
- method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
- method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
- method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
- method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
- method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
- method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
- }
-
- public final class SparseIntArrayKt {
- method public static inline operator boolean contains(android.util.SparseIntArray, int key);
- method public static inline boolean containsKey(android.util.SparseIntArray, int key);
- method public static inline boolean containsValue(android.util.SparseIntArray, int value);
- method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
- method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
- method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
- method public static inline int getSize(android.util.SparseIntArray);
- method public static inline boolean isEmpty(android.util.SparseIntArray);
- method public static inline boolean isNotEmpty(android.util.SparseIntArray);
- method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
- method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
- method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
- method public static boolean remove(android.util.SparseIntArray, int key, int value);
- method public static inline operator void set(android.util.SparseIntArray, int key, int value);
- method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
- }
-
- public final class SparseLongArrayKt {
- method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
- method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
- method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
- method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
- method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
- method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
- method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
- method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
- method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
- method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
- method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
- method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
- method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
- method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
- method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
- }
-
-}
-
-package androidx.core.view {
-
- public final class MenuKt {
- method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
- method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
- method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
- method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
- method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
- method public static inline int getSize(android.view.Menu);
- method public static inline boolean isEmpty(android.view.Menu);
- method public static inline boolean isNotEmpty(android.view.Menu);
- method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
- method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
- }
-
- public final class ViewGroupKt {
- method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
- method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
- method public static operator android.view.View get(android.view.ViewGroup, int index);
- method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
- method public static kotlin.sequences.Sequence<android.view.View> getDescendants(android.view.ViewGroup);
- method public static inline kotlin.ranges.IntRange getIndices(android.view.ViewGroup);
- method public static inline int getSize(android.view.ViewGroup);
- method public static inline boolean isEmpty(android.view.ViewGroup);
- method public static inline boolean isNotEmpty(android.view.ViewGroup);
- method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
- method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
- method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
- method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
- method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
- method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
- }
-
- public final class ViewKt {
- method public static inline void doOnAttach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void doOnDetach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static android.graphics.Bitmap drawToBitmap(android.view.View, optional android.graphics.Bitmap.Config config);
- method public static kotlin.sequences.Sequence<android.view.View> getAllViews(android.view.View);
- method public static kotlin.sequences.Sequence<android.view.ViewParent> getAncestors(android.view.View);
- method public static inline int getMarginBottom(android.view.View);
- method public static inline int getMarginEnd(android.view.View);
- method public static inline int getMarginLeft(android.view.View);
- method public static inline int getMarginRight(android.view.View);
- method public static inline int getMarginStart(android.view.View);
- method public static inline int getMarginTop(android.view.View);
- method public static inline boolean isGone(android.view.View);
- method public static inline boolean isInvisible(android.view.View);
- method public static inline boolean isVisible(android.view.View);
- method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- method @RequiresApi(16) public static inline Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- method public static inline void setGone(android.view.View, boolean);
- method public static inline void setInvisible(android.view.View, boolean);
- method public static inline void setPadding(android.view.View, @Px int size);
- method public static inline void setVisible(android.view.View, boolean);
- method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
- method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> block);
- method public static inline void updatePadding(android.view.View, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
- method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
- }
-
-}
-
-package androidx.core.widget {
-
- public final class TextViewKt {
- method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> onTextChanged, optional kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged);
- method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
- method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
- method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
- }
-
-}
-
diff --git a/core/core-ktx/api/restricted_1.8.0-beta01.txt b/core/core-ktx/api/restricted_1.8.0-beta01.txt
deleted file mode 100644
index 521f26c..0000000
--- a/core/core-ktx/api/restricted_1.8.0-beta01.txt
+++ /dev/null
@@ -1,629 +0,0 @@
-// Signature format: 4.0
-package androidx.core.animation {
-
- public final class AnimatorKt {
- method public static inline android.animation.Animator.AnimatorListener addListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onRepeat);
- method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener addPauseListener(android.animation.Animator, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> onPause);
- method public static inline android.animation.Animator.AnimatorListener doOnCancel(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method public static inline android.animation.Animator.AnimatorListener doOnEnd(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnPause(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method public static inline android.animation.Animator.AnimatorListener doOnRepeat(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.animation.Animator.AnimatorPauseListener doOnResume(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- method public static inline android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
- }
-
-}
-
-package androidx.core.content {
-
- public final class ContentValuesKt {
- method public static android.content.ContentValues contentValuesOf(kotlin.Pair<java.lang.String,?>... pairs);
- }
-
- public final class ContextKt {
- method public static inline <reified T> T! getSystemService(android.content.Context);
- method public static inline void withStyledAttributes(android.content.Context, optional android.util.AttributeSet? set, int[] attrs, optional @AttrRes int defStyleAttr, optional @StyleRes int defStyleRes, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
- method public static inline void withStyledAttributes(android.content.Context, @StyleRes int resourceId, int[] attrs, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,kotlin.Unit> block);
- }
-
- public final class SharedPreferencesKt {
- method public static inline void edit(android.content.SharedPreferences, optional boolean commit, kotlin.jvm.functions.Function1<? super android.content.SharedPreferences.Editor,kotlin.Unit> action);
- }
-
-}
-
-package androidx.core.content.res {
-
- public final class TypedArrayKt {
- method public static boolean getBooleanOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @ColorInt public static int getColorOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static android.content.res.ColorStateList getColorStateListOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static float getDimensionOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @Dimension public static int getDimensionPixelOffsetOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @Dimension public static int getDimensionPixelSizeOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static android.graphics.drawable.Drawable getDrawableOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static float getFloatOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @RequiresApi(26) public static android.graphics.Typeface getFontOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static int getIntOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static int getIntegerOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method @AnyRes public static int getResourceIdOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static String getStringOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static CharSequence![] getTextArrayOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static CharSequence getTextOrThrow(android.content.res.TypedArray, @StyleableRes int index);
- method public static inline <R> R! use(android.content.res.TypedArray, kotlin.jvm.functions.Function1<? super android.content.res.TypedArray,? extends R> block);
- }
-
-}
-
-package androidx.core.database {
-
- public final class CursorKt {
- method public static inline byte[]? getBlobOrNull(android.database.Cursor, int index);
- method public static inline Double? getDoubleOrNull(android.database.Cursor, int index);
- method public static inline Float? getFloatOrNull(android.database.Cursor, int index);
- method public static inline Integer? getIntOrNull(android.database.Cursor, int index);
- method public static inline Long? getLongOrNull(android.database.Cursor, int index);
- method public static inline Short? getShortOrNull(android.database.Cursor, int index);
- method public static inline String? getStringOrNull(android.database.Cursor, int index);
- }
-
-}
-
-package androidx.core.database.sqlite {
-
- public final class SQLiteDatabaseKt {
- method public static inline <T> T! transaction(android.database.sqlite.SQLiteDatabase, optional boolean exclusive, kotlin.jvm.functions.Function1<? super android.database.sqlite.SQLiteDatabase,? extends T> body);
- }
-
-}
-
-package androidx.core.graphics {
-
- public final class BitmapKt {
- method public static inline android.graphics.Bitmap applyCanvas(android.graphics.Bitmap, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.Point p);
- method public static inline operator boolean contains(android.graphics.Bitmap, android.graphics.PointF p);
- method public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config);
- method @RequiresApi(26) public static inline android.graphics.Bitmap createBitmap(int width, int height, optional android.graphics.Bitmap.Config config, optional boolean hasAlpha, optional android.graphics.ColorSpace colorSpace);
- method public static inline operator int get(android.graphics.Bitmap, int x, int y);
- method public static inline android.graphics.Bitmap scale(android.graphics.Bitmap, int width, int height, optional boolean filter);
- method public static inline operator void set(android.graphics.Bitmap, int x, int y, @ColorInt int color);
- }
-
- public final class CanvasKt {
- method public static inline void withClip(android.graphics.Canvas, android.graphics.Rect clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, android.graphics.RectF clipRect, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, int left, int top, int right, int bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withClip(android.graphics.Canvas, android.graphics.Path clipPath, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withMatrix(android.graphics.Canvas, optional android.graphics.Matrix matrix, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withRotation(android.graphics.Canvas, optional float degrees, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withSave(android.graphics.Canvas, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withScale(android.graphics.Canvas, optional float x, optional float y, optional float pivotX, optional float pivotY, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withSkew(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- method public static inline void withTranslation(android.graphics.Canvas, optional float x, optional float y, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- }
-
- public final class ColorKt {
- method @RequiresApi(26) public static inline operator float component1(android.graphics.Color);
- method public static inline operator int component1(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component1(@ColorLong long);
- method @RequiresApi(26) public static inline operator float component2(android.graphics.Color);
- method public static inline operator int component2(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component2(@ColorLong long);
- method @RequiresApi(26) public static inline operator float component3(android.graphics.Color);
- method public static inline operator int component3(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component3(@ColorLong long);
- method @RequiresApi(26) public static inline operator float component4(android.graphics.Color);
- method public static inline operator int component4(@ColorInt int);
- method @RequiresApi(26) public static inline operator float component4(@ColorLong long);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace.Named colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorInt int, android.graphics.ColorSpace colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace.Named colorSpace);
- method @ColorLong @RequiresApi(26) public static inline infix long convertTo(@ColorLong long, android.graphics.ColorSpace colorSpace);
- method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace.Named colorSpace);
- method @RequiresApi(26) public static inline infix android.graphics.Color convertTo(android.graphics.Color, android.graphics.ColorSpace colorSpace);
- method public static inline int getAlpha(@ColorInt int);
- method @RequiresApi(26) public static inline float getAlpha(@ColorLong long);
- method public static inline int getBlue(@ColorInt int);
- method @RequiresApi(26) public static inline float getBlue(@ColorLong long);
- method @RequiresApi(26) public static inline android.graphics.ColorSpace getColorSpace(@ColorLong long);
- method public static inline int getGreen(@ColorInt int);
- method @RequiresApi(26) public static inline float getGreen(@ColorLong long);
- method @RequiresApi(26) public static inline float getLuminance(@ColorInt int);
- method @RequiresApi(26) public static inline float getLuminance(@ColorLong long);
- method public static inline int getRed(@ColorInt int);
- method @RequiresApi(26) public static inline float getRed(@ColorLong long);
- method @RequiresApi(26) public static inline boolean isSrgb(@ColorLong long);
- method @RequiresApi(26) public static inline boolean isWideGamut(@ColorLong long);
- method @RequiresApi(26) public static operator android.graphics.Color plus(android.graphics.Color, android.graphics.Color c);
- method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorInt int);
- method @RequiresApi(26) public static inline android.graphics.Color toColor(@ColorLong long);
- method @ColorInt @RequiresApi(26) public static inline int toColorInt(@ColorLong long);
- method @ColorInt public static inline int toColorInt(String);
- method @ColorLong @RequiresApi(26) public static inline long toColorLong(@ColorInt int);
- }
-
- public final class ImageDecoderKt {
- method @RequiresApi(28) public static inline android.graphics.Bitmap decodeBitmap(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
- method @RequiresApi(28) public static inline android.graphics.drawable.Drawable decodeDrawable(android.graphics.ImageDecoder.Source, kotlin.jvm.functions.Function3<? super android.graphics.ImageDecoder,? super android.graphics.ImageDecoder.ImageInfo,? super android.graphics.ImageDecoder.Source,kotlin.Unit> action);
- }
-
- public final class MatrixKt {
- method public static android.graphics.Matrix rotationMatrix(float degrees, optional float px, optional float py);
- method public static android.graphics.Matrix scaleMatrix(optional float sx, optional float sy);
- method public static inline operator android.graphics.Matrix times(android.graphics.Matrix, android.graphics.Matrix m);
- method public static android.graphics.Matrix translationMatrix(optional float tx, optional float ty);
- method public static inline float[] values(android.graphics.Matrix);
- }
-
- public final class PaintKt {
- method public static inline boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat? blendModeCompat);
- }
-
- public final class PathKt {
- method @RequiresApi(19) public static inline infix android.graphics.Path and(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(26) public static Iterable<androidx.core.graphics.PathSegment> flatten(android.graphics.Path, optional float error);
- method @RequiresApi(19) public static inline operator android.graphics.Path minus(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(19) public static inline infix android.graphics.Path or(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(19) public static inline operator android.graphics.Path plus(android.graphics.Path, android.graphics.Path p);
- method @RequiresApi(19) public static inline infix android.graphics.Path xor(android.graphics.Path, android.graphics.Path p);
- }
-
- public final class PictureKt {
- method public static inline android.graphics.Picture record(android.graphics.Picture, int width, int height, kotlin.jvm.functions.Function1<? super android.graphics.Canvas,kotlin.Unit> block);
- }
-
- public final class PointKt {
- method public static inline operator int component1(android.graphics.Point);
- method public static inline operator float component1(android.graphics.PointF);
- method public static inline operator int component2(android.graphics.Point);
- method public static inline operator float component2(android.graphics.PointF);
- method public static inline operator android.graphics.Point minus(android.graphics.Point, android.graphics.Point p);
- method public static inline operator android.graphics.PointF minus(android.graphics.PointF, android.graphics.PointF p);
- method public static inline operator android.graphics.Point minus(android.graphics.Point, int xy);
- method public static inline operator android.graphics.PointF minus(android.graphics.PointF, float xy);
- method public static inline operator android.graphics.Point plus(android.graphics.Point, android.graphics.Point p);
- method public static inline operator android.graphics.PointF plus(android.graphics.PointF, android.graphics.PointF p);
- method public static inline operator android.graphics.Point plus(android.graphics.Point, int xy);
- method public static inline operator android.graphics.PointF plus(android.graphics.PointF, float xy);
- method public static inline android.graphics.Point toPoint(android.graphics.PointF);
- method public static inline android.graphics.PointF toPointF(android.graphics.Point);
- method public static inline operator android.graphics.Point unaryMinus(android.graphics.Point);
- method public static inline operator android.graphics.PointF unaryMinus(android.graphics.PointF);
- }
-
- public final class PorterDuffKt {
- method public static inline android.graphics.PorterDuffColorFilter toColorFilter(android.graphics.PorterDuff.Mode, int color);
- method public static inline android.graphics.PorterDuffXfermode toXfermode(android.graphics.PorterDuff.Mode);
- }
-
- public final class RectKt {
- method public static inline infix android.graphics.Rect and(android.graphics.Rect, android.graphics.Rect r);
- method public static inline infix android.graphics.RectF and(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator int component1(android.graphics.Rect);
- method public static inline operator float component1(android.graphics.RectF);
- method public static inline operator int component2(android.graphics.Rect);
- method public static inline operator float component2(android.graphics.RectF);
- method public static inline operator int component3(android.graphics.Rect);
- method public static inline operator float component3(android.graphics.RectF);
- method public static inline operator int component4(android.graphics.Rect);
- method public static inline operator float component4(android.graphics.RectF);
- method public static inline operator boolean contains(android.graphics.Rect, android.graphics.Point p);
- method public static inline operator boolean contains(android.graphics.RectF, android.graphics.PointF p);
- method public static inline operator android.graphics.Region minus(android.graphics.Rect, android.graphics.Rect r);
- method public static inline operator android.graphics.Region minus(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect minus(android.graphics.Rect, int xy);
- method public static inline operator android.graphics.RectF minus(android.graphics.RectF, float xy);
- method public static inline operator android.graphics.Rect minus(android.graphics.Rect, android.graphics.Point xy);
- method public static inline operator android.graphics.RectF minus(android.graphics.RectF, android.graphics.PointF xy);
- method public static inline infix android.graphics.Rect or(android.graphics.Rect, android.graphics.Rect r);
- method public static inline infix android.graphics.RectF or(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Rect r);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.RectF r);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, int xy);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, float xy);
- method public static inline operator android.graphics.Rect plus(android.graphics.Rect, android.graphics.Point xy);
- method public static inline operator android.graphics.RectF plus(android.graphics.RectF, android.graphics.PointF xy);
- method public static inline operator android.graphics.Rect times(android.graphics.Rect, int factor);
- method public static inline operator android.graphics.RectF times(android.graphics.RectF, int factor);
- method public static inline operator android.graphics.RectF times(android.graphics.RectF, float factor);
- method public static inline android.graphics.Rect toRect(android.graphics.RectF);
- method public static inline android.graphics.RectF toRectF(android.graphics.Rect);
- method public static inline android.graphics.Region toRegion(android.graphics.Rect);
- method public static inline android.graphics.Region toRegion(android.graphics.RectF);
- method public static inline android.graphics.RectF transform(android.graphics.RectF, android.graphics.Matrix m);
- method public static inline infix android.graphics.Region xor(android.graphics.Rect, android.graphics.Rect r);
- method public static inline infix android.graphics.Region xor(android.graphics.RectF, android.graphics.RectF r);
- }
-
- public final class RegionKt {
- method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Rect r);
- method public static inline infix android.graphics.Region and(android.graphics.Region, android.graphics.Region r);
- method public static inline operator boolean contains(android.graphics.Region, android.graphics.Point p);
- method public static inline void forEach(android.graphics.Region, kotlin.jvm.functions.Function1<? super android.graphics.Rect,kotlin.Unit> action);
- method public static operator java.util.Iterator<android.graphics.Rect> iterator(android.graphics.Region);
- method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Rect r);
- method public static inline operator android.graphics.Region minus(android.graphics.Region, android.graphics.Region r);
- method public static inline operator android.graphics.Region not(android.graphics.Region);
- method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Rect r);
- method public static inline infix android.graphics.Region or(android.graphics.Region, android.graphics.Region r);
- method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Rect r);
- method public static inline operator android.graphics.Region plus(android.graphics.Region, android.graphics.Region r);
- method public static inline operator android.graphics.Region unaryMinus(android.graphics.Region);
- method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Rect r);
- method public static inline infix android.graphics.Region xor(android.graphics.Region, android.graphics.Region r);
- }
-
- public final class ShaderKt {
- method public static inline void transform(android.graphics.Shader, kotlin.jvm.functions.Function1<? super android.graphics.Matrix,kotlin.Unit> block);
- }
-
-}
-
-package androidx.core.graphics.drawable {
-
- public final class BitmapDrawableKt {
- method public static inline android.graphics.drawable.BitmapDrawable toDrawable(android.graphics.Bitmap, android.content.res.Resources resources);
- }
-
- public final class ColorDrawableKt {
- method public static inline android.graphics.drawable.ColorDrawable toDrawable(@ColorInt int);
- method @RequiresApi(26) public static inline android.graphics.drawable.ColorDrawable toDrawable(android.graphics.Color);
- }
-
- public final class DrawableKt {
- method public static android.graphics.Bitmap toBitmap(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
- method public static android.graphics.Bitmap? toBitmapOrNull(android.graphics.drawable.Drawable, optional @Px int width, optional @Px int height, optional android.graphics.Bitmap.Config? config);
- method public static void updateBounds(android.graphics.drawable.Drawable, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
- }
-
- public final class IconKt {
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toAdaptiveIcon(android.graphics.Bitmap);
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.graphics.Bitmap);
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(android.net.Uri);
- method @RequiresApi(26) public static inline android.graphics.drawable.Icon toIcon(byte[]);
- }
-
-}
-
-package androidx.core.location {
-
- public final class LocationKt {
- method public static inline operator double component1(android.location.Location);
- method public static inline operator double component2(android.location.Location);
- }
-
-}
-
-package androidx.core.net {
-
- public final class UriKt {
- method public static java.io.File toFile(android.net.Uri);
- method public static inline android.net.Uri toUri(String);
- method public static inline android.net.Uri toUri(java.io.File);
- }
-
-}
-
-package androidx.core.os {
-
- public final class BundleKt {
- method public static android.os.Bundle bundleOf(kotlin.Pair<java.lang.String,?>... pairs);
- method public static android.os.Bundle bundleOf();
- }
-
- public final class HandlerKt {
- method public static inline Runnable postAtTime(android.os.Handler, long uptimeMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- method public static inline Runnable postDelayed(android.os.Handler, long delayInMillis, optional Object? token, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- }
-
- @RequiresApi(31) public final class OutcomeReceiverKt {
- method @RequiresApi(31) public static <R, E extends java.lang.Throwable> android.os.OutcomeReceiver<R,E> asOutcomeReceiver(kotlin.coroutines.Continuation<? super R>);
- }
-
- public final class PersistableBundleKt {
- method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf(kotlin.Pair<java.lang.String,?>... pairs);
- method @RequiresApi(21) public static android.os.PersistableBundle persistableBundleOf();
- method @RequiresApi(21) public static android.os.PersistableBundle toPersistableBundle(java.util.Map<java.lang.String,?>);
- }
-
- public final class TraceKt {
- method @Deprecated public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
- }
-
-}
-
-package androidx.core.text {
-
- public final class CharSequenceKt {
- method public static inline boolean isDigitsOnly(CharSequence);
- method public static inline int trimmedLength(CharSequence);
- }
-
- public final class HtmlKt {
- method public static inline android.text.Spanned parseAsHtml(String, optional int flags, optional android.text.Html.ImageGetter? imageGetter, optional android.text.Html.TagHandler? tagHandler);
- method public static inline String toHtml(android.text.Spanned, optional int option);
- }
-
- public final class LocaleKt {
- method @RequiresApi(17) public static inline int getLayoutDirection(java.util.Locale);
- }
-
- public final class SpannableStringBuilderKt {
- method public static inline android.text.SpannableStringBuilder backgroundColor(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder bold(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannedString buildSpannedString(kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder color(android.text.SpannableStringBuilder, @ColorInt int color, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object![] spans, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder inSpans(android.text.SpannableStringBuilder, Object span, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder italic(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder scale(android.text.SpannableStringBuilder, float proportion, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder strikeThrough(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder subscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder superscript(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- method public static inline android.text.SpannableStringBuilder underline(android.text.SpannableStringBuilder, kotlin.jvm.functions.Function1<? super android.text.SpannableStringBuilder,kotlin.Unit> builderAction);
- }
-
- public final class SpannableStringKt {
- method public static inline void clearSpans(android.text.Spannable);
- method public static inline operator void set(android.text.Spannable, int start, int end, Object span);
- method public static inline operator void set(android.text.Spannable, kotlin.ranges.IntRange range, Object span);
- method public static inline android.text.Spannable toSpannable(CharSequence);
- }
-
- public final class SpannedStringKt {
- method public static inline <reified T> T![]! getSpans(android.text.Spanned, optional int start, optional int end);
- method public static inline android.text.Spanned toSpanned(CharSequence);
- }
-
- public final class StringKt {
- method public static inline String htmlEncode(String);
- }
-
-}
-
-package androidx.core.transition {
-
- public final class TransitionKt {
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener addListener(android.transition.Transition, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onEnd, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onStart, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onCancel, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onResume, optional kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> onPause);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnCancel(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnEnd(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnPause(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnResume(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- method @RequiresApi(19) public static inline android.transition.Transition.TransitionListener doOnStart(android.transition.Transition, kotlin.jvm.functions.Function1<? super android.transition.Transition,kotlin.Unit> action);
- }
-
-}
-
-package androidx.core.util {
-
- public final class AndroidXConsumerKt {
- method public static <T> androidx.core.util.Consumer<T> asAndroidXConsumer(kotlin.coroutines.Continuation<? super T>);
- }
-
- public final class AtomicFileKt {
- method @RequiresApi(17) public static inline byte[] readBytes(android.util.AtomicFile);
- method @RequiresApi(17) public static String readText(android.util.AtomicFile, optional java.nio.charset.Charset charset);
- method @RequiresApi(17) public static inline void tryWrite(android.util.AtomicFile, kotlin.jvm.functions.Function1<? super java.io.FileOutputStream,kotlin.Unit> block);
- method @RequiresApi(17) public static void writeBytes(android.util.AtomicFile, byte[] array);
- method @RequiresApi(17) public static void writeText(android.util.AtomicFile, String text, optional java.nio.charset.Charset charset);
- }
-
- @RequiresApi(24) public final class ConsumerKt {
- method @RequiresApi(24) public static <T> java.util.function.Consumer<T> asConsumer(kotlin.coroutines.Continuation<? super T>);
- }
-
- public final class HalfKt {
- method @RequiresApi(26) public static inline android.util.Half toHalf(@HalfFloat short);
- method @RequiresApi(26) public static inline android.util.Half toHalf(float);
- method @RequiresApi(26) public static inline android.util.Half toHalf(double);
- method @RequiresApi(26) public static inline android.util.Half toHalf(String);
- }
-
- public final class LongSparseArrayKt {
- method @RequiresApi(16) public static inline operator <T> boolean contains(android.util.LongSparseArray<T>, long key);
- method @RequiresApi(16) public static inline <T> boolean containsKey(android.util.LongSparseArray<T>, long key);
- method @RequiresApi(16) public static inline <T> boolean containsValue(android.util.LongSparseArray<T>, T? value);
- method @RequiresApi(16) public static inline <T> void forEach(android.util.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
- method @RequiresApi(16) public static inline <T> T! getOrDefault(android.util.LongSparseArray<T>, long key, T? defaultValue);
- method @RequiresApi(16) public static inline <T> T! getOrElse(android.util.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
- method @RequiresApi(16) public static inline <T> int getSize(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static inline <T> boolean isEmpty(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static inline <T> boolean isNotEmpty(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static <T> kotlin.collections.LongIterator keyIterator(android.util.LongSparseArray<T>);
- method @RequiresApi(16) public static operator <T> android.util.LongSparseArray<T> plus(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
- method @RequiresApi(16) public static <T> void putAll(android.util.LongSparseArray<T>, android.util.LongSparseArray<T> other);
- method @RequiresApi(16) public static <T> boolean remove(android.util.LongSparseArray<T>, long key, T? value);
- method @RequiresApi(16) public static inline operator <T> void set(android.util.LongSparseArray<T>, long key, T? value);
- method @RequiresApi(16) public static <T> java.util.Iterator<T> valueIterator(android.util.LongSparseArray<T>);
- }
-
- public final class LruCacheKt {
- method public static inline <K, V> android.util.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
- }
-
- public final class PairKt {
- method public static inline operator <F, S> F! component1(androidx.core.util.Pair<F,S>);
- method public static inline operator <F, S> F! component1(android.util.Pair<F,S>);
- method public static inline operator <F, S> S! component2(androidx.core.util.Pair<F,S>);
- method public static inline operator <F, S> S! component2(android.util.Pair<F,S>);
- method public static inline <F, S> android.util.Pair<F,S> toAndroidPair(kotlin.Pair<? extends F,? extends S>);
- method public static inline <F, S> androidx.core.util.Pair<F,S> toAndroidXPair(kotlin.Pair<? extends F,? extends S>);
- method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(androidx.core.util.Pair<F,S>);
- method public static inline <F, S> kotlin.Pair<F,S> toKotlinPair(android.util.Pair<F,S>);
- }
-
- public final class RangeKt {
- method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> and(android.util.Range<T>, android.util.Range<T> other);
- method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, T value);
- method @RequiresApi(21) public static inline operator <T extends java.lang.Comparable<? super T>> android.util.Range<T> plus(android.util.Range<T>, android.util.Range<T> other);
- method @RequiresApi(21) public static inline infix <T extends java.lang.Comparable<? super T>> android.util.Range<T> rangeTo(T, T that);
- method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> kotlin.ranges.ClosedRange<T> toClosedRange(android.util.Range<T>);
- method @RequiresApi(21) public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> toRange(kotlin.ranges.ClosedRange<T>);
- }
-
- public final class RunnableKt {
- method public static Runnable asRunnable(kotlin.coroutines.Continuation<? super kotlin.Unit>);
- }
-
- public final class SizeKt {
- method @RequiresApi(21) public static inline operator int component1(android.util.Size);
- method @RequiresApi(21) public static inline operator float component1(android.util.SizeF);
- method public static inline operator float component1(androidx.core.util.SizeFCompat);
- method @RequiresApi(21) public static inline operator int component2(android.util.Size);
- method @RequiresApi(21) public static inline operator float component2(android.util.SizeF);
- method public static inline operator float component2(androidx.core.util.SizeFCompat);
- }
-
- public final class SparseArrayKt {
- method public static inline operator <T> boolean contains(android.util.SparseArray<T>, int key);
- method public static inline <T> boolean containsKey(android.util.SparseArray<T>, int key);
- method public static inline <T> boolean containsValue(android.util.SparseArray<T>, T? value);
- method public static inline <T> void forEach(android.util.SparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
- method public static inline <T> T! getOrDefault(android.util.SparseArray<T>, int key, T? defaultValue);
- method public static inline <T> T! getOrElse(android.util.SparseArray<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
- method public static inline <T> int getSize(android.util.SparseArray<T>);
- method public static inline <T> boolean isEmpty(android.util.SparseArray<T>);
- method public static inline <T> boolean isNotEmpty(android.util.SparseArray<T>);
- method public static <T> kotlin.collections.IntIterator keyIterator(android.util.SparseArray<T>);
- method public static operator <T> android.util.SparseArray<T> plus(android.util.SparseArray<T>, android.util.SparseArray<T> other);
- method public static <T> void putAll(android.util.SparseArray<T>, android.util.SparseArray<T> other);
- method public static <T> boolean remove(android.util.SparseArray<T>, int key, T? value);
- method public static inline operator <T> void set(android.util.SparseArray<T>, int key, T? value);
- method public static <T> java.util.Iterator<T> valueIterator(android.util.SparseArray<T>);
- }
-
- public final class SparseBooleanArrayKt {
- method public static inline operator boolean contains(android.util.SparseBooleanArray, int key);
- method public static inline boolean containsKey(android.util.SparseBooleanArray, int key);
- method public static inline boolean containsValue(android.util.SparseBooleanArray, boolean value);
- method public static inline void forEach(android.util.SparseBooleanArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Boolean,kotlin.Unit> action);
- method public static inline boolean getOrDefault(android.util.SparseBooleanArray, int key, boolean defaultValue);
- method public static inline boolean getOrElse(android.util.SparseBooleanArray, int key, kotlin.jvm.functions.Function0<java.lang.Boolean> defaultValue);
- method public static inline int getSize(android.util.SparseBooleanArray);
- method public static inline boolean isEmpty(android.util.SparseBooleanArray);
- method public static inline boolean isNotEmpty(android.util.SparseBooleanArray);
- method public static kotlin.collections.IntIterator keyIterator(android.util.SparseBooleanArray);
- method public static operator android.util.SparseBooleanArray plus(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
- method public static void putAll(android.util.SparseBooleanArray, android.util.SparseBooleanArray other);
- method public static boolean remove(android.util.SparseBooleanArray, int key, boolean value);
- method public static inline operator void set(android.util.SparseBooleanArray, int key, boolean value);
- method public static kotlin.collections.BooleanIterator valueIterator(android.util.SparseBooleanArray);
- }
-
- public final class SparseIntArrayKt {
- method public static inline operator boolean contains(android.util.SparseIntArray, int key);
- method public static inline boolean containsKey(android.util.SparseIntArray, int key);
- method public static inline boolean containsValue(android.util.SparseIntArray, int value);
- method public static inline void forEach(android.util.SparseIntArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
- method public static inline int getOrDefault(android.util.SparseIntArray, int key, int defaultValue);
- method public static inline int getOrElse(android.util.SparseIntArray, int key, kotlin.jvm.functions.Function0<java.lang.Integer> defaultValue);
- method public static inline int getSize(android.util.SparseIntArray);
- method public static inline boolean isEmpty(android.util.SparseIntArray);
- method public static inline boolean isNotEmpty(android.util.SparseIntArray);
- method public static kotlin.collections.IntIterator keyIterator(android.util.SparseIntArray);
- method public static operator android.util.SparseIntArray plus(android.util.SparseIntArray, android.util.SparseIntArray other);
- method public static void putAll(android.util.SparseIntArray, android.util.SparseIntArray other);
- method public static boolean remove(android.util.SparseIntArray, int key, int value);
- method public static inline operator void set(android.util.SparseIntArray, int key, int value);
- method public static kotlin.collections.IntIterator valueIterator(android.util.SparseIntArray);
- }
-
- public final class SparseLongArrayKt {
- method @RequiresApi(18) public static inline operator boolean contains(android.util.SparseLongArray, int key);
- method @RequiresApi(18) public static inline boolean containsKey(android.util.SparseLongArray, int key);
- method @RequiresApi(18) public static inline boolean containsValue(android.util.SparseLongArray, long value);
- method @RequiresApi(18) public static inline void forEach(android.util.SparseLongArray, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Long,kotlin.Unit> action);
- method @RequiresApi(18) public static inline long getOrDefault(android.util.SparseLongArray, int key, long defaultValue);
- method @RequiresApi(18) public static inline long getOrElse(android.util.SparseLongArray, int key, kotlin.jvm.functions.Function0<java.lang.Long> defaultValue);
- method @RequiresApi(18) public static inline int getSize(android.util.SparseLongArray);
- method @RequiresApi(18) public static inline boolean isEmpty(android.util.SparseLongArray);
- method @RequiresApi(18) public static inline boolean isNotEmpty(android.util.SparseLongArray);
- method @RequiresApi(18) public static kotlin.collections.IntIterator keyIterator(android.util.SparseLongArray);
- method @RequiresApi(18) public static operator android.util.SparseLongArray plus(android.util.SparseLongArray, android.util.SparseLongArray other);
- method @RequiresApi(18) public static void putAll(android.util.SparseLongArray, android.util.SparseLongArray other);
- method @RequiresApi(18) public static boolean remove(android.util.SparseLongArray, int key, long value);
- method @RequiresApi(18) public static inline operator void set(android.util.SparseLongArray, int key, long value);
- method @RequiresApi(18) public static kotlin.collections.LongIterator valueIterator(android.util.SparseLongArray);
- }
-
-}
-
-package androidx.core.view {
-
- public final class MenuKt {
- method public static operator boolean contains(android.view.Menu, android.view.MenuItem item);
- method public static inline void forEach(android.view.Menu, kotlin.jvm.functions.Function1<? super android.view.MenuItem,kotlin.Unit> action);
- method public static inline void forEachIndexed(android.view.Menu, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.MenuItem,kotlin.Unit> action);
- method public static inline operator android.view.MenuItem get(android.view.Menu, int index);
- method public static kotlin.sequences.Sequence<android.view.MenuItem> getChildren(android.view.Menu);
- method public static inline int getSize(android.view.Menu);
- method public static inline boolean isEmpty(android.view.Menu);
- method public static inline boolean isNotEmpty(android.view.Menu);
- method public static operator java.util.Iterator<android.view.MenuItem> iterator(android.view.Menu);
- method public static inline operator void minusAssign(android.view.Menu, android.view.MenuItem item);
- }
-
- public final class ViewGroupKt {
- method public static inline operator boolean contains(android.view.ViewGroup, android.view.View view);
- method public static inline void forEach(android.view.ViewGroup, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void forEachIndexed(android.view.ViewGroup, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super android.view.View,kotlin.Unit> action);
- method public static operator android.view.View get(android.view.ViewGroup, int index);
- method public static kotlin.sequences.Sequence<android.view.View> getChildren(android.view.ViewGroup);
- method public static kotlin.sequences.Sequence<android.view.View> getDescendants(android.view.ViewGroup);
- method public static inline kotlin.ranges.IntRange getIndices(android.view.ViewGroup);
- method public static inline int getSize(android.view.ViewGroup);
- method public static inline boolean isEmpty(android.view.ViewGroup);
- method public static inline boolean isNotEmpty(android.view.ViewGroup);
- method public static operator java.util.Iterator<android.view.View> iterator(android.view.ViewGroup);
- method public static inline operator void minusAssign(android.view.ViewGroup, android.view.View view);
- method public static inline operator void plusAssign(android.view.ViewGroup, android.view.View view);
- method public static inline void setMargins(android.view.ViewGroup.MarginLayoutParams, @Px int size);
- method public static inline void updateMargins(android.view.ViewGroup.MarginLayoutParams, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
- method @RequiresApi(17) public static inline void updateMarginsRelative(android.view.ViewGroup.MarginLayoutParams, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
- }
-
- public final class ViewKt {
- method public static inline void doOnAttach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void doOnDetach(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void doOnLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline void doOnNextLayout(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static inline androidx.core.view.OneShotPreDrawListener doOnPreDraw(android.view.View, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> action);
- method public static android.graphics.Bitmap drawToBitmap(android.view.View, optional android.graphics.Bitmap.Config config);
- method public static kotlin.sequences.Sequence<android.view.View> getAllViews(android.view.View);
- method public static kotlin.sequences.Sequence<android.view.ViewParent> getAncestors(android.view.View);
- method public static inline int getMarginBottom(android.view.View);
- method public static inline int getMarginEnd(android.view.View);
- method public static inline int getMarginLeft(android.view.View);
- method public static inline int getMarginRight(android.view.View);
- method public static inline int getMarginStart(android.view.View);
- method public static inline int getMarginTop(android.view.View);
- method public static inline boolean isGone(android.view.View);
- method public static inline boolean isInvisible(android.view.View);
- method public static inline boolean isVisible(android.view.View);
- method public static inline Runnable postDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- method @RequiresApi(16) public static inline Runnable postOnAnimationDelayed(android.view.View, long delayInMillis, kotlin.jvm.functions.Function0<kotlin.Unit> action);
- method public static inline void setGone(android.view.View, boolean);
- method public static inline void setInvisible(android.view.View, boolean);
- method public static inline void setPadding(android.view.View, @Px int size);
- method public static inline void setVisible(android.view.View, boolean);
- method public static inline void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super android.view.ViewGroup.LayoutParams,kotlin.Unit> block);
- method public static inline <reified T extends android.view.ViewGroup.LayoutParams> void updateLayoutParams(android.view.View, kotlin.jvm.functions.Function1<? super T,? extends kotlin.Unit> block);
- method public static inline void updatePadding(android.view.View, optional @Px int left, optional @Px int top, optional @Px int right, optional @Px int bottom);
- method @RequiresApi(17) public static inline void updatePaddingRelative(android.view.View, optional @Px int start, optional @Px int top, optional @Px int end, optional @Px int bottom);
- }
-
-}
-
-package androidx.core.widget {
-
- public final class TextViewKt {
- method public static inline android.text.TextWatcher addTextChangedListener(android.widget.TextView, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> beforeTextChanged, optional kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> onTextChanged, optional kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> afterTextChanged);
- method public static inline android.text.TextWatcher doAfterTextChanged(android.widget.TextView, kotlin.jvm.functions.Function1<? super android.text.Editable,kotlin.Unit> action);
- method public static inline android.text.TextWatcher doBeforeTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
- method public static inline android.text.TextWatcher doOnTextChanged(android.widget.TextView, kotlin.jvm.functions.Function4<? super java.lang.CharSequence,? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> action);
- }
-
-}
-
diff --git a/core/core-ktx/lint-baseline.xml b/core/core-ktx/lint-baseline.xml
index 6364b8a..ffe7f74 100644
--- a/core/core-ktx/lint-baseline.xml
+++ b/core/core-ktx/lint-baseline.xml
@@ -160,7 +160,8 @@
errorLine1=" @Px end: Int = marginEnd,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/ViewGroup.kt"/>
+ file="src/main/java/androidx/core/view/ViewGroup.kt"
+ column="20"/>
</issue>
<issue
@@ -169,7 +170,9 @@
errorLine1=" marginStart = start"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/ViewGroup.kt"/>
+ file="src/main/java/androidx/core/view/ViewGroup.kt"
+ line="163"
+ column="5"/>
</issue>
<issue
@@ -178,7 +181,9 @@
errorLine1=" marginEnd = end"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/ViewGroup.kt"/>
+ file="src/main/java/androidx/core/view/ViewGroup.kt"
+ line="165"
+ column="5"/>
</issue>
</issues>
diff --git a/core/core-role/src/main/java/androidx/core/role/RoleManagerCompat.java b/core/core-role/src/main/java/androidx/core/role/RoleManagerCompat.java
index d739e9b..122e0ab 100644
--- a/core/core-role/src/main/java/androidx/core/role/RoleManagerCompat.java
+++ b/core/core-role/src/main/java/androidx/core/role/RoleManagerCompat.java
@@ -72,7 +72,9 @@
/**
* The name of the dialer role.
* <p>
- * To qualify for this role, an application needs to handle the intent to dial:
+ * To qualify for this role, an application needs to handle the intent to dial, and implement
+ * an {@link android.telecom.InCallService} if the application targets
+ * {@link android.os.Build.VERSION_CODES.TIRAMISU} or higher:
* <pre class="prettyprint">{@code
* <activity>
* <intent-filter>
@@ -85,6 +87,16 @@
* <data android:scheme="tel" />
* </intent-filter>
* </activity>
+ * <service android:permission="android.permission.BIND_INCALL_SERVICE">
+ * <meta-data android:name="android.telecom.IN_CALL_SERVICE_UI" android:value="true" />
+ * <meta-data
+ * android:name="android.telecom.IN_CALL_SERVICE_CAR_MODE_UI"
+ * android:value="false" />
+ * <intent-filter>
+ * <action android:name="android.telecom.InCallService" />
+ * </intent-filter>
+ * </service>
+ *
* }</pre>
* The application will be able to handle those intents by default, and gain access to phone,
* contacts, SMS, microphone and camera.
diff --git a/core/core/api/1.8.0-beta01.txt b/core/core/api/1.8.0-beta01.txt
deleted file mode 100644
index ac52137..0000000
--- a/core/core/api/1.8.0-beta01.txt
+++ /dev/null
@@ -1,3760 +0,0 @@
-// Signature format: 4.0
-package androidx.core.accessibilityservice {
-
- public final class AccessibilityServiceInfoCompat {
- method public static String capabilityToString(int);
- method public static String feedbackTypeToString(int);
- method public static String? flagToString(int);
- method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
- method public static String? loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
- field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
- field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
- field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
- field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
- field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
- field public static final int FEEDBACK_BRAILLE = 32; // 0x20
- field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
- field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
- field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
- field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
- field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
- }
-
-}
-
-package androidx.core.app {
-
- public class ActivityCompat extends androidx.core.content.ContextCompat {
- ctor protected ActivityCompat();
- method public static void finishAffinity(android.app.Activity);
- method public static void finishAfterTransition(android.app.Activity);
- method public static android.net.Uri? getReferrer(android.app.Activity);
- method @Deprecated public static boolean invalidateOptionsMenu(android.app.Activity!);
- method public static boolean isLaunchedFromBubble(android.app.Activity);
- method public static void postponeEnterTransition(android.app.Activity);
- method public static void recreate(android.app.Activity);
- method public static androidx.core.view.DragAndDropPermissionsCompat? requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent);
- method public static void requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
- method public static <T extends android.view.View> T requireViewById(android.app.Activity, @IdRes int);
- method public static void setEnterSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
- method public static void setExitSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
- method public static void setLocusContext(android.app.Activity, androidx.core.content.LocusIdCompat?, android.os.Bundle?);
- method public static void setPermissionCompatDelegate(androidx.core.app.ActivityCompat.PermissionCompatDelegate?);
- method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, String);
- method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle?);
- method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
- method public static void startPostponedEnterTransition(android.app.Activity);
- }
-
- public static interface ActivityCompat.OnRequestPermissionsResultCallback {
- method public void onRequestPermissionsResult(int, String![], int[]);
- }
-
- public static interface ActivityCompat.PermissionCompatDelegate {
- method public boolean onActivityResult(android.app.Activity, @IntRange(from=0) int, int, android.content.Intent?);
- method public boolean requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
- }
-
- public final class ActivityManagerCompat {
- method public static boolean isLowRamDevice(android.app.ActivityManager);
- }
-
- public class ActivityOptionsCompat {
- ctor protected ActivityOptionsCompat();
- method public android.graphics.Rect? getLaunchBounds();
- method public static androidx.core.app.ActivityOptionsCompat makeBasic();
- method public static androidx.core.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
- method public static androidx.core.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
- method public static androidx.core.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
- method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
- method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, androidx.core.util.Pair<android.view.View!,java.lang.String!>!...);
- method public static androidx.core.app.ActivityOptionsCompat makeTaskLaunchBehind();
- method public static androidx.core.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
- method public void requestUsageTimeReport(android.app.PendingIntent);
- method public androidx.core.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect?);
- method public android.os.Bundle? toBundle();
- method public void update(androidx.core.app.ActivityOptionsCompat);
- field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
- field public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
- }
-
- public final class AlarmManagerCompat {
- method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
- method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
- method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
- method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
- }
-
- @RequiresApi(28) public class AppComponentFactory extends android.app.AppComponentFactory {
- ctor public AppComponentFactory();
- method public final android.app.Activity instantiateActivity(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public android.app.Activity instantiateActivityCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public final android.app.Application instantiateApplication(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public android.app.Application instantiateApplicationCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public final android.content.ContentProvider instantiateProvider(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public android.content.ContentProvider instantiateProviderCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public final android.content.BroadcastReceiver instantiateReceiver(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public android.content.BroadcastReceiver instantiateReceiverCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public final android.app.Service instantiateService(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public android.app.Service instantiateServiceCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- }
-
- public class AppLaunchChecker {
- ctor @Deprecated public AppLaunchChecker();
- method public static boolean hasStartedFromLauncher(android.content.Context);
- method public static void onActivityCreate(android.app.Activity);
- }
-
- public final class AppOpsManagerCompat {
- method public static int checkOrNoteProxyOp(android.content.Context, int, String, String);
- method public static int noteOp(android.content.Context, String, int, String);
- method public static int noteOpNoThrow(android.content.Context, String, int, String);
- method public static int noteProxyOp(android.content.Context, String, String);
- method public static int noteProxyOpNoThrow(android.content.Context, String, String);
- method public static String? permissionToOp(String);
- field public static final int MODE_ALLOWED = 0; // 0x0
- field public static final int MODE_DEFAULT = 3; // 0x3
- field public static final int MODE_ERRORED = 2; // 0x2
- field public static final int MODE_IGNORED = 1; // 0x1
- }
-
- public final class BundleCompat {
- method public static android.os.IBinder? getBinder(android.os.Bundle, String?);
- method public static void putBinder(android.os.Bundle, String?, android.os.IBinder?);
- }
-
- public class DialogCompat {
- method public static android.view.View requireViewById(android.app.Dialog, int);
- }
-
- public class FrameMetricsAggregator {
- ctor public FrameMetricsAggregator();
- ctor public FrameMetricsAggregator(int);
- method public void add(android.app.Activity);
- method public android.util.SparseIntArray![]? getMetrics();
- method public android.util.SparseIntArray![]? remove(android.app.Activity);
- method public android.util.SparseIntArray![]? reset();
- method public android.util.SparseIntArray![]? stop();
- field public static final int ANIMATION_DURATION = 256; // 0x100
- field public static final int ANIMATION_INDEX = 8; // 0x8
- field public static final int COMMAND_DURATION = 32; // 0x20
- field public static final int COMMAND_INDEX = 5; // 0x5
- field public static final int DELAY_DURATION = 128; // 0x80
- field public static final int DELAY_INDEX = 7; // 0x7
- field public static final int DRAW_DURATION = 8; // 0x8
- field public static final int DRAW_INDEX = 3; // 0x3
- field public static final int EVERY_DURATION = 511; // 0x1ff
- field public static final int INPUT_DURATION = 2; // 0x2
- field public static final int INPUT_INDEX = 1; // 0x1
- field public static final int LAYOUT_MEASURE_DURATION = 4; // 0x4
- field public static final int LAYOUT_MEASURE_INDEX = 2; // 0x2
- field public static final int SWAP_DURATION = 64; // 0x40
- field public static final int SWAP_INDEX = 6; // 0x6
- field public static final int SYNC_DURATION = 16; // 0x10
- field public static final int SYNC_INDEX = 4; // 0x4
- field public static final int TOTAL_DURATION = 1; // 0x1
- field public static final int TOTAL_INDEX = 0; // 0x0
- }
-
- @Deprecated public abstract class JobIntentService extends android.app.Service {
- ctor @Deprecated public JobIntentService();
- method @Deprecated public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
- method @Deprecated public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
- method @Deprecated public boolean isStopped();
- method @Deprecated public android.os.IBinder! onBind(android.content.Intent);
- method @Deprecated protected abstract void onHandleWork(android.content.Intent);
- method @Deprecated public boolean onStopCurrentWork();
- method @Deprecated public void setInterruptIfStopped(boolean);
- }
-
- public final class MultiWindowModeChangedInfo {
- ctor public MultiWindowModeChangedInfo(boolean);
- ctor @RequiresApi(26) public MultiWindowModeChangedInfo(boolean, android.content.res.Configuration);
- method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
- method public boolean isInMultiWindowMode();
- }
-
- public final class NavUtils {
- method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
- method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
- method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
- method public static String? getParentActivityName(android.app.Activity);
- method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
- method public static void navigateUpFromSameTask(android.app.Activity);
- method public static void navigateUpTo(android.app.Activity, android.content.Intent);
- method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
- field public static final String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
- }
-
- public class NotificationChannelCompat {
- method public boolean canBubble();
- method public boolean canBypassDnd();
- method public boolean canShowBadge();
- method public android.media.AudioAttributes? getAudioAttributes();
- method public String? getConversationId();
- method public String? getDescription();
- method public String? getGroup();
- method public String getId();
- method public int getImportance();
- method public int getLightColor();
- method public int getLockscreenVisibility();
- method public CharSequence? getName();
- method public String? getParentChannelId();
- method public android.net.Uri? getSound();
- method public long[]? getVibrationPattern();
- method public boolean isImportantConversation();
- method public boolean shouldShowLights();
- method public boolean shouldVibrate();
- method public androidx.core.app.NotificationChannelCompat.Builder toBuilder();
- field public static final String DEFAULT_CHANNEL_ID = "miscellaneous";
- }
-
- public static class NotificationChannelCompat.Builder {
- ctor public NotificationChannelCompat.Builder(String, int);
- method public androidx.core.app.NotificationChannelCompat build();
- method public androidx.core.app.NotificationChannelCompat.Builder setConversationId(String, String);
- method public androidx.core.app.NotificationChannelCompat.Builder setDescription(String?);
- method public androidx.core.app.NotificationChannelCompat.Builder setGroup(String?);
- method public androidx.core.app.NotificationChannelCompat.Builder setImportance(int);
- method public androidx.core.app.NotificationChannelCompat.Builder setLightColor(int);
- method public androidx.core.app.NotificationChannelCompat.Builder setLightsEnabled(boolean);
- method public androidx.core.app.NotificationChannelCompat.Builder setName(CharSequence?);
- method public androidx.core.app.NotificationChannelCompat.Builder setShowBadge(boolean);
- method public androidx.core.app.NotificationChannelCompat.Builder setSound(android.net.Uri?, android.media.AudioAttributes?);
- method public androidx.core.app.NotificationChannelCompat.Builder setVibrationEnabled(boolean);
- method public androidx.core.app.NotificationChannelCompat.Builder setVibrationPattern(long[]?);
- }
-
- public class NotificationChannelGroupCompat {
- method public java.util.List<androidx.core.app.NotificationChannelCompat!> getChannels();
- method public String? getDescription();
- method public String getId();
- method public CharSequence? getName();
- method public boolean isBlocked();
- method public androidx.core.app.NotificationChannelGroupCompat.Builder toBuilder();
- }
-
- public static class NotificationChannelGroupCompat.Builder {
- ctor public NotificationChannelGroupCompat.Builder(String);
- method public androidx.core.app.NotificationChannelGroupCompat build();
- method public androidx.core.app.NotificationChannelGroupCompat.Builder setDescription(String?);
- method public androidx.core.app.NotificationChannelGroupCompat.Builder setName(CharSequence?);
- }
-
- public class NotificationCompat {
- ctor @Deprecated public NotificationCompat();
- method public static androidx.core.app.NotificationCompat.Action? getAction(android.app.Notification, int);
- method public static int getActionCount(android.app.Notification);
- method public static boolean getAllowSystemGeneratedContextualActions(android.app.Notification);
- method public static boolean getAutoCancel(android.app.Notification);
- method public static int getBadgeIconType(android.app.Notification);
- method public static androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata(android.app.Notification);
- method public static String? getCategory(android.app.Notification);
- method public static String? getChannelId(android.app.Notification);
- method public static int getColor(android.app.Notification);
- method @RequiresApi(19) public static CharSequence? getContentInfo(android.app.Notification);
- method @RequiresApi(19) public static CharSequence? getContentText(android.app.Notification);
- method @RequiresApi(19) public static CharSequence? getContentTitle(android.app.Notification);
- method public static android.os.Bundle? getExtras(android.app.Notification);
- method public static String? getGroup(android.app.Notification);
- method public static int getGroupAlertBehavior(android.app.Notification);
- method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!> getInvisibleActions(android.app.Notification);
- method public static boolean getLocalOnly(android.app.Notification);
- method public static androidx.core.content.LocusIdCompat? getLocusId(android.app.Notification);
- method public static boolean getOngoing(android.app.Notification);
- method public static boolean getOnlyAlertOnce(android.app.Notification);
- method public static java.util.List<androidx.core.app.Person!> getPeople(android.app.Notification);
- method public static android.app.Notification? getPublicVersion(android.app.Notification);
- method public static CharSequence? getSettingsText(android.app.Notification);
- method public static String? getShortcutId(android.app.Notification);
- method @RequiresApi(19) public static boolean getShowWhen(android.app.Notification);
- method public static String? getSortKey(android.app.Notification);
- method @RequiresApi(19) public static CharSequence? getSubText(android.app.Notification);
- method public static long getTimeoutAfter(android.app.Notification);
- method @RequiresApi(19) public static boolean getUsesChronometer(android.app.Notification);
- method public static int getVisibility(android.app.Notification);
- method public static boolean isGroupSummary(android.app.Notification);
- field public static final int BADGE_ICON_LARGE = 2; // 0x2
- field public static final int BADGE_ICON_NONE = 0; // 0x0
- field public static final int BADGE_ICON_SMALL = 1; // 0x1
- field public static final String CATEGORY_ALARM = "alarm";
- field public static final String CATEGORY_CALL = "call";
- field public static final String CATEGORY_EMAIL = "email";
- field public static final String CATEGORY_ERROR = "err";
- field public static final String CATEGORY_EVENT = "event";
- field public static final String CATEGORY_LOCATION_SHARING = "location_sharing";
- field public static final String CATEGORY_MESSAGE = "msg";
- field public static final String CATEGORY_MISSED_CALL = "missed_call";
- field public static final String CATEGORY_NAVIGATION = "navigation";
- field public static final String CATEGORY_PROGRESS = "progress";
- field public static final String CATEGORY_PROMO = "promo";
- field public static final String CATEGORY_RECOMMENDATION = "recommendation";
- field public static final String CATEGORY_REMINDER = "reminder";
- field public static final String CATEGORY_SERVICE = "service";
- field public static final String CATEGORY_SOCIAL = "social";
- field public static final String CATEGORY_STATUS = "status";
- field public static final String CATEGORY_STOPWATCH = "stopwatch";
- field public static final String CATEGORY_SYSTEM = "sys";
- field public static final String CATEGORY_TRANSPORT = "transport";
- field public static final String CATEGORY_WORKOUT = "workout";
- field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0
- field public static final int DEFAULT_ALL = -1; // 0xffffffff
- field public static final int DEFAULT_LIGHTS = 4; // 0x4
- field public static final int DEFAULT_SOUND = 1; // 0x1
- field public static final int DEFAULT_VIBRATE = 2; // 0x2
- field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
- field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
- field public static final String EXTRA_BIG_TEXT = "android.bigText";
- field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
- field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
- field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
- field public static final String EXTRA_COLORIZED = "android.colorized";
- field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
- field public static final String EXTRA_COMPAT_TEMPLATE = "androidx.core.app.extra.COMPAT_TEMPLATE";
- field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
- field public static final String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
- field public static final String EXTRA_HISTORIC_MESSAGES = "android.messages.historic";
- field public static final String EXTRA_INFO_TEXT = "android.infoText";
- field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
- field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
- field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
- field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
- field public static final String EXTRA_MESSAGES = "android.messages";
- field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
- field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
- field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
- field @Deprecated public static final String EXTRA_PEOPLE = "android.people";
- field public static final String EXTRA_PEOPLE_LIST = "android.people.list";
- field public static final String EXTRA_PICTURE = "android.picture";
- field public static final String EXTRA_PICTURE_CONTENT_DESCRIPTION = "android.pictureContentDescription";
- field public static final String EXTRA_PROGRESS = "android.progress";
- field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
- field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
- field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
- field public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
- field public static final String EXTRA_SHOW_BIG_PICTURE_WHEN_COLLAPSED = "android.showBigPictureWhenCollapsed";
- field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
- field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
- field public static final String EXTRA_SMALL_ICON = "android.icon";
- field public static final String EXTRA_SUB_TEXT = "android.subText";
- field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
- field public static final String EXTRA_TEMPLATE = "android.template";
- field public static final String EXTRA_TEXT = "android.text";
- field public static final String EXTRA_TEXT_LINES = "android.textLines";
- field public static final String EXTRA_TITLE = "android.title";
- field public static final String EXTRA_TITLE_BIG = "android.title.big";
- field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
- field public static final int FLAG_BUBBLE = 4096; // 0x1000
- field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
- field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
- field @Deprecated public static final int FLAG_HIGH_PRIORITY = 128; // 0x80
- field public static final int FLAG_INSISTENT = 4; // 0x4
- field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
- field public static final int FLAG_NO_CLEAR = 32; // 0x20
- field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
- field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
- field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
- field public static final int FOREGROUND_SERVICE_DEFAULT = 0; // 0x0
- field public static final int FOREGROUND_SERVICE_DEFERRED = 2; // 0x2
- field public static final int FOREGROUND_SERVICE_IMMEDIATE = 1; // 0x1
- field public static final int GROUP_ALERT_ALL = 0; // 0x0
- field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
- field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
- field public static final String GROUP_KEY_SILENT = "silent";
- field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
- field public static final int PRIORITY_DEFAULT = 0; // 0x0
- field public static final int PRIORITY_HIGH = 1; // 0x1
- field public static final int PRIORITY_LOW = -1; // 0xffffffff
- field public static final int PRIORITY_MAX = 2; // 0x2
- field public static final int PRIORITY_MIN = -2; // 0xfffffffe
- field public static final int STREAM_DEFAULT = -1; // 0xffffffff
- field public static final int VISIBILITY_PRIVATE = 0; // 0x0
- field public static final int VISIBILITY_PUBLIC = 1; // 0x1
- field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
- }
-
- public static class NotificationCompat.Action {
- ctor public NotificationCompat.Action(int, CharSequence?, android.app.PendingIntent?);
- ctor public NotificationCompat.Action(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
- method public android.app.PendingIntent? getActionIntent();
- method public boolean getAllowGeneratedReplies();
- method public androidx.core.app.RemoteInput![]? getDataOnlyRemoteInputs();
- method public android.os.Bundle getExtras();
- method @Deprecated public int getIcon();
- method public androidx.core.graphics.drawable.IconCompat? getIconCompat();
- method public androidx.core.app.RemoteInput![]? getRemoteInputs();
- method @androidx.core.app.NotificationCompat.Action.SemanticAction public int getSemanticAction();
- method public boolean getShowsUserInterface();
- method public CharSequence? getTitle();
- method public boolean isAuthenticationRequired();
- method public boolean isContextual();
- field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
- field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
- field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
- field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2
- field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3
- field public static final int SEMANTIC_ACTION_MUTE = 6; // 0x6
- field public static final int SEMANTIC_ACTION_NONE = 0; // 0x0
- field public static final int SEMANTIC_ACTION_REPLY = 1; // 0x1
- field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
- field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
- field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
- field public android.app.PendingIntent! actionIntent;
- field @Deprecated public int icon;
- field public CharSequence! title;
- }
-
- public static final class NotificationCompat.Action.Builder {
- ctor public NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
- ctor public NotificationCompat.Action.Builder(int, CharSequence?, android.app.PendingIntent?);
- ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
- method public androidx.core.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle?);
- method public androidx.core.app.NotificationCompat.Action.Builder addRemoteInput(androidx.core.app.RemoteInput?);
- method public androidx.core.app.NotificationCompat.Action build();
- method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Extender);
- method public android.os.Bundle getExtras();
- method public androidx.core.app.NotificationCompat.Action.Builder setAllowGeneratedReplies(boolean);
- method public androidx.core.app.NotificationCompat.Action.Builder setAuthenticationRequired(boolean);
- method public androidx.core.app.NotificationCompat.Action.Builder setContextual(boolean);
- method public androidx.core.app.NotificationCompat.Action.Builder setSemanticAction(@androidx.core.app.NotificationCompat.Action.SemanticAction int);
- method public androidx.core.app.NotificationCompat.Action.Builder setShowsUserInterface(boolean);
- }
-
- public static interface NotificationCompat.Action.Extender {
- method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
- }
-
- @IntDef({androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_NONE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_REPLY, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_UNREAD, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_DELETE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_ARCHIVE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_UNMUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_UP, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_DOWN, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_CALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.Action.SemanticAction {
- }
-
- public static final class NotificationCompat.Action.WearableExtender implements androidx.core.app.NotificationCompat.Action.Extender {
- ctor public NotificationCompat.Action.WearableExtender();
- ctor public NotificationCompat.Action.WearableExtender(androidx.core.app.NotificationCompat.Action);
- method public androidx.core.app.NotificationCompat.Action.WearableExtender clone();
- method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
- method @Deprecated public CharSequence? getCancelLabel();
- method @Deprecated public CharSequence? getConfirmLabel();
- method public boolean getHintDisplayActionInline();
- method public boolean getHintLaunchesActivity();
- method @Deprecated public CharSequence? getInProgressLabel();
- method public boolean isAvailableOffline();
- method public androidx.core.app.NotificationCompat.Action.WearableExtender setAvailableOffline(boolean);
- method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setCancelLabel(CharSequence?);
- method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setConfirmLabel(CharSequence?);
- method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintDisplayActionInline(boolean);
- method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintLaunchesActivity(boolean);
- method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setInProgressLabel(CharSequence?);
- }
-
- public static class NotificationCompat.BigPictureStyle extends androidx.core.app.NotificationCompat.Style {
- ctor public NotificationCompat.BigPictureStyle();
- ctor public NotificationCompat.BigPictureStyle(androidx.core.app.NotificationCompat.Builder?);
- method public androidx.core.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.Bitmap?);
- method public androidx.core.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.Bitmap?);
- method public androidx.core.app.NotificationCompat.BigPictureStyle setBigContentTitle(CharSequence?);
- method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle setContentDescription(CharSequence?);
- method public androidx.core.app.NotificationCompat.BigPictureStyle setSummaryText(CharSequence?);
- method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle showBigPictureWhenCollapsed(boolean);
- }
-
- public static class NotificationCompat.BigTextStyle extends androidx.core.app.NotificationCompat.Style {
- ctor public NotificationCompat.BigTextStyle();
- ctor public NotificationCompat.BigTextStyle(androidx.core.app.NotificationCompat.Builder?);
- method public androidx.core.app.NotificationCompat.BigTextStyle bigText(CharSequence?);
- method public androidx.core.app.NotificationCompat.BigTextStyle setBigContentTitle(CharSequence?);
- method public androidx.core.app.NotificationCompat.BigTextStyle setSummaryText(CharSequence?);
- }
-
- public static final class NotificationCompat.BubbleMetadata {
- method public static androidx.core.app.NotificationCompat.BubbleMetadata? fromPlatform(android.app.Notification.BubbleMetadata?);
- method public boolean getAutoExpandBubble();
- method public android.app.PendingIntent? getDeleteIntent();
- method @Dimension(unit=androidx.annotation.Dimension.DP) public int getDesiredHeight();
- method @DimenRes public int getDesiredHeightResId();
- method public androidx.core.graphics.drawable.IconCompat? getIcon();
- method public android.app.PendingIntent? getIntent();
- method public String? getShortcutId();
- method public boolean isNotificationSuppressed();
- method public static android.app.Notification.BubbleMetadata? toPlatform(androidx.core.app.NotificationCompat.BubbleMetadata?);
- }
-
- public static final class NotificationCompat.BubbleMetadata.Builder {
- ctor @Deprecated public NotificationCompat.BubbleMetadata.Builder();
- ctor @RequiresApi(30) public NotificationCompat.BubbleMetadata.Builder(String);
- ctor public NotificationCompat.BubbleMetadata.Builder(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat);
- method public androidx.core.app.NotificationCompat.BubbleMetadata build();
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setAutoExpandBubble(boolean);
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDeleteIntent(android.app.PendingIntent?);
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeight(@Dimension(unit=androidx.annotation.Dimension.DP) int);
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int);
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIcon(androidx.core.graphics.drawable.IconCompat);
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIntent(android.app.PendingIntent);
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setSuppressNotification(boolean);
- }
-
- public static class NotificationCompat.Builder {
- ctor @RequiresApi(19) public NotificationCompat.Builder(android.content.Context, android.app.Notification);
- ctor public NotificationCompat.Builder(android.content.Context, String);
- ctor @Deprecated public NotificationCompat.Builder(android.content.Context);
- method public androidx.core.app.NotificationCompat.Builder addAction(int, CharSequence?, android.app.PendingIntent?);
- method public androidx.core.app.NotificationCompat.Builder addAction(androidx.core.app.NotificationCompat.Action?);
- method public androidx.core.app.NotificationCompat.Builder addExtras(android.os.Bundle?);
- method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, CharSequence?, android.app.PendingIntent?);
- method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(androidx.core.app.NotificationCompat.Action?);
- method @Deprecated public androidx.core.app.NotificationCompat.Builder addPerson(String?);
- method public androidx.core.app.NotificationCompat.Builder addPerson(androidx.core.app.Person?);
- method public android.app.Notification build();
- method public androidx.core.app.NotificationCompat.Builder clearActions();
- method public androidx.core.app.NotificationCompat.Builder clearInvisibleActions();
- method public androidx.core.app.NotificationCompat.Builder clearPeople();
- method public android.widget.RemoteViews? createBigContentView();
- method public android.widget.RemoteViews? createContentView();
- method public android.widget.RemoteViews? createHeadsUpContentView();
- method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Extender);
- method public android.os.Bundle getExtras();
- method @Deprecated public android.app.Notification getNotification();
- method protected static CharSequence? limitCharSequenceLength(CharSequence?);
- method public androidx.core.app.NotificationCompat.Builder setAllowSystemGeneratedContextualActions(boolean);
- method public androidx.core.app.NotificationCompat.Builder setAutoCancel(boolean);
- method public androidx.core.app.NotificationCompat.Builder setBadgeIconType(int);
- method public androidx.core.app.NotificationCompat.Builder setBubbleMetadata(androidx.core.app.NotificationCompat.BubbleMetadata?);
- method public androidx.core.app.NotificationCompat.Builder setCategory(String?);
- method public androidx.core.app.NotificationCompat.Builder setChannelId(String);
- method @RequiresApi(24) public androidx.core.app.NotificationCompat.Builder setChronometerCountDown(boolean);
- method public androidx.core.app.NotificationCompat.Builder setColor(@ColorInt int);
- method public androidx.core.app.NotificationCompat.Builder setColorized(boolean);
- method public androidx.core.app.NotificationCompat.Builder setContent(android.widget.RemoteViews?);
- method public androidx.core.app.NotificationCompat.Builder setContentInfo(CharSequence?);
- method public androidx.core.app.NotificationCompat.Builder setContentIntent(android.app.PendingIntent?);
- method public androidx.core.app.NotificationCompat.Builder setContentText(CharSequence?);
- method public androidx.core.app.NotificationCompat.Builder setContentTitle(CharSequence?);
- method public androidx.core.app.NotificationCompat.Builder setCustomBigContentView(android.widget.RemoteViews?);
- method public androidx.core.app.NotificationCompat.Builder setCustomContentView(android.widget.RemoteViews?);
- method public androidx.core.app.NotificationCompat.Builder setCustomHeadsUpContentView(android.widget.RemoteViews?);
- method public androidx.core.app.NotificationCompat.Builder setDefaults(int);
- method public androidx.core.app.NotificationCompat.Builder setDeleteIntent(android.app.PendingIntent?);
- method public androidx.core.app.NotificationCompat.Builder setExtras(android.os.Bundle?);
- method public androidx.core.app.NotificationCompat.Builder setForegroundServiceBehavior(int);
- method public androidx.core.app.NotificationCompat.Builder setFullScreenIntent(android.app.PendingIntent?, boolean);
- method public androidx.core.app.NotificationCompat.Builder setGroup(String?);
- method public androidx.core.app.NotificationCompat.Builder setGroupAlertBehavior(int);
- method public androidx.core.app.NotificationCompat.Builder setGroupSummary(boolean);
- method public androidx.core.app.NotificationCompat.Builder setLargeIcon(android.graphics.Bitmap?);
- method public androidx.core.app.NotificationCompat.Builder setLights(@ColorInt int, int, int);
- method public androidx.core.app.NotificationCompat.Builder setLocalOnly(boolean);
- method public androidx.core.app.NotificationCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
- method @Deprecated public androidx.core.app.NotificationCompat.Builder setNotificationSilent();
- method public androidx.core.app.NotificationCompat.Builder setNumber(int);
- method public androidx.core.app.NotificationCompat.Builder setOngoing(boolean);
- method public androidx.core.app.NotificationCompat.Builder setOnlyAlertOnce(boolean);
- method public androidx.core.app.NotificationCompat.Builder setPriority(int);
- method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
- method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification?);
- method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(CharSequence![]?);
- method public androidx.core.app.NotificationCompat.Builder setSettingsText(CharSequence?);
- method public androidx.core.app.NotificationCompat.Builder setShortcutId(String?);
- method public androidx.core.app.NotificationCompat.Builder setShortcutInfo(androidx.core.content.pm.ShortcutInfoCompat?);
- method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
- method public androidx.core.app.NotificationCompat.Builder setSilent(boolean);
- method @RequiresApi(23) public androidx.core.app.NotificationCompat.Builder setSmallIcon(androidx.core.graphics.drawable.IconCompat);
- method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int);
- method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int, int);
- method public androidx.core.app.NotificationCompat.Builder setSortKey(String?);
- method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?);
- method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?, int);
- method public androidx.core.app.NotificationCompat.Builder setStyle(androidx.core.app.NotificationCompat.Style?);
- method public androidx.core.app.NotificationCompat.Builder setSubText(CharSequence?);
- method public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?);
- method @Deprecated public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?, android.widget.RemoteViews?);
- method public androidx.core.app.NotificationCompat.Builder setTimeoutAfter(long);
- method public androidx.core.app.NotificationCompat.Builder setUsesChronometer(boolean);
- method public androidx.core.app.NotificationCompat.Builder setVibrate(long[]?);
- method public androidx.core.app.NotificationCompat.Builder setVisibility(int);
- method public androidx.core.app.NotificationCompat.Builder setWhen(long);
- field @Deprecated public java.util.ArrayList<java.lang.String!>! mPeople;
- }
-
- public static final class NotificationCompat.CarExtender implements androidx.core.app.NotificationCompat.Extender {
- ctor public NotificationCompat.CarExtender();
- ctor public NotificationCompat.CarExtender(android.app.Notification);
- method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
- method @ColorInt public int getColor();
- method public android.graphics.Bitmap? getLargeIcon();
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation? getUnreadConversation();
- method public androidx.core.app.NotificationCompat.CarExtender setColor(@ColorInt int);
- method public androidx.core.app.NotificationCompat.CarExtender setLargeIcon(android.graphics.Bitmap?);
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation?);
- }
-
- @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation {
- method @Deprecated public long getLatestTimestamp();
- method @Deprecated public String![]? getMessages();
- method @Deprecated public String? getParticipant();
- method @Deprecated public String![]? getParticipants();
- method @Deprecated public android.app.PendingIntent? getReadPendingIntent();
- method @Deprecated public androidx.core.app.RemoteInput? getRemoteInput();
- method @Deprecated public android.app.PendingIntent? getReplyPendingIntent();
- }
-
- @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
- ctor @Deprecated public NotificationCompat.CarExtender.UnreadConversation.Builder(String);
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder addMessage(String?);
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation build();
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setLatestTimestamp(long);
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReadPendingIntent(android.app.PendingIntent?);
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReplyAction(android.app.PendingIntent?, androidx.core.app.RemoteInput?);
- }
-
- public static class NotificationCompat.DecoratedCustomViewStyle extends androidx.core.app.NotificationCompat.Style {
- ctor public NotificationCompat.DecoratedCustomViewStyle();
- }
-
- public static interface NotificationCompat.Extender {
- method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
- }
-
- public static class NotificationCompat.InboxStyle extends androidx.core.app.NotificationCompat.Style {
- ctor public NotificationCompat.InboxStyle();
- ctor public NotificationCompat.InboxStyle(androidx.core.app.NotificationCompat.Builder?);
- method public androidx.core.app.NotificationCompat.InboxStyle addLine(CharSequence?);
- method public androidx.core.app.NotificationCompat.InboxStyle setBigContentTitle(CharSequence?);
- method public androidx.core.app.NotificationCompat.InboxStyle setSummaryText(CharSequence?);
- }
-
- public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
- ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
- ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
- method public void addCompatExtras(android.os.Bundle);
- method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
- method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
- method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
- method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
- method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
- method public CharSequence? getConversationTitle();
- method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
- method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getMessages();
- method public androidx.core.app.Person getUser();
- method @Deprecated public CharSequence? getUserDisplayName();
- method public boolean isGroupConversation();
- method public androidx.core.app.NotificationCompat.MessagingStyle setConversationTitle(CharSequence?);
- method public androidx.core.app.NotificationCompat.MessagingStyle setGroupConversation(boolean);
- field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
- }
-
- public static final class NotificationCompat.MessagingStyle.Message {
- ctor public NotificationCompat.MessagingStyle.Message(CharSequence?, long, androidx.core.app.Person?);
- ctor @Deprecated public NotificationCompat.MessagingStyle.Message(CharSequence?, long, CharSequence?);
- method public String? getDataMimeType();
- method public android.net.Uri? getDataUri();
- method public android.os.Bundle getExtras();
- method public androidx.core.app.Person? getPerson();
- method @Deprecated public CharSequence? getSender();
- method public CharSequence? getText();
- method public long getTimestamp();
- method public androidx.core.app.NotificationCompat.MessagingStyle.Message setData(String?, android.net.Uri?);
- }
-
- public abstract static class NotificationCompat.Style {
- ctor public NotificationCompat.Style();
- method public android.app.Notification? build();
- method public void setBuilder(androidx.core.app.NotificationCompat.Builder?);
- }
-
- public static final class NotificationCompat.WearableExtender implements androidx.core.app.NotificationCompat.Extender {
- ctor public NotificationCompat.WearableExtender();
- ctor public NotificationCompat.WearableExtender(android.app.Notification);
- method public androidx.core.app.NotificationCompat.WearableExtender addAction(androidx.core.app.NotificationCompat.Action);
- method public androidx.core.app.NotificationCompat.WearableExtender addActions(java.util.List<androidx.core.app.NotificationCompat.Action!>);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPage(android.app.Notification);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPages(java.util.List<android.app.Notification!>);
- method public androidx.core.app.NotificationCompat.WearableExtender clearActions();
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender clearPages();
- method public androidx.core.app.NotificationCompat.WearableExtender clone();
- method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
- method public java.util.List<androidx.core.app.NotificationCompat.Action!> getActions();
- method @Deprecated public android.graphics.Bitmap? getBackground();
- method public String? getBridgeTag();
- method public int getContentAction();
- method @Deprecated public int getContentIcon();
- method @Deprecated public int getContentIconGravity();
- method public boolean getContentIntentAvailableOffline();
- method @Deprecated public int getCustomContentHeight();
- method @Deprecated public int getCustomSizePreset();
- method public String? getDismissalId();
- method @Deprecated public android.app.PendingIntent? getDisplayIntent();
- method @Deprecated public int getGravity();
- method @Deprecated public boolean getHintAmbientBigPicture();
- method @Deprecated public boolean getHintAvoidBackgroundClipping();
- method public boolean getHintContentIntentLaunchesActivity();
- method @Deprecated public boolean getHintHideIcon();
- method @Deprecated public int getHintScreenTimeout();
- method @Deprecated public boolean getHintShowBackgroundOnly();
- method @Deprecated public java.util.List<android.app.Notification!> getPages();
- method public boolean getStartScrollBottom();
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setBackground(android.graphics.Bitmap?);
- method public androidx.core.app.NotificationCompat.WearableExtender setBridgeTag(String?);
- method public androidx.core.app.NotificationCompat.WearableExtender setContentAction(int);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIcon(int);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIconGravity(int);
- method public androidx.core.app.NotificationCompat.WearableExtender setContentIntentAvailableOffline(boolean);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomContentHeight(int);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomSizePreset(int);
- method public androidx.core.app.NotificationCompat.WearableExtender setDismissalId(String?);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setDisplayIntent(android.app.PendingIntent?);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setGravity(int);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAmbientBigPicture(boolean);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAvoidBackgroundClipping(boolean);
- method public androidx.core.app.NotificationCompat.WearableExtender setHintContentIntentLaunchesActivity(boolean);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintHideIcon(boolean);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintScreenTimeout(int);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintShowBackgroundOnly(boolean);
- method public androidx.core.app.NotificationCompat.WearableExtender setStartScrollBottom(boolean);
- field @Deprecated public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
- field @Deprecated public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
- field @Deprecated public static final int SIZE_DEFAULT = 0; // 0x0
- field @Deprecated public static final int SIZE_FULL_SCREEN = 5; // 0x5
- field @Deprecated public static final int SIZE_LARGE = 4; // 0x4
- field @Deprecated public static final int SIZE_MEDIUM = 3; // 0x3
- field @Deprecated public static final int SIZE_SMALL = 2; // 0x2
- field @Deprecated public static final int SIZE_XSMALL = 1; // 0x1
- field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
- }
-
- public final class NotificationCompatExtras {
- field public static final String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
- field public static final String EXTRA_GROUP_KEY = "android.support.groupKey";
- field public static final String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
- field public static final String EXTRA_LOCAL_ONLY = "android.support.localOnly";
- field public static final String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
- field public static final String EXTRA_SORT_KEY = "android.support.sortKey";
- }
-
- public abstract class NotificationCompatSideChannelService extends android.app.Service {
- ctor public NotificationCompatSideChannelService();
- method public abstract void cancel(String!, int, String!);
- method public abstract void cancelAll(String!);
- method public abstract void notify(String!, int, String!, android.app.Notification!);
- method public android.os.IBinder! onBind(android.content.Intent!);
- }
-
- public final class NotificationManagerCompat {
- method public boolean areNotificationsEnabled();
- method public void cancel(int);
- method public void cancel(String?, int);
- method public void cancelAll();
- method public void createNotificationChannel(android.app.NotificationChannel);
- method public void createNotificationChannel(androidx.core.app.NotificationChannelCompat);
- method public void createNotificationChannelGroup(android.app.NotificationChannelGroup);
- method public void createNotificationChannelGroup(androidx.core.app.NotificationChannelGroupCompat);
- method public void createNotificationChannelGroups(java.util.List<android.app.NotificationChannelGroup!>);
- method public void createNotificationChannelGroupsCompat(java.util.List<androidx.core.app.NotificationChannelGroupCompat!>);
- method public void createNotificationChannels(java.util.List<android.app.NotificationChannel!>);
- method public void createNotificationChannelsCompat(java.util.List<androidx.core.app.NotificationChannelCompat!>);
- method public void deleteNotificationChannel(String);
- method public void deleteNotificationChannelGroup(String);
- method public void deleteUnlistedNotificationChannels(java.util.Collection<java.lang.String!>);
- method public static androidx.core.app.NotificationManagerCompat from(android.content.Context);
- method public static java.util.Set<java.lang.String!> getEnabledListenerPackages(android.content.Context);
- method public int getImportance();
- method public android.app.NotificationChannel? getNotificationChannel(String);
- method public android.app.NotificationChannel? getNotificationChannel(String, String);
- method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String);
- method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String, String);
- method public android.app.NotificationChannelGroup? getNotificationChannelGroup(String);
- method public androidx.core.app.NotificationChannelGroupCompat? getNotificationChannelGroupCompat(String);
- method public java.util.List<android.app.NotificationChannelGroup!> getNotificationChannelGroups();
- method public java.util.List<androidx.core.app.NotificationChannelGroupCompat!> getNotificationChannelGroupsCompat();
- method public java.util.List<android.app.NotificationChannel!> getNotificationChannels();
- method public java.util.List<androidx.core.app.NotificationChannelCompat!> getNotificationChannelsCompat();
- method public void notify(int, android.app.Notification);
- method public void notify(String?, int, android.app.Notification);
- field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
- field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
- field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
- field public static final int IMPORTANCE_HIGH = 4; // 0x4
- field public static final int IMPORTANCE_LOW = 2; // 0x2
- field public static final int IMPORTANCE_MAX = 5; // 0x5
- field public static final int IMPORTANCE_MIN = 1; // 0x1
- field public static final int IMPORTANCE_NONE = 0; // 0x0
- field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
- }
-
- public interface OnMultiWindowModeChangedProvider {
- method public void addOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
- method public void removeOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
- }
-
- public interface OnNewIntentProvider {
- method public void addOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
- method public void removeOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
- }
-
- public interface OnPictureInPictureModeChangedProvider {
- method public void addOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
- method public void removeOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
- }
-
- public class Person {
- method public static androidx.core.app.Person fromBundle(android.os.Bundle);
- method public androidx.core.graphics.drawable.IconCompat? getIcon();
- method public String? getKey();
- method public CharSequence? getName();
- method public String? getUri();
- method public boolean isBot();
- method public boolean isImportant();
- method public androidx.core.app.Person.Builder toBuilder();
- method public android.os.Bundle toBundle();
- }
-
- public static class Person.Builder {
- ctor public Person.Builder();
- method public androidx.core.app.Person build();
- method public androidx.core.app.Person.Builder setBot(boolean);
- method public androidx.core.app.Person.Builder setIcon(androidx.core.graphics.drawable.IconCompat?);
- method public androidx.core.app.Person.Builder setImportant(boolean);
- method public androidx.core.app.Person.Builder setKey(String?);
- method public androidx.core.app.Person.Builder setName(CharSequence?);
- method public androidx.core.app.Person.Builder setUri(String?);
- }
-
- public final class PictureInPictureModeChangedInfo {
- ctor public PictureInPictureModeChangedInfo(boolean);
- ctor @RequiresApi(26) public PictureInPictureModeChangedInfo(boolean, android.content.res.Configuration);
- method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
- method public boolean isInPictureInPictureMode();
- }
-
- public final class RemoteActionCompat implements androidx.versionedparcelable.VersionedParcelable {
- ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
- ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
- method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
- method public android.app.PendingIntent getActionIntent();
- method public CharSequence getContentDescription();
- method public androidx.core.graphics.drawable.IconCompat getIcon();
- method public CharSequence getTitle();
- method public boolean isEnabled();
- method public void setEnabled(boolean);
- method public void setShouldShowIcon(boolean);
- method public boolean shouldShowIcon();
- method @RequiresApi(26) public android.app.RemoteAction toRemoteAction();
- }
-
- public final class RemoteInput {
- method public static void addDataResultToIntent(androidx.core.app.RemoteInput, android.content.Intent, java.util.Map<java.lang.String!,android.net.Uri!>);
- method public static void addResultsToIntent(androidx.core.app.RemoteInput![], android.content.Intent, android.os.Bundle);
- method public boolean getAllowFreeFormInput();
- method public java.util.Set<java.lang.String!>? getAllowedDataTypes();
- method public CharSequence![]? getChoices();
- method public static java.util.Map<java.lang.String!,android.net.Uri!>? getDataResultsFromIntent(android.content.Intent, String);
- method public int getEditChoicesBeforeSending();
- method public android.os.Bundle getExtras();
- method public CharSequence? getLabel();
- method public String getResultKey();
- method public static android.os.Bundle? getResultsFromIntent(android.content.Intent);
- method public static int getResultsSource(android.content.Intent);
- method public boolean isDataOnly();
- method public static void setResultsSource(android.content.Intent, int);
- field public static final int EDIT_CHOICES_BEFORE_SENDING_AUTO = 0; // 0x0
- field public static final int EDIT_CHOICES_BEFORE_SENDING_DISABLED = 1; // 0x1
- field public static final int EDIT_CHOICES_BEFORE_SENDING_ENABLED = 2; // 0x2
- field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
- field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
- field public static final int SOURCE_CHOICE = 1; // 0x1
- field public static final int SOURCE_FREE_FORM_INPUT = 0; // 0x0
- }
-
- public static final class RemoteInput.Builder {
- ctor public RemoteInput.Builder(String);
- method public androidx.core.app.RemoteInput.Builder addExtras(android.os.Bundle);
- method public androidx.core.app.RemoteInput build();
- method public android.os.Bundle getExtras();
- method public androidx.core.app.RemoteInput.Builder setAllowDataType(String, boolean);
- method public androidx.core.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
- method public androidx.core.app.RemoteInput.Builder setChoices(CharSequence![]?);
- method public androidx.core.app.RemoteInput.Builder setEditChoicesBeforeSending(int);
- method public androidx.core.app.RemoteInput.Builder setLabel(CharSequence?);
- }
-
- public final class ServiceCompat {
- method public static void stopForeground(android.app.Service, int);
- field public static final int START_STICKY = 1; // 0x1
- field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
- field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
- }
-
- public final class ShareCompat {
- method @Deprecated public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
- method @Deprecated public static void configureMenuItem(android.view.Menu, @IdRes int, androidx.core.app.ShareCompat.IntentBuilder);
- method public static android.content.ComponentName? getCallingActivity(android.app.Activity);
- method public static String? getCallingPackage(android.app.Activity);
- field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
- field public static final String EXTRA_CALLING_ACTIVITY_INTEROP = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
- field public static final String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
- field public static final String EXTRA_CALLING_PACKAGE_INTEROP = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
- }
-
- public static class ShareCompat.IntentBuilder {
- ctor public ShareCompat.IntentBuilder(android.content.Context);
- method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String);
- method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String![]);
- method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String);
- method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String![]);
- method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String);
- method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String![]);
- method public androidx.core.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
- method public android.content.Intent createChooserIntent();
- method @Deprecated public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
- method public android.content.Intent getIntent();
- method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
- method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(@StringRes int);
- method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(String![]?);
- method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(String![]?);
- method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(String![]?);
- method public androidx.core.app.ShareCompat.IntentBuilder setHtmlText(String?);
- method public androidx.core.app.ShareCompat.IntentBuilder setStream(android.net.Uri?);
- method public androidx.core.app.ShareCompat.IntentBuilder setSubject(String?);
- method public androidx.core.app.ShareCompat.IntentBuilder setText(CharSequence?);
- method public androidx.core.app.ShareCompat.IntentBuilder setType(String?);
- method public void startChooser();
- }
-
- public static class ShareCompat.IntentReader {
- ctor public ShareCompat.IntentReader(android.app.Activity);
- ctor public ShareCompat.IntentReader(android.content.Context, android.content.Intent);
- method @Deprecated public static androidx.core.app.ShareCompat.IntentReader from(android.app.Activity);
- method public android.content.ComponentName? getCallingActivity();
- method public android.graphics.drawable.Drawable? getCallingActivityIcon();
- method public android.graphics.drawable.Drawable? getCallingApplicationIcon();
- method public CharSequence? getCallingApplicationLabel();
- method public String? getCallingPackage();
- method public String![]? getEmailBcc();
- method public String![]? getEmailCc();
- method public String![]? getEmailTo();
- method public String? getHtmlText();
- method public android.net.Uri? getStream();
- method public android.net.Uri? getStream(int);
- method public int getStreamCount();
- method public String? getSubject();
- method public CharSequence? getText();
- method public String? getType();
- method public boolean isMultipleShare();
- method public boolean isShareIntent();
- method public boolean isSingleShare();
- }
-
- public abstract class SharedElementCallback {
- ctor public SharedElementCallback();
- method public android.os.Parcelable! onCaptureSharedElementSnapshot(android.view.View!, android.graphics.Matrix!, android.graphics.RectF!);
- method public android.view.View! onCreateSnapshotView(android.content.Context!, android.os.Parcelable!);
- method public void onMapSharedElements(java.util.List<java.lang.String!>!, java.util.Map<java.lang.String!,android.view.View!>!);
- method public void onRejectSharedElements(java.util.List<android.view.View!>!);
- method public void onSharedElementEnd(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
- method public void onSharedElementStart(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
- method public void onSharedElementsArrived(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener!);
- }
-
- public static interface SharedElementCallback.OnSharedElementsReadyListener {
- method public void onSharedElementsReady();
- }
-
- public final class TaskStackBuilder implements java.lang.Iterable<android.content.Intent> {
- method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
- method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
- method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
- method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
- method public androidx.core.app.TaskStackBuilder addParentStack(android.content.ComponentName);
- method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
- method public android.content.Intent? editIntentAt(int);
- method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
- method @Deprecated public android.content.Intent! getIntent(int);
- method public int getIntentCount();
- method public android.content.Intent![] getIntents();
- method public android.app.PendingIntent? getPendingIntent(int, int);
- method public android.app.PendingIntent? getPendingIntent(int, int, android.os.Bundle?);
- method @Deprecated public java.util.Iterator<android.content.Intent!> iterator();
- method public void startActivities();
- method public void startActivities(android.os.Bundle?);
- }
-
- public static interface TaskStackBuilder.SupportParentable {
- method public android.content.Intent? getSupportParentActivityIntent();
- }
-
-}
-
-package androidx.core.content {
-
- public final class ContentProviderCompat {
- method public static android.content.Context requireContext(android.content.ContentProvider);
- }
-
- public final class ContentResolverCompat {
- method public static android.database.Cursor? query(android.content.ContentResolver, android.net.Uri, String![]?, String?, String![]?, String?, androidx.core.os.CancellationSignal?);
- }
-
- public class ContextCompat {
- ctor protected ContextCompat();
- method public static int checkSelfPermission(android.content.Context, String);
- method public static android.content.Context? createDeviceProtectedStorageContext(android.content.Context);
- method public static String? getAttributionTag(android.content.Context);
- method public static java.io.File getCodeCacheDir(android.content.Context);
- method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
- method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
- method public static java.io.File? getDataDir(android.content.Context);
- method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
- method public static java.io.File![] getExternalCacheDirs(android.content.Context);
- method public static java.io.File![] getExternalFilesDirs(android.content.Context, String?);
- method public static java.util.concurrent.Executor getMainExecutor(android.content.Context);
- method public static java.io.File? getNoBackupFilesDir(android.content.Context);
- method public static java.io.File![] getObbDirs(android.content.Context);
- method public static <T> T? getSystemService(android.content.Context, Class<T!>);
- method public static String? getSystemServiceName(android.content.Context, Class<?>);
- method public static boolean isDeviceProtectedStorage(android.content.Context);
- method public static boolean startActivities(android.content.Context, android.content.Intent![]);
- method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
- method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
- method public static void startForegroundService(android.content.Context, android.content.Intent);
- }
-
- public class FileProvider extends android.content.ContentProvider {
- ctor public FileProvider();
- ctor protected FileProvider(@XmlRes int);
- method public int delete(android.net.Uri, String?, String![]?);
- method public String? getType(android.net.Uri);
- method public static android.net.Uri! getUriForFile(android.content.Context, String, java.io.File);
- method public static android.net.Uri getUriForFile(android.content.Context, String, java.io.File, String);
- method public android.net.Uri! insert(android.net.Uri, android.content.ContentValues);
- method public boolean onCreate();
- method public android.database.Cursor query(android.net.Uri, String![]?, String?, String![]?, String?);
- method public int update(android.net.Uri, android.content.ContentValues, String?, String![]?);
- }
-
- public final class IntentCompat {
- method public static android.content.Intent createManageUnusedAppRestrictionsIntent(android.content.Context, String);
- method public static android.content.Intent makeMainSelectorActivity(String, String);
- field public static final String ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER";
- field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
- field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
- field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
- field public static final String EXTRA_TIME = "android.intent.extra.TIME";
- }
-
- public final class LocusIdCompat {
- ctor public LocusIdCompat(String);
- method public String getId();
- method @RequiresApi(29) public android.content.LocusId toLocusId();
- method @RequiresApi(29) public static androidx.core.content.LocusIdCompat toLocusIdCompat(android.content.LocusId);
- }
-
- public final class MimeTypeFilter {
- method public static boolean matches(String?, String);
- method public static String? matches(String?, String![]);
- method public static String? matches(String![]?, String);
- method public static String![] matchesMany(String![]?, String);
- }
-
- public interface OnConfigurationChangedProvider {
- method public void addOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
- method public void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
- }
-
- public interface OnTrimMemoryProvider {
- method public void addOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
- method public void removeOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
- }
-
- public final class PackageManagerCompat {
- method public static com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> getUnusedAppRestrictionsStatus(android.content.Context);
- field public static final String ACTION_PERMISSION_REVOCATION_SETTINGS = "android.intent.action.AUTO_REVOKE_PERMISSIONS";
- }
-
- public final class PermissionChecker {
- method public static int checkCallingOrSelfPermission(android.content.Context, String);
- method public static int checkCallingPermission(android.content.Context, String, String?);
- method public static int checkPermission(android.content.Context, String, int, int, String?);
- method public static int checkSelfPermission(android.content.Context, String);
- field public static final int PERMISSION_DENIED = -1; // 0xffffffff
- field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
- field public static final int PERMISSION_GRANTED = 0; // 0x0
- }
-
- @Deprecated public final class SharedPreferencesCompat {
- }
-
- @Deprecated public static final class SharedPreferencesCompat.EditorCompat {
- method @Deprecated public void apply(android.content.SharedPreferences.Editor);
- method @Deprecated public static androidx.core.content.SharedPreferencesCompat.EditorCompat! getInstance();
- }
-
- public class UnusedAppRestrictionsBackportCallback {
- method public void onResult(boolean, boolean) throws android.os.RemoteException;
- }
-
- public abstract class UnusedAppRestrictionsBackportService extends android.app.Service {
- ctor public UnusedAppRestrictionsBackportService();
- method protected abstract void isPermissionRevocationEnabled(androidx.core.content.UnusedAppRestrictionsBackportCallback);
- method public android.os.IBinder? onBind(android.content.Intent?);
- field public static final String ACTION_UNUSED_APP_RESTRICTIONS_BACKPORT_CONNECTION = "android.support.unusedapprestrictions.action.CustomUnusedAppRestrictionsBackportService";
- }
-
- public final class UnusedAppRestrictionsConstants {
- field public static final int API_30 = 4; // 0x4
- field public static final int API_30_BACKPORT = 3; // 0x3
- field public static final int API_31 = 5; // 0x5
- field public static final int DISABLED = 2; // 0x2
- field public static final int ERROR = 0; // 0x0
- field public static final int FEATURE_NOT_AVAILABLE = 1; // 0x1
- }
-
-}
-
-package androidx.core.content.pm {
-
- @Deprecated public final class ActivityInfoCompat {
- field @Deprecated public static final int CONFIG_UI_MODE = 512; // 0x200
- }
-
- public final class PackageInfoCompat {
- method public static long getLongVersionCode(android.content.pm.PackageInfo);
- method public static java.util.List<android.content.pm.Signature!> getSignatures(android.content.pm.PackageManager, String) throws android.content.pm.PackageManager.NameNotFoundException;
- method public static boolean hasSignatures(android.content.pm.PackageManager, String, @Size(min=1) java.util.Map<byte[]!,java.lang.Integer!>, boolean) throws android.content.pm.PackageManager.NameNotFoundException;
- }
-
- public final class PermissionInfoCompat {
- method public static int getProtection(android.content.pm.PermissionInfo);
- method public static int getProtectionFlags(android.content.pm.PermissionInfo);
- }
-
- public class ShortcutInfoCompat {
- method public android.content.ComponentName? getActivity();
- method public java.util.Set<java.lang.String!>? getCategories();
- method public CharSequence? getDisabledMessage();
- method public int getDisabledReason();
- method public int getExcludedFromSurfaces();
- method public android.os.PersistableBundle? getExtras();
- method public String getId();
- method public android.content.Intent getIntent();
- method public android.content.Intent![] getIntents();
- method public long getLastChangedTimestamp();
- method public androidx.core.content.LocusIdCompat? getLocusId();
- method public CharSequence? getLongLabel();
- method public String getPackage();
- method public int getRank();
- method public CharSequence getShortLabel();
- method public android.os.UserHandle? getUserHandle();
- method public boolean hasKeyFieldsOnly();
- method public boolean isCached();
- method public boolean isDeclaredInManifest();
- method public boolean isDynamic();
- method public boolean isEnabled();
- method public boolean isExcludedFromSurfaces(int);
- method public boolean isImmutable();
- method public boolean isPinned();
- method @RequiresApi(25) public android.content.pm.ShortcutInfo! toShortcutInfo();
- field public static final int SURFACE_LAUNCHER = 1; // 0x1
- }
-
- public static class ShortcutInfoCompat.Builder {
- ctor public ShortcutInfoCompat.Builder(android.content.Context, String);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String, String, java.util.List<java.lang.String!>);
- method public androidx.core.content.pm.ShortcutInfoCompat build();
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setAlwaysBadged();
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setCategories(java.util.Set<java.lang.String!>);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(CharSequence);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExcludedFromSurfaces(int);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExtras(android.os.PersistableBundle);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIcon(androidx.core.graphics.drawable.IconCompat!);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent![]);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIsConversation();
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLabel(CharSequence);
- method @Deprecated public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived();
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived(boolean);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPerson(androidx.core.app.Person);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPersons(androidx.core.app.Person![]);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setRank(int);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setShortLabel(CharSequence);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setSliceUri(android.net.Uri);
- }
-
- public class ShortcutManagerCompat {
- method public static boolean addDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
- method public static android.content.Intent createShortcutResultIntent(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
- method public static void disableShortcuts(android.content.Context, java.util.List<java.lang.String!>, CharSequence?);
- method public static void enableShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
- method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getDynamicShortcuts(android.content.Context);
- method public static int getIconMaxHeight(android.content.Context);
- method public static int getIconMaxWidth(android.content.Context);
- method public static int getMaxShortcutCountPerActivity(android.content.Context);
- method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getShortcuts(android.content.Context, int);
- method public static boolean isRateLimitingActive(android.content.Context);
- method public static boolean isRequestPinShortcutSupported(android.content.Context);
- method public static boolean pushDynamicShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
- method public static void removeAllDynamicShortcuts(android.content.Context);
- method public static void removeDynamicShortcuts(android.content.Context, java.util.List<java.lang.String!>);
- method public static void removeLongLivedShortcuts(android.content.Context, java.util.List<java.lang.String!>);
- method public static void reportShortcutUsed(android.content.Context, String);
- method public static boolean requestPinShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat, android.content.IntentSender?);
- method public static boolean setDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
- method public static boolean updateShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
- field public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
- field public static final int FLAG_MATCH_CACHED = 8; // 0x8
- field public static final int FLAG_MATCH_DYNAMIC = 2; // 0x2
- field public static final int FLAG_MATCH_MANIFEST = 1; // 0x1
- field public static final int FLAG_MATCH_PINNED = 4; // 0x4
- }
-
-}
-
-package androidx.core.content.res {
-
- public final class ConfigurationHelper {
- method public static int getDensityDpi(android.content.res.Resources);
- }
-
- public final class ResourcesCompat {
- method public static void clearCachesForTheme(android.content.res.Resources.Theme);
- method public static android.graphics.Typeface? getCachedFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
- method @ColorInt public static int getColor(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
- method public static android.content.res.ColorStateList? getColorStateList(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
- method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.Resources, @DrawableRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
- method public static android.graphics.drawable.Drawable? getDrawableForDensity(android.content.res.Resources, @DrawableRes int, int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
- method public static float getFloat(android.content.res.Resources, @DimenRes int);
- method public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
- method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
- field @AnyRes public static final int ID_NULL = 0; // 0x0
- }
-
- public abstract static class ResourcesCompat.FontCallback {
- ctor public ResourcesCompat.FontCallback();
- method public abstract void onFontRetrievalFailed(int);
- method public abstract void onFontRetrieved(android.graphics.Typeface);
- }
-
- public static final class ResourcesCompat.ThemeCompat {
- method public static void rebase(android.content.res.Resources.Theme);
- }
-
-}
-
-package androidx.core.database {
-
- public final class CursorWindowCompat {
- method public static android.database.CursorWindow create(String?, long);
- }
-
- @Deprecated public final class DatabaseUtilsCompat {
- method @Deprecated public static String![]! appendSelectionArgs(String![]!, String![]!);
- method @Deprecated public static String! concatenateWhere(String!, String!);
- }
-
-}
-
-package androidx.core.database.sqlite {
-
- public final class SQLiteCursorCompat {
- method public static void setFillWindowForwardOnly(android.database.sqlite.SQLiteCursor, boolean);
- }
-
-}
-
-package androidx.core.graphics {
-
- public final class BitmapCompat {
- method public static android.graphics.Bitmap createScaledBitmap(android.graphics.Bitmap, int, int, android.graphics.Rect?, boolean);
- method public static int getAllocationByteCount(android.graphics.Bitmap);
- method public static boolean hasMipMap(android.graphics.Bitmap);
- method public static void setHasMipMap(android.graphics.Bitmap, boolean);
- }
-
- public class BlendModeColorFilterCompat {
- method public static android.graphics.ColorFilter? createBlendModeColorFilterCompat(int, androidx.core.graphics.BlendModeCompat);
- }
-
- public enum BlendModeCompat {
- enum_constant public static final androidx.core.graphics.BlendModeCompat CLEAR;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_BURN;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_DODGE;
- enum_constant public static final androidx.core.graphics.BlendModeCompat DARKEN;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat DIFFERENCE;
- enum_constant public static final androidx.core.graphics.BlendModeCompat DST;
- enum_constant public static final androidx.core.graphics.BlendModeCompat DST_ATOP;
- enum_constant public static final androidx.core.graphics.BlendModeCompat DST_IN;
- enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OUT;
- enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OVER;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat EXCLUSION;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HARD_LIGHT;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HUE;
- enum_constant public static final androidx.core.graphics.BlendModeCompat LIGHTEN;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat LUMINOSITY;
- enum_constant public static final androidx.core.graphics.BlendModeCompat MODULATE;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat MULTIPLY;
- enum_constant public static final androidx.core.graphics.BlendModeCompat OVERLAY;
- enum_constant public static final androidx.core.graphics.BlendModeCompat PLUS;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SATURATION;
- enum_constant public static final androidx.core.graphics.BlendModeCompat SCREEN;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SOFT_LIGHT;
- enum_constant public static final androidx.core.graphics.BlendModeCompat SRC;
- enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_ATOP;
- enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_IN;
- enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OUT;
- enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OVER;
- enum_constant public static final androidx.core.graphics.BlendModeCompat XOR;
- }
-
- public final class ColorUtils {
- method @ColorInt public static int HSLToColor(float[]);
- method @ColorInt public static int LABToColor(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double);
- method public static void LABToXYZ(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double, double[]);
- method public static void RGBToHSL(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, float[]);
- method public static void RGBToLAB(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
- method public static void RGBToXYZ(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
- method @ColorInt public static int XYZToColor(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double);
- method public static void XYZToLAB(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double, double[]);
- method @ColorInt public static int blendARGB(@ColorInt int, @ColorInt int, @FloatRange(from=0.0, to=1.0) float);
- method public static void blendHSL(float[], float[], @FloatRange(from=0.0, to=1.0) float, float[]);
- method public static void blendLAB(double[], double[], @FloatRange(from=0.0, to=1.0) double, double[]);
- method public static double calculateContrast(@ColorInt int, @ColorInt int);
- method @FloatRange(from=0.0, to=1.0) public static double calculateLuminance(@ColorInt int);
- method public static int calculateMinimumAlpha(@ColorInt int, @ColorInt int, float);
- method public static void colorToHSL(@ColorInt int, float[]);
- method public static void colorToLAB(@ColorInt int, double[]);
- method public static void colorToXYZ(@ColorInt int, double[]);
- method public static int compositeColors(@ColorInt int, @ColorInt int);
- method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
- method public static double distanceEuclidean(double[], double[]);
- method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
- }
-
- public final class Insets {
- method public static androidx.core.graphics.Insets add(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
- method public static androidx.core.graphics.Insets max(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
- method public static androidx.core.graphics.Insets min(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
- method public static androidx.core.graphics.Insets of(int, int, int, int);
- method public static androidx.core.graphics.Insets of(android.graphics.Rect);
- method public static androidx.core.graphics.Insets subtract(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
- method @RequiresApi(api=29) public static androidx.core.graphics.Insets toCompatInsets(android.graphics.Insets);
- method @RequiresApi(29) public android.graphics.Insets toPlatformInsets();
- field public static final androidx.core.graphics.Insets NONE;
- field public final int bottom;
- field public final int left;
- field public final int right;
- field public final int top;
- }
-
- public final class PaintCompat {
- method public static boolean hasGlyph(android.graphics.Paint, String);
- method public static boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat?);
- }
-
- public final class PathSegment {
- ctor public PathSegment(android.graphics.PointF, float, android.graphics.PointF, float);
- method public android.graphics.PointF getEnd();
- method public float getEndFraction();
- method public android.graphics.PointF getStart();
- method public float getStartFraction();
- }
-
- public final class PathUtils {
- method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path);
- method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path, @FloatRange(from=0) float);
- }
-
- public class TypefaceCompat {
- method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, int);
- }
-
-}
-
-package androidx.core.graphics.drawable {
-
- public final class DrawableCompat {
- method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
- method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
- method public static void clearColorFilter(android.graphics.drawable.Drawable);
- method public static int getAlpha(android.graphics.drawable.Drawable);
- method public static android.graphics.ColorFilter? getColorFilter(android.graphics.drawable.Drawable);
- method public static int getLayoutDirection(android.graphics.drawable.Drawable);
- method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
- method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
- method @Deprecated public static void jumpToCurrentState(android.graphics.drawable.Drawable);
- method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
- method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
- method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
- method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
- method public static void setTint(android.graphics.drawable.Drawable, @ColorInt int);
- method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList?);
- method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode);
- method public static <T extends android.graphics.drawable.Drawable> T! unwrap(android.graphics.drawable.Drawable);
- method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.Drawable);
- }
-
- public class IconCompat implements androidx.versionedparcelable.VersionedParcelable {
- method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
- method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
- method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
- method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(String);
- method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(android.net.Uri);
- method public static androidx.core.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
- method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(String);
- method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
- method public static androidx.core.graphics.drawable.IconCompat createWithData(byte[], int, int);
- method public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.Context, @DrawableRes int);
- method @DrawableRes public int getResId();
- method public String getResPackage();
- method public int getType();
- method public android.net.Uri getUri();
- method public android.graphics.drawable.Drawable? loadDrawable(android.content.Context);
- method public void onPostParceling();
- method public void onPreParceling(boolean);
- method public androidx.core.graphics.drawable.IconCompat setTint(@ColorInt int);
- method public androidx.core.graphics.drawable.IconCompat setTintList(android.content.res.ColorStateList?);
- method public androidx.core.graphics.drawable.IconCompat setTintMode(android.graphics.PorterDuff.Mode?);
- method public android.os.Bundle toBundle();
- method @Deprecated @RequiresApi(23) public android.graphics.drawable.Icon toIcon();
- method @RequiresApi(23) public android.graphics.drawable.Icon toIcon(android.content.Context?);
- field public static final int TYPE_ADAPTIVE_BITMAP = 5; // 0x5
- field public static final int TYPE_BITMAP = 1; // 0x1
- field public static final int TYPE_DATA = 3; // 0x3
- field public static final int TYPE_RESOURCE = 2; // 0x2
- field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
- field public static final int TYPE_URI = 4; // 0x4
- field public static final int TYPE_URI_ADAPTIVE_BITMAP = 6; // 0x6
- }
-
- public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
- method public void draw(android.graphics.Canvas);
- method public final android.graphics.Bitmap? getBitmap();
- method public float getCornerRadius();
- method public int getGravity();
- method public int getOpacity();
- method public final android.graphics.Paint getPaint();
- method public boolean hasAntiAlias();
- method public boolean hasMipMap();
- method public boolean isCircular();
- method public void setAlpha(int);
- method public void setAntiAlias(boolean);
- method public void setCircular(boolean);
- method public void setColorFilter(android.graphics.ColorFilter!);
- method public void setCornerRadius(float);
- method public void setDither(boolean);
- method public void setGravity(int);
- method public void setMipMap(boolean);
- method public void setTargetDensity(android.graphics.Canvas);
- method public void setTargetDensity(android.util.DisplayMetrics);
- method public void setTargetDensity(int);
- }
-
- public final class RoundedBitmapDrawableFactory {
- method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
- method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
- method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
- }
-
-}
-
-package androidx.core.hardware.display {
-
- public final class DisplayManagerCompat {
- method public android.view.Display? getDisplay(int);
- method public android.view.Display![] getDisplays();
- method public android.view.Display![] getDisplays(String?);
- method public static androidx.core.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
- field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
- }
-
-}
-
-package androidx.core.hardware.fingerprint {
-
- @Deprecated public class FingerprintManagerCompat {
- method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public void authenticate(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject?, int, androidx.core.os.CancellationSignal?, androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler?);
- method @Deprecated public static androidx.core.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
- method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
- method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
- }
-
- @Deprecated public abstract static class FingerprintManagerCompat.AuthenticationCallback {
- ctor @Deprecated public FingerprintManagerCompat.AuthenticationCallback();
- method @Deprecated public void onAuthenticationError(int, CharSequence!);
- method @Deprecated public void onAuthenticationFailed();
- method @Deprecated public void onAuthenticationHelp(int, CharSequence!);
- method @Deprecated public void onAuthenticationSucceeded(androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult!);
- }
-
- @Deprecated public static final class FingerprintManagerCompat.AuthenticationResult {
- ctor @Deprecated public FingerprintManagerCompat.AuthenticationResult(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject!);
- method @Deprecated public androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject! getCryptoObject();
- }
-
- @Deprecated public static class FingerprintManagerCompat.CryptoObject {
- ctor @Deprecated public FingerprintManagerCompat.CryptoObject(java.security.Signature);
- ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
- ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
- method @Deprecated public javax.crypto.Cipher? getCipher();
- method @Deprecated public javax.crypto.Mac? getMac();
- method @Deprecated public java.security.Signature? getSignature();
- }
-
-}
-
-package androidx.core.location {
-
- public abstract class GnssStatusCompat {
- method @FloatRange(from=0, to=360) public abstract float getAzimuthDegrees(@IntRange(from=0) int);
- method @FloatRange(from=0, to=63) public abstract float getBasebandCn0DbHz(@IntRange(from=0) int);
- method @FloatRange(from=0) public abstract float getCarrierFrequencyHz(@IntRange(from=0) int);
- method @FloatRange(from=0, to=63) public abstract float getCn0DbHz(@IntRange(from=0) int);
- method public abstract int getConstellationType(@IntRange(from=0) int);
- method @FloatRange(from=0xffffffa6, to=90) public abstract float getElevationDegrees(@IntRange(from=0) int);
- method @IntRange(from=0) public abstract int getSatelliteCount();
- method @IntRange(from=1, to=200) public abstract int getSvid(@IntRange(from=0) int);
- method public abstract boolean hasAlmanacData(@IntRange(from=0) int);
- method public abstract boolean hasBasebandCn0DbHz(@IntRange(from=0) int);
- method public abstract boolean hasCarrierFrequencyHz(@IntRange(from=0) int);
- method public abstract boolean hasEphemerisData(@IntRange(from=0) int);
- method public abstract boolean usedInFix(@IntRange(from=0) int);
- method @RequiresApi(android.os.Build.VERSION_CODES.N) public static androidx.core.location.GnssStatusCompat wrap(android.location.GnssStatus);
- method public static androidx.core.location.GnssStatusCompat wrap(android.location.GpsStatus);
- field public static final int CONSTELLATION_BEIDOU = 5; // 0x5
- field public static final int CONSTELLATION_GALILEO = 6; // 0x6
- field public static final int CONSTELLATION_GLONASS = 3; // 0x3
- field public static final int CONSTELLATION_GPS = 1; // 0x1
- field public static final int CONSTELLATION_IRNSS = 7; // 0x7
- field public static final int CONSTELLATION_QZSS = 4; // 0x4
- field public static final int CONSTELLATION_SBAS = 2; // 0x2
- field public static final int CONSTELLATION_UNKNOWN = 0; // 0x0
- }
-
- public abstract static class GnssStatusCompat.Callback {
- ctor public GnssStatusCompat.Callback();
- method public void onFirstFix(@IntRange(from=0) int);
- method public void onSatelliteStatusChanged(androidx.core.location.GnssStatusCompat);
- method public void onStarted();
- method public void onStopped();
- }
-
- public final class LocationCompat {
- method public static float getBearingAccuracyDegrees(android.location.Location);
- method public static long getElapsedRealtimeMillis(android.location.Location);
- method public static long getElapsedRealtimeNanos(android.location.Location);
- method public static float getSpeedAccuracyMetersPerSecond(android.location.Location);
- method public static float getVerticalAccuracyMeters(android.location.Location);
- method public static boolean hasBearingAccuracy(android.location.Location);
- method public static boolean hasSpeedAccuracy(android.location.Location);
- method public static boolean hasVerticalAccuracy(android.location.Location);
- method public static boolean isMock(android.location.Location);
- method public static void setBearingAccuracyDegrees(android.location.Location, float);
- method public static void setMock(android.location.Location, boolean);
- method public static void setSpeedAccuracyMetersPerSecond(android.location.Location, float);
- method public static void setVerticalAccuracyMeters(android.location.Location, float);
- field public static final String EXTRA_BEARING_ACCURACY = "bearingAccuracy";
- field public static final String EXTRA_IS_MOCK = "mockLocation";
- field public static final String EXTRA_SPEED_ACCURACY = "speedAccuracy";
- field public static final String EXTRA_VERTICAL_ACCURACY = "verticalAccuracy";
- }
-
- public interface LocationListenerCompat extends android.location.LocationListener {
- method public default void onStatusChanged(String, int, android.os.Bundle?);
- }
-
- public final class LocationManagerCompat {
- method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void getCurrentLocation(android.location.LocationManager, String, androidx.core.os.CancellationSignal?, java.util.concurrent.Executor, androidx.core.util.Consumer<android.location.Location!>);
- method public static String? getGnssHardwareModelName(android.location.LocationManager);
- method public static int getGnssYearOfHardware(android.location.LocationManager);
- method public static boolean hasProvider(android.location.LocationManager, String);
- method public static boolean isLocationEnabled(android.location.LocationManager);
- method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback, android.os.Handler);
- method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, java.util.concurrent.Executor, androidx.core.location.GnssStatusCompat.Callback);
- method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void removeUpdates(android.location.LocationManager, androidx.core.location.LocationListenerCompat);
- method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, java.util.concurrent.Executor, androidx.core.location.LocationListenerCompat);
- method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, androidx.core.location.LocationListenerCompat, android.os.Looper);
- method public static void unregisterGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback);
- }
-
- public final class LocationRequestCompat {
- method @IntRange(from=1) public long getDurationMillis();
- method @IntRange(from=0) public long getIntervalMillis();
- method @IntRange(from=0) public long getMaxUpdateDelayMillis();
- method @IntRange(from=1, to=java.lang.Integer.MAX_VALUE) public int getMaxUpdates();
- method @FloatRange(from=0, to=java.lang.Float.MAX_VALUE) public float getMinUpdateDistanceMeters();
- method @IntRange(from=0) public long getMinUpdateIntervalMillis();
- method public int getQuality();
- method @RequiresApi(31) public android.location.LocationRequest toLocationRequest();
- method @RequiresApi(19) public android.location.LocationRequest? toLocationRequest(String);
- field public static final long PASSIVE_INTERVAL = 9223372036854775807L; // 0x7fffffffffffffffL
- field public static final int QUALITY_BALANCED_POWER_ACCURACY = 102; // 0x66
- field public static final int QUALITY_HIGH_ACCURACY = 100; // 0x64
- field public static final int QUALITY_LOW_POWER = 104; // 0x68
- }
-
- public static final class LocationRequestCompat.Builder {
- ctor public LocationRequestCompat.Builder(long);
- ctor public LocationRequestCompat.Builder(androidx.core.location.LocationRequestCompat);
- method public androidx.core.location.LocationRequestCompat build();
- method public androidx.core.location.LocationRequestCompat.Builder clearMinUpdateIntervalMillis();
- method public androidx.core.location.LocationRequestCompat.Builder setDurationMillis(@IntRange(from=1) long);
- method public androidx.core.location.LocationRequestCompat.Builder setIntervalMillis(@IntRange(from=0) long);
- method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdateDelayMillis(@IntRange(from=0) long);
- method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdates(@IntRange(from=1, to=java.lang.Integer.MAX_VALUE) int);
- method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateDistanceMeters(@FloatRange(from=0, to=java.lang.Float.MAX_VALUE) float);
- method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateIntervalMillis(@IntRange(from=0) long);
- method public androidx.core.location.LocationRequestCompat.Builder setQuality(int);
- }
-
-}
-
-package androidx.core.math {
-
- public class MathUtils {
- method public static int addExact(int, int);
- method public static long addExact(long, long);
- method public static float clamp(float, float, float);
- method public static double clamp(double, double, double);
- method public static int clamp(int, int, int);
- method public static long clamp(long, long, long);
- method public static int decrementExact(int);
- method public static long decrementExact(long);
- method public static int incrementExact(int);
- method public static long incrementExact(long);
- method public static int multiplyExact(int, int);
- method public static long multiplyExact(long, long);
- method public static int negateExact(int);
- method public static long negateExact(long);
- method public static int subtractExact(int, int);
- method public static long subtractExact(long, long);
- method public static int toIntExact(long);
- }
-
-}
-
-package androidx.core.net {
-
- public final class ConnectivityManagerCompat {
- method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static android.net.NetworkInfo? getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
- method public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
- method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
- field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
- field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
- field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
- }
-
- public final class MailTo {
- method public String? getBcc();
- method public String? getBody();
- method public String? getCc();
- method public java.util.Map<java.lang.String!,java.lang.String!>? getHeaders();
- method public String? getSubject();
- method public String? getTo();
- method public static boolean isMailTo(String?);
- method public static boolean isMailTo(android.net.Uri?);
- method public static androidx.core.net.MailTo parse(String) throws androidx.core.net.ParseException;
- method public static androidx.core.net.MailTo parse(android.net.Uri) throws androidx.core.net.ParseException;
- field public static final String MAILTO_SCHEME = "mailto:";
- }
-
- public class ParseException extends java.lang.RuntimeException {
- field public final String response;
- }
-
- public final class TrafficStatsCompat {
- method @Deprecated public static void clearThreadStatsTag();
- method @Deprecated public static int getThreadStatsTag();
- method @Deprecated public static void incrementOperationCount(int);
- method @Deprecated public static void incrementOperationCount(int, int);
- method @Deprecated public static void setThreadStatsTag(int);
- method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
- method @Deprecated public static void tagSocket(java.net.Socket!) throws java.net.SocketException;
- method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
- method @Deprecated public static void untagSocket(java.net.Socket!) throws java.net.SocketException;
- }
-
- public final class UriCompat {
- method public static String toSafeString(android.net.Uri);
- }
-
-}
-
-package androidx.core.os {
-
- public class BuildCompat {
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N) public static boolean isAtLeastN();
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N_MR1) public static boolean isAtLeastNMR1();
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O) public static boolean isAtLeastO();
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O_MR1) public static boolean isAtLeastOMR1();
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.P) public static boolean isAtLeastP();
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.Q) public static boolean isAtLeastQ();
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.R) public static boolean isAtLeastR();
- method @Deprecated @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
- }
-
- public final class CancellationSignal {
- ctor public CancellationSignal();
- method public void cancel();
- method public Object? getCancellationSignalObject();
- method public boolean isCanceled();
- method public void setOnCancelListener(androidx.core.os.CancellationSignal.OnCancelListener?);
- method public void throwIfCanceled();
- }
-
- public static interface CancellationSignal.OnCancelListener {
- method public void onCancel();
- }
-
- public final class ConfigurationCompat {
- method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
- }
-
- public final class EnvironmentCompat {
- method public static String getStorageState(java.io.File);
- field public static final String MEDIA_UNKNOWN = "unknown";
- }
-
- public final class ExecutorCompat {
- method public static java.util.concurrent.Executor create(android.os.Handler);
- }
-
- public final class HandlerCompat {
- method public static android.os.Handler createAsync(android.os.Looper);
- method public static android.os.Handler createAsync(android.os.Looper, android.os.Handler.Callback);
- method @RequiresApi(16) public static boolean hasCallbacks(android.os.Handler, Runnable);
- method public static boolean postDelayed(android.os.Handler, Runnable, Object?, long);
- }
-
- public final class LocaleListCompat {
- method public static androidx.core.os.LocaleListCompat create(java.util.Locale!...);
- method public static androidx.core.os.LocaleListCompat forLanguageTags(String?);
- method public java.util.Locale? get(int);
- method @Size(min=1) public static androidx.core.os.LocaleListCompat getAdjustedDefault();
- method @Size(min=1) public static androidx.core.os.LocaleListCompat getDefault();
- method public static androidx.core.os.LocaleListCompat getEmptyLocaleList();
- method public java.util.Locale? getFirstMatch(String![]);
- method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale?);
- method public boolean isEmpty();
- method @IntRange(from=0) public int size();
- method public String toLanguageTags();
- method public Object? unwrap();
- method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
- method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
- }
-
- public final class MessageCompat {
- method public static boolean isAsynchronous(android.os.Message);
- method public static void setAsynchronous(android.os.Message, boolean);
- }
-
- public class OperationCanceledException extends java.lang.RuntimeException {
- ctor public OperationCanceledException();
- ctor public OperationCanceledException(String?);
- }
-
- public final class ParcelCompat {
- method public static boolean readBoolean(android.os.Parcel);
- method public static void writeBoolean(android.os.Parcel, boolean);
- }
-
- @Deprecated public final class ParcelableCompat {
- method @Deprecated public static <T> android.os.Parcelable.Creator<T!>! newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T!>!);
- }
-
- @Deprecated public interface ParcelableCompatCreatorCallbacks<T> {
- method @Deprecated public T! createFromParcel(android.os.Parcel!, ClassLoader!);
- method @Deprecated public T![]! newArray(int);
- }
-
- public final class ProcessCompat {
- method public static boolean isApplicationUid(int);
- }
-
- @Deprecated public final class TraceCompat {
- method @Deprecated public static void beginAsyncSection(String, int);
- method @Deprecated public static void beginSection(String);
- method @Deprecated public static void endAsyncSection(String, int);
- method @Deprecated public static void endSection();
- method @Deprecated public static boolean isEnabled();
- method @Deprecated public static void setCounter(String, int);
- }
-
- @RequiresApi(17) public class UserHandleCompat {
- method public static android.os.UserHandle getUserHandleForUid(int);
- }
-
- public class UserManagerCompat {
- method public static boolean isUserUnlocked(android.content.Context);
- }
-
-}
-
-package androidx.core.provider {
-
- public final class DocumentsContractCompat {
- method public static android.net.Uri? buildChildDocumentsUri(String, String?);
- method public static android.net.Uri? buildChildDocumentsUriUsingTree(android.net.Uri, String);
- method public static android.net.Uri? buildDocumentUri(String, String);
- method public static android.net.Uri? buildDocumentUriUsingTree(android.net.Uri, String);
- method public static android.net.Uri? buildTreeDocumentUri(String, String);
- method public static android.net.Uri? createDocument(android.content.ContentResolver, android.net.Uri, String, String) throws java.io.FileNotFoundException;
- method public static String? getDocumentId(android.net.Uri);
- method public static String? getTreeDocumentId(android.net.Uri);
- method public static boolean isDocumentUri(android.content.Context, android.net.Uri?);
- method public static boolean isTreeUri(android.net.Uri);
- method public static boolean removeDocument(android.content.ContentResolver, android.net.Uri, android.net.Uri) throws java.io.FileNotFoundException;
- method public static android.net.Uri? renameDocument(android.content.ContentResolver, android.net.Uri, String) throws java.io.FileNotFoundException;
- }
-
- public static final class DocumentsContractCompat.DocumentCompat {
- field public static final int FLAG_VIRTUAL_DOCUMENT = 512; // 0x200
- }
-
- public final class FontRequest {
- ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
- ctor public FontRequest(String, String, String, @ArrayRes int);
- method public java.util.List<java.util.List<byte[]!>!>? getCertificates();
- method @ArrayRes public int getCertificatesArrayResId();
- method public String getProviderAuthority();
- method public String getProviderPackage();
- method public String getQuery();
- }
-
- public class FontsContractCompat {
- method public static android.graphics.Typeface? buildTypeface(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![]);
- method public static androidx.core.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
- method public static void requestFont(android.content.Context, androidx.core.provider.FontRequest, androidx.core.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
- }
-
- public static final class FontsContractCompat.Columns implements android.provider.BaseColumns {
- ctor public FontsContractCompat.Columns();
- field public static final String FILE_ID = "file_id";
- field public static final String ITALIC = "font_italic";
- field public static final String RESULT_CODE = "result_code";
- field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
- field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
- field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
- field public static final int RESULT_CODE_OK = 0; // 0x0
- field public static final String TTC_INDEX = "font_ttc_index";
- field public static final String VARIATION_SETTINGS = "font_variation_settings";
- field public static final String WEIGHT = "font_weight";
- }
-
- public static class FontsContractCompat.FontFamilyResult {
- method public androidx.core.provider.FontsContractCompat.FontInfo![]! getFonts();
- method public int getStatusCode();
- field public static final int STATUS_OK = 0; // 0x0
- field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
- field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
- }
-
- public static class FontsContractCompat.FontInfo {
- method public int getResultCode();
- method @IntRange(from=0) public int getTtcIndex();
- method public android.net.Uri getUri();
- method @IntRange(from=1, to=1000) public int getWeight();
- method public boolean isItalic();
- }
-
- public static class FontsContractCompat.FontRequestCallback {
- ctor public FontsContractCompat.FontRequestCallback();
- method public void onTypefaceRequestFailed(int);
- method public void onTypefaceRetrieved(android.graphics.Typeface!);
- field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
- field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
- field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
- field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
- field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
- field public static final int FAIL_REASON_SECURITY_VIOLATION = -4; // 0xfffffffc
- field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
- }
-
-}
-
-package androidx.core.telephony {
-
- @RequiresApi(22) public class SubscriptionManagerCompat {
- method public static int getSlotIndex(int);
- }
-
- public class TelephonyManagerCompat {
- method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static String? getImei(android.telephony.TelephonyManager);
- method public static int getSubscriptionId(android.telephony.TelephonyManager);
- }
-
-}
-
-package androidx.core.telephony.mbms {
-
- public final class MbmsHelper {
- method public static CharSequence? getBestNameForService(android.content.Context, android.telephony.mbms.ServiceInfo);
- }
-
-}
-
-package androidx.core.text {
-
- public final class BidiFormatter {
- method public static androidx.core.text.BidiFormatter! getInstance();
- method public static androidx.core.text.BidiFormatter! getInstance(boolean);
- method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
- method public boolean getStereoReset();
- method public boolean isRtl(String!);
- method public boolean isRtl(CharSequence!);
- method public boolean isRtlContext();
- method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
- method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
- method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
- method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
- method public String! unicodeWrap(String!, boolean);
- method public CharSequence! unicodeWrap(CharSequence!, boolean);
- method public String! unicodeWrap(String!);
- method public CharSequence! unicodeWrap(CharSequence!);
- }
-
- public static final class BidiFormatter.Builder {
- ctor public BidiFormatter.Builder();
- ctor public BidiFormatter.Builder(boolean);
- ctor public BidiFormatter.Builder(java.util.Locale!);
- method public androidx.core.text.BidiFormatter! build();
- method public androidx.core.text.BidiFormatter.Builder! setTextDirectionHeuristic(androidx.core.text.TextDirectionHeuristicCompat!);
- method public androidx.core.text.BidiFormatter.Builder! stereoReset(boolean);
- }
-
- public final class HtmlCompat {
- method public static android.text.Spanned fromHtml(String, int);
- method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter?, android.text.Html.TagHandler?);
- method public static String toHtml(android.text.Spanned, int);
- field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
- field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
- field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
- field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; // 0x20
- field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; // 0x10
- field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; // 0x2
- field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; // 0x8
- field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; // 0x4
- field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; // 0x1
- field public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; // 0x0
- field public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; // 0x1
- }
-
- public final class ICUCompat {
- method public static String? maximizeAndGetScript(java.util.Locale);
- }
-
- public class PrecomputedTextCompat implements android.text.Spannable {
- method public char charAt(int);
- method public static androidx.core.text.PrecomputedTextCompat! create(CharSequence, androidx.core.text.PrecomputedTextCompat.Params);
- method @IntRange(from=0) public int getParagraphCount();
- method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
- method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
- method public androidx.core.text.PrecomputedTextCompat.Params getParams();
- method public int getSpanEnd(Object!);
- method public int getSpanFlags(Object!);
- method public int getSpanStart(Object!);
- method public <T> T![]! getSpans(int, int, Class<T!>!);
- method @UiThread public static java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>! getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor?);
- method public int length();
- method public int nextSpanTransition(int, int, Class!);
- method public void removeSpan(Object!);
- method public void setSpan(Object!, int, int, int);
- method public CharSequence! subSequence(int, int);
- }
-
- public static final class PrecomputedTextCompat.Params {
- ctor @RequiresApi(28) public PrecomputedTextCompat.Params(android.text.PrecomputedText.Params);
- method @RequiresApi(23) public int getBreakStrategy();
- method @RequiresApi(23) public int getHyphenationFrequency();
- method @RequiresApi(18) public android.text.TextDirectionHeuristic? getTextDirection();
- method public android.text.TextPaint getTextPaint();
- }
-
- public static class PrecomputedTextCompat.Params.Builder {
- ctor public PrecomputedTextCompat.Params.Builder(android.text.TextPaint);
- method public androidx.core.text.PrecomputedTextCompat.Params build();
- method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setBreakStrategy(int);
- method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setHyphenationFrequency(int);
- method @RequiresApi(18) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setTextDirection(android.text.TextDirectionHeuristic);
- }
-
- public interface TextDirectionHeuristicCompat {
- method public boolean isRtl(char[]!, int, int);
- method public boolean isRtl(CharSequence!, int, int);
- }
-
- public final class TextDirectionHeuristicsCompat {
- field public static final androidx.core.text.TextDirectionHeuristicCompat! ANYRTL_LTR;
- field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_LTR;
- field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_RTL;
- field public static final androidx.core.text.TextDirectionHeuristicCompat! LOCALE;
- field public static final androidx.core.text.TextDirectionHeuristicCompat! LTR;
- field public static final androidx.core.text.TextDirectionHeuristicCompat! RTL;
- }
-
- public final class TextUtilsCompat {
- method public static int getLayoutDirectionFromLocale(java.util.Locale?);
- method public static String htmlEncode(String);
- }
-
-}
-
-package androidx.core.text.util {
-
- public final class LinkifyCompat {
- method public static boolean addLinks(android.text.Spannable, int);
- method public static boolean addLinks(android.widget.TextView, int);
- method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
- method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- }
-
-}
-
-package androidx.core.util {
-
- public class AtomicFile {
- ctor public AtomicFile(java.io.File);
- method public void delete();
- method public void failWrite(java.io.FileOutputStream?);
- method public void finishWrite(java.io.FileOutputStream?);
- method public java.io.File getBaseFile();
- method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
- method public byte[] readFully() throws java.io.IOException;
- method public java.io.FileOutputStream startWrite() throws java.io.IOException;
- }
-
- public interface Consumer<T> {
- method public void accept(T!);
- }
-
- public class ObjectsCompat {
- method public static boolean equals(Object?, Object?);
- method public static int hash(java.lang.Object!...);
- method public static int hashCode(Object?);
- method public static <T> T requireNonNull(T?);
- method public static <T> T requireNonNull(T?, String);
- method public static String? toString(Object?, String?);
- }
-
- public class Pair<F, S> {
- ctor public Pair(F!, S!);
- method public static <A, B> androidx.core.util.Pair<A!,B!> create(A!, B!);
- field public final F! first;
- field public final S! second;
- }
-
- public final class PatternsCompat {
- field public static final java.util.regex.Pattern DOMAIN_NAME;
- field public static final java.util.regex.Pattern EMAIL_ADDRESS;
- field public static final java.util.regex.Pattern IP_ADDRESS;
- field public static final java.util.regex.Pattern WEB_URL;
- }
-
- public final class Pools {
- }
-
- public static interface Pools.Pool<T> {
- method public T? acquire();
- method public boolean release(T);
- }
-
- public static class Pools.SimplePool<T> implements androidx.core.util.Pools.Pool<T> {
- ctor public Pools.SimplePool(int);
- method public T! acquire();
- method public boolean release(T);
- }
-
- public static class Pools.SynchronizedPool<T> extends androidx.core.util.Pools.SimplePool<T> {
- ctor public Pools.SynchronizedPool(int);
- }
-
- public interface Predicate<T> {
- method public boolean test(T!);
- }
-
- public final class SizeFCompat {
- ctor public SizeFCompat(float, float);
- method public float getHeight();
- method public float getWidth();
- method @RequiresApi(21) public android.util.SizeF toSizeF();
- method @RequiresApi(21) public static androidx.core.util.SizeFCompat toSizeFCompat(android.util.SizeF);
- }
-
- public interface Supplier<T> {
- method public T! get();
- }
-
-}
-
-package androidx.core.view {
-
- public class AccessibilityDelegateCompat {
- ctor public AccessibilityDelegateCompat();
- method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
- method public androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
- method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
- method public void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
- method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
- method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
- method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
- method public void sendAccessibilityEvent(android.view.View, int);
- method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
- }
-
- public abstract class ActionProvider {
- ctor public ActionProvider(android.content.Context);
- method public android.content.Context getContext();
- method public boolean hasSubMenu();
- method public boolean isVisible();
- method public abstract android.view.View onCreateActionView();
- method public android.view.View onCreateActionView(android.view.MenuItem);
- method public boolean onPerformDefaultAction();
- method public void onPrepareSubMenu(android.view.SubMenu);
- method public boolean overridesItemVisibility();
- method public void refreshVisibility();
- method public void setVisibilityListener(androidx.core.view.ActionProvider.VisibilityListener?);
- }
-
- public static interface ActionProvider.VisibilityListener {
- method public void onActionProviderVisibilityChanged(boolean);
- }
-
- public final class ContentInfoCompat {
- method public android.content.ClipData getClip();
- method public android.os.Bundle? getExtras();
- method public int getFlags();
- method public android.net.Uri? getLinkUri();
- method public int getSource();
- method public android.util.Pair<androidx.core.view.ContentInfoCompat!,androidx.core.view.ContentInfoCompat!> partition(androidx.core.util.Predicate<android.content.ClipData.Item!>);
- method @RequiresApi(31) public static android.util.Pair<android.view.ContentInfo!,android.view.ContentInfo!> partition(android.view.ContentInfo, java.util.function.Predicate<android.content.ClipData.Item!>);
- method @RequiresApi(31) public android.view.ContentInfo toContentInfo();
- method @RequiresApi(31) public static androidx.core.view.ContentInfoCompat toContentInfoCompat(android.view.ContentInfo);
- field public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1; // 0x1
- field public static final int SOURCE_APP = 0; // 0x0
- field public static final int SOURCE_AUTOFILL = 4; // 0x4
- field public static final int SOURCE_CLIPBOARD = 1; // 0x1
- field public static final int SOURCE_DRAG_AND_DROP = 3; // 0x3
- field public static final int SOURCE_INPUT_METHOD = 2; // 0x2
- field public static final int SOURCE_PROCESS_TEXT = 5; // 0x5
- }
-
- public static final class ContentInfoCompat.Builder {
- ctor public ContentInfoCompat.Builder(androidx.core.view.ContentInfoCompat);
- ctor public ContentInfoCompat.Builder(android.content.ClipData, int);
- method public androidx.core.view.ContentInfoCompat build();
- method public androidx.core.view.ContentInfoCompat.Builder setClip(android.content.ClipData);
- method public androidx.core.view.ContentInfoCompat.Builder setExtras(android.os.Bundle?);
- method public androidx.core.view.ContentInfoCompat.Builder setFlags(int);
- method public androidx.core.view.ContentInfoCompat.Builder setLinkUri(android.net.Uri?);
- method public androidx.core.view.ContentInfoCompat.Builder setSource(int);
- }
-
- public final class DisplayCompat {
- method public static androidx.core.view.DisplayCompat.ModeCompat getMode(android.content.Context, android.view.Display);
- method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
- }
-
- public static final class DisplayCompat.ModeCompat {
- method public int getPhysicalHeight();
- method public int getPhysicalWidth();
- method @Deprecated public boolean isNative();
- method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
- }
-
- public final class DisplayCutoutCompat {
- ctor public DisplayCutoutCompat(android.graphics.Rect?, java.util.List<android.graphics.Rect!>?);
- ctor public DisplayCutoutCompat(androidx.core.graphics.Insets, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, androidx.core.graphics.Insets);
- method public java.util.List<android.graphics.Rect!> getBoundingRects();
- method public int getSafeInsetBottom();
- method public int getSafeInsetLeft();
- method public int getSafeInsetRight();
- method public int getSafeInsetTop();
- method public androidx.core.graphics.Insets getWaterfallInsets();
- }
-
- public final class DragAndDropPermissionsCompat {
- method public void release();
- }
-
- public class DragStartHelper {
- ctor public DragStartHelper(android.view.View, androidx.core.view.DragStartHelper.OnDragStartListener);
- method public void attach();
- method public void detach();
- method public void getTouchPosition(android.graphics.Point);
- method public boolean onLongClick(android.view.View);
- method public boolean onTouch(android.view.View, android.view.MotionEvent);
- }
-
- public static interface DragStartHelper.OnDragStartListener {
- method public boolean onDragStart(android.view.View, androidx.core.view.DragStartHelper);
- }
-
- public final class GestureDetectorCompat {
- ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener);
- ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler?);
- method public boolean isLongpressEnabled();
- method public boolean onTouchEvent(android.view.MotionEvent);
- method public void setIsLongpressEnabled(boolean);
- method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener?);
- }
-
- public final class GravityCompat {
- method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
- method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
- method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
- method public static int getAbsoluteGravity(int, int);
- field public static final int END = 8388613; // 0x800005
- field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
- field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
- field public static final int START = 8388611; // 0x800003
- }
-
- public final class InputDeviceCompat {
- field public static final int SOURCE_ANY = -256; // 0xffffff00
- field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
- field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
- field public static final int SOURCE_CLASS_MASK = 255; // 0xff
- field public static final int SOURCE_CLASS_NONE = 0; // 0x0
- field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
- field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
- field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
- field public static final int SOURCE_DPAD = 513; // 0x201
- field public static final int SOURCE_GAMEPAD = 1025; // 0x401
- field public static final int SOURCE_HDMI = 33554433; // 0x2000001
- field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
- field public static final int SOURCE_KEYBOARD = 257; // 0x101
- field public static final int SOURCE_MOUSE = 8194; // 0x2002
- field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
- field public static final int SOURCE_STYLUS = 16386; // 0x4002
- field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
- field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
- field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
- field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
- field public static final int SOURCE_UNKNOWN = 0; // 0x0
- }
-
- public final class LayoutInflaterCompat {
- method @Deprecated public static androidx.core.view.LayoutInflaterFactory! getFactory(android.view.LayoutInflater!);
- method @Deprecated public static void setFactory(android.view.LayoutInflater, androidx.core.view.LayoutInflaterFactory);
- method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
- }
-
- @Deprecated public interface LayoutInflaterFactory {
- method @Deprecated public android.view.View! onCreateView(android.view.View!, String!, android.content.Context!, android.util.AttributeSet!);
- }
-
- public final class MarginLayoutParamsCompat {
- method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams);
- method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams);
- method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams);
- method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams);
- method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
- method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
- method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams, int);
- method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams, int);
- }
-
- public final class MenuCompat {
- method public static void setGroupDividerEnabled(android.view.Menu, boolean);
- method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
- }
-
- public interface MenuHost {
- method public void addMenuProvider(androidx.core.view.MenuProvider);
- method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
- method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
- method public void invalidateMenu();
- method public void removeMenuProvider(androidx.core.view.MenuProvider);
- }
-
- public class MenuHostHelper {
- ctor public MenuHostHelper(Runnable);
- method public void addMenuProvider(androidx.core.view.MenuProvider);
- method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
- method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
- method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
- method public void onMenuClosed(android.view.Menu);
- method public boolean onMenuItemSelected(android.view.MenuItem);
- method public void onPrepareMenu(android.view.Menu);
- method public void removeMenuProvider(androidx.core.view.MenuProvider);
- }
-
- public final class MenuItemCompat {
- method @Deprecated public static boolean collapseActionView(android.view.MenuItem!);
- method @Deprecated public static boolean expandActionView(android.view.MenuItem!);
- method public static androidx.core.view.ActionProvider? getActionProvider(android.view.MenuItem);
- method @Deprecated public static android.view.View! getActionView(android.view.MenuItem!);
- method public static int getAlphabeticModifiers(android.view.MenuItem);
- method public static CharSequence? getContentDescription(android.view.MenuItem);
- method public static android.content.res.ColorStateList? getIconTintList(android.view.MenuItem);
- method public static android.graphics.PorterDuff.Mode? getIconTintMode(android.view.MenuItem);
- method public static int getNumericModifiers(android.view.MenuItem);
- method public static CharSequence? getTooltipText(android.view.MenuItem);
- method @Deprecated public static boolean isActionViewExpanded(android.view.MenuItem!);
- method public static android.view.MenuItem? setActionProvider(android.view.MenuItem, androidx.core.view.ActionProvider?);
- method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, android.view.View!);
- method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, int);
- method public static void setAlphabeticShortcut(android.view.MenuItem, char, int);
- method public static void setContentDescription(android.view.MenuItem, CharSequence?);
- method public static void setIconTintList(android.view.MenuItem, android.content.res.ColorStateList?);
- method public static void setIconTintMode(android.view.MenuItem, android.graphics.PorterDuff.Mode?);
- method public static void setNumericShortcut(android.view.MenuItem, char, int);
- method @Deprecated public static android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem!, androidx.core.view.MenuItemCompat.OnActionExpandListener!);
- method public static void setShortcut(android.view.MenuItem, char, char, int, int);
- method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
- method public static void setTooltipText(android.view.MenuItem, CharSequence?);
- field @Deprecated public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
- field @Deprecated public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
- field @Deprecated public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
- field @Deprecated public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
- field @Deprecated public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
- }
-
- @Deprecated public static interface MenuItemCompat.OnActionExpandListener {
- method @Deprecated public boolean onMenuItemActionCollapse(android.view.MenuItem!);
- method @Deprecated public boolean onMenuItemActionExpand(android.view.MenuItem!);
- }
-
- public interface MenuProvider {
- method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
- method public default void onMenuClosed(android.view.Menu);
- method public boolean onMenuItemSelected(android.view.MenuItem);
- method public default void onPrepareMenu(android.view.Menu);
- }
-
- public final class MotionEventCompat {
- method @Deprecated public static int findPointerIndex(android.view.MotionEvent!, int);
- method @Deprecated public static int getActionIndex(android.view.MotionEvent!);
- method @Deprecated public static int getActionMasked(android.view.MotionEvent!);
- method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int);
- method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int, int);
- method @Deprecated public static int getButtonState(android.view.MotionEvent!);
- method @Deprecated public static int getPointerCount(android.view.MotionEvent!);
- method @Deprecated public static int getPointerId(android.view.MotionEvent!, int);
- method @Deprecated public static int getSource(android.view.MotionEvent!);
- method @Deprecated public static float getX(android.view.MotionEvent!, int);
- method @Deprecated public static float getY(android.view.MotionEvent!, int);
- method public static boolean isFromSource(android.view.MotionEvent, int);
- field @Deprecated public static final int ACTION_HOVER_ENTER = 9; // 0x9
- field @Deprecated public static final int ACTION_HOVER_EXIT = 10; // 0xa
- field @Deprecated public static final int ACTION_HOVER_MOVE = 7; // 0x7
- field @Deprecated public static final int ACTION_MASK = 255; // 0xff
- field @Deprecated public static final int ACTION_POINTER_DOWN = 5; // 0x5
- field @Deprecated public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
- field @Deprecated public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
- field @Deprecated public static final int ACTION_POINTER_UP = 6; // 0x6
- field @Deprecated public static final int ACTION_SCROLL = 8; // 0x8
- field @Deprecated public static final int AXIS_BRAKE = 23; // 0x17
- field @Deprecated public static final int AXIS_DISTANCE = 24; // 0x18
- field @Deprecated public static final int AXIS_GAS = 22; // 0x16
- field @Deprecated public static final int AXIS_GENERIC_1 = 32; // 0x20
- field @Deprecated public static final int AXIS_GENERIC_10 = 41; // 0x29
- field @Deprecated public static final int AXIS_GENERIC_11 = 42; // 0x2a
- field @Deprecated public static final int AXIS_GENERIC_12 = 43; // 0x2b
- field @Deprecated public static final int AXIS_GENERIC_13 = 44; // 0x2c
- field @Deprecated public static final int AXIS_GENERIC_14 = 45; // 0x2d
- field @Deprecated public static final int AXIS_GENERIC_15 = 46; // 0x2e
- field @Deprecated public static final int AXIS_GENERIC_16 = 47; // 0x2f
- field @Deprecated public static final int AXIS_GENERIC_2 = 33; // 0x21
- field @Deprecated public static final int AXIS_GENERIC_3 = 34; // 0x22
- field @Deprecated public static final int AXIS_GENERIC_4 = 35; // 0x23
- field @Deprecated public static final int AXIS_GENERIC_5 = 36; // 0x24
- field @Deprecated public static final int AXIS_GENERIC_6 = 37; // 0x25
- field @Deprecated public static final int AXIS_GENERIC_7 = 38; // 0x26
- field @Deprecated public static final int AXIS_GENERIC_8 = 39; // 0x27
- field @Deprecated public static final int AXIS_GENERIC_9 = 40; // 0x28
- field @Deprecated public static final int AXIS_HAT_X = 15; // 0xf
- field @Deprecated public static final int AXIS_HAT_Y = 16; // 0x10
- field @Deprecated public static final int AXIS_HSCROLL = 10; // 0xa
- field @Deprecated public static final int AXIS_LTRIGGER = 17; // 0x11
- field @Deprecated public static final int AXIS_ORIENTATION = 8; // 0x8
- field @Deprecated public static final int AXIS_PRESSURE = 2; // 0x2
- field public static final int AXIS_RELATIVE_X = 27; // 0x1b
- field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
- field @Deprecated public static final int AXIS_RTRIGGER = 18; // 0x12
- field @Deprecated public static final int AXIS_RUDDER = 20; // 0x14
- field @Deprecated public static final int AXIS_RX = 12; // 0xc
- field @Deprecated public static final int AXIS_RY = 13; // 0xd
- field @Deprecated public static final int AXIS_RZ = 14; // 0xe
- field public static final int AXIS_SCROLL = 26; // 0x1a
- field @Deprecated public static final int AXIS_SIZE = 3; // 0x3
- field @Deprecated public static final int AXIS_THROTTLE = 19; // 0x13
- field @Deprecated public static final int AXIS_TILT = 25; // 0x19
- field @Deprecated public static final int AXIS_TOOL_MAJOR = 6; // 0x6
- field @Deprecated public static final int AXIS_TOOL_MINOR = 7; // 0x7
- field @Deprecated public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
- field @Deprecated public static final int AXIS_TOUCH_MINOR = 5; // 0x5
- field @Deprecated public static final int AXIS_VSCROLL = 9; // 0x9
- field @Deprecated public static final int AXIS_WHEEL = 21; // 0x15
- field @Deprecated public static final int AXIS_X = 0; // 0x0
- field @Deprecated public static final int AXIS_Y = 1; // 0x1
- field @Deprecated public static final int AXIS_Z = 11; // 0xb
- field @Deprecated public static final int BUTTON_PRIMARY = 1; // 0x1
- }
-
- public interface NestedScrollingChild {
- method public boolean dispatchNestedFling(float, float, boolean);
- method public boolean dispatchNestedPreFling(float, float);
- method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
- method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
- method public boolean hasNestedScrollingParent();
- method public boolean isNestedScrollingEnabled();
- method public void setNestedScrollingEnabled(boolean);
- method public boolean startNestedScroll(int);
- method public void stopNestedScroll();
- }
-
- public interface NestedScrollingChild2 extends androidx.core.view.NestedScrollingChild {
- method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
- method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
- method public boolean hasNestedScrollingParent(int);
- method public boolean startNestedScroll(int, int);
- method public void stopNestedScroll(int);
- }
-
- public interface NestedScrollingChild3 extends androidx.core.view.NestedScrollingChild2 {
- method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
- }
-
- public class NestedScrollingChildHelper {
- ctor public NestedScrollingChildHelper(android.view.View);
- method public boolean dispatchNestedFling(float, float, boolean);
- method public boolean dispatchNestedPreFling(float, float);
- method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
- method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
- method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
- method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
- method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]?);
- method public boolean hasNestedScrollingParent();
- method public boolean hasNestedScrollingParent(int);
- method public boolean isNestedScrollingEnabled();
- method public void onDetachedFromWindow();
- method public void onStopNestedScroll(android.view.View);
- method public void setNestedScrollingEnabled(boolean);
- method public boolean startNestedScroll(int);
- method public boolean startNestedScroll(int, int);
- method public void stopNestedScroll();
- method public void stopNestedScroll(int);
- }
-
- public interface NestedScrollingParent {
- method public int getNestedScrollAxes();
- method public boolean onNestedFling(android.view.View, float, float, boolean);
- method public boolean onNestedPreFling(android.view.View, float, float);
- method public void onNestedPreScroll(android.view.View, int, int, int[]);
- method public void onNestedScroll(android.view.View, int, int, int, int);
- method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
- method public boolean onStartNestedScroll(android.view.View, android.view.View, int);
- method public void onStopNestedScroll(android.view.View);
- }
-
- public interface NestedScrollingParent2 extends androidx.core.view.NestedScrollingParent {
- method public void onNestedPreScroll(android.view.View, int, int, int[], int);
- method public void onNestedScroll(android.view.View, int, int, int, int, int);
- method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
- method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
- method public void onStopNestedScroll(android.view.View, int);
- }
-
- public interface NestedScrollingParent3 extends androidx.core.view.NestedScrollingParent2 {
- method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
- }
-
- public class NestedScrollingParentHelper {
- ctor public NestedScrollingParentHelper(android.view.ViewGroup);
- method public int getNestedScrollAxes();
- method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
- method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
- method public void onStopNestedScroll(android.view.View);
- method public void onStopNestedScroll(android.view.View, int);
- }
-
- public interface OnApplyWindowInsetsListener {
- method public androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
- }
-
- public interface OnReceiveContentListener {
- method public androidx.core.view.ContentInfoCompat? onReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
- }
-
- public interface OnReceiveContentViewBehavior {
- method public androidx.core.view.ContentInfoCompat? onReceiveContent(androidx.core.view.ContentInfoCompat);
- }
-
- public final class OneShotPreDrawListener implements android.view.View.OnAttachStateChangeListener android.view.ViewTreeObserver.OnPreDrawListener {
- method public static androidx.core.view.OneShotPreDrawListener add(android.view.View, Runnable);
- method public boolean onPreDraw();
- method public void onViewAttachedToWindow(android.view.View);
- method public void onViewDetachedFromWindow(android.view.View);
- method public void removeListener();
- }
-
- public final class PointerIconCompat {
- method public static androidx.core.view.PointerIconCompat create(android.graphics.Bitmap, float, float);
- method public static androidx.core.view.PointerIconCompat getSystemIcon(android.content.Context, int);
- method public static androidx.core.view.PointerIconCompat load(android.content.res.Resources, int);
- field public static final int TYPE_ALIAS = 1010; // 0x3f2
- field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
- field public static final int TYPE_ARROW = 1000; // 0x3e8
- field public static final int TYPE_CELL = 1006; // 0x3ee
- field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
- field public static final int TYPE_COPY = 1011; // 0x3f3
- field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
- field public static final int TYPE_DEFAULT = 1000; // 0x3e8
- field public static final int TYPE_GRAB = 1020; // 0x3fc
- field public static final int TYPE_GRABBING = 1021; // 0x3fd
- field public static final int TYPE_HAND = 1002; // 0x3ea
- field public static final int TYPE_HELP = 1003; // 0x3eb
- field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
- field public static final int TYPE_NO_DROP = 1012; // 0x3f4
- field public static final int TYPE_NULL = 0; // 0x0
- field public static final int TYPE_TEXT = 1008; // 0x3f0
- field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
- field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
- field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
- field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
- field public static final int TYPE_WAIT = 1004; // 0x3ec
- field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
- field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
- }
-
- public final class ScaleGestureDetectorCompat {
- method @Deprecated public static boolean isQuickScaleEnabled(Object!);
- method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
- method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
- method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean);
- }
-
- public interface ScrollingView {
- method public int computeHorizontalScrollExtent();
- method public int computeHorizontalScrollOffset();
- method public int computeHorizontalScrollRange();
- method public int computeVerticalScrollExtent();
- method public int computeVerticalScrollOffset();
- method public int computeVerticalScrollRange();
- }
-
- public interface TintableBackgroundView {
- method public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- }
-
- @Deprecated public final class VelocityTrackerCompat {
- method @Deprecated public static float getXVelocity(android.view.VelocityTracker!, int);
- method @Deprecated public static float getYVelocity(android.view.VelocityTracker!, int);
- }
-
- public class ViewCompat {
- ctor @Deprecated protected ViewCompat();
- method public static int addAccessibilityAction(android.view.View, CharSequence, androidx.core.view.accessibility.AccessibilityViewCommand);
- method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View!>, int);
- method public static void addOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
- method public static androidx.core.view.ViewPropertyAnimatorCompat animate(android.view.View);
- method @Deprecated public static boolean canScrollHorizontally(android.view.View!, int);
- method @Deprecated public static boolean canScrollVertically(android.view.View!, int);
- method public static void cancelDragAndDrop(android.view.View);
- method @Deprecated public static int combineMeasuredStates(int, int);
- method public static androidx.core.view.WindowInsetsCompat computeSystemWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat, android.graphics.Rect);
- method public static androidx.core.view.WindowInsetsCompat dispatchApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
- method public static void dispatchFinishTemporaryDetach(android.view.View);
- method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
- method public static boolean dispatchNestedPreFling(android.view.View, float, float);
- method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
- method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, int);
- method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
- method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int, int[]);
- method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, int);
- method public static void dispatchStartTemporaryDetach(android.view.View);
- method public static void enableAccessibleClickableSpanSupport(android.view.View);
- method public static int generateViewId();
- method public static androidx.core.view.AccessibilityDelegateCompat? getAccessibilityDelegate(android.view.View);
- method public static int getAccessibilityLiveRegion(android.view.View);
- method public static androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
- method @UiThread public static CharSequence? getAccessibilityPaneTitle(android.view.View);
- method @Deprecated public static float getAlpha(android.view.View!);
- method public static android.content.res.ColorStateList? getBackgroundTintList(android.view.View);
- method public static android.graphics.PorterDuff.Mode? getBackgroundTintMode(android.view.View);
- method public static android.graphics.Rect? getClipBounds(android.view.View);
- method public static android.view.Display? getDisplay(android.view.View);
- method public static float getElevation(android.view.View);
- method public static boolean getFitsSystemWindows(android.view.View);
- method public static int getImportantForAccessibility(android.view.View);
- method public static int getImportantForAutofill(android.view.View);
- method public static int getLabelFor(android.view.View);
- method @Deprecated public static int getLayerType(android.view.View!);
- method public static int getLayoutDirection(android.view.View);
- method @Deprecated public static android.graphics.Matrix? getMatrix(android.view.View!);
- method @Deprecated public static int getMeasuredHeightAndState(android.view.View!);
- method @Deprecated public static int getMeasuredState(android.view.View!);
- method @Deprecated public static int getMeasuredWidthAndState(android.view.View!);
- method public static int getMinimumHeight(android.view.View);
- method public static int getMinimumWidth(android.view.View);
- method public static int getNextClusterForwardId(android.view.View);
- method public static String![]? getOnReceiveContentMimeTypes(android.view.View);
- method @Deprecated public static int getOverScrollMode(android.view.View!);
- method @Px public static int getPaddingEnd(android.view.View);
- method @Px public static int getPaddingStart(android.view.View);
- method public static android.view.ViewParent? getParentForAccessibility(android.view.View);
- method @Deprecated public static float getPivotX(android.view.View!);
- method @Deprecated public static float getPivotY(android.view.View!);
- method public static androidx.core.view.WindowInsetsCompat? getRootWindowInsets(android.view.View);
- method @Deprecated public static float getRotation(android.view.View!);
- method @Deprecated public static float getRotationX(android.view.View!);
- method @Deprecated public static float getRotationY(android.view.View!);
- method @Deprecated public static float getScaleX(android.view.View!);
- method @Deprecated public static float getScaleY(android.view.View!);
- method public static int getScrollIndicators(android.view.View);
- method @UiThread public static CharSequence? getStateDescription(android.view.View);
- method public static java.util.List<android.graphics.Rect!> getSystemGestureExclusionRects(android.view.View);
- method public static String? getTransitionName(android.view.View);
- method @Deprecated public static float getTranslationX(android.view.View!);
- method @Deprecated public static float getTranslationY(android.view.View!);
- method public static float getTranslationZ(android.view.View);
- method @Deprecated public static androidx.core.view.WindowInsetsControllerCompat? getWindowInsetsController(android.view.View);
- method @Deprecated public static int getWindowSystemUiVisibility(android.view.View);
- method @Deprecated public static float getX(android.view.View!);
- method @Deprecated public static float getY(android.view.View!);
- method public static float getZ(android.view.View);
- method public static boolean hasAccessibilityDelegate(android.view.View);
- method public static boolean hasExplicitFocusable(android.view.View);
- method public static boolean hasNestedScrollingParent(android.view.View);
- method public static boolean hasNestedScrollingParent(android.view.View, int);
- method public static boolean hasOnClickListeners(android.view.View);
- method public static boolean hasOverlappingRendering(android.view.View);
- method public static boolean hasTransientState(android.view.View);
- method @UiThread public static boolean isAccessibilityHeading(android.view.View);
- method public static boolean isAttachedToWindow(android.view.View);
- method public static boolean isFocusedByDefault(android.view.View);
- method public static boolean isImportantForAccessibility(android.view.View);
- method public static boolean isImportantForAutofill(android.view.View);
- method public static boolean isInLayout(android.view.View);
- method public static boolean isKeyboardNavigationCluster(android.view.View);
- method public static boolean isLaidOut(android.view.View);
- method public static boolean isLayoutDirectionResolved(android.view.View);
- method public static boolean isNestedScrollingEnabled(android.view.View);
- method @Deprecated public static boolean isOpaque(android.view.View!);
- method public static boolean isPaddingRelative(android.view.View);
- method @UiThread public static boolean isScreenReaderFocusable(android.view.View);
- method @Deprecated public static void jumpDrawablesToCurrentState(android.view.View!);
- method public static android.view.View? keyboardNavigationClusterSearch(android.view.View, android.view.View?, int);
- method public static void offsetLeftAndRight(android.view.View, int);
- method public static void offsetTopAndBottom(android.view.View, int);
- method public static androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
- method @Deprecated public static void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
- method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
- method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
- method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
- method public static androidx.core.view.ContentInfoCompat? performReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
- method public static void postInvalidateOnAnimation(android.view.View);
- method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
- method public static void postOnAnimation(android.view.View, Runnable);
- method public static void postOnAnimationDelayed(android.view.View, Runnable, long);
- method public static void removeAccessibilityAction(android.view.View, int);
- method public static void removeOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
- method public static void replaceAccessibilityAction(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat, CharSequence?, androidx.core.view.accessibility.AccessibilityViewCommand?);
- method public static void requestApplyInsets(android.view.View);
- method public static <T extends android.view.View> T requireViewById(android.view.View, @IdRes int);
- method @Deprecated public static int resolveSizeAndState(int, int, int);
- method public static boolean restoreDefaultFocus(android.view.View);
- method public static void saveAttributeDataForStyleable(android.view.View, android.content.Context, int[], android.util.AttributeSet?, android.content.res.TypedArray, int, int);
- method public static void setAccessibilityDelegate(android.view.View, androidx.core.view.AccessibilityDelegateCompat?);
- method @UiThread public static void setAccessibilityHeading(android.view.View, boolean);
- method public static void setAccessibilityLiveRegion(android.view.View, int);
- method @UiThread public static void setAccessibilityPaneTitle(android.view.View, CharSequence?);
- method @Deprecated public static void setActivated(android.view.View!, boolean);
- method @Deprecated public static void setAlpha(android.view.View!, @FloatRange(from=0.0, to=1.0) float);
- method public static void setAutofillHints(android.view.View, java.lang.String!...);
- method public static void setBackground(android.view.View, android.graphics.drawable.Drawable?);
- method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList?);
- method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode?);
- method @Deprecated public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup!, boolean);
- method public static void setClipBounds(android.view.View, android.graphics.Rect?);
- method public static void setElevation(android.view.View, float);
- method @Deprecated public static void setFitsSystemWindows(android.view.View!, boolean);
- method public static void setFocusedByDefault(android.view.View, boolean);
- method public static void setHasTransientState(android.view.View, boolean);
- method @UiThread public static void setImportantForAccessibility(android.view.View, int);
- method public static void setImportantForAutofill(android.view.View, int);
- method public static void setKeyboardNavigationCluster(android.view.View, boolean);
- method public static void setLabelFor(android.view.View, @IdRes int);
- method public static void setLayerPaint(android.view.View, android.graphics.Paint?);
- method @Deprecated public static void setLayerType(android.view.View!, int, android.graphics.Paint!);
- method public static void setLayoutDirection(android.view.View, int);
- method public static void setNestedScrollingEnabled(android.view.View, boolean);
- method public static void setNextClusterForwardId(android.view.View, int);
- method public static void setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener?);
- method public static void setOnReceiveContentListener(android.view.View, String![]?, androidx.core.view.OnReceiveContentListener?);
- method @Deprecated public static void setOverScrollMode(android.view.View!, int);
- method public static void setPaddingRelative(android.view.View, @Px int, @Px int, @Px int, @Px int);
- method @Deprecated public static void setPivotX(android.view.View!, float);
- method @Deprecated public static void setPivotY(android.view.View!, float);
- method public static void setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat?);
- method @Deprecated public static void setRotation(android.view.View!, float);
- method @Deprecated public static void setRotationX(android.view.View!, float);
- method @Deprecated public static void setRotationY(android.view.View!, float);
- method @Deprecated public static void setSaveFromParentEnabled(android.view.View!, boolean);
- method @Deprecated public static void setScaleX(android.view.View!, float);
- method @Deprecated public static void setScaleY(android.view.View!, float);
- method @UiThread public static void setScreenReaderFocusable(android.view.View, boolean);
- method public static void setScrollIndicators(android.view.View, int);
- method public static void setScrollIndicators(android.view.View, int, int);
- method @UiThread public static void setStateDescription(android.view.View, CharSequence?);
- method public static void setSystemGestureExclusionRects(android.view.View, java.util.List<android.graphics.Rect!>);
- method public static void setTooltipText(android.view.View, CharSequence?);
- method public static void setTransitionName(android.view.View, String?);
- method @Deprecated public static void setTranslationX(android.view.View!, float);
- method @Deprecated public static void setTranslationY(android.view.View!, float);
- method public static void setTranslationZ(android.view.View, float);
- method public static void setWindowInsetsAnimationCallback(android.view.View, androidx.core.view.WindowInsetsAnimationCompat.Callback?);
- method @Deprecated public static void setX(android.view.View!, float);
- method @Deprecated public static void setY(android.view.View!, float);
- method public static void setZ(android.view.View, float);
- method public static boolean startDragAndDrop(android.view.View, android.content.ClipData?, android.view.View.DragShadowBuilder, Object?, int);
- method public static boolean startNestedScroll(android.view.View, int);
- method public static boolean startNestedScroll(android.view.View, int, int);
- method public static void stopNestedScroll(android.view.View);
- method public static void stopNestedScroll(android.view.View, int);
- method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder);
- field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
- field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
- field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
- field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
- field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
- field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
- field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
- field @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
- field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
- field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
- field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
- field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
- field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
- field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
- field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
- field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
- field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
- field @Deprecated public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
- field @Deprecated public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
- field @Deprecated public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
- field @Deprecated public static final int OVER_SCROLL_NEVER = 2; // 0x2
- field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
- field public static final int SCROLL_AXIS_NONE = 0; // 0x0
- field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
- field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
- field public static final int SCROLL_INDICATOR_END = 32; // 0x20
- field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
- field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
- field public static final int SCROLL_INDICATOR_START = 16; // 0x10
- field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
- field public static final int TYPE_NON_TOUCH = 1; // 0x1
- field public static final int TYPE_TOUCH = 0; // 0x0
- }
-
- public static interface ViewCompat.OnUnhandledKeyEventListenerCompat {
- method public boolean onUnhandledKeyEvent(android.view.View, android.view.KeyEvent);
- }
-
- public final class ViewConfigurationCompat {
- method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
- method public static int getScaledHoverSlop(android.view.ViewConfiguration);
- method @Deprecated public static int getScaledPagingTouchSlop(android.view.ViewConfiguration!);
- method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
- method @Deprecated public static boolean hasPermanentMenuKey(android.view.ViewConfiguration!);
- method public static boolean shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration, android.content.Context);
- }
-
- public final class ViewGroupCompat {
- method public static int getLayoutMode(android.view.ViewGroup);
- method public static int getNestedScrollAxes(android.view.ViewGroup);
- method public static boolean isTransitionGroup(android.view.ViewGroup);
- method @Deprecated public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
- method public static void setLayoutMode(android.view.ViewGroup, int);
- method @Deprecated public static void setMotionEventSplittingEnabled(android.view.ViewGroup!, boolean);
- method public static void setTransitionGroup(android.view.ViewGroup, boolean);
- field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
- field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
- }
-
- public final class ViewParentCompat {
- method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int);
- method public static boolean onNestedFling(android.view.ViewParent, android.view.View, float, float, boolean);
- method public static boolean onNestedPreFling(android.view.ViewParent, android.view.View, float, float);
- method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[]);
- method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[], int);
- method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
- method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int);
- method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int, int[]);
- method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int);
- method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int, int);
- method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int);
- method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int, int);
- method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
- method public static void onStopNestedScroll(android.view.ViewParent, android.view.View, int);
- method @Deprecated public static boolean requestSendAccessibilityEvent(android.view.ViewParent!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
- }
-
- public final class ViewPropertyAnimatorCompat {
- method public androidx.core.view.ViewPropertyAnimatorCompat alpha(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat alphaBy(float);
- method public void cancel();
- method public long getDuration();
- method public android.view.animation.Interpolator? getInterpolator();
- method public long getStartDelay();
- method public androidx.core.view.ViewPropertyAnimatorCompat rotation(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat rotationBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat rotationX(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat rotationXBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat rotationY(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat rotationYBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat scaleX(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat scaleXBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat scaleY(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat scaleYBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat setDuration(long);
- method public androidx.core.view.ViewPropertyAnimatorCompat setInterpolator(android.view.animation.Interpolator?);
- method public androidx.core.view.ViewPropertyAnimatorCompat setListener(androidx.core.view.ViewPropertyAnimatorListener?);
- method public androidx.core.view.ViewPropertyAnimatorCompat setStartDelay(long);
- method public androidx.core.view.ViewPropertyAnimatorCompat setUpdateListener(androidx.core.view.ViewPropertyAnimatorUpdateListener?);
- method public void start();
- method public androidx.core.view.ViewPropertyAnimatorCompat translationX(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat translationXBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat translationY(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat translationYBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat translationZ(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat translationZBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat withEndAction(Runnable);
- method public androidx.core.view.ViewPropertyAnimatorCompat withLayer();
- method public androidx.core.view.ViewPropertyAnimatorCompat withStartAction(Runnable);
- method public androidx.core.view.ViewPropertyAnimatorCompat x(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat xBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat y(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat yBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat z(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat zBy(float);
- }
-
- public interface ViewPropertyAnimatorListener {
- method public void onAnimationCancel(android.view.View);
- method public void onAnimationEnd(android.view.View);
- method public void onAnimationStart(android.view.View);
- }
-
- public class ViewPropertyAnimatorListenerAdapter implements androidx.core.view.ViewPropertyAnimatorListener {
- ctor public ViewPropertyAnimatorListenerAdapter();
- method public void onAnimationCancel(android.view.View);
- method public void onAnimationEnd(android.view.View);
- method public void onAnimationStart(android.view.View);
- }
-
- public interface ViewPropertyAnimatorUpdateListener {
- method public void onAnimationUpdate(android.view.View);
- }
-
- public final class WindowCompat {
- method public static androidx.core.view.WindowInsetsControllerCompat getInsetsController(android.view.Window, android.view.View);
- method public static <T extends android.view.View> T requireViewById(android.view.Window, @IdRes int);
- method public static void setDecorFitsSystemWindows(android.view.Window, boolean);
- field public static final int FEATURE_ACTION_BAR = 8; // 0x8
- field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
- field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
- }
-
- public final class WindowInsetsAnimationCompat {
- ctor public WindowInsetsAnimationCompat(int, android.view.animation.Interpolator?, long);
- method @FloatRange(from=0.0f, to=1.0f) public float getAlpha();
- method public long getDurationMillis();
- method @FloatRange(from=0.0f, to=1.0f) public float getFraction();
- method public float getInterpolatedFraction();
- method public android.view.animation.Interpolator? getInterpolator();
- method public int getTypeMask();
- method public void setAlpha(@FloatRange(from=0.0f, to=1.0f) float);
- method public void setFraction(@FloatRange(from=0.0f, to=1.0f) float);
- }
-
- public static final class WindowInsetsAnimationCompat.BoundsCompat {
- ctor public WindowInsetsAnimationCompat.BoundsCompat(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
- method public androidx.core.graphics.Insets getLowerBound();
- method public androidx.core.graphics.Insets getUpperBound();
- method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat inset(androidx.core.graphics.Insets);
- method @RequiresApi(30) public android.view.WindowInsetsAnimation.Bounds toBounds();
- method @RequiresApi(30) public static androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat toBoundsCompat(android.view.WindowInsetsAnimation.Bounds);
- }
-
- public abstract static class WindowInsetsAnimationCompat.Callback {
- ctor public WindowInsetsAnimationCompat.Callback(int);
- method public final int getDispatchMode();
- method public void onEnd(androidx.core.view.WindowInsetsAnimationCompat);
- method public void onPrepare(androidx.core.view.WindowInsetsAnimationCompat);
- method public abstract androidx.core.view.WindowInsetsCompat onProgress(androidx.core.view.WindowInsetsCompat, java.util.List<androidx.core.view.WindowInsetsAnimationCompat!>);
- method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat onStart(androidx.core.view.WindowInsetsAnimationCompat, androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat);
- field public static final int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1; // 0x1
- field public static final int DISPATCH_MODE_STOP = 0; // 0x0
- }
-
- public interface WindowInsetsAnimationControlListenerCompat {
- method public void onCancelled(androidx.core.view.WindowInsetsAnimationControllerCompat?);
- method public void onFinished(androidx.core.view.WindowInsetsAnimationControllerCompat);
- method public void onReady(androidx.core.view.WindowInsetsAnimationControllerCompat, int);
- }
-
- public final class WindowInsetsAnimationControllerCompat {
- method public void finish(boolean);
- method public float getCurrentAlpha();
- method @FloatRange(from=0.0f, to=1.0f) public float getCurrentFraction();
- method public androidx.core.graphics.Insets getCurrentInsets();
- method public androidx.core.graphics.Insets getHiddenStateInsets();
- method public androidx.core.graphics.Insets getShownStateInsets();
- method public int getTypes();
- method public boolean isCancelled();
- method public boolean isFinished();
- method public boolean isReady();
- method public void setInsetsAndAlpha(androidx.core.graphics.Insets?, @FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=0.0f, to=1.0f) float);
- }
-
- public class WindowInsetsCompat {
- ctor public WindowInsetsCompat(androidx.core.view.WindowInsetsCompat?);
- method @Deprecated public androidx.core.view.WindowInsetsCompat consumeDisplayCutout();
- method @Deprecated public androidx.core.view.WindowInsetsCompat consumeStableInsets();
- method @Deprecated public androidx.core.view.WindowInsetsCompat consumeSystemWindowInsets();
- method public androidx.core.view.DisplayCutoutCompat? getDisplayCutout();
- method public androidx.core.graphics.Insets getInsets(int);
- method public androidx.core.graphics.Insets getInsetsIgnoringVisibility(int);
- method @Deprecated public androidx.core.graphics.Insets getMandatorySystemGestureInsets();
- method @Deprecated public int getStableInsetBottom();
- method @Deprecated public int getStableInsetLeft();
- method @Deprecated public int getStableInsetRight();
- method @Deprecated public int getStableInsetTop();
- method @Deprecated public androidx.core.graphics.Insets getStableInsets();
- method @Deprecated public androidx.core.graphics.Insets getSystemGestureInsets();
- method @Deprecated public int getSystemWindowInsetBottom();
- method @Deprecated public int getSystemWindowInsetLeft();
- method @Deprecated public int getSystemWindowInsetRight();
- method @Deprecated public int getSystemWindowInsetTop();
- method @Deprecated public androidx.core.graphics.Insets getSystemWindowInsets();
- method @Deprecated public androidx.core.graphics.Insets getTappableElementInsets();
- method public boolean hasInsets();
- method @Deprecated public boolean hasStableInsets();
- method @Deprecated public boolean hasSystemWindowInsets();
- method public androidx.core.view.WindowInsetsCompat inset(androidx.core.graphics.Insets);
- method public androidx.core.view.WindowInsetsCompat inset(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
- method public boolean isConsumed();
- method public boolean isRound();
- method public boolean isVisible(int);
- method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
- method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
- method @RequiresApi(20) public android.view.WindowInsets? toWindowInsets();
- method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets);
- method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets, android.view.View?);
- field public static final androidx.core.view.WindowInsetsCompat CONSUMED;
- }
-
- public static final class WindowInsetsCompat.Builder {
- ctor public WindowInsetsCompat.Builder();
- ctor public WindowInsetsCompat.Builder(androidx.core.view.WindowInsetsCompat);
- method public androidx.core.view.WindowInsetsCompat build();
- method public androidx.core.view.WindowInsetsCompat.Builder setDisplayCutout(androidx.core.view.DisplayCutoutCompat?);
- method public androidx.core.view.WindowInsetsCompat.Builder setInsets(int, androidx.core.graphics.Insets);
- method public androidx.core.view.WindowInsetsCompat.Builder setInsetsIgnoringVisibility(int, androidx.core.graphics.Insets);
- method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setMandatorySystemGestureInsets(androidx.core.graphics.Insets);
- method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setStableInsets(androidx.core.graphics.Insets);
- method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemGestureInsets(androidx.core.graphics.Insets);
- method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemWindowInsets(androidx.core.graphics.Insets);
- method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setTappableElementInsets(androidx.core.graphics.Insets);
- method public androidx.core.view.WindowInsetsCompat.Builder setVisible(int, boolean);
- }
-
- public static final class WindowInsetsCompat.Type {
- method public static int captionBar();
- method public static int displayCutout();
- method public static int ime();
- method public static int mandatorySystemGestures();
- method public static int navigationBars();
- method public static int statusBars();
- method public static int systemBars();
- method public static int systemGestures();
- method public static int tappableElement();
- }
-
- public final class WindowInsetsControllerCompat {
- ctor public WindowInsetsControllerCompat(android.view.Window, android.view.View);
- method public void addOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
- method public void controlWindowInsetsAnimation(int, long, android.view.animation.Interpolator?, android.os.CancellationSignal?, androidx.core.view.WindowInsetsAnimationControlListenerCompat);
- method public int getSystemBarsBehavior();
- method public void hide(int);
- method public boolean isAppearanceLightNavigationBars();
- method public boolean isAppearanceLightStatusBars();
- method public void removeOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
- method public void setAppearanceLightNavigationBars(boolean);
- method public void setAppearanceLightStatusBars(boolean);
- method public void setSystemBarsBehavior(int);
- method public void show(int);
- method @Deprecated @RequiresApi(30) public static androidx.core.view.WindowInsetsControllerCompat toWindowInsetsControllerCompat(android.view.WindowInsetsController);
- field public static final int BEHAVIOR_SHOW_BARS_BY_SWIPE = 1; // 0x1
- field public static final int BEHAVIOR_SHOW_BARS_BY_TOUCH = 0; // 0x0
- field public static final int BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE = 2; // 0x2
- }
-
- public static interface WindowInsetsControllerCompat.OnControllableInsetsChangedListener {
- method public void onControllableInsetsChanged(androidx.core.view.WindowInsetsControllerCompat, int);
- }
-
-}
-
-package androidx.core.view.accessibility {
-
- public final class AccessibilityClickableSpanCompat extends android.text.style.ClickableSpan {
- method public void onClick(android.view.View);
- }
-
- public final class AccessibilityEventCompat {
- method @Deprecated public static void appendRecord(android.view.accessibility.AccessibilityEvent!, androidx.core.view.accessibility.AccessibilityRecordCompat!);
- method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! asRecord(android.view.accessibility.AccessibilityEvent!);
- method public static int getAction(android.view.accessibility.AccessibilityEvent);
- method public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
- method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent);
- method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! getRecord(android.view.accessibility.AccessibilityEvent!, int);
- method @Deprecated public static int getRecordCount(android.view.accessibility.AccessibilityEvent!);
- method public static void setAction(android.view.accessibility.AccessibilityEvent, int);
- method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
- method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
- field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
- field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
- field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
- field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
- field public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 64; // 0x40
- field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
- field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
- field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
- field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
- field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
- field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
- field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
- field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
- field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
- field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
- field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
- field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
- field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
- field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
- field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
- field @Deprecated public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
- field @Deprecated public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
- field @Deprecated public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
- field @Deprecated public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
- field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
- field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
- field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
- }
-
- public final class AccessibilityManagerCompat {
- method @Deprecated public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
- method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
- method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!, int);
- method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!);
- method @Deprecated public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager!);
- method @Deprecated public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
- method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
- }
-
- @Deprecated public static interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
- method @Deprecated public void onAccessibilityStateChanged(boolean);
- }
-
- @Deprecated public abstract static class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
- ctor @Deprecated public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
- }
-
- public static interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
- method public void onTouchExplorationStateChanged(boolean);
- }
-
- public class AccessibilityNodeInfoCompat {
- ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
- method public void addAction(int);
- method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
- method public void addChild(android.view.View!);
- method public void addChild(android.view.View!, int);
- method public boolean canOpenPopup();
- method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByText(String!);
- method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByViewId(String!);
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
- method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
- method public int getActions();
- method public java.util.List<java.lang.String!> getAvailableExtraData();
- method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
- method public void getBoundsInScreen(android.graphics.Rect!);
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getChild(int);
- method public int getChildCount();
- method public CharSequence! getClassName();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! getCollectionInfo();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! getCollectionItemInfo();
- method public CharSequence! getContentDescription();
- method public int getDrawingOrder();
- method public CharSequence! getError();
- method public android.os.Bundle! getExtras();
- method public CharSequence? getHintText();
- method @Deprecated public Object! getInfo();
- method public int getInputType();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabelFor();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabeledBy();
- method public int getLiveRegion();
- method public int getMaxTextLength();
- method public int getMovementGranularities();
- method public CharSequence! getPackageName();
- method public CharSequence? getPaneTitle();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getParent();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! getRangeInfo();
- method public CharSequence? getRoleDescription();
- method public CharSequence? getStateDescription();
- method public CharSequence! getText();
- method public int getTextSelectionEnd();
- method public int getTextSelectionStart();
- method public CharSequence? getTooltipText();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
- method public String! getViewIdResourceName();
- method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
- method public int getWindowId();
- method public boolean isAccessibilityFocused();
- method public boolean isCheckable();
- method public boolean isChecked();
- method public boolean isClickable();
- method public boolean isContentInvalid();
- method public boolean isContextClickable();
- method public boolean isDismissable();
- method public boolean isEditable();
- method public boolean isEnabled();
- method public boolean isFocusable();
- method public boolean isFocused();
- method public boolean isHeading();
- method public boolean isImportantForAccessibility();
- method public boolean isLongClickable();
- method public boolean isMultiLine();
- method public boolean isPassword();
- method public boolean isScreenReaderFocusable();
- method public boolean isScrollable();
- method public boolean isSelected();
- method public boolean isShowingHintText();
- method public boolean isTextEntryKey();
- method public boolean isVisibleToUser();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
- method public boolean performAction(int);
- method public boolean performAction(int, android.os.Bundle!);
- method public void recycle();
- method public boolean refresh();
- method public boolean removeAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
- method public boolean removeChild(android.view.View!);
- method public boolean removeChild(android.view.View!, int);
- method public void setAccessibilityFocused(boolean);
- method public void setAvailableExtraData(java.util.List<java.lang.String!>);
- method @Deprecated public void setBoundsInParent(android.graphics.Rect!);
- method public void setBoundsInScreen(android.graphics.Rect!);
- method public void setCanOpenPopup(boolean);
- method public void setCheckable(boolean);
- method public void setChecked(boolean);
- method public void setClassName(CharSequence!);
- method public void setClickable(boolean);
- method public void setCollectionInfo(Object!);
- method public void setCollectionItemInfo(Object!);
- method public void setContentDescription(CharSequence!);
- method public void setContentInvalid(boolean);
- method public void setContextClickable(boolean);
- method public void setDismissable(boolean);
- method public void setDrawingOrder(int);
- method public void setEditable(boolean);
- method public void setEnabled(boolean);
- method public void setError(CharSequence!);
- method public void setFocusable(boolean);
- method public void setFocused(boolean);
- method public void setHeading(boolean);
- method public void setHintText(CharSequence?);
- method public void setImportantForAccessibility(boolean);
- method public void setInputType(int);
- method public void setLabelFor(android.view.View!);
- method public void setLabelFor(android.view.View!, int);
- method public void setLabeledBy(android.view.View!);
- method public void setLabeledBy(android.view.View!, int);
- method public void setLiveRegion(int);
- method public void setLongClickable(boolean);
- method public void setMaxTextLength(int);
- method public void setMovementGranularities(int);
- method public void setMultiLine(boolean);
- method public void setPackageName(CharSequence!);
- method public void setPaneTitle(CharSequence?);
- method public void setParent(android.view.View!);
- method public void setParent(android.view.View!, int);
- method public void setPassword(boolean);
- method public void setRangeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat!);
- method public void setRoleDescription(CharSequence?);
- method public void setScreenReaderFocusable(boolean);
- method public void setScrollable(boolean);
- method public void setSelected(boolean);
- method public void setShowingHintText(boolean);
- method public void setSource(android.view.View!);
- method public void setSource(android.view.View!, int);
- method public void setStateDescription(CharSequence?);
- method public void setText(CharSequence!);
- method public void setTextEntryKey(boolean);
- method public void setTextSelection(int, int);
- method public void setTooltipText(CharSequence?);
- method public void setTouchDelegateInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat);
- method public void setTraversalAfter(android.view.View!);
- method public void setTraversalAfter(android.view.View!, int);
- method public void setTraversalBefore(android.view.View!);
- method public void setTraversalBefore(android.view.View!, int);
- method public void setViewIdResourceName(String!);
- method public void setVisibleToUser(boolean);
- method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! wrap(android.view.accessibility.AccessibilityNodeInfo);
- field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
- field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
- field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
- field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
- field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
- field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
- field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
- field public static final String ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT = "android.view.accessibility.action.ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT";
- field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
- field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
- field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
- field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
- field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
- field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
- field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
- field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
- field public static final int ACTION_CLICK = 16; // 0x10
- field public static final int ACTION_COLLAPSE = 524288; // 0x80000
- field public static final int ACTION_COPY = 16384; // 0x4000
- field public static final int ACTION_CUT = 65536; // 0x10000
- field public static final int ACTION_DISMISS = 1048576; // 0x100000
- field public static final int ACTION_EXPAND = 262144; // 0x40000
- field public static final int ACTION_FOCUS = 1; // 0x1
- field public static final int ACTION_LONG_CLICK = 32; // 0x20
- field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
- field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
- field public static final int ACTION_PASTE = 32768; // 0x8000
- field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
- field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
- field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
- field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
- field public static final int ACTION_SELECT = 4; // 0x4
- field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
- field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
- field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
- field public static final int FOCUS_INPUT = 1; // 0x1
- field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
- field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
- field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
- field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
- field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
- }
-
- public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
- ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!);
- method public int getId();
- method public CharSequence! getLabel();
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_ACCESSIBILITY_FOCUS;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_ACCESSIBILITY_FOCUS;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_FOCUS;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_SELECTION;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLICK;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COLLAPSE;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CONTEXT_CLICK;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_IME_ENTER;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_LONG_CLICK;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_MOVE_WINDOW;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_HTML_ELEMENT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_DOWN;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_LEFT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_RIGHT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_UP;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PASTE;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PRESS_AND_HOLD;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_HTML_ELEMENT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_BACKWARD;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_DOWN;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_FORWARD;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_LEFT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_RIGHT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_TO_POSITION;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_UP;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SELECT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_PROGRESS;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_SELECTION;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_TEXT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_ON_SCREEN;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_TOOLTIP;
- }
-
- public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
- method public int getColumnCount();
- method public int getRowCount();
- method public int getSelectionMode();
- method public boolean isHierarchical();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
- field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
- field public static final int SELECTION_MODE_NONE = 0; // 0x0
- field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
- }
-
- public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
- method public int getColumnIndex();
- method public int getColumnSpan();
- method public int getRowIndex();
- method public int getRowSpan();
- method @Deprecated public boolean isHeading();
- method public boolean isSelected();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
- }
-
- public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
- method public float getCurrent();
- method public float getMax();
- method public float getMin();
- method public int getType();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! obtain(int, float, float, float);
- field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
- field public static final int RANGE_TYPE_INT = 0; // 0x0
- field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
- }
-
- public static final class AccessibilityNodeInfoCompat.TouchDelegateInfoCompat {
- ctor public AccessibilityNodeInfoCompat.TouchDelegateInfoCompat(java.util.Map<android.graphics.Region!,android.view.View!>);
- method public android.graphics.Region? getRegionAt(@IntRange(from=0) int);
- method @IntRange(from=0) public int getRegionCount();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getTargetForRegion(android.graphics.Region);
- }
-
- public class AccessibilityNodeProviderCompat {
- ctor public AccessibilityNodeProviderCompat();
- ctor public AccessibilityNodeProviderCompat(Object?);
- method public void addExtraDataToAccessibilityNodeInfo(int, androidx.core.view.accessibility.AccessibilityNodeInfoCompat, String, android.os.Bundle?);
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? createAccessibilityNodeInfo(int);
- method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>? findAccessibilityNodeInfosByText(String, int);
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? findFocus(int);
- method public Object? getProvider();
- method public boolean performAction(int, int, android.os.Bundle?);
- field public static final int HOST_VIEW_ID = -1; // 0xffffffff
- }
-
- public class AccessibilityRecordCompat {
- ctor @Deprecated public AccessibilityRecordCompat(Object!);
- method @Deprecated public boolean equals(Object?);
- method @Deprecated public int getAddedCount();
- method @Deprecated public CharSequence! getBeforeText();
- method @Deprecated public CharSequence! getClassName();
- method @Deprecated public CharSequence! getContentDescription();
- method @Deprecated public int getCurrentItemIndex();
- method @Deprecated public int getFromIndex();
- method @Deprecated public Object! getImpl();
- method @Deprecated public int getItemCount();
- method @Deprecated public int getMaxScrollX();
- method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord);
- method @Deprecated public int getMaxScrollY();
- method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord);
- method @Deprecated public android.os.Parcelable! getParcelableData();
- method @Deprecated public int getRemovedCount();
- method @Deprecated public int getScrollX();
- method @Deprecated public int getScrollY();
- method @Deprecated public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getSource();
- method @Deprecated public java.util.List<java.lang.CharSequence!>! getText();
- method @Deprecated public int getToIndex();
- method @Deprecated public int getWindowId();
- method @Deprecated public int hashCode();
- method @Deprecated public boolean isChecked();
- method @Deprecated public boolean isEnabled();
- method @Deprecated public boolean isFullScreen();
- method @Deprecated public boolean isPassword();
- method @Deprecated public boolean isScrollable();
- method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
- method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
- method @Deprecated public void recycle();
- method @Deprecated public void setAddedCount(int);
- method @Deprecated public void setBeforeText(CharSequence!);
- method @Deprecated public void setChecked(boolean);
- method @Deprecated public void setClassName(CharSequence!);
- method @Deprecated public void setContentDescription(CharSequence!);
- method @Deprecated public void setCurrentItemIndex(int);
- method @Deprecated public void setEnabled(boolean);
- method @Deprecated public void setFromIndex(int);
- method @Deprecated public void setFullScreen(boolean);
- method @Deprecated public void setItemCount(int);
- method @Deprecated public void setMaxScrollX(int);
- method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
- method @Deprecated public void setMaxScrollY(int);
- method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
- method @Deprecated public void setParcelableData(android.os.Parcelable!);
- method @Deprecated public void setPassword(boolean);
- method @Deprecated public void setRemovedCount(int);
- method @Deprecated public void setScrollX(int);
- method @Deprecated public void setScrollY(int);
- method @Deprecated public void setScrollable(boolean);
- method @Deprecated public void setSource(android.view.View!);
- method @Deprecated public void setSource(android.view.View!, int);
- method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View?, int);
- method @Deprecated public void setToIndex(int);
- }
-
- public interface AccessibilityViewCommand {
- method public boolean perform(android.view.View, androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments?);
- }
-
- public abstract static class AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.CommandArguments();
- }
-
- public static final class AccessibilityViewCommand.MoveAtGranularityArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.MoveAtGranularityArguments();
- method public boolean getExtendSelection();
- method public int getGranularity();
- }
-
- public static final class AccessibilityViewCommand.MoveHtmlArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.MoveHtmlArguments();
- method public String? getHTMLElement();
- }
-
- public static final class AccessibilityViewCommand.MoveWindowArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.MoveWindowArguments();
- method public int getX();
- method public int getY();
- }
-
- public static final class AccessibilityViewCommand.ScrollToPositionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.ScrollToPositionArguments();
- method public int getColumn();
- method public int getRow();
- }
-
- public static final class AccessibilityViewCommand.SetProgressArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.SetProgressArguments();
- method public float getProgress();
- }
-
- public static final class AccessibilityViewCommand.SetSelectionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.SetSelectionArguments();
- method public int getEnd();
- method public int getStart();
- }
-
- public static final class AccessibilityViewCommand.SetTextArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.SetTextArguments();
- method public CharSequence? getText();
- }
-
- public class AccessibilityWindowInfoCompat {
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getAnchor();
- method public void getBoundsInScreen(android.graphics.Rect);
- method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getChild(int);
- method public int getChildCount();
- method public int getId();
- method public int getLayer();
- method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getParent();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getRoot();
- method public CharSequence? getTitle();
- method public int getType();
- method public boolean isAccessibilityFocused();
- method public boolean isActive();
- method public boolean isFocused();
- method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain();
- method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat?);
- method public void recycle();
- field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
- field public static final int TYPE_APPLICATION = 1; // 0x1
- field public static final int TYPE_INPUT_METHOD = 2; // 0x2
- field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
- field public static final int TYPE_SYSTEM = 3; // 0x3
- }
-
-}
-
-package androidx.core.view.animation {
-
- public final class PathInterpolatorCompat {
- method public static android.view.animation.Interpolator create(android.graphics.Path);
- method public static android.view.animation.Interpolator create(float, float);
- method public static android.view.animation.Interpolator create(float, float, float, float);
- }
-
-}
-
-package androidx.core.view.inputmethod {
-
- public final class EditorInfoCompat {
- ctor @Deprecated public EditorInfoCompat();
- method public static String![] getContentMimeTypes(android.view.inputmethod.EditorInfo);
- method public static CharSequence? getInitialSelectedText(android.view.inputmethod.EditorInfo, int);
- method public static CharSequence? getInitialTextAfterCursor(android.view.inputmethod.EditorInfo, int, int);
- method public static CharSequence? getInitialTextBeforeCursor(android.view.inputmethod.EditorInfo, int, int);
- method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, String![]?);
- method public static void setInitialSurroundingSubText(android.view.inputmethod.EditorInfo, CharSequence, int);
- method public static void setInitialSurroundingText(android.view.inputmethod.EditorInfo, CharSequence);
- field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
- field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
- }
-
- public final class InputConnectionCompat {
- ctor @Deprecated public InputConnectionCompat();
- method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
- method @Deprecated public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
- method public static android.view.inputmethod.InputConnection createWrapper(android.view.View, android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
- field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
- }
-
- public static interface InputConnectionCompat.OnCommitContentListener {
- method public boolean onCommitContent(androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
- }
-
- public final class InputContentInfoCompat {
- ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri?);
- method public android.net.Uri getContentUri();
- method public android.content.ClipDescription getDescription();
- method public android.net.Uri? getLinkUri();
- method public void releasePermission();
- method public void requestPermission();
- method public Object? unwrap();
- method public static androidx.core.view.inputmethod.InputContentInfoCompat? wrap(Object?);
- }
-
-}
-
-package androidx.core.widget {
-
- public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
- ctor public AutoScrollHelper(android.view.View);
- method public abstract boolean canTargetScrollHorizontally(int);
- method public abstract boolean canTargetScrollVertically(int);
- method public boolean isEnabled();
- method public boolean isExclusive();
- method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
- method public abstract void scrollTargetBy(int, int);
- method public androidx.core.widget.AutoScrollHelper setActivationDelay(int);
- method public androidx.core.widget.AutoScrollHelper setEdgeType(int);
- method public androidx.core.widget.AutoScrollHelper! setEnabled(boolean);
- method public androidx.core.widget.AutoScrollHelper! setExclusive(boolean);
- method public androidx.core.widget.AutoScrollHelper setMaximumEdges(float, float);
- method public androidx.core.widget.AutoScrollHelper setMaximumVelocity(float, float);
- method public androidx.core.widget.AutoScrollHelper setMinimumVelocity(float, float);
- method public androidx.core.widget.AutoScrollHelper setRampDownDuration(int);
- method public androidx.core.widget.AutoScrollHelper setRampUpDuration(int);
- method public androidx.core.widget.AutoScrollHelper setRelativeEdges(float, float);
- method public androidx.core.widget.AutoScrollHelper setRelativeVelocity(float, float);
- field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
- field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
- field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
- field public static final float NO_MAX = 3.4028235E38f;
- field public static final float NO_MIN = 0.0f;
- field public static final float RELATIVE_UNSPECIFIED = 0.0f;
- }
-
- public final class CheckedTextViewCompat {
- method public static android.graphics.drawable.Drawable? getCheckMarkDrawable(android.widget.CheckedTextView);
- method public static android.content.res.ColorStateList? getCheckMarkTintList(android.widget.CheckedTextView);
- method public static android.graphics.PorterDuff.Mode? getCheckMarkTintMode(android.widget.CheckedTextView);
- method public static void setCheckMarkTintList(android.widget.CheckedTextView, android.content.res.ColorStateList?);
- method public static void setCheckMarkTintMode(android.widget.CheckedTextView, android.graphics.PorterDuff.Mode?);
- }
-
- public final class CompoundButtonCompat {
- method public static android.graphics.drawable.Drawable? getButtonDrawable(android.widget.CompoundButton);
- method public static android.content.res.ColorStateList? getButtonTintList(android.widget.CompoundButton);
- method public static android.graphics.PorterDuff.Mode? getButtonTintMode(android.widget.CompoundButton);
- method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList?);
- method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode?);
- }
-
- public class ContentLoadingProgressBar extends android.widget.ProgressBar {
- ctor public ContentLoadingProgressBar(android.content.Context);
- ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet?);
- method public void hide();
- method public void onAttachedToWindow();
- method public void onDetachedFromWindow();
- method public void show();
- }
-
- public final class EdgeEffectCompat {
- ctor @Deprecated public EdgeEffectCompat(android.content.Context!);
- method public static android.widget.EdgeEffect create(android.content.Context, android.util.AttributeSet?);
- method @Deprecated public boolean draw(android.graphics.Canvas!);
- method @Deprecated public void finish();
- method public static float getDistance(android.widget.EdgeEffect);
- method @Deprecated public boolean isFinished();
- method @Deprecated public boolean onAbsorb(int);
- method @Deprecated public boolean onPull(float);
- method @Deprecated public boolean onPull(float, float);
- method public static void onPull(android.widget.EdgeEffect, float, float);
- method public static float onPullDistance(android.widget.EdgeEffect, float, float);
- method @Deprecated public boolean onRelease();
- method @Deprecated public void setSize(int, int);
- }
-
- public class ImageViewCompat {
- method public static android.content.res.ColorStateList? getImageTintList(android.widget.ImageView);
- method public static android.graphics.PorterDuff.Mode? getImageTintMode(android.widget.ImageView);
- method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList?);
- method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode?);
- }
-
- public final class ListPopupWindowCompat {
- method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
- method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
- }
-
- public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
- ctor public ListViewAutoScrollHelper(android.widget.ListView);
- method public boolean canTargetScrollHorizontally(int);
- method public boolean canTargetScrollVertically(int);
- method public void scrollTargetBy(int, int);
- }
-
- public final class ListViewCompat {
- method public static boolean canScrollList(android.widget.ListView, int);
- method public static void scrollListBy(android.widget.ListView, int);
- }
-
- public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.view.ScrollingView {
- ctor public NestedScrollView(android.content.Context);
- ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?);
- ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?, int);
- method public boolean arrowScroll(int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollExtent();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollOffset();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollRange();
- method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollExtent();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
- method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
- method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
- method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
- method public boolean executeKeyEvent(android.view.KeyEvent);
- method public void fling(int);
- method public boolean fullScroll(int);
- method public int getMaxScrollAmount();
- method public boolean hasNestedScrollingParent(int);
- method public boolean isFillViewport();
- method public boolean isSmoothScrollingEnabled();
- method public void onAttachedToWindow();
- method public void onNestedPreScroll(android.view.View, int, int, int[], int);
- method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
- method public void onNestedScroll(android.view.View, int, int, int, int, int);
- method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
- method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
- method public void onStopNestedScroll(android.view.View, int);
- method public boolean pageScroll(int);
- method public void setFillViewport(boolean);
- method public void setOnScrollChangeListener(androidx.core.widget.NestedScrollView.OnScrollChangeListener?);
- method public void setSmoothScrollingEnabled(boolean);
- method public final void smoothScrollBy(int, int);
- method public final void smoothScrollBy(int, int, int);
- method public final void smoothScrollTo(int, int);
- method public final void smoothScrollTo(int, int, int);
- method public boolean startNestedScroll(int, int);
- method public void stopNestedScroll(int);
- }
-
- public static interface NestedScrollView.OnScrollChangeListener {
- method public void onScrollChange(androidx.core.widget.NestedScrollView, int, int, int, int);
- }
-
- public final class PopupMenuCompat {
- method public static android.view.View.OnTouchListener? getDragToOpenListener(Object);
- }
-
- public final class PopupWindowCompat {
- method public static boolean getOverlapAnchor(android.widget.PopupWindow);
- method public static int getWindowLayoutType(android.widget.PopupWindow);
- method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
- method public static void setWindowLayoutType(android.widget.PopupWindow, int);
- method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
- }
-
- @Deprecated public final class ScrollerCompat {
- method @Deprecated public void abortAnimation();
- method @Deprecated public boolean computeScrollOffset();
- method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!);
- method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!, android.view.animation.Interpolator!);
- method @Deprecated public void fling(int, int, int, int, int, int, int, int);
- method @Deprecated public void fling(int, int, int, int, int, int, int, int, int, int);
- method @Deprecated public float getCurrVelocity();
- method @Deprecated public int getCurrX();
- method @Deprecated public int getCurrY();
- method @Deprecated public int getFinalX();
- method @Deprecated public int getFinalY();
- method @Deprecated public boolean isFinished();
- method @Deprecated public boolean isOverScrolled();
- method @Deprecated public void notifyHorizontalEdgeReached(int, int, int);
- method @Deprecated public void notifyVerticalEdgeReached(int, int, int);
- method @Deprecated public boolean springBack(int, int, int, int, int, int);
- method @Deprecated public void startScroll(int, int, int, int);
- method @Deprecated public void startScroll(int, int, int, int, int);
- }
-
- public final class TextViewCompat {
- method public static int getAutoSizeMaxTextSize(android.widget.TextView);
- method public static int getAutoSizeMinTextSize(android.widget.TextView);
- method public static int getAutoSizeStepGranularity(android.widget.TextView);
- method public static int[] getAutoSizeTextAvailableSizes(android.widget.TextView);
- method public static int getAutoSizeTextType(android.widget.TextView);
- method public static android.content.res.ColorStateList? getCompoundDrawableTintList(android.widget.TextView);
- method public static android.graphics.PorterDuff.Mode? getCompoundDrawableTintMode(android.widget.TextView);
- method public static android.graphics.drawable.Drawable![] getCompoundDrawablesRelative(android.widget.TextView);
- method public static int getFirstBaselineToTopHeight(android.widget.TextView);
- method public static int getLastBaselineToBottomHeight(android.widget.TextView);
- method public static int getMaxLines(android.widget.TextView);
- method public static int getMinLines(android.widget.TextView);
- method public static androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParams(android.widget.TextView);
- method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
- method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
- method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
- method public static void setCompoundDrawableTintList(android.widget.TextView, android.content.res.ColorStateList?);
- method public static void setCompoundDrawableTintMode(android.widget.TextView, android.graphics.PorterDuff.Mode?);
- method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
- method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
- method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
- method public static void setCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
- method public static void setFirstBaselineToTopHeight(android.widget.TextView, @IntRange(from=0) @Px int);
- method public static void setLastBaselineToBottomHeight(android.widget.TextView, @IntRange(from=0) @Px int);
- method public static void setLineHeight(android.widget.TextView, @IntRange(from=0) @Px int);
- method public static void setPrecomputedText(android.widget.TextView, androidx.core.text.PrecomputedTextCompat);
- method public static void setTextAppearance(android.widget.TextView, @StyleRes int);
- method public static void setTextMetricsParams(android.widget.TextView, androidx.core.text.PrecomputedTextCompat.Params);
- field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
- field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
- }
-
- public interface TintableCompoundButton {
- method public android.content.res.ColorStateList? getSupportButtonTintList();
- method public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
- method public void setSupportButtonTintList(android.content.res.ColorStateList?);
- method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
- }
-
- public interface TintableCompoundDrawablesView {
- method public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
- method public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
- method public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
- method public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
- }
-
-}
-
diff --git a/core/core/api/current.txt b/core/core/api/current.txt
index ab4f0cf..a7dd1de 100644
--- a/core/core/api/current.txt
+++ b/core/core/api/current.txt
@@ -167,6 +167,10 @@
method @Deprecated public void setInterruptIfStopped(boolean);
}
+ public final class LocaleManagerCompat {
+ method @AnyThread public static androidx.core.os.LocaleListCompat getSystemLocales(android.content.Context);
+ }
+
public final class MultiWindowModeChangedInfo {
ctor public MultiWindowModeChangedInfo(boolean);
ctor @RequiresApi(26) public MultiWindowModeChangedInfo(boolean, android.content.res.Configuration);
@@ -1010,10 +1014,15 @@
method public static <T> T? getSystemService(android.content.Context, Class<T!>);
method public static String? getSystemServiceName(android.content.Context, Class<?>);
method public static boolean isDeviceProtectedStorage(android.content.Context);
+ method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, int);
+ method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, String?, android.os.Handler?, int);
method public static boolean startActivities(android.content.Context, android.content.Intent![]);
method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
method public static void startForegroundService(android.content.Context, android.content.Intent);
+ field public static final int RECEIVER_EXPORTED = 2; // 0x2
+ field public static final int RECEIVER_NOT_EXPORTED = 4; // 0x4
+ field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1
}
public class FileProvider extends android.content.ContentProvider {
@@ -1749,6 +1758,7 @@
method public java.util.Locale? getFirstMatch(String![]);
method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale?);
method public boolean isEmpty();
+ method @RequiresApi(21) public static boolean matchesLanguageAndScript(java.util.Locale, java.util.Locale);
method @IntRange(from=0) public int size();
method public String toLanguageTags();
method public Object? unwrap();
@@ -1767,7 +1777,18 @@
}
public final class ParcelCompat {
+ method public static <T> T![]? readArray(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> java.util.ArrayList<T!>? readArrayList(android.os.Parcel, ClassLoader?, Class<? extends T>);
method public static boolean readBoolean(android.os.Parcel);
+ method public static <K, V> java.util.HashMap<K!,V!>? readHashMap(android.os.Parcel, ClassLoader?, Class<? extends K>, Class<? extends V>);
+ method public static <T> void readList(android.os.Parcel, java.util.List<? super T>, ClassLoader?, Class<T!>);
+ method public static <K, V> void readMap(android.os.Parcel, java.util.Map<? super K,? super V>, ClassLoader?, Class<K!>, Class<V!>);
+ method public static <T extends android.os.Parcelable> T? readParcelable(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> T![]? readParcelableArray(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @RequiresApi(30) public static <T> android.os.Parcelable.Creator<T!>? readParcelableCreator(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public static <T> java.util.List<T!> readParcelableList(android.os.Parcel, java.util.List<T!>, ClassLoader?, Class<T!>);
+ method public static <T extends java.io.Serializable> T? readSerializable(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> android.util.SparseArray<T!>? readSparseArray(android.os.Parcel, ClassLoader?, Class<? extends T>);
method public static void writeBoolean(android.os.Parcel, boolean);
}
@@ -3036,6 +3057,9 @@
method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 512; // 0x200
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 256; // 0x100
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 128; // 0x80
field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
@@ -3098,7 +3122,7 @@
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
- method public int getActions();
+ method @Deprecated public int getActions();
method public java.util.List<java.lang.String!> getAvailableExtraData();
method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
method public void getBoundsInScreen(android.graphics.Rect!);
@@ -3110,6 +3134,7 @@
method public CharSequence! getContentDescription();
method public int getDrawingOrder();
method public CharSequence! getError();
+ method public android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo? getExtraRenderingInfo();
method public android.os.Bundle! getExtras();
method public CharSequence? getHintText();
method @Deprecated public Object! getInfo();
@@ -3132,6 +3157,7 @@
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+ method public String? getUniqueId();
method public String! getViewIdResourceName();
method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
method public int getWindowId();
@@ -3225,6 +3251,7 @@
method public void setTraversalAfter(android.view.View!, int);
method public void setTraversalBefore(android.view.View!);
method public void setTraversalBefore(android.view.View!, int);
+ method public void setUniqueId(String?);
method public void setViewIdResourceName(String!);
method public void setVisibleToUser(boolean);
method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
@@ -3290,6 +3317,9 @@
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_CANCEL;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_DROP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_START;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
@@ -3484,18 +3514,22 @@
method public void getBoundsInScreen(android.graphics.Rect);
method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getChild(int);
method public int getChildCount();
+ method public int getDisplayId();
method public int getId();
method public int getLayer();
method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getParent();
+ method public void getRegionInScreen(android.graphics.Region);
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getRoot();
method public CharSequence? getTitle();
method public int getType();
method public boolean isAccessibilityFocused();
method public boolean isActive();
method public boolean isFocused();
+ method public boolean isInPictureInPictureMode();
method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain();
method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat?);
method public void recycle();
+ method public android.view.accessibility.AccessibilityWindowInfo? unwrap();
field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
field public static final int TYPE_APPLICATION = 1; // 0x1
field public static final int TYPE_INPUT_METHOD = 2; // 0x2
diff --git a/core/core/api/public_plus_experimental_1.8.0-beta02.txt b/core/core/api/public_plus_experimental_1.8.0-beta02.txt
index 8ea9b73..abd1c17 100644
--- a/core/core/api/public_plus_experimental_1.8.0-beta02.txt
+++ b/core/core/api/public_plus_experimental_1.8.0-beta02.txt
@@ -1690,8 +1690,8 @@
method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.Q) public static boolean isAtLeastQ();
method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.R) public static boolean isAtLeastR();
method @Deprecated @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
- method @Deprecated @ChecksSdkIntAtLeast(api=32, codename="Sv2") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastSv2();
- method @Deprecated @ChecksSdkIntAtLeast(codename="Tiramisu") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastT();
+ method @ChecksSdkIntAtLeast(api=32, codename="Sv2") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastSv2();
+ method @ChecksSdkIntAtLeast(codename="Tiramisu") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastT();
}
@RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public static @interface BuildCompat.PrereleaseSdkCheck {
diff --git a/core/core/api/public_plus_experimental_current.txt b/core/core/api/public_plus_experimental_current.txt
index aa1b219..3977d25 100644
--- a/core/core/api/public_plus_experimental_current.txt
+++ b/core/core/api/public_plus_experimental_current.txt
@@ -167,6 +167,10 @@
method @Deprecated public void setInterruptIfStopped(boolean);
}
+ public final class LocaleManagerCompat {
+ method @AnyThread public static androidx.core.os.LocaleListCompat getSystemLocales(android.content.Context);
+ }
+
public final class MultiWindowModeChangedInfo {
ctor public MultiWindowModeChangedInfo(boolean);
ctor @RequiresApi(26) public MultiWindowModeChangedInfo(boolean, android.content.res.Configuration);
@@ -1010,10 +1014,15 @@
method public static <T> T? getSystemService(android.content.Context, Class<T!>);
method public static String? getSystemServiceName(android.content.Context, Class<?>);
method public static boolean isDeviceProtectedStorage(android.content.Context);
+ method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, int);
+ method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, String?, android.os.Handler?, int);
method public static boolean startActivities(android.content.Context, android.content.Intent![]);
method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
method public static void startForegroundService(android.content.Context, android.content.Intent);
+ field public static final int RECEIVER_EXPORTED = 2; // 0x2
+ field public static final int RECEIVER_NOT_EXPORTED = 4; // 0x4
+ field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1
}
public class FileProvider extends android.content.ContentProvider {
@@ -1755,6 +1764,7 @@
method public java.util.Locale? getFirstMatch(String![]);
method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale?);
method public boolean isEmpty();
+ method @RequiresApi(21) public static boolean matchesLanguageAndScript(java.util.Locale, java.util.Locale);
method @IntRange(from=0) public int size();
method public String toLanguageTags();
method public Object? unwrap();
@@ -1773,7 +1783,18 @@
}
public final class ParcelCompat {
+ method public static <T> T![]? readArray(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> java.util.ArrayList<T!>? readArrayList(android.os.Parcel, ClassLoader?, Class<? extends T>);
method public static boolean readBoolean(android.os.Parcel);
+ method public static <K, V> java.util.HashMap<K!,V!>? readHashMap(android.os.Parcel, ClassLoader?, Class<? extends K>, Class<? extends V>);
+ method public static <T> void readList(android.os.Parcel, java.util.List<? super T>, ClassLoader?, Class<T!>);
+ method public static <K, V> void readMap(android.os.Parcel, java.util.Map<? super K,? super V>, ClassLoader?, Class<K!>, Class<V!>);
+ method public static <T extends android.os.Parcelable> T? readParcelable(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> T![]? readParcelableArray(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @RequiresApi(30) public static <T> android.os.Parcelable.Creator<T!>? readParcelableCreator(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public static <T> java.util.List<T!> readParcelableList(android.os.Parcel, java.util.List<T!>, ClassLoader?, Class<T!>);
+ method public static <T extends java.io.Serializable> T? readSerializable(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> android.util.SparseArray<T!>? readSparseArray(android.os.Parcel, ClassLoader?, Class<? extends T>);
method public static void writeBoolean(android.os.Parcel, boolean);
}
@@ -3042,6 +3063,9 @@
method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, int);
method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 512; // 0x200
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 256; // 0x100
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 128; // 0x80
field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
@@ -3104,7 +3128,7 @@
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
- method public int getActions();
+ method @Deprecated public int getActions();
method public java.util.List<java.lang.String!> getAvailableExtraData();
method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
method public void getBoundsInScreen(android.graphics.Rect!);
@@ -3116,6 +3140,7 @@
method public CharSequence! getContentDescription();
method public int getDrawingOrder();
method public CharSequence! getError();
+ method public android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo? getExtraRenderingInfo();
method public android.os.Bundle! getExtras();
method public CharSequence? getHintText();
method @Deprecated public Object! getInfo();
@@ -3138,6 +3163,7 @@
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+ method public String? getUniqueId();
method public String! getViewIdResourceName();
method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
method public int getWindowId();
@@ -3231,6 +3257,7 @@
method public void setTraversalAfter(android.view.View!, int);
method public void setTraversalBefore(android.view.View!);
method public void setTraversalBefore(android.view.View!, int);
+ method public void setUniqueId(String?);
method public void setViewIdResourceName(String!);
method public void setVisibleToUser(boolean);
method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
@@ -3296,6 +3323,9 @@
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_CANCEL;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_DROP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_START;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
@@ -3490,18 +3520,22 @@
method public void getBoundsInScreen(android.graphics.Rect);
method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getChild(int);
method public int getChildCount();
+ method public int getDisplayId();
method public int getId();
method public int getLayer();
method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getParent();
+ method public void getRegionInScreen(android.graphics.Region);
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getRoot();
method public CharSequence? getTitle();
method public int getType();
method public boolean isAccessibilityFocused();
method public boolean isActive();
method public boolean isFocused();
+ method public boolean isInPictureInPictureMode();
method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain();
method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat?);
method public void recycle();
+ method public android.view.accessibility.AccessibilityWindowInfo? unwrap();
field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
field public static final int TYPE_APPLICATION = 1; // 0x1
field public static final int TYPE_INPUT_METHOD = 2; // 0x2
diff --git a/core/core/api/res-1.8.0-beta01.txt b/core/core/api/res-1.8.0-beta01.txt
deleted file mode 100644
index dd913d3..0000000
--- a/core/core/api/res-1.8.0-beta01.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-attr alpha
-attr font
-attr fontProviderAuthority
-attr fontProviderCerts
-attr fontProviderFetchStrategy
-attr fontProviderFetchTimeout
-attr fontProviderPackage
-attr fontProviderQuery
-attr fontProviderSystemFontFamily
-attr fontStyle
-attr fontVariationSettings
-attr fontWeight
-attr lStar
-attr queryPatterns
-attr shortcutMatchRequired
-attr ttcIndex
-style TextAppearance_Compat_Notification
-style TextAppearance_Compat_Notification_Info
-style TextAppearance_Compat_Notification_Line2
-style TextAppearance_Compat_Notification_Time
-style TextAppearance_Compat_Notification_Title
diff --git a/core/core/api/restricted_1.8.0-beta01.txt b/core/core/api/restricted_1.8.0-beta01.txt
deleted file mode 100644
index ec250b5..0000000
--- a/core/core/api/restricted_1.8.0-beta01.txt
+++ /dev/null
@@ -1,4263 +0,0 @@
-// Signature format: 4.0
-package android.support.v4.os {
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ResultReceiver implements android.os.Parcelable {
- ctor public ResultReceiver(android.os.Handler!);
- method public int describeContents();
- method protected void onReceiveResult(int, android.os.Bundle!);
- method public void send(int, android.os.Bundle!);
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.support.v4.os.ResultReceiver!>! CREATOR;
- }
-
-}
-
-package androidx.core.accessibilityservice {
-
- public final class AccessibilityServiceInfoCompat {
- method public static String capabilityToString(int);
- method public static String feedbackTypeToString(int);
- method public static String? flagToString(int);
- method public static int getCapabilities(android.accessibilityservice.AccessibilityServiceInfo);
- method public static String? loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager);
- field public static final int CAPABILITY_CAN_FILTER_KEY_EVENTS = 8; // 0x8
- field public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
- field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
- field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
- field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
- field public static final int FEEDBACK_BRAILLE = 32; // 0x20
- field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
- field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
- field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
- field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
- field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
- }
-
-}
-
-package androidx.core.app {
-
- public class ActivityCompat extends androidx.core.content.ContextCompat {
- ctor protected ActivityCompat();
- method public static void finishAffinity(android.app.Activity);
- method public static void finishAfterTransition(android.app.Activity);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.ActivityCompat.PermissionCompatDelegate? getPermissionCompatDelegate();
- method public static android.net.Uri? getReferrer(android.app.Activity);
- method @Deprecated public static boolean invalidateOptionsMenu(android.app.Activity!);
- method public static boolean isLaunchedFromBubble(android.app.Activity);
- method public static void postponeEnterTransition(android.app.Activity);
- method public static void recreate(android.app.Activity);
- method public static androidx.core.view.DragAndDropPermissionsCompat? requestDragAndDropPermissions(android.app.Activity, android.view.DragEvent);
- method public static void requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
- method public static <T extends android.view.View> T requireViewById(android.app.Activity, @IdRes int);
- method public static void setEnterSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
- method public static void setExitSharedElementCallback(android.app.Activity, androidx.core.app.SharedElementCallback?);
- method public static void setLocusContext(android.app.Activity, androidx.core.content.LocusIdCompat?, android.os.Bundle?);
- method public static void setPermissionCompatDelegate(androidx.core.app.ActivityCompat.PermissionCompatDelegate?);
- method public static boolean shouldShowRequestPermissionRationale(android.app.Activity, String);
- method public static void startActivityForResult(android.app.Activity, android.content.Intent, int, android.os.Bundle?);
- method public static void startIntentSenderForResult(android.app.Activity, android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
- method public static void startPostponedEnterTransition(android.app.Activity);
- }
-
- public static interface ActivityCompat.OnRequestPermissionsResultCallback {
- method public void onRequestPermissionsResult(int, String![], int[]);
- }
-
- public static interface ActivityCompat.PermissionCompatDelegate {
- method public boolean onActivityResult(android.app.Activity, @IntRange(from=0) int, int, android.content.Intent?);
- method public boolean requestPermissions(android.app.Activity, String![], @IntRange(from=0) int);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface ActivityCompat.RequestPermissionsRequestCodeValidator {
- method public void validateRequestPermissionsRequestCode(int);
- }
-
- public final class ActivityManagerCompat {
- method public static boolean isLowRamDevice(android.app.ActivityManager);
- }
-
- public class ActivityOptionsCompat {
- ctor protected ActivityOptionsCompat();
- method public android.graphics.Rect? getLaunchBounds();
- method public static androidx.core.app.ActivityOptionsCompat makeBasic();
- method public static androidx.core.app.ActivityOptionsCompat makeClipRevealAnimation(android.view.View, int, int, int, int);
- method public static androidx.core.app.ActivityOptionsCompat makeCustomAnimation(android.content.Context, int, int);
- method public static androidx.core.app.ActivityOptionsCompat makeScaleUpAnimation(android.view.View, int, int, int, int);
- method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
- method public static androidx.core.app.ActivityOptionsCompat makeSceneTransitionAnimation(android.app.Activity, androidx.core.util.Pair<android.view.View!,java.lang.String!>!...);
- method public static androidx.core.app.ActivityOptionsCompat makeTaskLaunchBehind();
- method public static androidx.core.app.ActivityOptionsCompat makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
- method public void requestUsageTimeReport(android.app.PendingIntent);
- method public androidx.core.app.ActivityOptionsCompat setLaunchBounds(android.graphics.Rect?);
- method public android.os.Bundle? toBundle();
- method public void update(androidx.core.app.ActivityOptionsCompat);
- field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
- field public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
- }
-
- public final class AlarmManagerCompat {
- method public static void setAlarmClock(android.app.AlarmManager, long, android.app.PendingIntent, android.app.PendingIntent);
- method public static void setAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
- method public static void setExact(android.app.AlarmManager, int, long, android.app.PendingIntent);
- method public static void setExactAndAllowWhileIdle(android.app.AlarmManager, int, long, android.app.PendingIntent);
- }
-
- @RequiresApi(28) public class AppComponentFactory extends android.app.AppComponentFactory {
- ctor public AppComponentFactory();
- method public final android.app.Activity instantiateActivity(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public android.app.Activity instantiateActivityCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public final android.app.Application instantiateApplication(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public android.app.Application instantiateApplicationCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public final android.content.ContentProvider instantiateProvider(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public android.content.ContentProvider instantiateProviderCompat(ClassLoader, String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public final android.content.BroadcastReceiver instantiateReceiver(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public android.content.BroadcastReceiver instantiateReceiverCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public final android.app.Service instantiateService(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- method public android.app.Service instantiateServiceCompat(ClassLoader, String, android.content.Intent?) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
- }
-
- public class AppLaunchChecker {
- ctor @Deprecated public AppLaunchChecker();
- method public static boolean hasStartedFromLauncher(android.content.Context);
- method public static void onActivityCreate(android.app.Activity);
- }
-
- public final class AppOpsManagerCompat {
- method public static int checkOrNoteProxyOp(android.content.Context, int, String, String);
- method public static int noteOp(android.content.Context, String, int, String);
- method public static int noteOpNoThrow(android.content.Context, String, int, String);
- method public static int noteProxyOp(android.content.Context, String, String);
- method public static int noteProxyOpNoThrow(android.content.Context, String, String);
- method public static String? permissionToOp(String);
- field public static final int MODE_ALLOWED = 0; // 0x0
- field public static final int MODE_DEFAULT = 3; // 0x3
- field public static final int MODE_ERRORED = 2; // 0x2
- field public static final int MODE_IGNORED = 1; // 0x1
- }
-
- public final class BundleCompat {
- method public static android.os.IBinder? getBinder(android.os.Bundle, String?);
- method public static void putBinder(android.os.Bundle, String?, android.os.IBinder?);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ComponentActivity extends android.app.Activity implements androidx.core.view.KeyEventDispatcher.Component androidx.lifecycle.LifecycleOwner {
- ctor public ComponentActivity();
- method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public <T extends androidx.core.app.ComponentActivity.ExtraData> T! getExtraData(Class<T!>!);
- method public androidx.lifecycle.Lifecycle getLifecycle();
- method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void putExtraData(androidx.core.app.ComponentActivity.ExtraData!);
- method protected final boolean shouldDumpInternalState(String![]?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean superDispatchKeyEvent(android.view.KeyEvent);
- }
-
- @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class ComponentActivity.ExtraData {
- ctor @Deprecated public ComponentActivity.ExtraData();
- }
-
- @RequiresApi(api=28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class CoreComponentFactory extends android.app.AppComponentFactory {
- ctor public CoreComponentFactory();
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface CoreComponentFactory.CompatWrapped {
- method public Object! getWrapper();
- }
-
- public class DialogCompat {
- method public static android.view.View requireViewById(android.app.Dialog, int);
- }
-
- public class FrameMetricsAggregator {
- ctor public FrameMetricsAggregator();
- ctor public FrameMetricsAggregator(@androidx.core.app.FrameMetricsAggregator.MetricType int);
- method public void add(android.app.Activity);
- method public android.util.SparseIntArray![]? getMetrics();
- method public android.util.SparseIntArray![]? remove(android.app.Activity);
- method public android.util.SparseIntArray![]? reset();
- method public android.util.SparseIntArray![]? stop();
- field public static final int ANIMATION_DURATION = 256; // 0x100
- field public static final int ANIMATION_INDEX = 8; // 0x8
- field public static final int COMMAND_DURATION = 32; // 0x20
- field public static final int COMMAND_INDEX = 5; // 0x5
- field public static final int DELAY_DURATION = 128; // 0x80
- field public static final int DELAY_INDEX = 7; // 0x7
- field public static final int DRAW_DURATION = 8; // 0x8
- field public static final int DRAW_INDEX = 3; // 0x3
- field public static final int EVERY_DURATION = 511; // 0x1ff
- field public static final int INPUT_DURATION = 2; // 0x2
- field public static final int INPUT_INDEX = 1; // 0x1
- field public static final int LAYOUT_MEASURE_DURATION = 4; // 0x4
- field public static final int LAYOUT_MEASURE_INDEX = 2; // 0x2
- field public static final int SWAP_DURATION = 64; // 0x40
- field public static final int SWAP_INDEX = 6; // 0x6
- field public static final int SYNC_DURATION = 16; // 0x10
- field public static final int SYNC_INDEX = 4; // 0x4
- field public static final int TOTAL_DURATION = 1; // 0x1
- field public static final int TOTAL_INDEX = 0; // 0x0
- }
-
- @IntDef(flag=true, value={androidx.core.app.FrameMetricsAggregator.TOTAL_DURATION, androidx.core.app.FrameMetricsAggregator.INPUT_DURATION, androidx.core.app.FrameMetricsAggregator.LAYOUT_MEASURE_DURATION, androidx.core.app.FrameMetricsAggregator.DRAW_DURATION, androidx.core.app.FrameMetricsAggregator.SYNC_DURATION, androidx.core.app.FrameMetricsAggregator.COMMAND_DURATION, androidx.core.app.FrameMetricsAggregator.SWAP_DURATION, androidx.core.app.FrameMetricsAggregator.DELAY_DURATION, androidx.core.app.FrameMetricsAggregator.ANIMATION_DURATION, androidx.core.app.FrameMetricsAggregator.EVERY_DURATION}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FrameMetricsAggregator.MetricType {
- }
-
- @Deprecated public abstract class JobIntentService extends android.app.Service {
- ctor @Deprecated public JobIntentService();
- method @Deprecated public static void enqueueWork(android.content.Context, Class<?>, int, android.content.Intent);
- method @Deprecated public static void enqueueWork(android.content.Context, android.content.ComponentName, int, android.content.Intent);
- method @Deprecated public boolean isStopped();
- method @Deprecated public android.os.IBinder! onBind(android.content.Intent);
- method @Deprecated protected abstract void onHandleWork(android.content.Intent);
- method @Deprecated public boolean onStopCurrentWork();
- method @Deprecated public void setInterruptIfStopped(boolean);
- }
-
- public final class MultiWindowModeChangedInfo {
- ctor public MultiWindowModeChangedInfo(boolean);
- ctor @RequiresApi(26) public MultiWindowModeChangedInfo(boolean, android.content.res.Configuration);
- method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
- method public boolean isInMultiWindowMode();
- }
-
- public final class NavUtils {
- method public static android.content.Intent? getParentActivityIntent(android.app.Activity);
- method public static android.content.Intent? getParentActivityIntent(android.content.Context, Class<?>) throws android.content.pm.PackageManager.NameNotFoundException;
- method public static android.content.Intent? getParentActivityIntent(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
- method public static String? getParentActivityName(android.app.Activity);
- method public static String? getParentActivityName(android.content.Context, android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
- method public static void navigateUpFromSameTask(android.app.Activity);
- method public static void navigateUpTo(android.app.Activity, android.content.Intent);
- method public static boolean shouldUpRecreateTask(android.app.Activity, android.content.Intent);
- field public static final String PARENT_ACTIVITY = "android.support.PARENT_ACTIVITY";
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface NotificationBuilderWithBuilderAccessor {
- method public android.app.Notification.Builder! getBuilder();
- }
-
- public class NotificationChannelCompat {
- method public boolean canBubble();
- method public boolean canBypassDnd();
- method public boolean canShowBadge();
- method public android.media.AudioAttributes? getAudioAttributes();
- method public String? getConversationId();
- method public String? getDescription();
- method public String? getGroup();
- method public String getId();
- method public int getImportance();
- method public int getLightColor();
- method @androidx.core.app.NotificationCompat.NotificationVisibility public int getLockscreenVisibility();
- method public CharSequence? getName();
- method public String? getParentChannelId();
- method public android.net.Uri? getSound();
- method public long[]? getVibrationPattern();
- method public boolean isImportantConversation();
- method public boolean shouldShowLights();
- method public boolean shouldVibrate();
- method public androidx.core.app.NotificationChannelCompat.Builder toBuilder();
- field public static final String DEFAULT_CHANNEL_ID = "miscellaneous";
- }
-
- public static class NotificationChannelCompat.Builder {
- ctor public NotificationChannelCompat.Builder(String, int);
- method public androidx.core.app.NotificationChannelCompat build();
- method public androidx.core.app.NotificationChannelCompat.Builder setConversationId(String, String);
- method public androidx.core.app.NotificationChannelCompat.Builder setDescription(String?);
- method public androidx.core.app.NotificationChannelCompat.Builder setGroup(String?);
- method public androidx.core.app.NotificationChannelCompat.Builder setImportance(int);
- method public androidx.core.app.NotificationChannelCompat.Builder setLightColor(int);
- method public androidx.core.app.NotificationChannelCompat.Builder setLightsEnabled(boolean);
- method public androidx.core.app.NotificationChannelCompat.Builder setName(CharSequence?);
- method public androidx.core.app.NotificationChannelCompat.Builder setShowBadge(boolean);
- method public androidx.core.app.NotificationChannelCompat.Builder setSound(android.net.Uri?, android.media.AudioAttributes?);
- method public androidx.core.app.NotificationChannelCompat.Builder setVibrationEnabled(boolean);
- method public androidx.core.app.NotificationChannelCompat.Builder setVibrationPattern(long[]?);
- }
-
- public class NotificationChannelGroupCompat {
- method public java.util.List<androidx.core.app.NotificationChannelCompat!> getChannels();
- method public String? getDescription();
- method public String getId();
- method public CharSequence? getName();
- method public boolean isBlocked();
- method public androidx.core.app.NotificationChannelGroupCompat.Builder toBuilder();
- }
-
- public static class NotificationChannelGroupCompat.Builder {
- ctor public NotificationChannelGroupCompat.Builder(String);
- method public androidx.core.app.NotificationChannelGroupCompat build();
- method public androidx.core.app.NotificationChannelGroupCompat.Builder setDescription(String?);
- method public androidx.core.app.NotificationChannelGroupCompat.Builder setName(CharSequence?);
- }
-
- public class NotificationCompat {
- ctor @Deprecated public NotificationCompat();
- method public static androidx.core.app.NotificationCompat.Action? getAction(android.app.Notification, int);
- method public static int getActionCount(android.app.Notification);
- method public static boolean getAllowSystemGeneratedContextualActions(android.app.Notification);
- method public static boolean getAutoCancel(android.app.Notification);
- method public static int getBadgeIconType(android.app.Notification);
- method public static androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata(android.app.Notification);
- method public static String? getCategory(android.app.Notification);
- method public static String? getChannelId(android.app.Notification);
- method public static int getColor(android.app.Notification);
- method @RequiresApi(19) public static CharSequence? getContentInfo(android.app.Notification);
- method @RequiresApi(19) public static CharSequence? getContentText(android.app.Notification);
- method @RequiresApi(19) public static CharSequence? getContentTitle(android.app.Notification);
- method public static android.os.Bundle? getExtras(android.app.Notification);
- method public static String? getGroup(android.app.Notification);
- method @androidx.core.app.NotificationCompat.GroupAlertBehavior public static int getGroupAlertBehavior(android.app.Notification);
- method @RequiresApi(21) public static java.util.List<androidx.core.app.NotificationCompat.Action!> getInvisibleActions(android.app.Notification);
- method public static boolean getLocalOnly(android.app.Notification);
- method public static androidx.core.content.LocusIdCompat? getLocusId(android.app.Notification);
- method public static boolean getOngoing(android.app.Notification);
- method public static boolean getOnlyAlertOnce(android.app.Notification);
- method public static java.util.List<androidx.core.app.Person!> getPeople(android.app.Notification);
- method public static android.app.Notification? getPublicVersion(android.app.Notification);
- method public static CharSequence? getSettingsText(android.app.Notification);
- method public static String? getShortcutId(android.app.Notification);
- method @RequiresApi(19) public static boolean getShowWhen(android.app.Notification);
- method public static String? getSortKey(android.app.Notification);
- method @RequiresApi(19) public static CharSequence? getSubText(android.app.Notification);
- method public static long getTimeoutAfter(android.app.Notification);
- method @RequiresApi(19) public static boolean getUsesChronometer(android.app.Notification);
- method @androidx.core.app.NotificationCompat.NotificationVisibility public static int getVisibility(android.app.Notification);
- method public static boolean isGroupSummary(android.app.Notification);
- field public static final int BADGE_ICON_LARGE = 2; // 0x2
- field public static final int BADGE_ICON_NONE = 0; // 0x0
- field public static final int BADGE_ICON_SMALL = 1; // 0x1
- field public static final String CATEGORY_ALARM = "alarm";
- field public static final String CATEGORY_CALL = "call";
- field public static final String CATEGORY_EMAIL = "email";
- field public static final String CATEGORY_ERROR = "err";
- field public static final String CATEGORY_EVENT = "event";
- field public static final String CATEGORY_LOCATION_SHARING = "location_sharing";
- field public static final String CATEGORY_MESSAGE = "msg";
- field public static final String CATEGORY_MISSED_CALL = "missed_call";
- field public static final String CATEGORY_NAVIGATION = "navigation";
- field public static final String CATEGORY_PROGRESS = "progress";
- field public static final String CATEGORY_PROMO = "promo";
- field public static final String CATEGORY_RECOMMENDATION = "recommendation";
- field public static final String CATEGORY_REMINDER = "reminder";
- field public static final String CATEGORY_SERVICE = "service";
- field public static final String CATEGORY_SOCIAL = "social";
- field public static final String CATEGORY_STATUS = "status";
- field public static final String CATEGORY_STOPWATCH = "stopwatch";
- field public static final String CATEGORY_SYSTEM = "sys";
- field public static final String CATEGORY_TRANSPORT = "transport";
- field public static final String CATEGORY_WORKOUT = "workout";
- field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0
- field public static final int DEFAULT_ALL = -1; // 0xffffffff
- field public static final int DEFAULT_LIGHTS = 4; // 0x4
- field public static final int DEFAULT_SOUND = 1; // 0x1
- field public static final int DEFAULT_VIBRATE = 2; // 0x2
- field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
- field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
- field public static final String EXTRA_BIG_TEXT = "android.bigText";
- field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
- field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
- field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
- field public static final String EXTRA_COLORIZED = "android.colorized";
- field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
- field public static final String EXTRA_COMPAT_TEMPLATE = "androidx.core.app.extra.COMPAT_TEMPLATE";
- field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
- field public static final String EXTRA_HIDDEN_CONVERSATION_TITLE = "android.hiddenConversationTitle";
- field public static final String EXTRA_HISTORIC_MESSAGES = "android.messages.historic";
- field public static final String EXTRA_INFO_TEXT = "android.infoText";
- field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
- field public static final String EXTRA_LARGE_ICON = "android.largeIcon";
- field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
- field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
- field public static final String EXTRA_MESSAGES = "android.messages";
- field public static final String EXTRA_MESSAGING_STYLE_USER = "android.messagingStyleUser";
- field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
- field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
- field @Deprecated public static final String EXTRA_PEOPLE = "android.people";
- field public static final String EXTRA_PEOPLE_LIST = "android.people.list";
- field public static final String EXTRA_PICTURE = "android.picture";
- field public static final String EXTRA_PICTURE_CONTENT_DESCRIPTION = "android.pictureContentDescription";
- field public static final String EXTRA_PROGRESS = "android.progress";
- field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
- field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
- field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
- field public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
- field public static final String EXTRA_SHOW_BIG_PICTURE_WHEN_COLLAPSED = "android.showBigPictureWhenCollapsed";
- field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
- field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
- field public static final String EXTRA_SMALL_ICON = "android.icon";
- field public static final String EXTRA_SUB_TEXT = "android.subText";
- field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
- field public static final String EXTRA_TEMPLATE = "android.template";
- field public static final String EXTRA_TEXT = "android.text";
- field public static final String EXTRA_TEXT_LINES = "android.textLines";
- field public static final String EXTRA_TITLE = "android.title";
- field public static final String EXTRA_TITLE_BIG = "android.title.big";
- field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
- field public static final int FLAG_BUBBLE = 4096; // 0x1000
- field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
- field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
- field @Deprecated public static final int FLAG_HIGH_PRIORITY = 128; // 0x80
- field public static final int FLAG_INSISTENT = 4; // 0x4
- field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
- field public static final int FLAG_NO_CLEAR = 32; // 0x20
- field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
- field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
- field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
- field public static final int FOREGROUND_SERVICE_DEFAULT = 0; // 0x0
- field public static final int FOREGROUND_SERVICE_DEFERRED = 2; // 0x2
- field public static final int FOREGROUND_SERVICE_IMMEDIATE = 1; // 0x1
- field public static final int GROUP_ALERT_ALL = 0; // 0x0
- field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
- field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
- field public static final String GROUP_KEY_SILENT = "silent";
- field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
- field public static final int PRIORITY_DEFAULT = 0; // 0x0
- field public static final int PRIORITY_HIGH = 1; // 0x1
- field public static final int PRIORITY_LOW = -1; // 0xffffffff
- field public static final int PRIORITY_MAX = 2; // 0x2
- field public static final int PRIORITY_MIN = -2; // 0xfffffffe
- field public static final int STREAM_DEFAULT = -1; // 0xffffffff
- field public static final int VISIBILITY_PRIVATE = 0; // 0x0
- field public static final int VISIBILITY_PUBLIC = 1; // 0x1
- field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
- }
-
- public static class NotificationCompat.Action {
- ctor public NotificationCompat.Action(int, CharSequence?, android.app.PendingIntent?);
- ctor public NotificationCompat.Action(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
- method public android.app.PendingIntent? getActionIntent();
- method public boolean getAllowGeneratedReplies();
- method public androidx.core.app.RemoteInput![]? getDataOnlyRemoteInputs();
- method public android.os.Bundle getExtras();
- method @Deprecated public int getIcon();
- method public androidx.core.graphics.drawable.IconCompat? getIconCompat();
- method public androidx.core.app.RemoteInput![]? getRemoteInputs();
- method @androidx.core.app.NotificationCompat.Action.SemanticAction public int getSemanticAction();
- method public boolean getShowsUserInterface();
- method public CharSequence? getTitle();
- method public boolean isAuthenticationRequired();
- method public boolean isContextual();
- field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
- field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
- field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
- field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2
- field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3
- field public static final int SEMANTIC_ACTION_MUTE = 6; // 0x6
- field public static final int SEMANTIC_ACTION_NONE = 0; // 0x0
- field public static final int SEMANTIC_ACTION_REPLY = 1; // 0x1
- field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
- field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
- field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
- field public android.app.PendingIntent! actionIntent;
- field @Deprecated public int icon;
- field public CharSequence! title;
- }
-
- public static final class NotificationCompat.Action.Builder {
- ctor public NotificationCompat.Action.Builder(androidx.core.graphics.drawable.IconCompat?, CharSequence?, android.app.PendingIntent?);
- ctor public NotificationCompat.Action.Builder(int, CharSequence?, android.app.PendingIntent?);
- ctor public NotificationCompat.Action.Builder(androidx.core.app.NotificationCompat.Action);
- method public androidx.core.app.NotificationCompat.Action.Builder addExtras(android.os.Bundle?);
- method public androidx.core.app.NotificationCompat.Action.Builder addRemoteInput(androidx.core.app.RemoteInput?);
- method public androidx.core.app.NotificationCompat.Action build();
- method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Extender);
- method @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.NotificationCompat.Action.Builder fromAndroidAction(android.app.Notification.Action);
- method public android.os.Bundle getExtras();
- method public androidx.core.app.NotificationCompat.Action.Builder setAllowGeneratedReplies(boolean);
- method public androidx.core.app.NotificationCompat.Action.Builder setAuthenticationRequired(boolean);
- method public androidx.core.app.NotificationCompat.Action.Builder setContextual(boolean);
- method public androidx.core.app.NotificationCompat.Action.Builder setSemanticAction(@androidx.core.app.NotificationCompat.Action.SemanticAction int);
- method public androidx.core.app.NotificationCompat.Action.Builder setShowsUserInterface(boolean);
- }
-
- public static interface NotificationCompat.Action.Extender {
- method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
- }
-
- @IntDef({androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_NONE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_REPLY, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_UNREAD, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_DELETE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_ARCHIVE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_MUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_UNMUTE, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_UP, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_THUMBS_DOWN, androidx.core.app.NotificationCompat.Action.SEMANTIC_ACTION_CALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.Action.SemanticAction {
- }
-
- public static final class NotificationCompat.Action.WearableExtender implements androidx.core.app.NotificationCompat.Action.Extender {
- ctor public NotificationCompat.Action.WearableExtender();
- ctor public NotificationCompat.Action.WearableExtender(androidx.core.app.NotificationCompat.Action);
- method public androidx.core.app.NotificationCompat.Action.WearableExtender clone();
- method public androidx.core.app.NotificationCompat.Action.Builder extend(androidx.core.app.NotificationCompat.Action.Builder);
- method @Deprecated public CharSequence? getCancelLabel();
- method @Deprecated public CharSequence? getConfirmLabel();
- method public boolean getHintDisplayActionInline();
- method public boolean getHintLaunchesActivity();
- method @Deprecated public CharSequence? getInProgressLabel();
- method public boolean isAvailableOffline();
- method public androidx.core.app.NotificationCompat.Action.WearableExtender setAvailableOffline(boolean);
- method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setCancelLabel(CharSequence?);
- method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setConfirmLabel(CharSequence?);
- method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintDisplayActionInline(boolean);
- method public androidx.core.app.NotificationCompat.Action.WearableExtender setHintLaunchesActivity(boolean);
- method @Deprecated public androidx.core.app.NotificationCompat.Action.WearableExtender setInProgressLabel(CharSequence?);
- }
-
- @IntDef({androidx.core.app.NotificationCompat.BADGE_ICON_NONE, androidx.core.app.NotificationCompat.BADGE_ICON_SMALL, androidx.core.app.NotificationCompat.BADGE_ICON_LARGE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.BadgeIconType {
- }
-
- public static class NotificationCompat.BigPictureStyle extends androidx.core.app.NotificationCompat.Style {
- ctor public NotificationCompat.BigPictureStyle();
- ctor public NotificationCompat.BigPictureStyle(androidx.core.app.NotificationCompat.Builder?);
- method public androidx.core.app.NotificationCompat.BigPictureStyle bigLargeIcon(android.graphics.Bitmap?);
- method public androidx.core.app.NotificationCompat.BigPictureStyle bigPicture(android.graphics.Bitmap?);
- method public androidx.core.app.NotificationCompat.BigPictureStyle setBigContentTitle(CharSequence?);
- method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle setContentDescription(CharSequence?);
- method public androidx.core.app.NotificationCompat.BigPictureStyle setSummaryText(CharSequence?);
- method @RequiresApi(31) public androidx.core.app.NotificationCompat.BigPictureStyle showBigPictureWhenCollapsed(boolean);
- }
-
- public static class NotificationCompat.BigTextStyle extends androidx.core.app.NotificationCompat.Style {
- ctor public NotificationCompat.BigTextStyle();
- ctor public NotificationCompat.BigTextStyle(androidx.core.app.NotificationCompat.Builder?);
- method public androidx.core.app.NotificationCompat.BigTextStyle bigText(CharSequence?);
- method public androidx.core.app.NotificationCompat.BigTextStyle setBigContentTitle(CharSequence?);
- method public androidx.core.app.NotificationCompat.BigTextStyle setSummaryText(CharSequence?);
- }
-
- public static final class NotificationCompat.BubbleMetadata {
- method public static androidx.core.app.NotificationCompat.BubbleMetadata? fromPlatform(android.app.Notification.BubbleMetadata?);
- method public boolean getAutoExpandBubble();
- method public android.app.PendingIntent? getDeleteIntent();
- method @Dimension(unit=androidx.annotation.Dimension.DP) public int getDesiredHeight();
- method @DimenRes public int getDesiredHeightResId();
- method public androidx.core.graphics.drawable.IconCompat? getIcon();
- method public android.app.PendingIntent? getIntent();
- method public String? getShortcutId();
- method public boolean isNotificationSuppressed();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setFlags(int);
- method public static android.app.Notification.BubbleMetadata? toPlatform(androidx.core.app.NotificationCompat.BubbleMetadata?);
- }
-
- public static final class NotificationCompat.BubbleMetadata.Builder {
- ctor @Deprecated public NotificationCompat.BubbleMetadata.Builder();
- ctor @RequiresApi(30) public NotificationCompat.BubbleMetadata.Builder(String);
- ctor public NotificationCompat.BubbleMetadata.Builder(android.app.PendingIntent, androidx.core.graphics.drawable.IconCompat);
- method public androidx.core.app.NotificationCompat.BubbleMetadata build();
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setAutoExpandBubble(boolean);
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDeleteIntent(android.app.PendingIntent?);
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeight(@Dimension(unit=androidx.annotation.Dimension.DP) int);
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int);
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIcon(androidx.core.graphics.drawable.IconCompat);
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setIntent(android.app.PendingIntent);
- method public androidx.core.app.NotificationCompat.BubbleMetadata.Builder setSuppressNotification(boolean);
- }
-
- public static class NotificationCompat.Builder {
- ctor @RequiresApi(19) public NotificationCompat.Builder(android.content.Context, android.app.Notification);
- ctor public NotificationCompat.Builder(android.content.Context, String);
- ctor @Deprecated public NotificationCompat.Builder(android.content.Context);
- method public androidx.core.app.NotificationCompat.Builder addAction(int, CharSequence?, android.app.PendingIntent?);
- method public androidx.core.app.NotificationCompat.Builder addAction(androidx.core.app.NotificationCompat.Action?);
- method public androidx.core.app.NotificationCompat.Builder addExtras(android.os.Bundle?);
- method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(int, CharSequence?, android.app.PendingIntent?);
- method @RequiresApi(21) public androidx.core.app.NotificationCompat.Builder addInvisibleAction(androidx.core.app.NotificationCompat.Action?);
- method @Deprecated public androidx.core.app.NotificationCompat.Builder addPerson(String?);
- method public androidx.core.app.NotificationCompat.Builder addPerson(androidx.core.app.Person?);
- method public android.app.Notification build();
- method public androidx.core.app.NotificationCompat.Builder clearActions();
- method public androidx.core.app.NotificationCompat.Builder clearInvisibleActions();
- method public androidx.core.app.NotificationCompat.Builder clearPeople();
- method public android.widget.RemoteViews? createBigContentView();
- method public android.widget.RemoteViews? createContentView();
- method public android.widget.RemoteViews? createHeadsUpContentView();
- method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Extender);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getBigContentView();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.app.NotificationCompat.BubbleMetadata? getBubbleMetadata();
- method @ColorInt @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getColor();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getContentView();
- method public android.os.Bundle getExtras();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getForegroundServiceBehavior();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! getHeadsUpContentView();
- method @Deprecated public android.app.Notification getNotification();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getPriority();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public long getWhenIfShowing();
- method protected static CharSequence? limitCharSequenceLength(CharSequence?);
- method public androidx.core.app.NotificationCompat.Builder setAllowSystemGeneratedContextualActions(boolean);
- method public androidx.core.app.NotificationCompat.Builder setAutoCancel(boolean);
- method public androidx.core.app.NotificationCompat.Builder setBadgeIconType(@androidx.core.app.NotificationCompat.BadgeIconType int);
- method public androidx.core.app.NotificationCompat.Builder setBubbleMetadata(androidx.core.app.NotificationCompat.BubbleMetadata?);
- method public androidx.core.app.NotificationCompat.Builder setCategory(String?);
- method public androidx.core.app.NotificationCompat.Builder setChannelId(String);
- method @RequiresApi(24) public androidx.core.app.NotificationCompat.Builder setChronometerCountDown(boolean);
- method public androidx.core.app.NotificationCompat.Builder setColor(@ColorInt int);
- method public androidx.core.app.NotificationCompat.Builder setColorized(boolean);
- method public androidx.core.app.NotificationCompat.Builder setContent(android.widget.RemoteViews?);
- method public androidx.core.app.NotificationCompat.Builder setContentInfo(CharSequence?);
- method public androidx.core.app.NotificationCompat.Builder setContentIntent(android.app.PendingIntent?);
- method public androidx.core.app.NotificationCompat.Builder setContentText(CharSequence?);
- method public androidx.core.app.NotificationCompat.Builder setContentTitle(CharSequence?);
- method public androidx.core.app.NotificationCompat.Builder setCustomBigContentView(android.widget.RemoteViews?);
- method public androidx.core.app.NotificationCompat.Builder setCustomContentView(android.widget.RemoteViews?);
- method public androidx.core.app.NotificationCompat.Builder setCustomHeadsUpContentView(android.widget.RemoteViews?);
- method public androidx.core.app.NotificationCompat.Builder setDefaults(int);
- method public androidx.core.app.NotificationCompat.Builder setDeleteIntent(android.app.PendingIntent?);
- method public androidx.core.app.NotificationCompat.Builder setExtras(android.os.Bundle?);
- method public androidx.core.app.NotificationCompat.Builder setForegroundServiceBehavior(@androidx.core.app.NotificationCompat.ServiceNotificationBehavior int);
- method public androidx.core.app.NotificationCompat.Builder setFullScreenIntent(android.app.PendingIntent?, boolean);
- method public androidx.core.app.NotificationCompat.Builder setGroup(String?);
- method public androidx.core.app.NotificationCompat.Builder setGroupAlertBehavior(@androidx.core.app.NotificationCompat.GroupAlertBehavior int);
- method public androidx.core.app.NotificationCompat.Builder setGroupSummary(boolean);
- method public androidx.core.app.NotificationCompat.Builder setLargeIcon(android.graphics.Bitmap?);
- method public androidx.core.app.NotificationCompat.Builder setLights(@ColorInt int, int, int);
- method public androidx.core.app.NotificationCompat.Builder setLocalOnly(boolean);
- method public androidx.core.app.NotificationCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
- method @Deprecated public androidx.core.app.NotificationCompat.Builder setNotificationSilent();
- method public androidx.core.app.NotificationCompat.Builder setNumber(int);
- method public androidx.core.app.NotificationCompat.Builder setOngoing(boolean);
- method public androidx.core.app.NotificationCompat.Builder setOnlyAlertOnce(boolean);
- method public androidx.core.app.NotificationCompat.Builder setPriority(int);
- method public androidx.core.app.NotificationCompat.Builder setProgress(int, int, boolean);
- method public androidx.core.app.NotificationCompat.Builder setPublicVersion(android.app.Notification?);
- method public androidx.core.app.NotificationCompat.Builder setRemoteInputHistory(CharSequence![]?);
- method public androidx.core.app.NotificationCompat.Builder setSettingsText(CharSequence?);
- method public androidx.core.app.NotificationCompat.Builder setShortcutId(String?);
- method public androidx.core.app.NotificationCompat.Builder setShortcutInfo(androidx.core.content.pm.ShortcutInfoCompat?);
- method public androidx.core.app.NotificationCompat.Builder setShowWhen(boolean);
- method public androidx.core.app.NotificationCompat.Builder setSilent(boolean);
- method @RequiresApi(23) public androidx.core.app.NotificationCompat.Builder setSmallIcon(androidx.core.graphics.drawable.IconCompat);
- method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int);
- method public androidx.core.app.NotificationCompat.Builder setSmallIcon(int, int);
- method public androidx.core.app.NotificationCompat.Builder setSortKey(String?);
- method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?);
- method public androidx.core.app.NotificationCompat.Builder setSound(android.net.Uri?, @androidx.core.app.NotificationCompat.StreamType int);
- method public androidx.core.app.NotificationCompat.Builder setStyle(androidx.core.app.NotificationCompat.Style?);
- method public androidx.core.app.NotificationCompat.Builder setSubText(CharSequence?);
- method public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?);
- method @Deprecated public androidx.core.app.NotificationCompat.Builder setTicker(CharSequence?, android.widget.RemoteViews?);
- method public androidx.core.app.NotificationCompat.Builder setTimeoutAfter(long);
- method public androidx.core.app.NotificationCompat.Builder setUsesChronometer(boolean);
- method public androidx.core.app.NotificationCompat.Builder setVibrate(long[]?);
- method public androidx.core.app.NotificationCompat.Builder setVisibility(@androidx.core.app.NotificationCompat.NotificationVisibility int);
- method public androidx.core.app.NotificationCompat.Builder setWhen(long);
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.ArrayList<androidx.core.app.NotificationCompat.Action!>! mActions;
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.Context! mContext;
- field @Deprecated public java.util.ArrayList<java.lang.String!>! mPeople;
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.ArrayList<androidx.core.app.Person!> mPersonList;
- }
-
- public static final class NotificationCompat.CarExtender implements androidx.core.app.NotificationCompat.Extender {
- ctor public NotificationCompat.CarExtender();
- ctor public NotificationCompat.CarExtender(android.app.Notification);
- method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
- method @ColorInt public int getColor();
- method public android.graphics.Bitmap? getLargeIcon();
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation? getUnreadConversation();
- method public androidx.core.app.NotificationCompat.CarExtender setColor(@ColorInt int);
- method public androidx.core.app.NotificationCompat.CarExtender setLargeIcon(android.graphics.Bitmap?);
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender setUnreadConversation(androidx.core.app.NotificationCompat.CarExtender.UnreadConversation?);
- }
-
- @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation {
- method @Deprecated public long getLatestTimestamp();
- method @Deprecated public String![]? getMessages();
- method @Deprecated public String? getParticipant();
- method @Deprecated public String![]? getParticipants();
- method @Deprecated public android.app.PendingIntent? getReadPendingIntent();
- method @Deprecated public androidx.core.app.RemoteInput? getRemoteInput();
- method @Deprecated public android.app.PendingIntent? getReplyPendingIntent();
- }
-
- @Deprecated public static class NotificationCompat.CarExtender.UnreadConversation.Builder {
- ctor @Deprecated public NotificationCompat.CarExtender.UnreadConversation.Builder(String);
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder addMessage(String?);
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation build();
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setLatestTimestamp(long);
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReadPendingIntent(android.app.PendingIntent?);
- method @Deprecated public androidx.core.app.NotificationCompat.CarExtender.UnreadConversation.Builder setReplyAction(android.app.PendingIntent?, androidx.core.app.RemoteInput?);
- }
-
- public static class NotificationCompat.DecoratedCustomViewStyle extends androidx.core.app.NotificationCompat.Style {
- ctor public NotificationCompat.DecoratedCustomViewStyle();
- }
-
- public static interface NotificationCompat.Extender {
- method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
- }
-
- @IntDef({androidx.core.app.NotificationCompat.GROUP_ALERT_ALL, androidx.core.app.NotificationCompat.GROUP_ALERT_SUMMARY, androidx.core.app.NotificationCompat.GROUP_ALERT_CHILDREN}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.GroupAlertBehavior {
- }
-
- public static class NotificationCompat.InboxStyle extends androidx.core.app.NotificationCompat.Style {
- ctor public NotificationCompat.InboxStyle();
- ctor public NotificationCompat.InboxStyle(androidx.core.app.NotificationCompat.Builder?);
- method public androidx.core.app.NotificationCompat.InboxStyle addLine(CharSequence?);
- method public androidx.core.app.NotificationCompat.InboxStyle setBigContentTitle(CharSequence?);
- method public androidx.core.app.NotificationCompat.InboxStyle setSummaryText(CharSequence?);
- }
-
- public static class NotificationCompat.MessagingStyle extends androidx.core.app.NotificationCompat.Style {
- ctor @Deprecated public NotificationCompat.MessagingStyle(CharSequence);
- ctor public NotificationCompat.MessagingStyle(androidx.core.app.Person);
- method public androidx.core.app.NotificationCompat.MessagingStyle addHistoricMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
- method @Deprecated public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, CharSequence?);
- method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(CharSequence?, long, androidx.core.app.Person?);
- method public androidx.core.app.NotificationCompat.MessagingStyle addMessage(androidx.core.app.NotificationCompat.MessagingStyle.Message?);
- method public static androidx.core.app.NotificationCompat.MessagingStyle? extractMessagingStyleFromNotification(android.app.Notification);
- method public CharSequence? getConversationTitle();
- method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getHistoricMessages();
- method public java.util.List<androidx.core.app.NotificationCompat.MessagingStyle.Message!> getMessages();
- method public androidx.core.app.Person getUser();
- method @Deprecated public CharSequence? getUserDisplayName();
- method public boolean isGroupConversation();
- method public androidx.core.app.NotificationCompat.MessagingStyle setConversationTitle(CharSequence?);
- method public androidx.core.app.NotificationCompat.MessagingStyle setGroupConversation(boolean);
- field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
- }
-
- public static final class NotificationCompat.MessagingStyle.Message {
- ctor public NotificationCompat.MessagingStyle.Message(CharSequence?, long, androidx.core.app.Person?);
- ctor @Deprecated public NotificationCompat.MessagingStyle.Message(CharSequence?, long, CharSequence?);
- method public String? getDataMimeType();
- method public android.net.Uri? getDataUri();
- method public android.os.Bundle getExtras();
- method public androidx.core.app.Person? getPerson();
- method @Deprecated public CharSequence? getSender();
- method public CharSequence? getText();
- method public long getTimestamp();
- method public androidx.core.app.NotificationCompat.MessagingStyle.Message setData(String?, android.net.Uri?);
- }
-
- @IntDef({androidx.core.app.NotificationCompat.VISIBILITY_PUBLIC, androidx.core.app.NotificationCompat.VISIBILITY_PRIVATE, androidx.core.app.NotificationCompat.VISIBILITY_SECRET}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.NotificationVisibility {
- }
-
- @IntDef({androidx.core.app.NotificationCompat.FOREGROUND_SERVICE_DEFAULT, androidx.core.app.NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE, androidx.core.app.NotificationCompat.FOREGROUND_SERVICE_DEFERRED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.ServiceNotificationBehavior {
- }
-
- @IntDef({android.media.AudioManager.STREAM_VOICE_CALL, android.media.AudioManager.STREAM_SYSTEM, android.media.AudioManager.STREAM_RING, android.media.AudioManager.STREAM_MUSIC, android.media.AudioManager.STREAM_ALARM, android.media.AudioManager.STREAM_NOTIFICATION, android.media.AudioManager.STREAM_DTMF, android.media.AudioManager.STREAM_ACCESSIBILITY}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NotificationCompat.StreamType {
- }
-
- public abstract static class NotificationCompat.Style {
- ctor public NotificationCompat.Style();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addCompatExtras(android.os.Bundle);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void apply(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews applyStandardTemplate(boolean, int, boolean);
- method public android.app.Notification? build();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void buildIntoRemoteViews(android.widget.RemoteViews!, android.widget.RemoteViews!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void clearCompatExtraKeys(android.os.Bundle);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.Bitmap! createColoredBitmap(int, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean displayCustomViewInline();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.NotificationCompat.Style? extractStyleFromNotification(android.app.Notification);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected String? getClassName();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeBigContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.widget.RemoteViews! makeHeadsUpContentView(androidx.core.app.NotificationBuilderWithBuilderAccessor!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected void restoreFromCompatExtras(android.os.Bundle);
- method public void setBuilder(androidx.core.app.NotificationCompat.Builder?);
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected androidx.core.app.NotificationCompat.Builder! mBuilder;
- }
-
- public static final class NotificationCompat.WearableExtender implements androidx.core.app.NotificationCompat.Extender {
- ctor public NotificationCompat.WearableExtender();
- ctor public NotificationCompat.WearableExtender(android.app.Notification);
- method public androidx.core.app.NotificationCompat.WearableExtender addAction(androidx.core.app.NotificationCompat.Action);
- method public androidx.core.app.NotificationCompat.WearableExtender addActions(java.util.List<androidx.core.app.NotificationCompat.Action!>);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPage(android.app.Notification);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender addPages(java.util.List<android.app.Notification!>);
- method public androidx.core.app.NotificationCompat.WearableExtender clearActions();
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender clearPages();
- method public androidx.core.app.NotificationCompat.WearableExtender clone();
- method public androidx.core.app.NotificationCompat.Builder extend(androidx.core.app.NotificationCompat.Builder);
- method public java.util.List<androidx.core.app.NotificationCompat.Action!> getActions();
- method @Deprecated public android.graphics.Bitmap? getBackground();
- method public String? getBridgeTag();
- method public int getContentAction();
- method @Deprecated public int getContentIcon();
- method @Deprecated public int getContentIconGravity();
- method public boolean getContentIntentAvailableOffline();
- method @Deprecated public int getCustomContentHeight();
- method @Deprecated public int getCustomSizePreset();
- method public String? getDismissalId();
- method @Deprecated public android.app.PendingIntent? getDisplayIntent();
- method @Deprecated public int getGravity();
- method @Deprecated public boolean getHintAmbientBigPicture();
- method @Deprecated public boolean getHintAvoidBackgroundClipping();
- method public boolean getHintContentIntentLaunchesActivity();
- method @Deprecated public boolean getHintHideIcon();
- method @Deprecated public int getHintScreenTimeout();
- method @Deprecated public boolean getHintShowBackgroundOnly();
- method @Deprecated public java.util.List<android.app.Notification!> getPages();
- method public boolean getStartScrollBottom();
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setBackground(android.graphics.Bitmap?);
- method public androidx.core.app.NotificationCompat.WearableExtender setBridgeTag(String?);
- method public androidx.core.app.NotificationCompat.WearableExtender setContentAction(int);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIcon(int);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setContentIconGravity(int);
- method public androidx.core.app.NotificationCompat.WearableExtender setContentIntentAvailableOffline(boolean);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomContentHeight(int);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setCustomSizePreset(int);
- method public androidx.core.app.NotificationCompat.WearableExtender setDismissalId(String?);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setDisplayIntent(android.app.PendingIntent?);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setGravity(int);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAmbientBigPicture(boolean);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintAvoidBackgroundClipping(boolean);
- method public androidx.core.app.NotificationCompat.WearableExtender setHintContentIntentLaunchesActivity(boolean);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintHideIcon(boolean);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintScreenTimeout(int);
- method @Deprecated public androidx.core.app.NotificationCompat.WearableExtender setHintShowBackgroundOnly(boolean);
- method public androidx.core.app.NotificationCompat.WearableExtender setStartScrollBottom(boolean);
- field @Deprecated public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
- field @Deprecated public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
- field @Deprecated public static final int SIZE_DEFAULT = 0; // 0x0
- field @Deprecated public static final int SIZE_FULL_SCREEN = 5; // 0x5
- field @Deprecated public static final int SIZE_LARGE = 4; // 0x4
- field @Deprecated public static final int SIZE_MEDIUM = 3; // 0x3
- field @Deprecated public static final int SIZE_SMALL = 2; // 0x2
- field @Deprecated public static final int SIZE_XSMALL = 1; // 0x1
- field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
- }
-
- public final class NotificationCompatExtras {
- field public static final String EXTRA_ACTION_EXTRAS = "android.support.actionExtras";
- field public static final String EXTRA_GROUP_KEY = "android.support.groupKey";
- field public static final String EXTRA_GROUP_SUMMARY = "android.support.isGroupSummary";
- field public static final String EXTRA_LOCAL_ONLY = "android.support.localOnly";
- field public static final String EXTRA_REMOTE_INPUTS = "android.support.remoteInputs";
- field public static final String EXTRA_SORT_KEY = "android.support.sortKey";
- }
-
- public abstract class NotificationCompatSideChannelService extends android.app.Service {
- ctor public NotificationCompatSideChannelService();
- method public abstract void cancel(String!, int, String!);
- method public abstract void cancelAll(String!);
- method public abstract void notify(String!, int, String!, android.app.Notification!);
- method public android.os.IBinder! onBind(android.content.Intent!);
- }
-
- public final class NotificationManagerCompat {
- method public boolean areNotificationsEnabled();
- method public void cancel(int);
- method public void cancel(String?, int);
- method public void cancelAll();
- method public void createNotificationChannel(android.app.NotificationChannel);
- method public void createNotificationChannel(androidx.core.app.NotificationChannelCompat);
- method public void createNotificationChannelGroup(android.app.NotificationChannelGroup);
- method public void createNotificationChannelGroup(androidx.core.app.NotificationChannelGroupCompat);
- method public void createNotificationChannelGroups(java.util.List<android.app.NotificationChannelGroup!>);
- method public void createNotificationChannelGroupsCompat(java.util.List<androidx.core.app.NotificationChannelGroupCompat!>);
- method public void createNotificationChannels(java.util.List<android.app.NotificationChannel!>);
- method public void createNotificationChannelsCompat(java.util.List<androidx.core.app.NotificationChannelCompat!>);
- method public void deleteNotificationChannel(String);
- method public void deleteNotificationChannelGroup(String);
- method public void deleteUnlistedNotificationChannels(java.util.Collection<java.lang.String!>);
- method public static androidx.core.app.NotificationManagerCompat from(android.content.Context);
- method public static java.util.Set<java.lang.String!> getEnabledListenerPackages(android.content.Context);
- method public int getImportance();
- method public android.app.NotificationChannel? getNotificationChannel(String);
- method public android.app.NotificationChannel? getNotificationChannel(String, String);
- method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String);
- method public androidx.core.app.NotificationChannelCompat? getNotificationChannelCompat(String, String);
- method public android.app.NotificationChannelGroup? getNotificationChannelGroup(String);
- method public androidx.core.app.NotificationChannelGroupCompat? getNotificationChannelGroupCompat(String);
- method public java.util.List<android.app.NotificationChannelGroup!> getNotificationChannelGroups();
- method public java.util.List<androidx.core.app.NotificationChannelGroupCompat!> getNotificationChannelGroupsCompat();
- method public java.util.List<android.app.NotificationChannel!> getNotificationChannels();
- method public java.util.List<androidx.core.app.NotificationChannelCompat!> getNotificationChannelsCompat();
- method public void notify(int, android.app.Notification);
- method public void notify(String?, int, android.app.Notification);
- field public static final String ACTION_BIND_SIDE_CHANNEL = "android.support.BIND_NOTIFICATION_SIDE_CHANNEL";
- field public static final String EXTRA_USE_SIDE_CHANNEL = "android.support.useSideChannel";
- field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
- field public static final int IMPORTANCE_HIGH = 4; // 0x4
- field public static final int IMPORTANCE_LOW = 2; // 0x2
- field public static final int IMPORTANCE_MAX = 5; // 0x5
- field public static final int IMPORTANCE_MIN = 1; // 0x1
- field public static final int IMPORTANCE_NONE = 0; // 0x0
- field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
- }
-
- public interface OnMultiWindowModeChangedProvider {
- method public void addOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
- method public void removeOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
- }
-
- public interface OnNewIntentProvider {
- method public void addOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
- method public void removeOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
- }
-
- public interface OnPictureInPictureModeChangedProvider {
- method public void addOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
- method public void removeOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
- }
-
- public class Person {
- method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.Person fromAndroidPerson(android.app.Person);
- method public static androidx.core.app.Person fromBundle(android.os.Bundle);
- method @RequiresApi(22) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.app.Person fromPersistableBundle(android.os.PersistableBundle);
- method public androidx.core.graphics.drawable.IconCompat? getIcon();
- method public String? getKey();
- method public CharSequence? getName();
- method public String? getUri();
- method public boolean isBot();
- method public boolean isImportant();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String resolveToLegacyUri();
- method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.app.Person toAndroidPerson();
- method public androidx.core.app.Person.Builder toBuilder();
- method public android.os.Bundle toBundle();
- method @RequiresApi(22) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.os.PersistableBundle toPersistableBundle();
- }
-
- public static class Person.Builder {
- ctor public Person.Builder();
- method public androidx.core.app.Person build();
- method public androidx.core.app.Person.Builder setBot(boolean);
- method public androidx.core.app.Person.Builder setIcon(androidx.core.graphics.drawable.IconCompat?);
- method public androidx.core.app.Person.Builder setImportant(boolean);
- method public androidx.core.app.Person.Builder setKey(String?);
- method public androidx.core.app.Person.Builder setName(CharSequence?);
- method public androidx.core.app.Person.Builder setUri(String?);
- }
-
- public final class PictureInPictureModeChangedInfo {
- ctor public PictureInPictureModeChangedInfo(boolean);
- ctor @RequiresApi(26) public PictureInPictureModeChangedInfo(boolean, android.content.res.Configuration);
- method @RequiresApi(26) public android.content.res.Configuration getNewConfig();
- method public boolean isInPictureInPictureMode();
- }
-
- @androidx.versionedparcelable.VersionedParcelize(jetifyAs="android.support.v4.app.RemoteActionCompat") public final class RemoteActionCompat implements androidx.versionedparcelable.VersionedParcelable {
- ctor public RemoteActionCompat(androidx.core.graphics.drawable.IconCompat, CharSequence, CharSequence, android.app.PendingIntent);
- ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public RemoteActionCompat();
- ctor public RemoteActionCompat(androidx.core.app.RemoteActionCompat);
- method @RequiresApi(26) public static androidx.core.app.RemoteActionCompat createFromRemoteAction(android.app.RemoteAction);
- method public android.app.PendingIntent getActionIntent();
- method public CharSequence getContentDescription();
- method public androidx.core.graphics.drawable.IconCompat getIcon();
- method public CharSequence getTitle();
- method public boolean isEnabled();
- method public void setEnabled(boolean);
- method public void setShouldShowIcon(boolean);
- method public boolean shouldShowIcon();
- method @RequiresApi(26) public android.app.RemoteAction toRemoteAction();
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(4) public android.app.PendingIntent mActionIntent;
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(3) public CharSequence mContentDescription;
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(5) public boolean mEnabled;
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(1) public androidx.core.graphics.drawable.IconCompat mIcon;
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(6) public boolean mShouldShowIcon;
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.versionedparcelable.ParcelField(2) public CharSequence mTitle;
- }
-
- public final class RemoteInput {
- method public static void addDataResultToIntent(androidx.core.app.RemoteInput, android.content.Intent, java.util.Map<java.lang.String!,android.net.Uri!>);
- method public static void addResultsToIntent(androidx.core.app.RemoteInput![], android.content.Intent, android.os.Bundle);
- method public boolean getAllowFreeFormInput();
- method public java.util.Set<java.lang.String!>? getAllowedDataTypes();
- method public CharSequence![]? getChoices();
- method public static java.util.Map<java.lang.String!,android.net.Uri!>? getDataResultsFromIntent(android.content.Intent, String);
- method @androidx.core.app.RemoteInput.EditChoicesBeforeSending public int getEditChoicesBeforeSending();
- method public android.os.Bundle getExtras();
- method public CharSequence? getLabel();
- method public String getResultKey();
- method public static android.os.Bundle? getResultsFromIntent(android.content.Intent);
- method @androidx.core.app.RemoteInput.Source public static int getResultsSource(android.content.Intent);
- method public boolean isDataOnly();
- method public static void setResultsSource(android.content.Intent, @androidx.core.app.RemoteInput.Source int);
- field public static final int EDIT_CHOICES_BEFORE_SENDING_AUTO = 0; // 0x0
- field public static final int EDIT_CHOICES_BEFORE_SENDING_DISABLED = 1; // 0x1
- field public static final int EDIT_CHOICES_BEFORE_SENDING_ENABLED = 2; // 0x2
- field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
- field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
- field public static final int SOURCE_CHOICE = 1; // 0x1
- field public static final int SOURCE_FREE_FORM_INPUT = 0; // 0x0
- }
-
- public static final class RemoteInput.Builder {
- ctor public RemoteInput.Builder(String);
- method public androidx.core.app.RemoteInput.Builder addExtras(android.os.Bundle);
- method public androidx.core.app.RemoteInput build();
- method public android.os.Bundle getExtras();
- method public androidx.core.app.RemoteInput.Builder setAllowDataType(String, boolean);
- method public androidx.core.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
- method public androidx.core.app.RemoteInput.Builder setChoices(CharSequence![]?);
- method public androidx.core.app.RemoteInput.Builder setEditChoicesBeforeSending(@androidx.core.app.RemoteInput.EditChoicesBeforeSending int);
- method public androidx.core.app.RemoteInput.Builder setLabel(CharSequence?);
- }
-
- @IntDef({androidx.core.app.RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO, androidx.core.app.RemoteInput.EDIT_CHOICES_BEFORE_SENDING_DISABLED, androidx.core.app.RemoteInput.EDIT_CHOICES_BEFORE_SENDING_ENABLED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RemoteInput.EditChoicesBeforeSending {
- }
-
- @IntDef({androidx.core.app.RemoteInput.SOURCE_FREE_FORM_INPUT, androidx.core.app.RemoteInput.SOURCE_CHOICE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RemoteInput.Source {
- }
-
- public final class ServiceCompat {
- method public static void stopForeground(android.app.Service, @androidx.core.app.ServiceCompat.StopForegroundFlags int);
- field public static final int START_STICKY = 1; // 0x1
- field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
- field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
- }
-
- @IntDef(flag=true, value={androidx.core.app.ServiceCompat.STOP_FOREGROUND_REMOVE, androidx.core.app.ServiceCompat.STOP_FOREGROUND_DETACH}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ServiceCompat.StopForegroundFlags {
- }
-
- public final class ShareCompat {
- method @Deprecated public static void configureMenuItem(android.view.MenuItem, androidx.core.app.ShareCompat.IntentBuilder);
- method @Deprecated public static void configureMenuItem(android.view.Menu, @IdRes int, androidx.core.app.ShareCompat.IntentBuilder);
- method public static android.content.ComponentName? getCallingActivity(android.app.Activity);
- method public static String? getCallingPackage(android.app.Activity);
- field public static final String EXTRA_CALLING_ACTIVITY = "androidx.core.app.EXTRA_CALLING_ACTIVITY";
- field public static final String EXTRA_CALLING_ACTIVITY_INTEROP = "android.support.v4.app.EXTRA_CALLING_ACTIVITY";
- field public static final String EXTRA_CALLING_PACKAGE = "androidx.core.app.EXTRA_CALLING_PACKAGE";
- field public static final String EXTRA_CALLING_PACKAGE_INTEROP = "android.support.v4.app.EXTRA_CALLING_PACKAGE";
- }
-
- public static class ShareCompat.IntentBuilder {
- ctor public ShareCompat.IntentBuilder(android.content.Context);
- method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String);
- method public androidx.core.app.ShareCompat.IntentBuilder addEmailBcc(String![]);
- method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String);
- method public androidx.core.app.ShareCompat.IntentBuilder addEmailCc(String![]);
- method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String);
- method public androidx.core.app.ShareCompat.IntentBuilder addEmailTo(String![]);
- method public androidx.core.app.ShareCompat.IntentBuilder addStream(android.net.Uri);
- method public android.content.Intent createChooserIntent();
- method @Deprecated public static androidx.core.app.ShareCompat.IntentBuilder from(android.app.Activity);
- method public android.content.Intent getIntent();
- method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(CharSequence?);
- method public androidx.core.app.ShareCompat.IntentBuilder setChooserTitle(@StringRes int);
- method public androidx.core.app.ShareCompat.IntentBuilder setEmailBcc(String![]?);
- method public androidx.core.app.ShareCompat.IntentBuilder setEmailCc(String![]?);
- method public androidx.core.app.ShareCompat.IntentBuilder setEmailTo(String![]?);
- method public androidx.core.app.ShareCompat.IntentBuilder setHtmlText(String?);
- method public androidx.core.app.ShareCompat.IntentBuilder setStream(android.net.Uri?);
- method public androidx.core.app.ShareCompat.IntentBuilder setSubject(String?);
- method public androidx.core.app.ShareCompat.IntentBuilder setText(CharSequence?);
- method public androidx.core.app.ShareCompat.IntentBuilder setType(String?);
- method public void startChooser();
- }
-
- public static class ShareCompat.IntentReader {
- ctor public ShareCompat.IntentReader(android.app.Activity);
- ctor public ShareCompat.IntentReader(android.content.Context, android.content.Intent);
- method @Deprecated public static androidx.core.app.ShareCompat.IntentReader from(android.app.Activity);
- method public android.content.ComponentName? getCallingActivity();
- method public android.graphics.drawable.Drawable? getCallingActivityIcon();
- method public android.graphics.drawable.Drawable? getCallingApplicationIcon();
- method public CharSequence? getCallingApplicationLabel();
- method public String? getCallingPackage();
- method public String![]? getEmailBcc();
- method public String![]? getEmailCc();
- method public String![]? getEmailTo();
- method public String? getHtmlText();
- method public android.net.Uri? getStream();
- method public android.net.Uri? getStream(int);
- method public int getStreamCount();
- method public String? getSubject();
- method public CharSequence? getText();
- method public String? getType();
- method public boolean isMultipleShare();
- method public boolean isShareIntent();
- method public boolean isSingleShare();
- }
-
- public abstract class SharedElementCallback {
- ctor public SharedElementCallback();
- method public android.os.Parcelable! onCaptureSharedElementSnapshot(android.view.View!, android.graphics.Matrix!, android.graphics.RectF!);
- method public android.view.View! onCreateSnapshotView(android.content.Context!, android.os.Parcelable!);
- method public void onMapSharedElements(java.util.List<java.lang.String!>!, java.util.Map<java.lang.String!,android.view.View!>!);
- method public void onRejectSharedElements(java.util.List<android.view.View!>!);
- method public void onSharedElementEnd(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
- method public void onSharedElementStart(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, java.util.List<android.view.View!>!);
- method public void onSharedElementsArrived(java.util.List<java.lang.String!>!, java.util.List<android.view.View!>!, androidx.core.app.SharedElementCallback.OnSharedElementsReadyListener!);
- }
-
- public static interface SharedElementCallback.OnSharedElementsReadyListener {
- method public void onSharedElementsReady();
- }
-
- public final class TaskStackBuilder implements java.lang.Iterable<android.content.Intent> {
- method public androidx.core.app.TaskStackBuilder addNextIntent(android.content.Intent);
- method public androidx.core.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
- method public androidx.core.app.TaskStackBuilder addParentStack(android.app.Activity);
- method public androidx.core.app.TaskStackBuilder addParentStack(Class<?>);
- method public androidx.core.app.TaskStackBuilder addParentStack(android.content.ComponentName);
- method public static androidx.core.app.TaskStackBuilder create(android.content.Context);
- method public android.content.Intent? editIntentAt(int);
- method @Deprecated public static androidx.core.app.TaskStackBuilder! from(android.content.Context!);
- method @Deprecated public android.content.Intent! getIntent(int);
- method public int getIntentCount();
- method public android.content.Intent![] getIntents();
- method public android.app.PendingIntent? getPendingIntent(int, int);
- method public android.app.PendingIntent? getPendingIntent(int, int, android.os.Bundle?);
- method @Deprecated public java.util.Iterator<android.content.Intent!> iterator();
- method public void startActivities();
- method public void startActivities(android.os.Bundle?);
- }
-
- public static interface TaskStackBuilder.SupportParentable {
- method public android.content.Intent? getSupportParentActivityIntent();
- }
-
-}
-
-package androidx.core.content {
-
- public final class ContentProviderCompat {
- method public static android.content.Context requireContext(android.content.ContentProvider);
- }
-
- public final class ContentResolverCompat {
- method public static android.database.Cursor? query(android.content.ContentResolver, android.net.Uri, String![]?, String?, String![]?, String?, androidx.core.os.CancellationSignal?);
- }
-
- public class ContextCompat {
- ctor protected ContextCompat();
- method public static int checkSelfPermission(android.content.Context, String);
- method public static android.content.Context? createDeviceProtectedStorageContext(android.content.Context);
- method public static String? getAttributionTag(android.content.Context);
- method public static java.io.File getCodeCacheDir(android.content.Context);
- method @ColorInt public static int getColor(android.content.Context, @ColorRes int);
- method public static android.content.res.ColorStateList? getColorStateList(android.content.Context, @ColorRes int);
- method public static java.io.File? getDataDir(android.content.Context);
- method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
- method public static java.io.File![] getExternalCacheDirs(android.content.Context);
- method public static java.io.File![] getExternalFilesDirs(android.content.Context, String?);
- method public static java.util.concurrent.Executor getMainExecutor(android.content.Context);
- method public static java.io.File? getNoBackupFilesDir(android.content.Context);
- method public static java.io.File![] getObbDirs(android.content.Context);
- method public static <T> T? getSystemService(android.content.Context, Class<T!>);
- method public static String? getSystemServiceName(android.content.Context, Class<?>);
- method public static boolean isDeviceProtectedStorage(android.content.Context);
- method public static boolean startActivities(android.content.Context, android.content.Intent![]);
- method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
- method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
- method public static void startForegroundService(android.content.Context, android.content.Intent);
- }
-
- public class FileProvider extends android.content.ContentProvider {
- ctor public FileProvider();
- ctor protected FileProvider(@XmlRes int);
- method public int delete(android.net.Uri, String?, String![]?);
- method public String? getType(android.net.Uri);
- method public static android.net.Uri! getUriForFile(android.content.Context, String, java.io.File);
- method public static android.net.Uri getUriForFile(android.content.Context, String, java.io.File, String);
- method public android.net.Uri! insert(android.net.Uri, android.content.ContentValues);
- method public boolean onCreate();
- method public android.database.Cursor query(android.net.Uri, String![]?, String?, String![]?, String?);
- method public int update(android.net.Uri, android.content.ContentValues, String?, String![]?);
- }
-
- public final class IntentCompat {
- method public static android.content.Intent createManageUnusedAppRestrictionsIntent(android.content.Context, String);
- method public static android.content.Intent makeMainSelectorActivity(String, String);
- field public static final String ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER";
- field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
- field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
- field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
- field public static final String EXTRA_TIME = "android.intent.extra.TIME";
- }
-
- public final class LocusIdCompat {
- ctor public LocusIdCompat(String);
- method public String getId();
- method @RequiresApi(29) public android.content.LocusId toLocusId();
- method @RequiresApi(29) public static androidx.core.content.LocusIdCompat toLocusIdCompat(android.content.LocusId);
- }
-
- public final class MimeTypeFilter {
- method public static boolean matches(String?, String);
- method public static String? matches(String?, String![]);
- method public static String? matches(String![]?, String);
- method public static String![] matchesMany(String![]?, String);
- }
-
- public interface OnConfigurationChangedProvider {
- method public void addOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
- method public void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
- }
-
- public interface OnTrimMemoryProvider {
- method public void addOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
- method public void removeOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
- }
-
- public final class PackageManagerCompat {
- method public static com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> getUnusedAppRestrictionsStatus(android.content.Context);
- field public static final String ACTION_PERMISSION_REVOCATION_SETTINGS = "android.intent.action.AUTO_REVOKE_PERMISSIONS";
- }
-
- public final class PermissionChecker {
- method @androidx.core.content.PermissionChecker.PermissionResult public static int checkCallingOrSelfPermission(android.content.Context, String);
- method @androidx.core.content.PermissionChecker.PermissionResult public static int checkCallingPermission(android.content.Context, String, String?);
- method @androidx.core.content.PermissionChecker.PermissionResult public static int checkPermission(android.content.Context, String, int, int, String?);
- method @androidx.core.content.PermissionChecker.PermissionResult public static int checkSelfPermission(android.content.Context, String);
- field public static final int PERMISSION_DENIED = -1; // 0xffffffff
- field public static final int PERMISSION_DENIED_APP_OP = -2; // 0xfffffffe
- field public static final int PERMISSION_GRANTED = 0; // 0x0
- }
-
- @IntDef({androidx.core.content.PermissionChecker.PERMISSION_GRANTED, androidx.core.content.PermissionChecker.PERMISSION_DENIED, androidx.core.content.PermissionChecker.PERMISSION_DENIED_APP_OP}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PermissionChecker.PermissionResult {
- }
-
- @Deprecated public final class SharedPreferencesCompat {
- }
-
- @Deprecated public static final class SharedPreferencesCompat.EditorCompat {
- method @Deprecated public void apply(android.content.SharedPreferences.Editor);
- method @Deprecated public static androidx.core.content.SharedPreferencesCompat.EditorCompat! getInstance();
- }
-
- public class UnusedAppRestrictionsBackportCallback {
- method public void onResult(boolean, boolean) throws android.os.RemoteException;
- }
-
- public abstract class UnusedAppRestrictionsBackportService extends android.app.Service {
- ctor public UnusedAppRestrictionsBackportService();
- method protected abstract void isPermissionRevocationEnabled(androidx.core.content.UnusedAppRestrictionsBackportCallback);
- method public android.os.IBinder? onBind(android.content.Intent?);
- field public static final String ACTION_UNUSED_APP_RESTRICTIONS_BACKPORT_CONNECTION = "android.support.unusedapprestrictions.action.CustomUnusedAppRestrictionsBackportService";
- }
-
- public final class UnusedAppRestrictionsConstants {
- field public static final int API_30 = 4; // 0x4
- field public static final int API_30_BACKPORT = 3; // 0x3
- field public static final int API_31 = 5; // 0x5
- field public static final int DISABLED = 2; // 0x2
- field public static final int ERROR = 0; // 0x0
- field public static final int FEATURE_NOT_AVAILABLE = 1; // 0x1
- }
-
-}
-
-package androidx.core.content.pm {
-
- @Deprecated public final class ActivityInfoCompat {
- field @Deprecated public static final int CONFIG_UI_MODE = 512; // 0x200
- }
-
- public final class PackageInfoCompat {
- method public static long getLongVersionCode(android.content.pm.PackageInfo);
- method public static java.util.List<android.content.pm.Signature!> getSignatures(android.content.pm.PackageManager, String) throws android.content.pm.PackageManager.NameNotFoundException;
- method public static boolean hasSignatures(android.content.pm.PackageManager, String, @Size(min=1) java.util.Map<byte[]!,java.lang.Integer!>, boolean) throws android.content.pm.PackageManager.NameNotFoundException;
- }
-
- public final class PermissionInfoCompat {
- method public static int getProtection(android.content.pm.PermissionInfo);
- method public static int getProtectionFlags(android.content.pm.PermissionInfo);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class ShortcutInfoChangeListener {
- ctor public ShortcutInfoChangeListener();
- method @AnyThread public void onAllShortcutsRemoved();
- method @AnyThread public void onShortcutAdded(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
- method @AnyThread public void onShortcutRemoved(java.util.List<java.lang.String!>);
- method @AnyThread public void onShortcutUpdated(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
- method @AnyThread public void onShortcutUsageReported(java.util.List<java.lang.String!>);
- }
-
- public class ShortcutInfoCompat {
- method public android.content.ComponentName? getActivity();
- method public java.util.Set<java.lang.String!>? getCategories();
- method public CharSequence? getDisabledMessage();
- method public int getDisabledReason();
- method @androidx.core.content.pm.ShortcutInfoCompat.Surface public int getExcludedFromSurfaces();
- method public android.os.PersistableBundle? getExtras();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.graphics.drawable.IconCompat! getIcon();
- method public String getId();
- method public android.content.Intent getIntent();
- method public android.content.Intent![] getIntents();
- method public long getLastChangedTimestamp();
- method public androidx.core.content.LocusIdCompat? getLocusId();
- method public CharSequence? getLongLabel();
- method public String getPackage();
- method public int getRank();
- method public CharSequence getShortLabel();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.os.Bundle? getTransientExtras();
- method public android.os.UserHandle? getUserHandle();
- method public boolean hasKeyFieldsOnly();
- method public boolean isCached();
- method public boolean isDeclaredInManifest();
- method public boolean isDynamic();
- method public boolean isEnabled();
- method public boolean isExcludedFromSurfaces(@androidx.core.content.pm.ShortcutInfoCompat.Surface int);
- method public boolean isImmutable();
- method public boolean isPinned();
- method @RequiresApi(25) public android.content.pm.ShortcutInfo! toShortcutInfo();
- field public static final int SURFACE_LAUNCHER = 1; // 0x1
- }
-
- public static class ShortcutInfoCompat.Builder {
- ctor public ShortcutInfoCompat.Builder(android.content.Context, String);
- ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(androidx.core.content.pm.ShortcutInfoCompat);
- ctor @RequiresApi(25) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public ShortcutInfoCompat.Builder(android.content.Context, android.content.pm.ShortcutInfo);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder addCapabilityBinding(String, String, java.util.List<java.lang.String!>);
- method public androidx.core.content.pm.ShortcutInfoCompat build();
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setActivity(android.content.ComponentName);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setAlwaysBadged();
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setCategories(java.util.Set<java.lang.String!>);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setDisabledMessage(CharSequence);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExcludedFromSurfaces(int);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setExtras(android.os.PersistableBundle);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIcon(androidx.core.graphics.drawable.IconCompat!);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntent(android.content.Intent);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIntents(android.content.Intent![]);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setIsConversation();
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLocusId(androidx.core.content.LocusIdCompat?);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLabel(CharSequence);
- method @Deprecated public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived();
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setLongLived(boolean);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPerson(androidx.core.app.Person);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setPersons(androidx.core.app.Person![]);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setRank(int);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setShortLabel(CharSequence);
- method public androidx.core.content.pm.ShortcutInfoCompat.Builder setSliceUri(android.net.Uri);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.content.pm.ShortcutInfoCompat.Builder setTransientExtras(android.os.Bundle);
- }
-
- @IntDef(flag=true, value={androidx.core.content.pm.ShortcutInfoCompat.SURFACE_LAUNCHER}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ShortcutInfoCompat.Surface {
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class ShortcutInfoCompatSaver<T> {
- ctor public ShortcutInfoCompatSaver();
- method @AnyThread public abstract T! addShortcuts(java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>!);
- method @WorkerThread public java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>! getShortcuts() throws java.lang.Exception;
- method @AnyThread public abstract T! removeAllShortcuts();
- method @AnyThread public abstract T! removeShortcuts(java.util.List<java.lang.String!>!);
- }
-
- public class ShortcutManagerCompat {
- method public static boolean addDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
- method public static android.content.Intent createShortcutResultIntent(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
- method public static void disableShortcuts(android.content.Context, java.util.List<java.lang.String!>, CharSequence?);
- method public static void enableShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
- method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getDynamicShortcuts(android.content.Context);
- method public static int getIconMaxHeight(android.content.Context);
- method public static int getIconMaxWidth(android.content.Context);
- method public static int getMaxShortcutCountPerActivity(android.content.Context);
- method public static java.util.List<androidx.core.content.pm.ShortcutInfoCompat!> getShortcuts(android.content.Context, @androidx.core.content.pm.ShortcutManagerCompat.ShortcutMatchFlags int);
- method public static boolean isRateLimitingActive(android.content.Context);
- method public static boolean isRequestPinShortcutSupported(android.content.Context);
- method public static boolean pushDynamicShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat);
- method public static void removeAllDynamicShortcuts(android.content.Context);
- method public static void removeDynamicShortcuts(android.content.Context, java.util.List<java.lang.String!>);
- method public static void removeLongLivedShortcuts(android.content.Context, java.util.List<java.lang.String!>);
- method public static void reportShortcutUsed(android.content.Context, String);
- method public static boolean requestPinShortcut(android.content.Context, androidx.core.content.pm.ShortcutInfoCompat, android.content.IntentSender?);
- method public static boolean setDynamicShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
- method public static boolean updateShortcuts(android.content.Context, java.util.List<androidx.core.content.pm.ShortcutInfoCompat!>);
- field public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
- field public static final int FLAG_MATCH_CACHED = 8; // 0x8
- field public static final int FLAG_MATCH_DYNAMIC = 2; // 0x2
- field public static final int FLAG_MATCH_MANIFEST = 1; // 0x1
- field public static final int FLAG_MATCH_PINNED = 4; // 0x4
- }
-
- @IntDef(flag=true, value={androidx.core.content.pm.ShortcutManagerCompat.FLAG_MATCH_MANIFEST, androidx.core.content.pm.ShortcutManagerCompat.FLAG_MATCH_DYNAMIC, androidx.core.content.pm.ShortcutManagerCompat.FLAG_MATCH_PINNED, androidx.core.content.pm.ShortcutManagerCompat.FLAG_MATCH_CACHED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ShortcutManagerCompat.ShortcutMatchFlags {
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class ShortcutXmlParser {
- method @WorkerThread public static java.util.List<java.lang.String!> getShortcutIds(android.content.Context);
- method @VisibleForTesting public static java.util.List<java.lang.String!> parseShortcutIds(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
- }
-
-}
-
-package androidx.core.content.res {
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ColorStateListInflaterCompat {
- method public static android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
- method public static android.content.res.ColorStateList createFromXmlInner(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
- method public static android.content.res.ColorStateList? inflate(android.content.res.Resources, @XmlRes int, android.content.res.Resources.Theme?);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ComplexColorCompat {
- method @ColorInt public int getColor();
- method public android.graphics.Shader? getShader();
- method public static androidx.core.content.res.ComplexColorCompat? inflate(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?);
- method public boolean isGradient();
- method public boolean isStateful();
- method public boolean onStateChanged(int[]!);
- method public void setColor(@ColorInt int);
- method public boolean willDraw();
- }
-
- public final class ConfigurationHelper {
- method public static int getDensityDpi(android.content.res.Resources);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class FontResourcesParserCompat {
- method public static androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry? parse(org.xmlpull.v1.XmlPullParser, android.content.res.Resources) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
- method public static java.util.List<java.util.List<byte[]!>!> readCerts(android.content.res.Resources, @ArrayRes int);
- field public static final int FETCH_STRATEGY_ASYNC = 1; // 0x1
- field public static final int FETCH_STRATEGY_BLOCKING = 0; // 0x0
- field public static final int INFINITE_TIMEOUT_VALUE = -1; // 0xffffffff
- }
-
- public static interface FontResourcesParserCompat.FamilyResourceEntry {
- }
-
- @IntDef({androidx.core.content.res.FontResourcesParserCompat.FETCH_STRATEGY_BLOCKING, androidx.core.content.res.FontResourcesParserCompat.FETCH_STRATEGY_ASYNC}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FontResourcesParserCompat.FetchStrategy {
- }
-
- public static final class FontResourcesParserCompat.FontFamilyFilesResourceEntry implements androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry {
- ctor public FontResourcesParserCompat.FontFamilyFilesResourceEntry(androidx.core.content.res.FontResourcesParserCompat.FontFileResourceEntry![]);
- method public androidx.core.content.res.FontResourcesParserCompat.FontFileResourceEntry![] getEntries();
- }
-
- public static final class FontResourcesParserCompat.FontFileResourceEntry {
- ctor public FontResourcesParserCompat.FontFileResourceEntry(String, int, boolean, String?, int, int);
- method public String getFileName();
- method public int getResourceId();
- method public int getTtcIndex();
- method public String? getVariationSettings();
- method public int getWeight();
- method public boolean isItalic();
- }
-
- public static final class FontResourcesParserCompat.ProviderResourceEntry implements androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry {
- ctor public FontResourcesParserCompat.ProviderResourceEntry(androidx.core.provider.FontRequest, @androidx.core.content.res.FontResourcesParserCompat.FetchStrategy int, int);
- method @androidx.core.content.res.FontResourcesParserCompat.FetchStrategy public int getFetchStrategy();
- method public androidx.core.provider.FontRequest getRequest();
- method public int getTimeout();
- }
-
- public final class ResourcesCompat {
- method public static void clearCachesForTheme(android.content.res.Resources.Theme);
- method public static android.graphics.Typeface? getCachedFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
- method @ColorInt public static int getColor(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
- method public static android.content.res.ColorStateList? getColorStateList(android.content.res.Resources, @ColorRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
- method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.Resources, @DrawableRes int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
- method public static android.graphics.drawable.Drawable? getDrawableForDensity(android.content.res.Resources, @DrawableRes int, int, android.content.res.Resources.Theme?) throws android.content.res.Resources.NotFoundException;
- method public static float getFloat(android.content.res.Resources, @DimenRes int);
- method public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int) throws android.content.res.Resources.NotFoundException;
- method public static void getFont(android.content.Context, @FontRes int, androidx.core.content.res.ResourcesCompat.FontCallback, android.os.Handler?) throws android.content.res.Resources.NotFoundException;
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? getFont(android.content.Context, @FontRes int, android.util.TypedValue, int, androidx.core.content.res.ResourcesCompat.FontCallback?) throws android.content.res.Resources.NotFoundException;
- field @AnyRes public static final int ID_NULL = 0; // 0x0
- }
-
- public abstract static class ResourcesCompat.FontCallback {
- ctor public ResourcesCompat.FontCallback();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final void callbackFailAsync(@androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason int, android.os.Handler?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final void callbackSuccessAsync(android.graphics.Typeface, android.os.Handler?);
- method public abstract void onFontRetrievalFailed(@androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason int);
- method public abstract void onFontRetrieved(android.graphics.Typeface);
- }
-
- public static final class ResourcesCompat.ThemeCompat {
- method public static void rebase(android.content.res.Resources.Theme);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypedArrayUtils {
- method public static int getAttr(android.content.Context, int, int);
- method public static boolean getBoolean(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, boolean);
- method public static android.graphics.drawable.Drawable? getDrawable(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
- method public static int getInt(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, int);
- method public static boolean getNamedBoolean(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, boolean);
- method @ColorInt public static int getNamedColor(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, @ColorInt int);
- method public static android.content.res.ColorStateList? getNamedColorStateList(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?, String, @StyleableRes int);
- method public static androidx.core.content.res.ComplexColorCompat! getNamedComplexColor(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme?, String, @StyleableRes int, @ColorInt int);
- method public static float getNamedFloat(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, float);
- method public static int getNamedInt(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, int);
- method @AnyRes public static int getNamedResourceId(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int, @AnyRes int);
- method public static String? getNamedString(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, @StyleableRes int);
- method @AnyRes public static int getResourceId(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int, @AnyRes int);
- method public static String? getString(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
- method public static CharSequence? getText(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
- method public static CharSequence![]? getTextArray(android.content.res.TypedArray, @StyleableRes int, @StyleableRes int);
- method public static boolean hasAttribute(org.xmlpull.v1.XmlPullParser, String);
- method public static android.content.res.TypedArray obtainAttributes(android.content.res.Resources, android.content.res.Resources.Theme?, android.util.AttributeSet, int[]);
- method public static android.util.TypedValue? peekNamedValue(android.content.res.TypedArray, org.xmlpull.v1.XmlPullParser, String, int);
- }
-
-}
-
-package androidx.core.database {
-
- public final class CursorWindowCompat {
- method public static android.database.CursorWindow create(String?, long);
- }
-
- @Deprecated public final class DatabaseUtilsCompat {
- method @Deprecated public static String![]! appendSelectionArgs(String![]!, String![]!);
- method @Deprecated public static String! concatenateWhere(String!, String!);
- }
-
-}
-
-package androidx.core.database.sqlite {
-
- public final class SQLiteCursorCompat {
- method public static void setFillWindowForwardOnly(android.database.sqlite.SQLiteCursor, boolean);
- }
-
-}
-
-package androidx.core.graphics {
-
- public final class BitmapCompat {
- method public static android.graphics.Bitmap createScaledBitmap(android.graphics.Bitmap, int, int, android.graphics.Rect?, boolean);
- method public static int getAllocationByteCount(android.graphics.Bitmap);
- method public static boolean hasMipMap(android.graphics.Bitmap);
- method public static void setHasMipMap(android.graphics.Bitmap, boolean);
- }
-
- public class BlendModeColorFilterCompat {
- method public static android.graphics.ColorFilter? createBlendModeColorFilterCompat(int, androidx.core.graphics.BlendModeCompat);
- }
-
- public enum BlendModeCompat {
- enum_constant public static final androidx.core.graphics.BlendModeCompat CLEAR;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_BURN;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat COLOR_DODGE;
- enum_constant public static final androidx.core.graphics.BlendModeCompat DARKEN;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat DIFFERENCE;
- enum_constant public static final androidx.core.graphics.BlendModeCompat DST;
- enum_constant public static final androidx.core.graphics.BlendModeCompat DST_ATOP;
- enum_constant public static final androidx.core.graphics.BlendModeCompat DST_IN;
- enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OUT;
- enum_constant public static final androidx.core.graphics.BlendModeCompat DST_OVER;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat EXCLUSION;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HARD_LIGHT;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat HUE;
- enum_constant public static final androidx.core.graphics.BlendModeCompat LIGHTEN;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat LUMINOSITY;
- enum_constant public static final androidx.core.graphics.BlendModeCompat MODULATE;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat MULTIPLY;
- enum_constant public static final androidx.core.graphics.BlendModeCompat OVERLAY;
- enum_constant public static final androidx.core.graphics.BlendModeCompat PLUS;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SATURATION;
- enum_constant public static final androidx.core.graphics.BlendModeCompat SCREEN;
- enum_constant @RequiresApi(android.os.Build.VERSION_CODES.Q) public static final androidx.core.graphics.BlendModeCompat SOFT_LIGHT;
- enum_constant public static final androidx.core.graphics.BlendModeCompat SRC;
- enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_ATOP;
- enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_IN;
- enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OUT;
- enum_constant public static final androidx.core.graphics.BlendModeCompat SRC_OVER;
- enum_constant public static final androidx.core.graphics.BlendModeCompat XOR;
- }
-
- public final class ColorUtils {
- method @ColorInt public static int HSLToColor(float[]);
- method @ColorInt public static int LABToColor(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double);
- method public static void LABToXYZ(@FloatRange(from=0.0f, to=100) double, @FloatRange(from=0xffffff80, to=127) double, @FloatRange(from=0xffffff80, to=127) double, double[]);
- method public static void RGBToHSL(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, float[]);
- method public static void RGBToLAB(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
- method public static void RGBToXYZ(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, double[]);
- method @ColorInt public static int XYZToColor(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double);
- method public static void XYZToLAB(@FloatRange(from=0.0f, to=95.047) double, @FloatRange(from=0.0f, to=0x64) double, @FloatRange(from=0.0f, to=108.883) double, double[]);
- method @ColorInt public static int blendARGB(@ColorInt int, @ColorInt int, @FloatRange(from=0.0, to=1.0) float);
- method public static void blendHSL(float[], float[], @FloatRange(from=0.0, to=1.0) float, float[]);
- method public static void blendLAB(double[], double[], @FloatRange(from=0.0, to=1.0) double, double[]);
- method public static double calculateContrast(@ColorInt int, @ColorInt int);
- method @FloatRange(from=0.0, to=1.0) public static double calculateLuminance(@ColorInt int);
- method public static int calculateMinimumAlpha(@ColorInt int, @ColorInt int, float);
- method public static void colorToHSL(@ColorInt int, float[]);
- method public static void colorToLAB(@ColorInt int, double[]);
- method public static void colorToXYZ(@ColorInt int, double[]);
- method public static int compositeColors(@ColorInt int, @ColorInt int);
- method @RequiresApi(26) public static android.graphics.Color compositeColors(android.graphics.Color, android.graphics.Color);
- method public static double distanceEuclidean(double[], double[]);
- method @ColorInt public static int setAlphaComponent(@ColorInt int, @IntRange(from=0, to=255) int);
- }
-
- public final class Insets {
- method public static androidx.core.graphics.Insets add(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
- method public static androidx.core.graphics.Insets max(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
- method public static androidx.core.graphics.Insets min(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
- method public static androidx.core.graphics.Insets of(int, int, int, int);
- method public static androidx.core.graphics.Insets of(android.graphics.Rect);
- method public static androidx.core.graphics.Insets subtract(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
- method @RequiresApi(api=29) public static androidx.core.graphics.Insets toCompatInsets(android.graphics.Insets);
- method @RequiresApi(29) public android.graphics.Insets toPlatformInsets();
- method @Deprecated @RequiresApi(api=29) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.Insets wrap(android.graphics.Insets);
- field public static final androidx.core.graphics.Insets NONE;
- field public final int bottom;
- field public final int left;
- field public final int right;
- field public final int top;
- }
-
- public final class PaintCompat {
- method public static boolean hasGlyph(android.graphics.Paint, String);
- method public static boolean setBlendMode(android.graphics.Paint, androidx.core.graphics.BlendModeCompat?);
- }
-
- public final class PathSegment {
- ctor public PathSegment(android.graphics.PointF, float, android.graphics.PointF, float);
- method public android.graphics.PointF getEnd();
- method public float getEndFraction();
- method public android.graphics.PointF getStart();
- method public float getStartFraction();
- }
-
- public final class PathUtils {
- method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path);
- method @RequiresApi(26) public static java.util.Collection<androidx.core.graphics.PathSegment!> flatten(android.graphics.Path, @FloatRange(from=0) float);
- }
-
- public class TypefaceCompat {
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @VisibleForTesting public static void clearCache();
- method public static android.graphics.Typeface create(android.content.Context, android.graphics.Typeface?, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromFontInfo(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![], int);
- method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromResourcesFamilyXml(android.content.Context, androidx.core.content.res.FontResourcesParserCompat.FamilyResourceEntry, android.content.res.Resources, int, int, androidx.core.content.res.ResourcesCompat.FontCallback?, android.os.Handler?, boolean);
- method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? createFromResourcesFontFile(android.content.Context, android.content.res.Resources, int, String!, int);
- method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface? findFromCache(android.content.res.Resources, int, int);
- }
-
- @RequiresApi(26) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypefaceCompatApi26Impl {
- ctor public TypefaceCompatApi26Impl();
- method protected android.graphics.Typeface? createFromFamiliesWithDefault(Object!);
- method public android.graphics.Typeface? createFromFontFamilyFilesResourceEntry(android.content.Context!, androidx.core.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry!, android.content.res.Resources!, int);
- method public android.graphics.Typeface? createFromFontInfo(android.content.Context!, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![], int);
- method public android.graphics.Typeface? createFromResourcesFontFile(android.content.Context!, android.content.res.Resources!, int, String!, int);
- method protected java.lang.reflect.Method! obtainAbortCreationMethod(Class<?>!) throws java.lang.NoSuchMethodException;
- method protected java.lang.reflect.Method! obtainAddFontFromAssetManagerMethod(Class<?>!) throws java.lang.NoSuchMethodException;
- method protected java.lang.reflect.Method! obtainAddFontFromBufferMethod(Class<?>!) throws java.lang.NoSuchMethodException;
- method protected java.lang.reflect.Method! obtainCreateFromFamiliesWithDefaultMethod(Class<?>!) throws java.lang.NoSuchMethodException;
- method protected Class<?>! obtainFontFamily() throws java.lang.ClassNotFoundException;
- method protected java.lang.reflect.Constructor<?>! obtainFontFamilyCtor(Class<?>!) throws java.lang.NoSuchMethodException;
- method protected java.lang.reflect.Method! obtainFreezeMethod(Class<?>!) throws java.lang.NoSuchMethodException;
- field protected final java.lang.reflect.Method! mAbortCreation;
- field protected final java.lang.reflect.Method! mAddFontFromAssetManager;
- field protected final java.lang.reflect.Method! mAddFontFromBuffer;
- field protected final java.lang.reflect.Method! mCreateFromFamiliesWithDefault;
- field protected final Class<?>! mFontFamily;
- field protected final java.lang.reflect.Constructor<?>! mFontFamilyCtor;
- field protected final java.lang.reflect.Method! mFreeze;
- }
-
- @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypefaceCompatApi28Impl extends androidx.core.graphics.TypefaceCompatApi26Impl {
- ctor public TypefaceCompatApi28Impl();
- }
-
- @RequiresApi(29) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class TypefaceCompatApi29Impl {
- ctor public TypefaceCompatApi29Impl();
- method public android.graphics.Typeface? createFromFontFamilyFilesResourceEntry(android.content.Context!, androidx.core.content.res.FontResourcesParserCompat.FontFamilyFilesResourceEntry!, android.content.res.Resources!, int);
- method public android.graphics.Typeface? createFromFontInfo(android.content.Context!, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![], int);
- method protected android.graphics.Typeface! createFromInputStream(android.content.Context!, java.io.InputStream!);
- method public android.graphics.Typeface? createFromResourcesFontFile(android.content.Context!, android.content.res.Resources!, int, String!, int);
- method protected androidx.core.provider.FontsContractCompat.FontInfo! findBestInfo(androidx.core.provider.FontsContractCompat.FontInfo![]!, int);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TypefaceCompatUtil {
- method public static void closeQuietly(java.io.Closeable?);
- method @RequiresApi(19) public static java.nio.ByteBuffer? copyToDirectBuffer(android.content.Context, android.content.res.Resources, int);
- method public static boolean copyToFile(java.io.File, java.io.InputStream);
- method public static boolean copyToFile(java.io.File, android.content.res.Resources, int);
- method public static java.io.File? getTempFile(android.content.Context);
- method @RequiresApi(19) public static java.nio.ByteBuffer? mmap(android.content.Context, android.os.CancellationSignal?, android.net.Uri);
- }
-
-}
-
-package androidx.core.graphics.drawable {
-
- public final class DrawableCompat {
- method public static void applyTheme(android.graphics.drawable.Drawable, android.content.res.Resources.Theme);
- method public static boolean canApplyTheme(android.graphics.drawable.Drawable);
- method public static void clearColorFilter(android.graphics.drawable.Drawable);
- method public static int getAlpha(android.graphics.drawable.Drawable);
- method public static android.graphics.ColorFilter? getColorFilter(android.graphics.drawable.Drawable);
- method public static int getLayoutDirection(android.graphics.drawable.Drawable);
- method public static void inflate(android.graphics.drawable.Drawable, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
- method public static boolean isAutoMirrored(android.graphics.drawable.Drawable);
- method @Deprecated public static void jumpToCurrentState(android.graphics.drawable.Drawable);
- method public static void setAutoMirrored(android.graphics.drawable.Drawable, boolean);
- method public static void setHotspot(android.graphics.drawable.Drawable, float, float);
- method public static void setHotspotBounds(android.graphics.drawable.Drawable, int, int, int, int);
- method public static boolean setLayoutDirection(android.graphics.drawable.Drawable, int);
- method public static void setTint(android.graphics.drawable.Drawable, @ColorInt int);
- method public static void setTintList(android.graphics.drawable.Drawable, android.content.res.ColorStateList?);
- method public static void setTintMode(android.graphics.drawable.Drawable, android.graphics.PorterDuff.Mode);
- method public static <T extends android.graphics.drawable.Drawable> T! unwrap(android.graphics.drawable.Drawable);
- method public static android.graphics.drawable.Drawable wrap(android.graphics.drawable.Drawable);
- }
-
- @androidx.versionedparcelable.VersionedParcelize(allowSerialization=true, ignoreParcelables=true, isCustom=true, jetifyAs="android.support.v4.graphics.drawable.IconCompat") public class IconCompat extends androidx.versionedparcelable.CustomVersionedParcelable {
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addToShortcutIntent(android.content.Intent, android.graphics.drawable.Drawable?, android.content.Context);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void checkResource(android.content.Context);
- method public static androidx.core.graphics.drawable.IconCompat? createFromBundle(android.os.Bundle);
- method @RequiresApi(23) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.content.Context, android.graphics.drawable.Icon);
- method @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat? createFromIcon(android.graphics.drawable.Icon);
- method @RequiresApi(23) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat? createFromIconOrNullIfZeroResId(android.graphics.drawable.Icon);
- method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmap(android.graphics.Bitmap);
- method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(String);
- method public static androidx.core.graphics.drawable.IconCompat createWithAdaptiveBitmapContentUri(android.net.Uri);
- method public static androidx.core.graphics.drawable.IconCompat createWithBitmap(android.graphics.Bitmap);
- method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(String);
- method public static androidx.core.graphics.drawable.IconCompat createWithContentUri(android.net.Uri);
- method public static androidx.core.graphics.drawable.IconCompat createWithData(byte[], int, int);
- method public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.Context, @DrawableRes int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.graphics.drawable.IconCompat createWithResource(android.content.res.Resources?, String, @DrawableRes int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.Bitmap? getBitmap();
- method @DrawableRes public int getResId();
- method public String getResPackage();
- method public int getType();
- method public android.net.Uri getUri();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.io.InputStream? getUriInputStream(android.content.Context);
- method public android.graphics.drawable.Drawable? loadDrawable(android.content.Context);
- method public androidx.core.graphics.drawable.IconCompat setTint(@ColorInt int);
- method public androidx.core.graphics.drawable.IconCompat setTintList(android.content.res.ColorStateList?);
- method public androidx.core.graphics.drawable.IconCompat setTintMode(android.graphics.PorterDuff.Mode?);
- method public android.os.Bundle toBundle();
- method @Deprecated @RequiresApi(23) public android.graphics.drawable.Icon toIcon();
- method @RequiresApi(23) public android.graphics.drawable.Icon toIcon(android.content.Context?);
- field public static final int TYPE_ADAPTIVE_BITMAP = 5; // 0x5
- field public static final int TYPE_BITMAP = 1; // 0x1
- field public static final int TYPE_DATA = 3; // 0x3
- field public static final int TYPE_RESOURCE = 2; // 0x2
- field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
- field public static final int TYPE_URI = 4; // 0x4
- field public static final int TYPE_URI_ADAPTIVE_BITMAP = 6; // 0x6
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.versionedparcelable.ParcelField(value=1, defaultValue="androidx.core.graphics.drawable.IconCompat.TYPE_UNKNOWN") public int mType;
- }
-
- public abstract class RoundedBitmapDrawable extends android.graphics.drawable.Drawable {
- method public void draw(android.graphics.Canvas);
- method public final android.graphics.Bitmap? getBitmap();
- method public float getCornerRadius();
- method public int getGravity();
- method public int getOpacity();
- method public final android.graphics.Paint getPaint();
- method public boolean hasAntiAlias();
- method public boolean hasMipMap();
- method public boolean isCircular();
- method public void setAlpha(int);
- method public void setAntiAlias(boolean);
- method public void setCircular(boolean);
- method public void setColorFilter(android.graphics.ColorFilter!);
- method public void setCornerRadius(float);
- method public void setDither(boolean);
- method public void setGravity(int);
- method public void setMipMap(boolean);
- method public void setTargetDensity(android.graphics.Canvas);
- method public void setTargetDensity(android.util.DisplayMetrics);
- method public void setTargetDensity(int);
- }
-
- public final class RoundedBitmapDrawableFactory {
- method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, android.graphics.Bitmap?);
- method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, String);
- method public static androidx.core.graphics.drawable.RoundedBitmapDrawable create(android.content.res.Resources, java.io.InputStream);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintAwareDrawable {
- method public void setTint(@ColorInt int);
- method public void setTintList(android.content.res.ColorStateList!);
- method public void setTintMode(android.graphics.PorterDuff.Mode!);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface WrappedDrawable {
- method public android.graphics.drawable.Drawable! getWrappedDrawable();
- method public void setWrappedDrawable(android.graphics.drawable.Drawable!);
- }
-
-}
-
-package androidx.core.hardware.display {
-
- public final class DisplayManagerCompat {
- method public android.view.Display? getDisplay(int);
- method public android.view.Display![] getDisplays();
- method public android.view.Display![] getDisplays(String?);
- method public static androidx.core.hardware.display.DisplayManagerCompat getInstance(android.content.Context);
- field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
- }
-
-}
-
-package androidx.core.hardware.fingerprint {
-
- @Deprecated public class FingerprintManagerCompat {
- method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public void authenticate(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject?, int, androidx.core.os.CancellationSignal?, androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback, android.os.Handler?);
- method @Deprecated public static androidx.core.hardware.fingerprint.FingerprintManagerCompat from(android.content.Context);
- method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
- method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
- }
-
- @Deprecated public abstract static class FingerprintManagerCompat.AuthenticationCallback {
- ctor @Deprecated public FingerprintManagerCompat.AuthenticationCallback();
- method @Deprecated public void onAuthenticationError(int, CharSequence!);
- method @Deprecated public void onAuthenticationFailed();
- method @Deprecated public void onAuthenticationHelp(int, CharSequence!);
- method @Deprecated public void onAuthenticationSucceeded(androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationResult!);
- }
-
- @Deprecated public static final class FingerprintManagerCompat.AuthenticationResult {
- ctor @Deprecated public FingerprintManagerCompat.AuthenticationResult(androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject!);
- method @Deprecated public androidx.core.hardware.fingerprint.FingerprintManagerCompat.CryptoObject! getCryptoObject();
- }
-
- @Deprecated public static class FingerprintManagerCompat.CryptoObject {
- ctor @Deprecated public FingerprintManagerCompat.CryptoObject(java.security.Signature);
- ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Cipher);
- ctor @Deprecated public FingerprintManagerCompat.CryptoObject(javax.crypto.Mac);
- method @Deprecated public javax.crypto.Cipher? getCipher();
- method @Deprecated public javax.crypto.Mac? getMac();
- method @Deprecated public java.security.Signature? getSignature();
- }
-
-}
-
-package androidx.core.internal.view {
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportMenu extends android.view.Menu {
- method public void setGroupDividerEnabled(boolean);
- field public static final int CATEGORY_MASK = -65536; // 0xffff0000
- field public static final int CATEGORY_SHIFT = 16; // 0x10
- field public static final int FLAG_KEEP_OPEN_ON_SUBMENU_OPENED = 4; // 0x4
- field public static final int SUPPORTED_MODIFIERS_MASK = 69647; // 0x1100f
- field public static final int USER_MASK = 65535; // 0xffff
- field public static final int USER_SHIFT = 0; // 0x0
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportMenuItem extends android.view.MenuItem {
- method public int getAlphabeticModifiers();
- method public CharSequence? getContentDescription();
- method public android.content.res.ColorStateList? getIconTintList();
- method public android.graphics.PorterDuff.Mode? getIconTintMode();
- method public int getNumericModifiers();
- method public androidx.core.view.ActionProvider? getSupportActionProvider();
- method public CharSequence? getTooltipText();
- method public boolean requiresActionButton();
- method public boolean requiresOverflow();
- method public android.view.MenuItem setAlphabeticShortcut(char, int);
- method public androidx.core.internal.view.SupportMenuItem setContentDescription(CharSequence?);
- method public android.view.MenuItem setIconTintList(android.content.res.ColorStateList?);
- method public android.view.MenuItem setIconTintMode(android.graphics.PorterDuff.Mode?);
- method public android.view.MenuItem setNumericShortcut(char, int);
- method public android.view.MenuItem setShortcut(char, char, int, int);
- method public androidx.core.internal.view.SupportMenuItem setSupportActionProvider(androidx.core.view.ActionProvider?);
- method public androidx.core.internal.view.SupportMenuItem setTooltipText(CharSequence?);
- field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
- field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
- field public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
- field public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
- field public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SupportSubMenu extends androidx.core.internal.view.SupportMenu android.view.SubMenu {
- }
-
-}
-
-package androidx.core.location {
-
- public abstract class GnssStatusCompat {
- method @FloatRange(from=0, to=360) public abstract float getAzimuthDegrees(@IntRange(from=0) int);
- method @FloatRange(from=0, to=63) public abstract float getBasebandCn0DbHz(@IntRange(from=0) int);
- method @FloatRange(from=0) public abstract float getCarrierFrequencyHz(@IntRange(from=0) int);
- method @FloatRange(from=0, to=63) public abstract float getCn0DbHz(@IntRange(from=0) int);
- method public abstract int getConstellationType(@IntRange(from=0) int);
- method @FloatRange(from=0xffffffa6, to=90) public abstract float getElevationDegrees(@IntRange(from=0) int);
- method @IntRange(from=0) public abstract int getSatelliteCount();
- method @IntRange(from=1, to=200) public abstract int getSvid(@IntRange(from=0) int);
- method public abstract boolean hasAlmanacData(@IntRange(from=0) int);
- method public abstract boolean hasBasebandCn0DbHz(@IntRange(from=0) int);
- method public abstract boolean hasCarrierFrequencyHz(@IntRange(from=0) int);
- method public abstract boolean hasEphemerisData(@IntRange(from=0) int);
- method public abstract boolean usedInFix(@IntRange(from=0) int);
- method @RequiresApi(android.os.Build.VERSION_CODES.N) public static androidx.core.location.GnssStatusCompat wrap(android.location.GnssStatus);
- method public static androidx.core.location.GnssStatusCompat wrap(android.location.GpsStatus);
- field public static final int CONSTELLATION_BEIDOU = 5; // 0x5
- field public static final int CONSTELLATION_GALILEO = 6; // 0x6
- field public static final int CONSTELLATION_GLONASS = 3; // 0x3
- field public static final int CONSTELLATION_GPS = 1; // 0x1
- field public static final int CONSTELLATION_IRNSS = 7; // 0x7
- field public static final int CONSTELLATION_QZSS = 4; // 0x4
- field public static final int CONSTELLATION_SBAS = 2; // 0x2
- field public static final int CONSTELLATION_UNKNOWN = 0; // 0x0
- }
-
- public abstract static class GnssStatusCompat.Callback {
- ctor public GnssStatusCompat.Callback();
- method public void onFirstFix(@IntRange(from=0) int);
- method public void onSatelliteStatusChanged(androidx.core.location.GnssStatusCompat);
- method public void onStarted();
- method public void onStopped();
- }
-
- public final class LocationCompat {
- method public static float getBearingAccuracyDegrees(android.location.Location);
- method public static long getElapsedRealtimeMillis(android.location.Location);
- method public static long getElapsedRealtimeNanos(android.location.Location);
- method public static float getSpeedAccuracyMetersPerSecond(android.location.Location);
- method public static float getVerticalAccuracyMeters(android.location.Location);
- method public static boolean hasBearingAccuracy(android.location.Location);
- method public static boolean hasSpeedAccuracy(android.location.Location);
- method public static boolean hasVerticalAccuracy(android.location.Location);
- method public static boolean isMock(android.location.Location);
- method public static void setBearingAccuracyDegrees(android.location.Location, float);
- method public static void setMock(android.location.Location, boolean);
- method public static void setSpeedAccuracyMetersPerSecond(android.location.Location, float);
- method public static void setVerticalAccuracyMeters(android.location.Location, float);
- field public static final String EXTRA_BEARING_ACCURACY = "bearingAccuracy";
- field public static final String EXTRA_IS_MOCK = "mockLocation";
- field public static final String EXTRA_SPEED_ACCURACY = "speedAccuracy";
- field public static final String EXTRA_VERTICAL_ACCURACY = "verticalAccuracy";
- }
-
- public interface LocationListenerCompat extends android.location.LocationListener {
- method public default void onStatusChanged(String, int, android.os.Bundle?);
- }
-
- public final class LocationManagerCompat {
- method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void getCurrentLocation(android.location.LocationManager, String, androidx.core.os.CancellationSignal?, java.util.concurrent.Executor, androidx.core.util.Consumer<android.location.Location!>);
- method public static String? getGnssHardwareModelName(android.location.LocationManager);
- method public static int getGnssYearOfHardware(android.location.LocationManager);
- method public static boolean hasProvider(android.location.LocationManager, String);
- method public static boolean isLocationEnabled(android.location.LocationManager);
- method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback, android.os.Handler);
- method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static boolean registerGnssStatusCallback(android.location.LocationManager, java.util.concurrent.Executor, androidx.core.location.GnssStatusCompat.Callback);
- method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void removeUpdates(android.location.LocationManager, androidx.core.location.LocationListenerCompat);
- method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, java.util.concurrent.Executor, androidx.core.location.LocationListenerCompat);
- method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static void requestLocationUpdates(android.location.LocationManager, String, androidx.core.location.LocationRequestCompat, androidx.core.location.LocationListenerCompat, android.os.Looper);
- method public static void unregisterGnssStatusCallback(android.location.LocationManager, androidx.core.location.GnssStatusCompat.Callback);
- }
-
- public final class LocationRequestCompat {
- method @IntRange(from=1) public long getDurationMillis();
- method @IntRange(from=0) public long getIntervalMillis();
- method @IntRange(from=0) public long getMaxUpdateDelayMillis();
- method @IntRange(from=1, to=java.lang.Integer.MAX_VALUE) public int getMaxUpdates();
- method @FloatRange(from=0, to=java.lang.Float.MAX_VALUE) public float getMinUpdateDistanceMeters();
- method @IntRange(from=0) public long getMinUpdateIntervalMillis();
- method public int getQuality();
- method @RequiresApi(31) public android.location.LocationRequest toLocationRequest();
- method @RequiresApi(19) public android.location.LocationRequest? toLocationRequest(String);
- field public static final long PASSIVE_INTERVAL = 9223372036854775807L; // 0x7fffffffffffffffL
- field public static final int QUALITY_BALANCED_POWER_ACCURACY = 102; // 0x66
- field public static final int QUALITY_HIGH_ACCURACY = 100; // 0x64
- field public static final int QUALITY_LOW_POWER = 104; // 0x68
- }
-
- public static final class LocationRequestCompat.Builder {
- ctor public LocationRequestCompat.Builder(long);
- ctor public LocationRequestCompat.Builder(androidx.core.location.LocationRequestCompat);
- method public androidx.core.location.LocationRequestCompat build();
- method public androidx.core.location.LocationRequestCompat.Builder clearMinUpdateIntervalMillis();
- method public androidx.core.location.LocationRequestCompat.Builder setDurationMillis(@IntRange(from=1) long);
- method public androidx.core.location.LocationRequestCompat.Builder setIntervalMillis(@IntRange(from=0) long);
- method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdateDelayMillis(@IntRange(from=0) long);
- method public androidx.core.location.LocationRequestCompat.Builder setMaxUpdates(@IntRange(from=1, to=java.lang.Integer.MAX_VALUE) int);
- method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateDistanceMeters(@FloatRange(from=0, to=java.lang.Float.MAX_VALUE) float);
- method public androidx.core.location.LocationRequestCompat.Builder setMinUpdateIntervalMillis(@IntRange(from=0) long);
- method public androidx.core.location.LocationRequestCompat.Builder setQuality(int);
- }
-
-}
-
-package androidx.core.math {
-
- public class MathUtils {
- method public static int addExact(int, int);
- method public static long addExact(long, long);
- method public static float clamp(float, float, float);
- method public static double clamp(double, double, double);
- method public static int clamp(int, int, int);
- method public static long clamp(long, long, long);
- method public static int decrementExact(int);
- method public static long decrementExact(long);
- method public static int incrementExact(int);
- method public static long incrementExact(long);
- method public static int multiplyExact(int, int);
- method public static long multiplyExact(long, long);
- method public static int negateExact(int);
- method public static long negateExact(long);
- method public static int subtractExact(int, int);
- method public static long subtractExact(long, long);
- method public static int toIntExact(long);
- }
-
-}
-
-package androidx.core.net {
-
- public final class ConnectivityManagerCompat {
- method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static android.net.NetworkInfo? getNetworkInfoFromBroadcast(android.net.ConnectivityManager, android.content.Intent);
- method @androidx.core.net.ConnectivityManagerCompat.RestrictBackgroundStatus public static int getRestrictBackgroundStatus(android.net.ConnectivityManager);
- method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public static boolean isActiveNetworkMetered(android.net.ConnectivityManager);
- field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
- field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
- field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
- }
-
- @IntDef({androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_DISABLED, androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_WHITELISTED, androidx.core.net.ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_ENABLED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ConnectivityManagerCompat.RestrictBackgroundStatus {
- }
-
- public final class MailTo {
- method public String? getBcc();
- method public String? getBody();
- method public String? getCc();
- method public java.util.Map<java.lang.String!,java.lang.String!>? getHeaders();
- method public String? getSubject();
- method public String? getTo();
- method public static boolean isMailTo(String?);
- method public static boolean isMailTo(android.net.Uri?);
- method public static androidx.core.net.MailTo parse(String) throws androidx.core.net.ParseException;
- method public static androidx.core.net.MailTo parse(android.net.Uri) throws androidx.core.net.ParseException;
- field public static final String MAILTO_SCHEME = "mailto:";
- }
-
- public class ParseException extends java.lang.RuntimeException {
- field public final String response;
- }
-
- public final class TrafficStatsCompat {
- method @Deprecated public static void clearThreadStatsTag();
- method @Deprecated public static int getThreadStatsTag();
- method @Deprecated public static void incrementOperationCount(int);
- method @Deprecated public static void incrementOperationCount(int, int);
- method @Deprecated public static void setThreadStatsTag(int);
- method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
- method @Deprecated public static void tagSocket(java.net.Socket!) throws java.net.SocketException;
- method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
- method @Deprecated public static void untagSocket(java.net.Socket!) throws java.net.SocketException;
- }
-
- public final class UriCompat {
- method public static String toSafeString(android.net.Uri);
- }
-
-}
-
-package androidx.core.os {
-
- public class BuildCompat {
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N) public static boolean isAtLeastN();
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.N_MR1) public static boolean isAtLeastNMR1();
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O) public static boolean isAtLeastO();
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.O_MR1) public static boolean isAtLeastOMR1();
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.P) public static boolean isAtLeastP();
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.Q) public static boolean isAtLeastQ();
- method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.R) public static boolean isAtLeastR();
- method @Deprecated @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
- }
-
- public final class CancellationSignal {
- ctor public CancellationSignal();
- method public void cancel();
- method public Object? getCancellationSignalObject();
- method public boolean isCanceled();
- method public void setOnCancelListener(androidx.core.os.CancellationSignal.OnCancelListener?);
- method public void throwIfCanceled();
- }
-
- public static interface CancellationSignal.OnCancelListener {
- method public void onCancel();
- }
-
- public final class ConfigurationCompat {
- method public static androidx.core.os.LocaleListCompat getLocales(android.content.res.Configuration);
- }
-
- public final class EnvironmentCompat {
- method public static String getStorageState(java.io.File);
- field public static final String MEDIA_UNKNOWN = "unknown";
- }
-
- public final class ExecutorCompat {
- method public static java.util.concurrent.Executor create(android.os.Handler);
- }
-
- public final class HandlerCompat {
- method public static android.os.Handler createAsync(android.os.Looper);
- method public static android.os.Handler createAsync(android.os.Looper, android.os.Handler.Callback);
- method @RequiresApi(16) public static boolean hasCallbacks(android.os.Handler, Runnable);
- method public static boolean postDelayed(android.os.Handler, Runnable, Object?, long);
- }
-
- public final class LocaleListCompat {
- method public static androidx.core.os.LocaleListCompat create(java.util.Locale!...);
- method public static androidx.core.os.LocaleListCompat forLanguageTags(String?);
- method public java.util.Locale? get(int);
- method @Size(min=1) public static androidx.core.os.LocaleListCompat getAdjustedDefault();
- method @Size(min=1) public static androidx.core.os.LocaleListCompat getDefault();
- method public static androidx.core.os.LocaleListCompat getEmptyLocaleList();
- method public java.util.Locale? getFirstMatch(String![]);
- method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale?);
- method public boolean isEmpty();
- method @IntRange(from=0) public int size();
- method public String toLanguageTags();
- method public Object? unwrap();
- method @Deprecated @RequiresApi(24) public static androidx.core.os.LocaleListCompat! wrap(Object!);
- method @RequiresApi(24) public static androidx.core.os.LocaleListCompat wrap(android.os.LocaleList);
- }
-
- public final class MessageCompat {
- method public static boolean isAsynchronous(android.os.Message);
- method public static void setAsynchronous(android.os.Message, boolean);
- }
-
- public class OperationCanceledException extends java.lang.RuntimeException {
- ctor public OperationCanceledException();
- ctor public OperationCanceledException(String?);
- }
-
- public final class ParcelCompat {
- method public static boolean readBoolean(android.os.Parcel);
- method public static void writeBoolean(android.os.Parcel, boolean);
- }
-
- @Deprecated public final class ParcelableCompat {
- method @Deprecated public static <T> android.os.Parcelable.Creator<T!>! newCreator(androidx.core.os.ParcelableCompatCreatorCallbacks<T!>!);
- }
-
- @Deprecated public interface ParcelableCompatCreatorCallbacks<T> {
- method @Deprecated public T! createFromParcel(android.os.Parcel!, ClassLoader!);
- method @Deprecated public T![]! newArray(int);
- }
-
- public final class ProcessCompat {
- method public static boolean isApplicationUid(int);
- }
-
- @Deprecated public final class TraceCompat {
- method @Deprecated public static void beginAsyncSection(String, int);
- method @Deprecated public static void beginSection(String);
- method @Deprecated public static void endAsyncSection(String, int);
- method @Deprecated public static void endSection();
- method @Deprecated public static boolean isEnabled();
- method @Deprecated public static void setCounter(String, int);
- }
-
- @RequiresApi(17) public class UserHandleCompat {
- method public static android.os.UserHandle getUserHandleForUid(int);
- }
-
- public class UserManagerCompat {
- method public static boolean isUserUnlocked(android.content.Context);
- }
-
-}
-
-package androidx.core.provider {
-
- public final class DocumentsContractCompat {
- method public static android.net.Uri? buildChildDocumentsUri(String, String?);
- method public static android.net.Uri? buildChildDocumentsUriUsingTree(android.net.Uri, String);
- method public static android.net.Uri? buildDocumentUri(String, String);
- method public static android.net.Uri? buildDocumentUriUsingTree(android.net.Uri, String);
- method public static android.net.Uri? buildTreeDocumentUri(String, String);
- method public static android.net.Uri? createDocument(android.content.ContentResolver, android.net.Uri, String, String) throws java.io.FileNotFoundException;
- method public static String? getDocumentId(android.net.Uri);
- method public static String? getTreeDocumentId(android.net.Uri);
- method public static boolean isDocumentUri(android.content.Context, android.net.Uri?);
- method public static boolean isTreeUri(android.net.Uri);
- method public static boolean removeDocument(android.content.ContentResolver, android.net.Uri, android.net.Uri) throws java.io.FileNotFoundException;
- method public static android.net.Uri? renameDocument(android.content.ContentResolver, android.net.Uri, String) throws java.io.FileNotFoundException;
- }
-
- public static final class DocumentsContractCompat.DocumentCompat {
- field public static final int FLAG_VIRTUAL_DOCUMENT = 512; // 0x200
- }
-
- public final class FontRequest {
- ctor public FontRequest(String, String, String, java.util.List<java.util.List<byte[]!>!>);
- ctor public FontRequest(String, String, String, @ArrayRes int);
- method public java.util.List<java.util.List<byte[]!>!>? getCertificates();
- method @ArrayRes public int getCertificatesArrayResId();
- method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String! getIdentifier();
- method public String getProviderAuthority();
- method public String getProviderPackage();
- method public String getQuery();
- }
-
- public class FontsContractCompat {
- method public static android.graphics.Typeface? buildTypeface(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontsContractCompat.FontInfo![]);
- method public static androidx.core.provider.FontsContractCompat.FontFamilyResult fetchFonts(android.content.Context, android.os.CancellationSignal?, androidx.core.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
- method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.graphics.Typeface! getFontSync(android.content.Context!, androidx.core.provider.FontRequest!, androidx.core.content.res.ResourcesCompat.FontCallback?, android.os.Handler?, boolean, int, int);
- method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @VisibleForTesting public static android.content.pm.ProviderInfo? getProvider(android.content.pm.PackageManager, androidx.core.provider.FontRequest, android.content.res.Resources?) throws android.content.pm.PackageManager.NameNotFoundException;
- method @Deprecated @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static java.util.Map<android.net.Uri!,java.nio.ByteBuffer!>! prepareFontData(android.content.Context!, androidx.core.provider.FontsContractCompat.FontInfo![]!, android.os.CancellationSignal!);
- method public static void requestFont(android.content.Context, androidx.core.provider.FontRequest, androidx.core.provider.FontsContractCompat.FontRequestCallback, android.os.Handler);
- method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void resetCache();
- field @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String PARCEL_FONT_RESULTS = "font_results";
- }
-
- public static final class FontsContractCompat.Columns implements android.provider.BaseColumns {
- ctor public FontsContractCompat.Columns();
- field public static final String FILE_ID = "file_id";
- field public static final String ITALIC = "font_italic";
- field public static final String RESULT_CODE = "result_code";
- field public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
- field public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
- field public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
- field public static final int RESULT_CODE_OK = 0; // 0x0
- field public static final String TTC_INDEX = "font_ttc_index";
- field public static final String VARIATION_SETTINGS = "font_variation_settings";
- field public static final String WEIGHT = "font_weight";
- }
-
- public static class FontsContractCompat.FontFamilyResult {
- ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public FontsContractCompat.FontFamilyResult(int, androidx.core.provider.FontsContractCompat.FontInfo![]?);
- method public androidx.core.provider.FontsContractCompat.FontInfo![]! getFonts();
- method public int getStatusCode();
- field public static final int STATUS_OK = 0; // 0x0
- field public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
- field public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
- }
-
- public static class FontsContractCompat.FontInfo {
- ctor @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public FontsContractCompat.FontInfo(android.net.Uri, @IntRange(from=0) int, @IntRange(from=1, to=1000) int, boolean, int);
- method public int getResultCode();
- method @IntRange(from=0) public int getTtcIndex();
- method public android.net.Uri getUri();
- method @IntRange(from=1, to=1000) public int getWeight();
- method public boolean isItalic();
- }
-
- public static class FontsContractCompat.FontRequestCallback {
- ctor public FontsContractCompat.FontRequestCallback();
- method public void onTypefaceRequestFailed(@androidx.core.provider.FontsContractCompat.FontRequestCallback.FontRequestFailReason int);
- method public void onTypefaceRetrieved(android.graphics.Typeface!);
- field public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
- field public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
- field public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
- field public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
- field public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
- field public static final int FAIL_REASON_SECURITY_VIOLATION = -4; // 0xfffffffc
- field public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
- field @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int RESULT_OK = 0; // 0x0
- }
-
- @IntDef({androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_PROVIDER_NOT_FOUND, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_LOAD_ERROR, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_NOT_FOUND, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_FONT_UNAVAILABLE, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_MALFORMED_QUERY, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_WRONG_CERTIFICATES, androidx.core.provider.FontsContractCompat.FontRequestCallback.FAIL_REASON_SECURITY_VIOLATION, androidx.core.provider.FontsContractCompat.FontRequestCallback.RESULT_OK}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FontsContractCompat.FontRequestCallback.FontRequestFailReason {
- }
-
- @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SelfDestructiveThread {
- ctor @Deprecated public SelfDestructiveThread(String!, int, int);
- method @Deprecated @VisibleForTesting public int getGeneration();
- method @Deprecated @VisibleForTesting public boolean isRunning();
- method @Deprecated public <T> void postAndReply(java.util.concurrent.Callable<T!>!, androidx.core.provider.SelfDestructiveThread.ReplyCallback<T!>!);
- method @Deprecated public <T> T! postAndWait(java.util.concurrent.Callable<T!>!, int) throws java.lang.InterruptedException;
- }
-
- @Deprecated public static interface SelfDestructiveThread.ReplyCallback<T> {
- method @Deprecated public void onReply(T!);
- }
-
-}
-
-package androidx.core.telephony {
-
- @RequiresApi(22) public class SubscriptionManagerCompat {
- method public static int getSlotIndex(int);
- }
-
- public class TelephonyManagerCompat {
- method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static String? getImei(android.telephony.TelephonyManager);
- method public static int getSubscriptionId(android.telephony.TelephonyManager);
- }
-
-}
-
-package androidx.core.telephony.mbms {
-
- public final class MbmsHelper {
- method public static CharSequence? getBestNameForService(android.content.Context, android.telephony.mbms.ServiceInfo);
- }
-
-}
-
-package androidx.core.text {
-
- public final class BidiFormatter {
- method public static androidx.core.text.BidiFormatter! getInstance();
- method public static androidx.core.text.BidiFormatter! getInstance(boolean);
- method public static androidx.core.text.BidiFormatter! getInstance(java.util.Locale!);
- method public boolean getStereoReset();
- method public boolean isRtl(String!);
- method public boolean isRtl(CharSequence!);
- method public boolean isRtlContext();
- method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
- method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!, boolean);
- method public String! unicodeWrap(String!, androidx.core.text.TextDirectionHeuristicCompat!);
- method public CharSequence! unicodeWrap(CharSequence!, androidx.core.text.TextDirectionHeuristicCompat!);
- method public String! unicodeWrap(String!, boolean);
- method public CharSequence! unicodeWrap(CharSequence!, boolean);
- method public String! unicodeWrap(String!);
- method public CharSequence! unicodeWrap(CharSequence!);
- }
-
- public static final class BidiFormatter.Builder {
- ctor public BidiFormatter.Builder();
- ctor public BidiFormatter.Builder(boolean);
- ctor public BidiFormatter.Builder(java.util.Locale!);
- method public androidx.core.text.BidiFormatter! build();
- method public androidx.core.text.BidiFormatter.Builder! setTextDirectionHeuristic(androidx.core.text.TextDirectionHeuristicCompat!);
- method public androidx.core.text.BidiFormatter.Builder! stereoReset(boolean);
- }
-
- public final class HtmlCompat {
- method public static android.text.Spanned fromHtml(String, int);
- method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter?, android.text.Html.TagHandler?);
- method public static String toHtml(android.text.Spanned, int);
- field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
- field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
- field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
- field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; // 0x20
- field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; // 0x10
- field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; // 0x2
- field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; // 0x8
- field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; // 0x4
- field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; // 0x1
- field public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; // 0x0
- field public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; // 0x1
- }
-
- public final class ICUCompat {
- method public static String? maximizeAndGetScript(java.util.Locale);
- }
-
- public class PrecomputedTextCompat implements android.text.Spannable {
- method public char charAt(int);
- method public static androidx.core.text.PrecomputedTextCompat! create(CharSequence, androidx.core.text.PrecomputedTextCompat.Params);
- method @IntRange(from=0) public int getParagraphCount();
- method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
- method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
- method public androidx.core.text.PrecomputedTextCompat.Params getParams();
- method @RequiresApi(28) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.text.PrecomputedText? getPrecomputedText();
- method public int getSpanEnd(Object!);
- method public int getSpanFlags(Object!);
- method public int getSpanStart(Object!);
- method public <T> T![]! getSpans(int, int, Class<T!>!);
- method @UiThread public static java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>! getTextFuture(CharSequence, androidx.core.text.PrecomputedTextCompat.Params, java.util.concurrent.Executor?);
- method public int length();
- method public int nextSpanTransition(int, int, Class!);
- method public void removeSpan(Object!);
- method public void setSpan(Object!, int, int, int);
- method public CharSequence! subSequence(int, int);
- }
-
- public static final class PrecomputedTextCompat.Params {
- ctor @RequiresApi(28) public PrecomputedTextCompat.Params(android.text.PrecomputedText.Params);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean equalsWithoutTextDirection(androidx.core.text.PrecomputedTextCompat.Params);
- method @RequiresApi(23) public int getBreakStrategy();
- method @RequiresApi(23) public int getHyphenationFrequency();
- method @RequiresApi(18) public android.text.TextDirectionHeuristic? getTextDirection();
- method public android.text.TextPaint getTextPaint();
- }
-
- public static class PrecomputedTextCompat.Params.Builder {
- ctor public PrecomputedTextCompat.Params.Builder(android.text.TextPaint);
- method public androidx.core.text.PrecomputedTextCompat.Params build();
- method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setBreakStrategy(int);
- method @RequiresApi(23) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setHyphenationFrequency(int);
- method @RequiresApi(18) public androidx.core.text.PrecomputedTextCompat.Params.Builder! setTextDirection(android.text.TextDirectionHeuristic);
- }
-
- public interface TextDirectionHeuristicCompat {
- method public boolean isRtl(char[]!, int, int);
- method public boolean isRtl(CharSequence!, int, int);
- }
-
- public final class TextDirectionHeuristicsCompat {
- field public static final androidx.core.text.TextDirectionHeuristicCompat! ANYRTL_LTR;
- field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_LTR;
- field public static final androidx.core.text.TextDirectionHeuristicCompat! FIRSTSTRONG_RTL;
- field public static final androidx.core.text.TextDirectionHeuristicCompat! LOCALE;
- field public static final androidx.core.text.TextDirectionHeuristicCompat! LTR;
- field public static final androidx.core.text.TextDirectionHeuristicCompat! RTL;
- }
-
- public final class TextUtilsCompat {
- method public static int getLayoutDirectionFromLocale(java.util.Locale?);
- method public static String htmlEncode(String);
- }
-
-}
-
-package androidx.core.text.util {
-
- public final class LinkifyCompat {
- method public static boolean addLinks(android.text.Spannable, @androidx.core.text.util.LinkifyCompat.LinkifyMask int);
- method public static boolean addLinks(android.widget.TextView, @androidx.core.text.util.LinkifyCompat.LinkifyMask int);
- method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?);
- method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- method public static void addLinks(android.widget.TextView, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- method public static boolean addLinks(android.text.Spannable, java.util.regex.Pattern, String?, String![]?, android.text.util.Linkify.MatchFilter?, android.text.util.Linkify.TransformFilter?);
- }
-
- @IntDef(flag=true, value={android.text.util.Linkify.WEB_URLS, android.text.util.Linkify.EMAIL_ADDRESSES, android.text.util.Linkify.PHONE_NUMBERS, android.text.util.Linkify.MAP_ADDRESSES, android.text.util.Linkify.ALL}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface LinkifyCompat.LinkifyMask {
- }
-
-}
-
-package androidx.core.util {
-
- public class AtomicFile {
- ctor public AtomicFile(java.io.File);
- method public void delete();
- method public void failWrite(java.io.FileOutputStream?);
- method public void finishWrite(java.io.FileOutputStream?);
- method public java.io.File getBaseFile();
- method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
- method public byte[] readFully() throws java.io.IOException;
- method public java.io.FileOutputStream startWrite() throws java.io.IOException;
- }
-
- public interface Consumer<T> {
- method public void accept(T!);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class DebugUtils {
- method public static void buildShortClassTag(Object!, StringBuilder!);
- }
-
- @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class LogWriter extends java.io.Writer {
- ctor @Deprecated public LogWriter(String!);
- method @Deprecated public void close();
- method @Deprecated public void flush();
- method @Deprecated public void write(char[]!, int, int);
- }
-
- public class ObjectsCompat {
- method public static boolean equals(Object?, Object?);
- method public static int hash(java.lang.Object!...);
- method public static int hashCode(Object?);
- method public static <T> T requireNonNull(T?);
- method public static <T> T requireNonNull(T?, String);
- method public static String? toString(Object?, String?);
- }
-
- public class Pair<F, S> {
- ctor public Pair(F!, S!);
- method public static <A, B> androidx.core.util.Pair<A!,B!> create(A!, B!);
- field public final F! first;
- field public final S! second;
- }
-
- public final class PatternsCompat {
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final java.util.regex.Pattern AUTOLINK_EMAIL_ADDRESS;
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final java.util.regex.Pattern AUTOLINK_WEB_URL;
- field public static final java.util.regex.Pattern DOMAIN_NAME;
- field public static final java.util.regex.Pattern EMAIL_ADDRESS;
- field public static final java.util.regex.Pattern IP_ADDRESS;
- field public static final java.util.regex.Pattern WEB_URL;
- }
-
- public final class Pools {
- }
-
- public static interface Pools.Pool<T> {
- method public T? acquire();
- method public boolean release(T);
- }
-
- public static class Pools.SimplePool<T> implements androidx.core.util.Pools.Pool<T> {
- ctor public Pools.SimplePool(int);
- method public T! acquire();
- method public boolean release(T);
- }
-
- public static class Pools.SynchronizedPool<T> extends androidx.core.util.Pools.SimplePool<T> {
- ctor public Pools.SynchronizedPool(int);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class Preconditions {
- method public static void checkArgument(boolean);
- method public static void checkArgument(boolean, Object);
- method public static void checkArgument(boolean, String, java.lang.Object!...);
- method public static float checkArgumentFinite(float, String);
- method public static int checkArgumentInRange(int, int, int, String);
- method public static long checkArgumentInRange(long, long, long, String);
- method public static float checkArgumentInRange(float, float, float, String);
- method public static double checkArgumentInRange(double, double, double, String);
- method @IntRange(from=0) public static int checkArgumentNonnegative(int, String?);
- method @IntRange(from=0) public static int checkArgumentNonnegative(int);
- method public static int checkFlagsArgument(int, int);
- method public static <T> T checkNotNull(T?);
- method public static <T> T checkNotNull(T?, Object);
- method public static void checkState(boolean, String?);
- method public static void checkState(boolean);
- method public static <T extends java.lang.CharSequence> T checkStringNotEmpty(T?);
- method public static <T extends java.lang.CharSequence> T checkStringNotEmpty(T?, Object);
- method public static <T extends java.lang.CharSequence> T checkStringNotEmpty(T?, String, java.lang.Object!...);
- }
-
- public interface Predicate<T> {
- method public boolean test(T!);
- }
-
- public final class SizeFCompat {
- ctor public SizeFCompat(float, float);
- method public float getHeight();
- method public float getWidth();
- method @RequiresApi(21) public android.util.SizeF toSizeF();
- method @RequiresApi(21) public static androidx.core.util.SizeFCompat toSizeFCompat(android.util.SizeF);
- }
-
- public interface Supplier<T> {
- method public T! get();
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class TimeUtils {
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, StringBuilder!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, java.io.PrintWriter!, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, java.io.PrintWriter!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void formatDuration(long, long, java.io.PrintWriter!);
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final int HUNDRED_DAY_FIELD_LEN = 19; // 0x13
- }
-
-}
-
-package androidx.core.view {
-
- public class AccessibilityDelegateCompat {
- ctor public AccessibilityDelegateCompat();
- ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityDelegateCompat(android.view.View.AccessibilityDelegate);
- method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
- method public androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
- method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
- method public void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
- method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
- method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
- method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
- method public void sendAccessibilityEvent(android.view.View, int);
- method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
- }
-
- public abstract class ActionProvider {
- ctor public ActionProvider(android.content.Context);
- method public android.content.Context getContext();
- method public boolean hasSubMenu();
- method public boolean isVisible();
- method public abstract android.view.View onCreateActionView();
- method public android.view.View onCreateActionView(android.view.MenuItem);
- method public boolean onPerformDefaultAction();
- method public void onPrepareSubMenu(android.view.SubMenu);
- method public boolean overridesItemVisibility();
- method public void refreshVisibility();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void reset();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSubUiVisibilityListener(androidx.core.view.ActionProvider.SubUiVisibilityListener?);
- method public void setVisibilityListener(androidx.core.view.ActionProvider.VisibilityListener?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void subUiVisibilityChanged(boolean);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface ActionProvider.SubUiVisibilityListener {
- method public void onSubUiVisibilityChanged(boolean);
- }
-
- public static interface ActionProvider.VisibilityListener {
- method public void onActionProviderVisibilityChanged(boolean);
- }
-
- public final class ContentInfoCompat {
- method public android.content.ClipData getClip();
- method public android.os.Bundle? getExtras();
- method @androidx.core.view.ContentInfoCompat.Flags public int getFlags();
- method public android.net.Uri? getLinkUri();
- method @androidx.core.view.ContentInfoCompat.Source public int getSource();
- method public android.util.Pair<androidx.core.view.ContentInfoCompat!,androidx.core.view.ContentInfoCompat!> partition(androidx.core.util.Predicate<android.content.ClipData.Item!>);
- method @RequiresApi(31) public static android.util.Pair<android.view.ContentInfo!,android.view.ContentInfo!> partition(android.view.ContentInfo, java.util.function.Predicate<android.content.ClipData.Item!>);
- method @RequiresApi(31) public android.view.ContentInfo toContentInfo();
- method @RequiresApi(31) public static androidx.core.view.ContentInfoCompat toContentInfoCompat(android.view.ContentInfo);
- field public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1; // 0x1
- field public static final int SOURCE_APP = 0; // 0x0
- field public static final int SOURCE_AUTOFILL = 4; // 0x4
- field public static final int SOURCE_CLIPBOARD = 1; // 0x1
- field public static final int SOURCE_DRAG_AND_DROP = 3; // 0x3
- field public static final int SOURCE_INPUT_METHOD = 2; // 0x2
- field public static final int SOURCE_PROCESS_TEXT = 5; // 0x5
- }
-
- public static final class ContentInfoCompat.Builder {
- ctor public ContentInfoCompat.Builder(androidx.core.view.ContentInfoCompat);
- ctor public ContentInfoCompat.Builder(android.content.ClipData, @androidx.core.view.ContentInfoCompat.Source int);
- method public androidx.core.view.ContentInfoCompat build();
- method public androidx.core.view.ContentInfoCompat.Builder setClip(android.content.ClipData);
- method public androidx.core.view.ContentInfoCompat.Builder setExtras(android.os.Bundle?);
- method public androidx.core.view.ContentInfoCompat.Builder setFlags(@androidx.core.view.ContentInfoCompat.Flags int);
- method public androidx.core.view.ContentInfoCompat.Builder setLinkUri(android.net.Uri?);
- method public androidx.core.view.ContentInfoCompat.Builder setSource(@androidx.core.view.ContentInfoCompat.Source int);
- }
-
- @IntDef(flag=true, value={androidx.core.view.ContentInfoCompat.FLAG_CONVERT_TO_PLAIN_TEXT}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ContentInfoCompat.Flags {
- }
-
- @IntDef({androidx.core.view.ContentInfoCompat.SOURCE_APP, androidx.core.view.ContentInfoCompat.SOURCE_CLIPBOARD, androidx.core.view.ContentInfoCompat.SOURCE_INPUT_METHOD, androidx.core.view.ContentInfoCompat.SOURCE_DRAG_AND_DROP, androidx.core.view.ContentInfoCompat.SOURCE_AUTOFILL, androidx.core.view.ContentInfoCompat.SOURCE_PROCESS_TEXT}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ContentInfoCompat.Source {
- }
-
- public final class DisplayCompat {
- method public static androidx.core.view.DisplayCompat.ModeCompat getMode(android.content.Context, android.view.Display);
- method public static androidx.core.view.DisplayCompat.ModeCompat![] getSupportedModes(android.content.Context, android.view.Display);
- }
-
- public static final class DisplayCompat.ModeCompat {
- method public int getPhysicalHeight();
- method public int getPhysicalWidth();
- method @Deprecated public boolean isNative();
- method @RequiresApi(android.os.Build.VERSION_CODES.M) public android.view.Display.Mode? toMode();
- }
-
- public final class DisplayCutoutCompat {
- ctor public DisplayCutoutCompat(android.graphics.Rect?, java.util.List<android.graphics.Rect!>?);
- ctor public DisplayCutoutCompat(androidx.core.graphics.Insets, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, android.graphics.Rect?, androidx.core.graphics.Insets);
- method public java.util.List<android.graphics.Rect!> getBoundingRects();
- method public int getSafeInsetBottom();
- method public int getSafeInsetLeft();
- method public int getSafeInsetRight();
- method public int getSafeInsetTop();
- method public androidx.core.graphics.Insets getWaterfallInsets();
- }
-
- public final class DragAndDropPermissionsCompat {
- method public void release();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.core.view.DragAndDropPermissionsCompat? request(android.app.Activity, android.view.DragEvent);
- }
-
- public class DragStartHelper {
- ctor public DragStartHelper(android.view.View, androidx.core.view.DragStartHelper.OnDragStartListener);
- method public void attach();
- method public void detach();
- method public void getTouchPosition(android.graphics.Point);
- method public boolean onLongClick(android.view.View);
- method public boolean onTouch(android.view.View, android.view.MotionEvent);
- }
-
- public static interface DragStartHelper.OnDragStartListener {
- method public boolean onDragStart(android.view.View, androidx.core.view.DragStartHelper);
- }
-
- public final class GestureDetectorCompat {
- ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener);
- ctor public GestureDetectorCompat(android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler?);
- method public boolean isLongpressEnabled();
- method public boolean onTouchEvent(android.view.MotionEvent);
- method public void setIsLongpressEnabled(boolean);
- method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener?);
- }
-
- public final class GravityCompat {
- method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
- method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
- method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
- method public static int getAbsoluteGravity(int, int);
- field public static final int END = 8388613; // 0x800005
- field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
- field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
- field public static final int START = 8388611; // 0x800003
- }
-
- public final class InputDeviceCompat {
- field public static final int SOURCE_ANY = -256; // 0xffffff00
- field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
- field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
- field public static final int SOURCE_CLASS_MASK = 255; // 0xff
- field public static final int SOURCE_CLASS_NONE = 0; // 0x0
- field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
- field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
- field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
- field public static final int SOURCE_DPAD = 513; // 0x201
- field public static final int SOURCE_GAMEPAD = 1025; // 0x401
- field public static final int SOURCE_HDMI = 33554433; // 0x2000001
- field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
- field public static final int SOURCE_KEYBOARD = 257; // 0x101
- field public static final int SOURCE_MOUSE = 8194; // 0x2002
- field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
- field public static final int SOURCE_STYLUS = 16386; // 0x4002
- field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
- field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
- field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
- field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
- field public static final int SOURCE_UNKNOWN = 0; // 0x0
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class KeyEventDispatcher {
- method public static boolean dispatchBeforeHierarchy(android.view.View, android.view.KeyEvent);
- method public static boolean dispatchKeyEvent(androidx.core.view.KeyEventDispatcher.Component, android.view.View?, android.view.Window.Callback?, android.view.KeyEvent);
- }
-
- public static interface KeyEventDispatcher.Component {
- method public boolean superDispatchKeyEvent(android.view.KeyEvent);
- }
-
- public final class LayoutInflaterCompat {
- method @Deprecated public static androidx.core.view.LayoutInflaterFactory! getFactory(android.view.LayoutInflater!);
- method @Deprecated public static void setFactory(android.view.LayoutInflater, androidx.core.view.LayoutInflaterFactory);
- method public static void setFactory2(android.view.LayoutInflater, android.view.LayoutInflater.Factory2);
- }
-
- @Deprecated public interface LayoutInflaterFactory {
- method @Deprecated public android.view.View! onCreateView(android.view.View!, String!, android.content.Context!, android.util.AttributeSet!);
- }
-
- public final class MarginLayoutParamsCompat {
- method public static int getLayoutDirection(android.view.ViewGroup.MarginLayoutParams);
- method public static int getMarginEnd(android.view.ViewGroup.MarginLayoutParams);
- method public static int getMarginStart(android.view.ViewGroup.MarginLayoutParams);
- method public static boolean isMarginRelative(android.view.ViewGroup.MarginLayoutParams);
- method public static void resolveLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
- method public static void setLayoutDirection(android.view.ViewGroup.MarginLayoutParams, int);
- method public static void setMarginEnd(android.view.ViewGroup.MarginLayoutParams, int);
- method public static void setMarginStart(android.view.ViewGroup.MarginLayoutParams, int);
- }
-
- public final class MenuCompat {
- method public static void setGroupDividerEnabled(android.view.Menu, boolean);
- method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
- }
-
- public interface MenuHost {
- method public void addMenuProvider(androidx.core.view.MenuProvider);
- method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
- method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
- method public void invalidateMenu();
- method public void removeMenuProvider(androidx.core.view.MenuProvider);
- }
-
- public class MenuHostHelper {
- ctor public MenuHostHelper(Runnable);
- method public void addMenuProvider(androidx.core.view.MenuProvider);
- method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
- method public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
- method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
- method public void onMenuClosed(android.view.Menu);
- method public boolean onMenuItemSelected(android.view.MenuItem);
- method public void onPrepareMenu(android.view.Menu);
- method public void removeMenuProvider(androidx.core.view.MenuProvider);
- }
-
- public final class MenuItemCompat {
- method @Deprecated public static boolean collapseActionView(android.view.MenuItem!);
- method @Deprecated public static boolean expandActionView(android.view.MenuItem!);
- method public static androidx.core.view.ActionProvider? getActionProvider(android.view.MenuItem);
- method @Deprecated public static android.view.View! getActionView(android.view.MenuItem!);
- method public static int getAlphabeticModifiers(android.view.MenuItem);
- method public static CharSequence? getContentDescription(android.view.MenuItem);
- method public static android.content.res.ColorStateList? getIconTintList(android.view.MenuItem);
- method public static android.graphics.PorterDuff.Mode? getIconTintMode(android.view.MenuItem);
- method public static int getNumericModifiers(android.view.MenuItem);
- method public static CharSequence? getTooltipText(android.view.MenuItem);
- method @Deprecated public static boolean isActionViewExpanded(android.view.MenuItem!);
- method public static android.view.MenuItem? setActionProvider(android.view.MenuItem, androidx.core.view.ActionProvider?);
- method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, android.view.View!);
- method @Deprecated public static android.view.MenuItem! setActionView(android.view.MenuItem!, int);
- method public static void setAlphabeticShortcut(android.view.MenuItem, char, int);
- method public static void setContentDescription(android.view.MenuItem, CharSequence?);
- method public static void setIconTintList(android.view.MenuItem, android.content.res.ColorStateList?);
- method public static void setIconTintMode(android.view.MenuItem, android.graphics.PorterDuff.Mode?);
- method public static void setNumericShortcut(android.view.MenuItem, char, int);
- method @Deprecated public static android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem!, androidx.core.view.MenuItemCompat.OnActionExpandListener!);
- method public static void setShortcut(android.view.MenuItem, char, char, int, int);
- method @Deprecated public static void setShowAsAction(android.view.MenuItem!, int);
- method public static void setTooltipText(android.view.MenuItem, CharSequence?);
- field @Deprecated public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
- field @Deprecated public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
- field @Deprecated public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
- field @Deprecated public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
- field @Deprecated public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
- }
-
- @Deprecated public static interface MenuItemCompat.OnActionExpandListener {
- method @Deprecated public boolean onMenuItemActionCollapse(android.view.MenuItem!);
- method @Deprecated public boolean onMenuItemActionExpand(android.view.MenuItem!);
- }
-
- public interface MenuProvider {
- method public void onCreateMenu(android.view.Menu, android.view.MenuInflater);
- method public default void onMenuClosed(android.view.Menu);
- method public boolean onMenuItemSelected(android.view.MenuItem);
- method public default void onPrepareMenu(android.view.Menu);
- }
-
- public final class MotionEventCompat {
- method @Deprecated public static int findPointerIndex(android.view.MotionEvent!, int);
- method @Deprecated public static int getActionIndex(android.view.MotionEvent!);
- method @Deprecated public static int getActionMasked(android.view.MotionEvent!);
- method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int);
- method @Deprecated public static float getAxisValue(android.view.MotionEvent!, int, int);
- method @Deprecated public static int getButtonState(android.view.MotionEvent!);
- method @Deprecated public static int getPointerCount(android.view.MotionEvent!);
- method @Deprecated public static int getPointerId(android.view.MotionEvent!, int);
- method @Deprecated public static int getSource(android.view.MotionEvent!);
- method @Deprecated public static float getX(android.view.MotionEvent!, int);
- method @Deprecated public static float getY(android.view.MotionEvent!, int);
- method public static boolean isFromSource(android.view.MotionEvent, int);
- field @Deprecated public static final int ACTION_HOVER_ENTER = 9; // 0x9
- field @Deprecated public static final int ACTION_HOVER_EXIT = 10; // 0xa
- field @Deprecated public static final int ACTION_HOVER_MOVE = 7; // 0x7
- field @Deprecated public static final int ACTION_MASK = 255; // 0xff
- field @Deprecated public static final int ACTION_POINTER_DOWN = 5; // 0x5
- field @Deprecated public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
- field @Deprecated public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
- field @Deprecated public static final int ACTION_POINTER_UP = 6; // 0x6
- field @Deprecated public static final int ACTION_SCROLL = 8; // 0x8
- field @Deprecated public static final int AXIS_BRAKE = 23; // 0x17
- field @Deprecated public static final int AXIS_DISTANCE = 24; // 0x18
- field @Deprecated public static final int AXIS_GAS = 22; // 0x16
- field @Deprecated public static final int AXIS_GENERIC_1 = 32; // 0x20
- field @Deprecated public static final int AXIS_GENERIC_10 = 41; // 0x29
- field @Deprecated public static final int AXIS_GENERIC_11 = 42; // 0x2a
- field @Deprecated public static final int AXIS_GENERIC_12 = 43; // 0x2b
- field @Deprecated public static final int AXIS_GENERIC_13 = 44; // 0x2c
- field @Deprecated public static final int AXIS_GENERIC_14 = 45; // 0x2d
- field @Deprecated public static final int AXIS_GENERIC_15 = 46; // 0x2e
- field @Deprecated public static final int AXIS_GENERIC_16 = 47; // 0x2f
- field @Deprecated public static final int AXIS_GENERIC_2 = 33; // 0x21
- field @Deprecated public static final int AXIS_GENERIC_3 = 34; // 0x22
- field @Deprecated public static final int AXIS_GENERIC_4 = 35; // 0x23
- field @Deprecated public static final int AXIS_GENERIC_5 = 36; // 0x24
- field @Deprecated public static final int AXIS_GENERIC_6 = 37; // 0x25
- field @Deprecated public static final int AXIS_GENERIC_7 = 38; // 0x26
- field @Deprecated public static final int AXIS_GENERIC_8 = 39; // 0x27
- field @Deprecated public static final int AXIS_GENERIC_9 = 40; // 0x28
- field @Deprecated public static final int AXIS_HAT_X = 15; // 0xf
- field @Deprecated public static final int AXIS_HAT_Y = 16; // 0x10
- field @Deprecated public static final int AXIS_HSCROLL = 10; // 0xa
- field @Deprecated public static final int AXIS_LTRIGGER = 17; // 0x11
- field @Deprecated public static final int AXIS_ORIENTATION = 8; // 0x8
- field @Deprecated public static final int AXIS_PRESSURE = 2; // 0x2
- field public static final int AXIS_RELATIVE_X = 27; // 0x1b
- field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
- field @Deprecated public static final int AXIS_RTRIGGER = 18; // 0x12
- field @Deprecated public static final int AXIS_RUDDER = 20; // 0x14
- field @Deprecated public static final int AXIS_RX = 12; // 0xc
- field @Deprecated public static final int AXIS_RY = 13; // 0xd
- field @Deprecated public static final int AXIS_RZ = 14; // 0xe
- field public static final int AXIS_SCROLL = 26; // 0x1a
- field @Deprecated public static final int AXIS_SIZE = 3; // 0x3
- field @Deprecated public static final int AXIS_THROTTLE = 19; // 0x13
- field @Deprecated public static final int AXIS_TILT = 25; // 0x19
- field @Deprecated public static final int AXIS_TOOL_MAJOR = 6; // 0x6
- field @Deprecated public static final int AXIS_TOOL_MINOR = 7; // 0x7
- field @Deprecated public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
- field @Deprecated public static final int AXIS_TOUCH_MINOR = 5; // 0x5
- field @Deprecated public static final int AXIS_VSCROLL = 9; // 0x9
- field @Deprecated public static final int AXIS_WHEEL = 21; // 0x15
- field @Deprecated public static final int AXIS_X = 0; // 0x0
- field @Deprecated public static final int AXIS_Y = 1; // 0x1
- field @Deprecated public static final int AXIS_Z = 11; // 0xb
- field @Deprecated public static final int BUTTON_PRIMARY = 1; // 0x1
- }
-
- public interface NestedScrollingChild {
- method public boolean dispatchNestedFling(float, float, boolean);
- method public boolean dispatchNestedPreFling(float, float);
- method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
- method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
- method public boolean hasNestedScrollingParent();
- method public boolean isNestedScrollingEnabled();
- method public void setNestedScrollingEnabled(boolean);
- method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int);
- method public void stopNestedScroll();
- }
-
- public interface NestedScrollingChild2 extends androidx.core.view.NestedScrollingChild {
- method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public boolean dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public boolean hasNestedScrollingParent(@androidx.core.view.ViewCompat.NestedScrollType int);
- method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public void stopNestedScroll(@androidx.core.view.ViewCompat.NestedScrollType int);
- }
-
- public interface NestedScrollingChild3 extends androidx.core.view.NestedScrollingChild2 {
- method public void dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
- }
-
- public class NestedScrollingChildHelper {
- ctor public NestedScrollingChildHelper(android.view.View);
- method public boolean dispatchNestedFling(float, float, boolean);
- method public boolean dispatchNestedPreFling(float, float);
- method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?);
- method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public boolean dispatchNestedScroll(int, int, int, int, int[]?);
- method public boolean dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public void dispatchNestedScroll(int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]?);
- method public boolean hasNestedScrollingParent();
- method public boolean hasNestedScrollingParent(@androidx.core.view.ViewCompat.NestedScrollType int);
- method public boolean isNestedScrollingEnabled();
- method public void onDetachedFromWindow();
- method public void onStopNestedScroll(android.view.View);
- method public void setNestedScrollingEnabled(boolean);
- method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int);
- method public boolean startNestedScroll(@androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public void stopNestedScroll();
- method public void stopNestedScroll(@androidx.core.view.ViewCompat.NestedScrollType int);
- }
-
- public interface NestedScrollingParent {
- method @androidx.core.view.ViewCompat.ScrollAxis public int getNestedScrollAxes();
- method public boolean onNestedFling(android.view.View, float, float, boolean);
- method public boolean onNestedPreFling(android.view.View, float, float);
- method public void onNestedPreScroll(android.view.View, int, int, int[]);
- method public void onNestedScroll(android.view.View, int, int, int, int);
- method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
- method public boolean onStartNestedScroll(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
- method public void onStopNestedScroll(android.view.View);
- }
-
- public interface NestedScrollingParent2 extends androidx.core.view.NestedScrollingParent {
- method public void onNestedPreScroll(android.view.View, int, int, int[], @androidx.core.view.ViewCompat.NestedScrollType int);
- method public void onNestedScroll(android.view.View, int, int, int, int, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public boolean onStartNestedScroll(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public void onStopNestedScroll(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
- }
-
- public interface NestedScrollingParent3 extends androidx.core.view.NestedScrollingParent2 {
- method public void onNestedScroll(android.view.View, int, int, int, int, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
- }
-
- public class NestedScrollingParentHelper {
- ctor public NestedScrollingParentHelper(android.view.ViewGroup);
- method @androidx.core.view.ViewCompat.ScrollAxis public int getNestedScrollAxes();
- method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
- method public void onNestedScrollAccepted(android.view.View, android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public void onStopNestedScroll(android.view.View);
- method public void onStopNestedScroll(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
- }
-
- public interface OnApplyWindowInsetsListener {
- method public androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
- }
-
- public interface OnReceiveContentListener {
- method public androidx.core.view.ContentInfoCompat? onReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
- }
-
- public interface OnReceiveContentViewBehavior {
- method public androidx.core.view.ContentInfoCompat? onReceiveContent(androidx.core.view.ContentInfoCompat);
- }
-
- public final class OneShotPreDrawListener implements android.view.View.OnAttachStateChangeListener android.view.ViewTreeObserver.OnPreDrawListener {
- method public static androidx.core.view.OneShotPreDrawListener add(android.view.View, Runnable);
- method public boolean onPreDraw();
- method public void onViewAttachedToWindow(android.view.View);
- method public void onViewDetachedFromWindow(android.view.View);
- method public void removeListener();
- }
-
- public final class PointerIconCompat {
- method public static androidx.core.view.PointerIconCompat create(android.graphics.Bitmap, float, float);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public Object? getPointerIcon();
- method public static androidx.core.view.PointerIconCompat getSystemIcon(android.content.Context, int);
- method public static androidx.core.view.PointerIconCompat load(android.content.res.Resources, int);
- field public static final int TYPE_ALIAS = 1010; // 0x3f2
- field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
- field public static final int TYPE_ARROW = 1000; // 0x3e8
- field public static final int TYPE_CELL = 1006; // 0x3ee
- field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
- field public static final int TYPE_COPY = 1011; // 0x3f3
- field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
- field public static final int TYPE_DEFAULT = 1000; // 0x3e8
- field public static final int TYPE_GRAB = 1020; // 0x3fc
- field public static final int TYPE_GRABBING = 1021; // 0x3fd
- field public static final int TYPE_HAND = 1002; // 0x3ea
- field public static final int TYPE_HELP = 1003; // 0x3eb
- field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
- field public static final int TYPE_NO_DROP = 1012; // 0x3f4
- field public static final int TYPE_NULL = 0; // 0x0
- field public static final int TYPE_TEXT = 1008; // 0x3f0
- field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
- field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
- field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
- field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
- field public static final int TYPE_WAIT = 1004; // 0x3ec
- field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
- field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
- }
-
- public final class ScaleGestureDetectorCompat {
- method @Deprecated public static boolean isQuickScaleEnabled(Object!);
- method public static boolean isQuickScaleEnabled(android.view.ScaleGestureDetector);
- method @Deprecated public static void setQuickScaleEnabled(Object!, boolean);
- method public static void setQuickScaleEnabled(android.view.ScaleGestureDetector, boolean);
- }
-
- public interface ScrollingView {
- method public int computeHorizontalScrollExtent();
- method public int computeHorizontalScrollOffset();
- method public int computeHorizontalScrollRange();
- method public int computeVerticalScrollExtent();
- method public int computeVerticalScrollOffset();
- method public int computeVerticalScrollRange();
- }
-
- public interface TintableBackgroundView {
- method public android.content.res.ColorStateList? getSupportBackgroundTintList();
- method public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
- method public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
- method public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
- }
-
- @Deprecated public final class VelocityTrackerCompat {
- method @Deprecated public static float getXVelocity(android.view.VelocityTracker!, int);
- method @Deprecated public static float getYVelocity(android.view.VelocityTracker!, int);
- }
-
- public class ViewCompat {
- ctor @Deprecated protected ViewCompat();
- method public static int addAccessibilityAction(android.view.View, CharSequence, androidx.core.view.accessibility.AccessibilityViewCommand);
- method public static void addKeyboardNavigationClusters(android.view.View, java.util.Collection<android.view.View!>, int);
- method public static void addOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
- method public static androidx.core.view.ViewPropertyAnimatorCompat animate(android.view.View);
- method @Deprecated public static boolean canScrollHorizontally(android.view.View!, int);
- method @Deprecated public static boolean canScrollVertically(android.view.View!, int);
- method public static void cancelDragAndDrop(android.view.View);
- method @Deprecated public static int combineMeasuredStates(int, int);
- method public static androidx.core.view.WindowInsetsCompat computeSystemWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat, android.graphics.Rect);
- method public static androidx.core.view.WindowInsetsCompat dispatchApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
- method public static void dispatchFinishTemporaryDetach(android.view.View);
- method public static boolean dispatchNestedFling(android.view.View, float, float, boolean);
- method public static boolean dispatchNestedPreFling(android.view.View, float, float);
- method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?);
- method public static boolean dispatchNestedPreScroll(android.view.View, int, int, int[]?, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?);
- method public static void dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int, int[]);
- method public static boolean dispatchNestedScroll(android.view.View, int, int, int, int, int[]?, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public static void dispatchStartTemporaryDetach(android.view.View);
- method public static void enableAccessibleClickableSpanSupport(android.view.View);
- method public static int generateViewId();
- method public static androidx.core.view.AccessibilityDelegateCompat? getAccessibilityDelegate(android.view.View);
- method public static int getAccessibilityLiveRegion(android.view.View);
- method public static androidx.core.view.accessibility.AccessibilityNodeProviderCompat? getAccessibilityNodeProvider(android.view.View);
- method @UiThread public static CharSequence? getAccessibilityPaneTitle(android.view.View);
- method @Deprecated public static float getAlpha(android.view.View!);
- method public static android.content.res.ColorStateList? getBackgroundTintList(android.view.View);
- method public static android.graphics.PorterDuff.Mode? getBackgroundTintMode(android.view.View);
- method public static android.graphics.Rect? getClipBounds(android.view.View);
- method public static android.view.Display? getDisplay(android.view.View);
- method public static float getElevation(android.view.View);
- method public static boolean getFitsSystemWindows(android.view.View);
- method public static int getImportantForAccessibility(android.view.View);
- method public static int getImportantForAutofill(android.view.View);
- method public static int getLabelFor(android.view.View);
- method @Deprecated public static int getLayerType(android.view.View!);
- method public static int getLayoutDirection(android.view.View);
- method @Deprecated public static android.graphics.Matrix? getMatrix(android.view.View!);
- method @Deprecated public static int getMeasuredHeightAndState(android.view.View!);
- method @Deprecated public static int getMeasuredState(android.view.View!);
- method @Deprecated public static int getMeasuredWidthAndState(android.view.View!);
- method public static int getMinimumHeight(android.view.View);
- method public static int getMinimumWidth(android.view.View);
- method public static int getNextClusterForwardId(android.view.View);
- method public static String![]? getOnReceiveContentMimeTypes(android.view.View);
- method @Deprecated public static int getOverScrollMode(android.view.View!);
- method @Px public static int getPaddingEnd(android.view.View);
- method @Px public static int getPaddingStart(android.view.View);
- method public static android.view.ViewParent? getParentForAccessibility(android.view.View);
- method @Deprecated public static float getPivotX(android.view.View!);
- method @Deprecated public static float getPivotY(android.view.View!);
- method public static androidx.core.view.WindowInsetsCompat? getRootWindowInsets(android.view.View);
- method @Deprecated public static float getRotation(android.view.View!);
- method @Deprecated public static float getRotationX(android.view.View!);
- method @Deprecated public static float getRotationY(android.view.View!);
- method @Deprecated public static float getScaleX(android.view.View!);
- method @Deprecated public static float getScaleY(android.view.View!);
- method public static int getScrollIndicators(android.view.View);
- method @UiThread public static CharSequence? getStateDescription(android.view.View);
- method public static java.util.List<android.graphics.Rect!> getSystemGestureExclusionRects(android.view.View);
- method public static String? getTransitionName(android.view.View);
- method @Deprecated public static float getTranslationX(android.view.View!);
- method @Deprecated public static float getTranslationY(android.view.View!);
- method public static float getTranslationZ(android.view.View);
- method @Deprecated public static androidx.core.view.WindowInsetsControllerCompat? getWindowInsetsController(android.view.View);
- method @Deprecated public static int getWindowSystemUiVisibility(android.view.View);
- method @Deprecated public static float getX(android.view.View!);
- method @Deprecated public static float getY(android.view.View!);
- method public static float getZ(android.view.View);
- method public static boolean hasAccessibilityDelegate(android.view.View);
- method public static boolean hasExplicitFocusable(android.view.View);
- method public static boolean hasNestedScrollingParent(android.view.View);
- method public static boolean hasNestedScrollingParent(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public static boolean hasOnClickListeners(android.view.View);
- method public static boolean hasOverlappingRendering(android.view.View);
- method public static boolean hasTransientState(android.view.View);
- method @UiThread public static boolean isAccessibilityHeading(android.view.View);
- method public static boolean isAttachedToWindow(android.view.View);
- method public static boolean isFocusedByDefault(android.view.View);
- method public static boolean isImportantForAccessibility(android.view.View);
- method public static boolean isImportantForAutofill(android.view.View);
- method public static boolean isInLayout(android.view.View);
- method public static boolean isKeyboardNavigationCluster(android.view.View);
- method public static boolean isLaidOut(android.view.View);
- method public static boolean isLayoutDirectionResolved(android.view.View);
- method public static boolean isNestedScrollingEnabled(android.view.View);
- method @Deprecated public static boolean isOpaque(android.view.View!);
- method public static boolean isPaddingRelative(android.view.View);
- method @UiThread public static boolean isScreenReaderFocusable(android.view.View);
- method @Deprecated public static void jumpDrawablesToCurrentState(android.view.View!);
- method public static android.view.View? keyboardNavigationClusterSearch(android.view.View, android.view.View?, @androidx.core.view.ViewCompat.FocusDirection int);
- method public static void offsetLeftAndRight(android.view.View, int);
- method public static void offsetTopAndBottom(android.view.View, int);
- method public static androidx.core.view.WindowInsetsCompat onApplyWindowInsets(android.view.View, androidx.core.view.WindowInsetsCompat);
- method @Deprecated public static void onInitializeAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
- method public static void onInitializeAccessibilityNodeInfo(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
- method @Deprecated public static void onPopulateAccessibilityEvent(android.view.View!, android.view.accessibility.AccessibilityEvent!);
- method public static boolean performAccessibilityAction(android.view.View, int, android.os.Bundle?);
- method public static androidx.core.view.ContentInfoCompat? performReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
- method public static void postInvalidateOnAnimation(android.view.View);
- method public static void postInvalidateOnAnimation(android.view.View, int, int, int, int);
- method public static void postOnAnimation(android.view.View, Runnable);
- method public static void postOnAnimationDelayed(android.view.View, Runnable, long);
- method public static void removeAccessibilityAction(android.view.View, int);
- method public static void removeOnUnhandledKeyEventListener(android.view.View, androidx.core.view.ViewCompat.OnUnhandledKeyEventListenerCompat);
- method public static void replaceAccessibilityAction(android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat, CharSequence?, androidx.core.view.accessibility.AccessibilityViewCommand?);
- method public static void requestApplyInsets(android.view.View);
- method public static <T extends android.view.View> T requireViewById(android.view.View, @IdRes int);
- method @Deprecated public static int resolveSizeAndState(int, int, int);
- method public static boolean restoreDefaultFocus(android.view.View);
- method public static void saveAttributeDataForStyleable(android.view.View, android.content.Context, int[], android.util.AttributeSet?, android.content.res.TypedArray, int, int);
- method public static void setAccessibilityDelegate(android.view.View, androidx.core.view.AccessibilityDelegateCompat?);
- method @UiThread public static void setAccessibilityHeading(android.view.View, boolean);
- method public static void setAccessibilityLiveRegion(android.view.View, int);
- method @UiThread public static void setAccessibilityPaneTitle(android.view.View, CharSequence?);
- method @Deprecated public static void setActivated(android.view.View!, boolean);
- method @Deprecated public static void setAlpha(android.view.View!, @FloatRange(from=0.0, to=1.0) float);
- method public static void setAutofillHints(android.view.View, java.lang.String!...);
- method public static void setBackground(android.view.View, android.graphics.drawable.Drawable?);
- method public static void setBackgroundTintList(android.view.View, android.content.res.ColorStateList?);
- method public static void setBackgroundTintMode(android.view.View, android.graphics.PorterDuff.Mode?);
- method @Deprecated public static void setChildrenDrawingOrderEnabled(android.view.ViewGroup!, boolean);
- method public static void setClipBounds(android.view.View, android.graphics.Rect?);
- method public static void setElevation(android.view.View, float);
- method @Deprecated public static void setFitsSystemWindows(android.view.View!, boolean);
- method public static void setFocusedByDefault(android.view.View, boolean);
- method public static void setHasTransientState(android.view.View, boolean);
- method @UiThread public static void setImportantForAccessibility(android.view.View, int);
- method public static void setImportantForAutofill(android.view.View, int);
- method public static void setKeyboardNavigationCluster(android.view.View, boolean);
- method public static void setLabelFor(android.view.View, @IdRes int);
- method public static void setLayerPaint(android.view.View, android.graphics.Paint?);
- method @Deprecated public static void setLayerType(android.view.View!, int, android.graphics.Paint!);
- method public static void setLayoutDirection(android.view.View, int);
- method public static void setNestedScrollingEnabled(android.view.View, boolean);
- method public static void setNextClusterForwardId(android.view.View, int);
- method public static void setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener?);
- method public static void setOnReceiveContentListener(android.view.View, String![]?, androidx.core.view.OnReceiveContentListener?);
- method @Deprecated public static void setOverScrollMode(android.view.View!, int);
- method public static void setPaddingRelative(android.view.View, @Px int, @Px int, @Px int, @Px int);
- method @Deprecated public static void setPivotX(android.view.View!, float);
- method @Deprecated public static void setPivotY(android.view.View!, float);
- method public static void setPointerIcon(android.view.View, androidx.core.view.PointerIconCompat?);
- method @Deprecated public static void setRotation(android.view.View!, float);
- method @Deprecated public static void setRotationX(android.view.View!, float);
- method @Deprecated public static void setRotationY(android.view.View!, float);
- method @Deprecated public static void setSaveFromParentEnabled(android.view.View!, boolean);
- method @Deprecated public static void setScaleX(android.view.View!, float);
- method @Deprecated public static void setScaleY(android.view.View!, float);
- method @UiThread public static void setScreenReaderFocusable(android.view.View, boolean);
- method public static void setScrollIndicators(android.view.View, @androidx.core.view.ViewCompat.ScrollIndicators int);
- method public static void setScrollIndicators(android.view.View, @androidx.core.view.ViewCompat.ScrollIndicators int, @androidx.core.view.ViewCompat.ScrollIndicators int);
- method @UiThread public static void setStateDescription(android.view.View, CharSequence?);
- method public static void setSystemGestureExclusionRects(android.view.View, java.util.List<android.graphics.Rect!>);
- method public static void setTooltipText(android.view.View, CharSequence?);
- method public static void setTransitionName(android.view.View, String?);
- method @Deprecated public static void setTranslationX(android.view.View!, float);
- method @Deprecated public static void setTranslationY(android.view.View!, float);
- method public static void setTranslationZ(android.view.View, float);
- method public static void setWindowInsetsAnimationCallback(android.view.View, androidx.core.view.WindowInsetsAnimationCompat.Callback?);
- method @Deprecated public static void setX(android.view.View!, float);
- method @Deprecated public static void setY(android.view.View!, float);
- method public static void setZ(android.view.View, float);
- method public static boolean startDragAndDrop(android.view.View, android.content.ClipData?, android.view.View.DragShadowBuilder, Object?, int);
- method public static boolean startNestedScroll(android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int);
- method public static boolean startNestedScroll(android.view.View, @androidx.core.view.ViewCompat.ScrollAxis int, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public static void stopNestedScroll(android.view.View);
- method public static void stopNestedScroll(android.view.View, @androidx.core.view.ViewCompat.NestedScrollType int);
- method public static void updateDragShadow(android.view.View, android.view.View.DragShadowBuilder);
- field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
- field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
- field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
- field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
- field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
- field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
- field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
- field @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
- field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
- field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
- field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
- field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
- field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
- field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
- field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
- field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
- field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
- field @Deprecated public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
- field @Deprecated public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
- field @Deprecated public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
- field @Deprecated public static final int OVER_SCROLL_NEVER = 2; // 0x2
- field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
- field public static final int SCROLL_AXIS_NONE = 0; // 0x0
- field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
- field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
- field public static final int SCROLL_INDICATOR_END = 32; // 0x20
- field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
- field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
- field public static final int SCROLL_INDICATOR_START = 16; // 0x10
- field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
- field public static final int TYPE_NON_TOUCH = 1; // 0x1
- field public static final int TYPE_TOUCH = 0; // 0x0
- }
-
- @IntDef({android.view.View.FOCUS_LEFT, android.view.View.FOCUS_UP, android.view.View.FOCUS_RIGHT, android.view.View.FOCUS_DOWN, android.view.View.FOCUS_FORWARD, android.view.View.FOCUS_BACKWARD}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusDirection {
- }
-
- @IntDef({android.view.View.FOCUS_LEFT, android.view.View.FOCUS_UP, android.view.View.FOCUS_RIGHT, android.view.View.FOCUS_DOWN}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusRealDirection {
- }
-
- @IntDef({android.view.View.FOCUS_FORWARD, android.view.View.FOCUS_BACKWARD}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.FocusRelativeDirection {
- }
-
- @IntDef({androidx.core.view.ViewCompat.TYPE_TOUCH, androidx.core.view.ViewCompat.TYPE_NON_TOUCH}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.NestedScrollType {
- }
-
- public static interface ViewCompat.OnUnhandledKeyEventListenerCompat {
- method public boolean onUnhandledKeyEvent(android.view.View, android.view.KeyEvent);
- }
-
- @IntDef(value={androidx.core.view.ViewCompat.SCROLL_AXIS_NONE, androidx.core.view.ViewCompat.SCROLL_AXIS_HORIZONTAL, androidx.core.view.ViewCompat.SCROLL_AXIS_VERTICAL}, flag=true) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.ScrollAxis {
- }
-
- @IntDef(flag=true, value={androidx.core.view.ViewCompat.SCROLL_INDICATOR_TOP, androidx.core.view.ViewCompat.SCROLL_INDICATOR_BOTTOM, androidx.core.view.ViewCompat.SCROLL_INDICATOR_LEFT, androidx.core.view.ViewCompat.SCROLL_INDICATOR_RIGHT, androidx.core.view.ViewCompat.SCROLL_INDICATOR_START, androidx.core.view.ViewCompat.SCROLL_INDICATOR_END}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ViewCompat.ScrollIndicators {
- }
-
- public final class ViewConfigurationCompat {
- method public static float getScaledHorizontalScrollFactor(android.view.ViewConfiguration, android.content.Context);
- method public static int getScaledHoverSlop(android.view.ViewConfiguration);
- method @Deprecated public static int getScaledPagingTouchSlop(android.view.ViewConfiguration!);
- method public static float getScaledVerticalScrollFactor(android.view.ViewConfiguration, android.content.Context);
- method @Deprecated public static boolean hasPermanentMenuKey(android.view.ViewConfiguration!);
- method public static boolean shouldShowMenuShortcutsWhenKeyboardPresent(android.view.ViewConfiguration, android.content.Context);
- }
-
- public final class ViewGroupCompat {
- method public static int getLayoutMode(android.view.ViewGroup);
- method @androidx.core.view.ViewCompat.ScrollAxis public static int getNestedScrollAxes(android.view.ViewGroup);
- method public static boolean isTransitionGroup(android.view.ViewGroup);
- method @Deprecated public static boolean onRequestSendAccessibilityEvent(android.view.ViewGroup!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
- method public static void setLayoutMode(android.view.ViewGroup, int);
- method @Deprecated public static void setMotionEventSplittingEnabled(android.view.ViewGroup!, boolean);
- method public static void setTransitionGroup(android.view.ViewGroup, boolean);
- field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
- field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
- }
-
- public final class ViewParentCompat {
- method public static void notifySubtreeAccessibilityStateChanged(android.view.ViewParent, android.view.View, android.view.View, int);
- method public static boolean onNestedFling(android.view.ViewParent, android.view.View, float, float, boolean);
- method public static boolean onNestedPreFling(android.view.ViewParent, android.view.View, float, float);
- method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[]);
- method public static void onNestedPreScroll(android.view.ViewParent, android.view.View, int, int, int[], int);
- method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int);
- method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int);
- method public static void onNestedScroll(android.view.ViewParent, android.view.View, int, int, int, int, int, int[]);
- method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int);
- method public static void onNestedScrollAccepted(android.view.ViewParent, android.view.View, android.view.View, int, int);
- method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int);
- method public static boolean onStartNestedScroll(android.view.ViewParent, android.view.View, android.view.View, int, int);
- method public static void onStopNestedScroll(android.view.ViewParent, android.view.View);
- method public static void onStopNestedScroll(android.view.ViewParent, android.view.View, int);
- method @Deprecated public static boolean requestSendAccessibilityEvent(android.view.ViewParent!, android.view.View!, android.view.accessibility.AccessibilityEvent!);
- }
-
- public final class ViewPropertyAnimatorCompat {
- method public androidx.core.view.ViewPropertyAnimatorCompat alpha(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat alphaBy(float);
- method public void cancel();
- method public long getDuration();
- method public android.view.animation.Interpolator? getInterpolator();
- method public long getStartDelay();
- method public androidx.core.view.ViewPropertyAnimatorCompat rotation(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat rotationBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat rotationX(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat rotationXBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat rotationY(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat rotationYBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat scaleX(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat scaleXBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat scaleY(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat scaleYBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat setDuration(long);
- method public androidx.core.view.ViewPropertyAnimatorCompat setInterpolator(android.view.animation.Interpolator?);
- method public androidx.core.view.ViewPropertyAnimatorCompat setListener(androidx.core.view.ViewPropertyAnimatorListener?);
- method public androidx.core.view.ViewPropertyAnimatorCompat setStartDelay(long);
- method public androidx.core.view.ViewPropertyAnimatorCompat setUpdateListener(androidx.core.view.ViewPropertyAnimatorUpdateListener?);
- method public void start();
- method public androidx.core.view.ViewPropertyAnimatorCompat translationX(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat translationXBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat translationY(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat translationYBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat translationZ(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat translationZBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat withEndAction(Runnable);
- method public androidx.core.view.ViewPropertyAnimatorCompat withLayer();
- method public androidx.core.view.ViewPropertyAnimatorCompat withStartAction(Runnable);
- method public androidx.core.view.ViewPropertyAnimatorCompat x(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat xBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat y(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat yBy(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat z(float);
- method public androidx.core.view.ViewPropertyAnimatorCompat zBy(float);
- }
-
- public interface ViewPropertyAnimatorListener {
- method public void onAnimationCancel(android.view.View);
- method public void onAnimationEnd(android.view.View);
- method public void onAnimationStart(android.view.View);
- }
-
- public class ViewPropertyAnimatorListenerAdapter implements androidx.core.view.ViewPropertyAnimatorListener {
- ctor public ViewPropertyAnimatorListenerAdapter();
- method public void onAnimationCancel(android.view.View);
- method public void onAnimationEnd(android.view.View);
- method public void onAnimationStart(android.view.View);
- }
-
- public interface ViewPropertyAnimatorUpdateListener {
- method public void onAnimationUpdate(android.view.View);
- }
-
- public final class WindowCompat {
- method public static androidx.core.view.WindowInsetsControllerCompat getInsetsController(android.view.Window, android.view.View);
- method public static <T extends android.view.View> T requireViewById(android.view.Window, @IdRes int);
- method public static void setDecorFitsSystemWindows(android.view.Window, boolean);
- field public static final int FEATURE_ACTION_BAR = 8; // 0x8
- field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
- field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
- }
-
- public final class WindowInsetsAnimationCompat {
- ctor public WindowInsetsAnimationCompat(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, android.view.animation.Interpolator?, long);
- method @FloatRange(from=0.0f, to=1.0f) public float getAlpha();
- method public long getDurationMillis();
- method @FloatRange(from=0.0f, to=1.0f) public float getFraction();
- method public float getInterpolatedFraction();
- method public android.view.animation.Interpolator? getInterpolator();
- method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public int getTypeMask();
- method public void setAlpha(@FloatRange(from=0.0f, to=1.0f) float);
- method public void setFraction(@FloatRange(from=0.0f, to=1.0f) float);
- }
-
- public static final class WindowInsetsAnimationCompat.BoundsCompat {
- ctor public WindowInsetsAnimationCompat.BoundsCompat(androidx.core.graphics.Insets, androidx.core.graphics.Insets);
- method public androidx.core.graphics.Insets getLowerBound();
- method public androidx.core.graphics.Insets getUpperBound();
- method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat inset(androidx.core.graphics.Insets);
- method @RequiresApi(30) public android.view.WindowInsetsAnimation.Bounds toBounds();
- method @RequiresApi(30) public static androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat toBoundsCompat(android.view.WindowInsetsAnimation.Bounds);
- }
-
- public abstract static class WindowInsetsAnimationCompat.Callback {
- ctor public WindowInsetsAnimationCompat.Callback(@androidx.core.view.WindowInsetsAnimationCompat.Callback.DispatchMode int);
- method @androidx.core.view.WindowInsetsAnimationCompat.Callback.DispatchMode public final int getDispatchMode();
- method public void onEnd(androidx.core.view.WindowInsetsAnimationCompat);
- method public void onPrepare(androidx.core.view.WindowInsetsAnimationCompat);
- method public abstract androidx.core.view.WindowInsetsCompat onProgress(androidx.core.view.WindowInsetsCompat, java.util.List<androidx.core.view.WindowInsetsAnimationCompat!>);
- method public androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat onStart(androidx.core.view.WindowInsetsAnimationCompat, androidx.core.view.WindowInsetsAnimationCompat.BoundsCompat);
- field public static final int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1; // 0x1
- field public static final int DISPATCH_MODE_STOP = 0; // 0x0
- }
-
- @IntDef({androidx.core.view.WindowInsetsAnimationCompat.Callback.DISPATCH_MODE_STOP, androidx.core.view.WindowInsetsAnimationCompat.Callback.DISPATCH_MODE_CONTINUE_ON_SUBTREE}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface WindowInsetsAnimationCompat.Callback.DispatchMode {
- }
-
- public interface WindowInsetsAnimationControlListenerCompat {
- method public void onCancelled(androidx.core.view.WindowInsetsAnimationControllerCompat?);
- method public void onFinished(androidx.core.view.WindowInsetsAnimationControllerCompat);
- method public void onReady(androidx.core.view.WindowInsetsAnimationControllerCompat, @androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
- }
-
- public final class WindowInsetsAnimationControllerCompat {
- method public void finish(boolean);
- method public float getCurrentAlpha();
- method @FloatRange(from=0.0f, to=1.0f) public float getCurrentFraction();
- method public androidx.core.graphics.Insets getCurrentInsets();
- method public androidx.core.graphics.Insets getHiddenStateInsets();
- method public androidx.core.graphics.Insets getShownStateInsets();
- method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public int getTypes();
- method public boolean isCancelled();
- method public boolean isFinished();
- method public boolean isReady();
- method public void setInsetsAndAlpha(androidx.core.graphics.Insets?, @FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=0.0f, to=1.0f) float);
- }
-
- public class WindowInsetsCompat {
- ctor public WindowInsetsCompat(androidx.core.view.WindowInsetsCompat?);
- method @Deprecated public androidx.core.view.WindowInsetsCompat consumeDisplayCutout();
- method @Deprecated public androidx.core.view.WindowInsetsCompat consumeStableInsets();
- method @Deprecated public androidx.core.view.WindowInsetsCompat consumeSystemWindowInsets();
- method public androidx.core.view.DisplayCutoutCompat? getDisplayCutout();
- method public androidx.core.graphics.Insets getInsets(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
- method public androidx.core.graphics.Insets getInsetsIgnoringVisibility(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
- method @Deprecated public androidx.core.graphics.Insets getMandatorySystemGestureInsets();
- method @Deprecated public int getStableInsetBottom();
- method @Deprecated public int getStableInsetLeft();
- method @Deprecated public int getStableInsetRight();
- method @Deprecated public int getStableInsetTop();
- method @Deprecated public androidx.core.graphics.Insets getStableInsets();
- method @Deprecated public androidx.core.graphics.Insets getSystemGestureInsets();
- method @Deprecated public int getSystemWindowInsetBottom();
- method @Deprecated public int getSystemWindowInsetLeft();
- method @Deprecated public int getSystemWindowInsetRight();
- method @Deprecated public int getSystemWindowInsetTop();
- method @Deprecated public androidx.core.graphics.Insets getSystemWindowInsets();
- method @Deprecated public androidx.core.graphics.Insets getTappableElementInsets();
- method public boolean hasInsets();
- method @Deprecated public boolean hasStableInsets();
- method @Deprecated public boolean hasSystemWindowInsets();
- method public androidx.core.view.WindowInsetsCompat inset(androidx.core.graphics.Insets);
- method public androidx.core.view.WindowInsetsCompat inset(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
- method public boolean isConsumed();
- method public boolean isRound();
- method public boolean isVisible(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
- method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(int, int, int, int);
- method @Deprecated public androidx.core.view.WindowInsetsCompat replaceSystemWindowInsets(android.graphics.Rect);
- method @RequiresApi(20) public android.view.WindowInsets? toWindowInsets();
- method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets);
- method @RequiresApi(20) public static androidx.core.view.WindowInsetsCompat toWindowInsetsCompat(android.view.WindowInsets, android.view.View?);
- field public static final androidx.core.view.WindowInsetsCompat CONSUMED;
- }
-
- public static final class WindowInsetsCompat.Builder {
- ctor public WindowInsetsCompat.Builder();
- ctor public WindowInsetsCompat.Builder(androidx.core.view.WindowInsetsCompat);
- method public androidx.core.view.WindowInsetsCompat build();
- method public androidx.core.view.WindowInsetsCompat.Builder setDisplayCutout(androidx.core.view.DisplayCutoutCompat?);
- method public androidx.core.view.WindowInsetsCompat.Builder setInsets(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, androidx.core.graphics.Insets);
- method public androidx.core.view.WindowInsetsCompat.Builder setInsetsIgnoringVisibility(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, androidx.core.graphics.Insets);
- method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setMandatorySystemGestureInsets(androidx.core.graphics.Insets);
- method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setStableInsets(androidx.core.graphics.Insets);
- method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemGestureInsets(androidx.core.graphics.Insets);
- method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setSystemWindowInsets(androidx.core.graphics.Insets);
- method @Deprecated public androidx.core.view.WindowInsetsCompat.Builder setTappableElementInsets(androidx.core.graphics.Insets);
- method public androidx.core.view.WindowInsetsCompat.Builder setVisible(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, boolean);
- }
-
- public static final class WindowInsetsCompat.Type {
- method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int captionBar();
- method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int displayCutout();
- method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int ime();
- method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int mandatorySystemGestures();
- method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int navigationBars();
- method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int statusBars();
- method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int systemBars();
- method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int systemGestures();
- method @androidx.core.view.WindowInsetsCompat.Type.InsetsType public static int tappableElement();
- }
-
- @IntDef(flag=true, value={0x1, 0x2, 0x4, 0x8, 0x100, 0x10, 0x20, 0x40, 0x80}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface WindowInsetsCompat.Type.InsetsType {
- }
-
- public final class WindowInsetsControllerCompat {
- ctor public WindowInsetsControllerCompat(android.view.Window, android.view.View);
- method public void addOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
- method public void controlWindowInsetsAnimation(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int, long, android.view.animation.Interpolator?, android.os.CancellationSignal?, androidx.core.view.WindowInsetsAnimationControlListenerCompat);
- method public int getSystemBarsBehavior();
- method public void hide(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
- method public boolean isAppearanceLightNavigationBars();
- method public boolean isAppearanceLightStatusBars();
- method public void removeOnControllableInsetsChangedListener(androidx.core.view.WindowInsetsControllerCompat.OnControllableInsetsChangedListener);
- method public void setAppearanceLightNavigationBars(boolean);
- method public void setAppearanceLightStatusBars(boolean);
- method public void setSystemBarsBehavior(int);
- method public void show(@androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
- method @Deprecated @RequiresApi(30) public static androidx.core.view.WindowInsetsControllerCompat toWindowInsetsControllerCompat(android.view.WindowInsetsController);
- field public static final int BEHAVIOR_SHOW_BARS_BY_SWIPE = 1; // 0x1
- field public static final int BEHAVIOR_SHOW_BARS_BY_TOUCH = 0; // 0x0
- field public static final int BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE = 2; // 0x2
- }
-
- public static interface WindowInsetsControllerCompat.OnControllableInsetsChangedListener {
- method public void onControllableInsetsChanged(androidx.core.view.WindowInsetsControllerCompat, @androidx.core.view.WindowInsetsCompat.Type.InsetsType int);
- }
-
-}
-
-package androidx.core.view.accessibility {
-
- public final class AccessibilityClickableSpanCompat extends android.text.style.ClickableSpan {
- ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityClickableSpanCompat(int, androidx.core.view.accessibility.AccessibilityNodeInfoCompat, int);
- method public void onClick(android.view.View);
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String SPAN_ID = "ACCESSIBILITY_CLICKABLE_SPAN_ID";
- }
-
- public final class AccessibilityEventCompat {
- method @Deprecated public static void appendRecord(android.view.accessibility.AccessibilityEvent!, androidx.core.view.accessibility.AccessibilityRecordCompat!);
- method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! asRecord(android.view.accessibility.AccessibilityEvent!);
- method public static int getAction(android.view.accessibility.AccessibilityEvent);
- method @androidx.core.view.accessibility.AccessibilityEventCompat.ContentChangeType public static int getContentChangeTypes(android.view.accessibility.AccessibilityEvent);
- method public static int getMovementGranularity(android.view.accessibility.AccessibilityEvent);
- method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! getRecord(android.view.accessibility.AccessibilityEvent!, int);
- method @Deprecated public static int getRecordCount(android.view.accessibility.AccessibilityEvent!);
- method public static void setAction(android.view.accessibility.AccessibilityEvent, int);
- method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, @androidx.core.view.accessibility.AccessibilityEventCompat.ContentChangeType int);
- method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
- field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
- field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
- field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
- field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
- field public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 64; // 0x40
- field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
- field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
- field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
- field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
- field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
- field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
- field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
- field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
- field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
- field @Deprecated public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
- field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
- field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
- field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
- field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
- field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
- field @Deprecated public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
- field @Deprecated public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
- field @Deprecated public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
- field @Deprecated public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
- field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
- field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
- field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
- }
-
- @IntDef(flag=true, value={androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_STATE_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_SUBTREE, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_TEXT, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_UNDEFINED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface AccessibilityEventCompat.ContentChangeType {
- }
-
- public final class AccessibilityManagerCompat {
- method @Deprecated public static boolean addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
- method public static boolean addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
- method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getEnabledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!, int);
- method @Deprecated public static java.util.List<android.accessibilityservice.AccessibilityServiceInfo!>! getInstalledAccessibilityServiceList(android.view.accessibility.AccessibilityManager!);
- method @Deprecated public static boolean isTouchExplorationEnabled(android.view.accessibility.AccessibilityManager!);
- method @Deprecated public static boolean removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager!, androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener!);
- method public static boolean removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener);
- }
-
- @Deprecated public static interface AccessibilityManagerCompat.AccessibilityStateChangeListener {
- method @Deprecated public void onAccessibilityStateChanged(boolean);
- }
-
- @Deprecated public abstract static class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat implements androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener {
- ctor @Deprecated public AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat();
- }
-
- public static interface AccessibilityManagerCompat.TouchExplorationStateChangeListener {
- method public void onTouchExplorationStateChanged(boolean);
- }
-
- public class AccessibilityNodeInfoCompat {
- ctor @Deprecated public AccessibilityNodeInfoCompat(Object!);
- method public void addAction(int);
- method public void addAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
- method public void addChild(android.view.View!);
- method public void addChild(android.view.View!, int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void addSpansToExtras(CharSequence!, android.view.View!);
- method public boolean canOpenPopup();
- method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByText(String!);
- method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>! findAccessibilityNodeInfosByViewId(String!);
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
- method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
- method public int getActions();
- method public java.util.List<java.lang.String!> getAvailableExtraData();
- method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
- method public void getBoundsInScreen(android.graphics.Rect!);
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getChild(int);
- method public int getChildCount();
- method public CharSequence! getClassName();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.text.style.ClickableSpan![]! getClickableSpans(CharSequence!);
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! getCollectionInfo();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! getCollectionItemInfo();
- method public CharSequence! getContentDescription();
- method public int getDrawingOrder();
- method public CharSequence! getError();
- method public android.os.Bundle! getExtras();
- method public CharSequence? getHintText();
- method @Deprecated public Object! getInfo();
- method public int getInputType();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabelFor();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getLabeledBy();
- method public int getLiveRegion();
- method public int getMaxTextLength();
- method public int getMovementGranularities();
- method public CharSequence! getPackageName();
- method public CharSequence? getPaneTitle();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getParent();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! getRangeInfo();
- method public CharSequence? getRoleDescription();
- method public CharSequence? getStateDescription();
- method public CharSequence! getText();
- method public int getTextSelectionEnd();
- method public int getTextSelectionStart();
- method public CharSequence? getTooltipText();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
- method public String! getViewIdResourceName();
- method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
- method public int getWindowId();
- method public boolean isAccessibilityFocused();
- method public boolean isCheckable();
- method public boolean isChecked();
- method public boolean isClickable();
- method public boolean isContentInvalid();
- method public boolean isContextClickable();
- method public boolean isDismissable();
- method public boolean isEditable();
- method public boolean isEnabled();
- method public boolean isFocusable();
- method public boolean isFocused();
- method public boolean isHeading();
- method public boolean isImportantForAccessibility();
- method public boolean isLongClickable();
- method public boolean isMultiLine();
- method public boolean isPassword();
- method public boolean isScreenReaderFocusable();
- method public boolean isScrollable();
- method public boolean isSelected();
- method public boolean isShowingHintText();
- method public boolean isTextEntryKey();
- method public boolean isVisibleToUser();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!);
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(android.view.View!, int);
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! obtain(androidx.core.view.accessibility.AccessibilityNodeInfoCompat!);
- method public boolean performAction(int);
- method public boolean performAction(int, android.os.Bundle!);
- method public void recycle();
- method public boolean refresh();
- method public boolean removeAction(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!);
- method public boolean removeChild(android.view.View!);
- method public boolean removeChild(android.view.View!, int);
- method public void setAccessibilityFocused(boolean);
- method public void setAvailableExtraData(java.util.List<java.lang.String!>);
- method @Deprecated public void setBoundsInParent(android.graphics.Rect!);
- method public void setBoundsInScreen(android.graphics.Rect!);
- method public void setCanOpenPopup(boolean);
- method public void setCheckable(boolean);
- method public void setChecked(boolean);
- method public void setClassName(CharSequence!);
- method public void setClickable(boolean);
- method public void setCollectionInfo(Object!);
- method public void setCollectionItemInfo(Object!);
- method public void setContentDescription(CharSequence!);
- method public void setContentInvalid(boolean);
- method public void setContextClickable(boolean);
- method public void setDismissable(boolean);
- method public void setDrawingOrder(int);
- method public void setEditable(boolean);
- method public void setEnabled(boolean);
- method public void setError(CharSequence!);
- method public void setFocusable(boolean);
- method public void setFocused(boolean);
- method public void setHeading(boolean);
- method public void setHintText(CharSequence?);
- method public void setImportantForAccessibility(boolean);
- method public void setInputType(int);
- method public void setLabelFor(android.view.View!);
- method public void setLabelFor(android.view.View!, int);
- method public void setLabeledBy(android.view.View!);
- method public void setLabeledBy(android.view.View!, int);
- method public void setLiveRegion(int);
- method public void setLongClickable(boolean);
- method public void setMaxTextLength(int);
- method public void setMovementGranularities(int);
- method public void setMultiLine(boolean);
- method public void setPackageName(CharSequence!);
- method public void setPaneTitle(CharSequence?);
- method public void setParent(android.view.View!);
- method public void setParent(android.view.View!, int);
- method public void setPassword(boolean);
- method public void setRangeInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat!);
- method public void setRoleDescription(CharSequence?);
- method public void setScreenReaderFocusable(boolean);
- method public void setScrollable(boolean);
- method public void setSelected(boolean);
- method public void setShowingHintText(boolean);
- method public void setSource(android.view.View!);
- method public void setSource(android.view.View!, int);
- method public void setStateDescription(CharSequence?);
- method public void setText(CharSequence!);
- method public void setTextEntryKey(boolean);
- method public void setTextSelection(int, int);
- method public void setTooltipText(CharSequence?);
- method public void setTouchDelegateInfo(androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat);
- method public void setTraversalAfter(android.view.View!);
- method public void setTraversalAfter(android.view.View!, int);
- method public void setTraversalBefore(android.view.View!);
- method public void setTraversalBefore(android.view.View!, int);
- method public void setViewIdResourceName(String!);
- method public void setVisibleToUser(boolean);
- method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat! wrap(android.view.accessibility.AccessibilityNodeInfo);
- field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
- field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
- field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
- field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
- field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
- field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
- field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
- field public static final String ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT = "android.view.accessibility.action.ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT";
- field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
- field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
- field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
- field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
- field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
- field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
- field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
- field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
- field public static final int ACTION_CLICK = 16; // 0x10
- field public static final int ACTION_COLLAPSE = 524288; // 0x80000
- field public static final int ACTION_COPY = 16384; // 0x4000
- field public static final int ACTION_CUT = 65536; // 0x10000
- field public static final int ACTION_DISMISS = 1048576; // 0x100000
- field public static final int ACTION_EXPAND = 262144; // 0x40000
- field public static final int ACTION_FOCUS = 1; // 0x1
- field public static final int ACTION_LONG_CLICK = 32; // 0x20
- field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
- field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
- field public static final int ACTION_PASTE = 32768; // 0x8000
- field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
- field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
- field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
- field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
- field public static final int ACTION_SELECT = 4; // 0x4
- field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
- field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
- field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
- field public static final int FOCUS_INPUT = 1; // 0x1
- field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
- field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
- field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
- field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
- field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int mParentVirtualDescendantId;
- }
-
- public static class AccessibilityNodeInfoCompat.AccessibilityActionCompat {
- ctor public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!);
- ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public AccessibilityNodeInfoCompat.AccessibilityActionCompat(int, CharSequence!, androidx.core.view.accessibility.AccessibilityViewCommand!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! createReplacementAction(CharSequence!, androidx.core.view.accessibility.AccessibilityViewCommand!);
- method public int getId();
- method public CharSequence! getLabel();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean perform(android.view.View!, android.os.Bundle!);
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_ACCESSIBILITY_FOCUS;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_ACCESSIBILITY_FOCUS;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_FOCUS;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLEAR_SELECTION;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CLICK;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COLLAPSE;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CONTEXT_CLICK;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_IME_ENTER;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_LONG_CLICK;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_MOVE_WINDOW;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_NEXT_HTML_ELEMENT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_DOWN;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_LEFT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_RIGHT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PAGE_UP;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PASTE;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_PRESS_AND_HOLD;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_PREVIOUS_HTML_ELEMENT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_BACKWARD;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_DOWN;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_FORWARD;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_LEFT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_RIGHT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_TO_POSITION;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SCROLL_UP;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SELECT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_PROGRESS;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_SELECTION;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SET_TEXT;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_ON_SCREEN;
- field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_SHOW_TOOLTIP;
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected final androidx.core.view.accessibility.AccessibilityViewCommand! mCommand;
- }
-
- public static class AccessibilityNodeInfoCompat.CollectionInfoCompat {
- method public int getColumnCount();
- method public int getRowCount();
- method public int getSelectionMode();
- method public boolean isHierarchical();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean, int);
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat! obtain(int, int, boolean);
- field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
- field public static final int SELECTION_MODE_NONE = 0; // 0x0
- field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
- }
-
- public static class AccessibilityNodeInfoCompat.CollectionItemInfoCompat {
- method public int getColumnIndex();
- method public int getColumnSpan();
- method public int getRowIndex();
- method public int getRowSpan();
- method @Deprecated public boolean isHeading();
- method public boolean isSelected();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean, boolean);
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat! obtain(int, int, int, int, boolean);
- }
-
- public static class AccessibilityNodeInfoCompat.RangeInfoCompat {
- method public float getCurrent();
- method public float getMax();
- method public float getMin();
- method public int getType();
- method public static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat! obtain(int, float, float, float);
- field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
- field public static final int RANGE_TYPE_INT = 0; // 0x0
- field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
- }
-
- public static final class AccessibilityNodeInfoCompat.TouchDelegateInfoCompat {
- ctor public AccessibilityNodeInfoCompat.TouchDelegateInfoCompat(java.util.Map<android.graphics.Region!,android.view.View!>);
- method public android.graphics.Region? getRegionAt(@IntRange(from=0) int);
- method @IntRange(from=0) public int getRegionCount();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getTargetForRegion(android.graphics.Region);
- }
-
- public class AccessibilityNodeProviderCompat {
- ctor public AccessibilityNodeProviderCompat();
- ctor public AccessibilityNodeProviderCompat(Object?);
- method public void addExtraDataToAccessibilityNodeInfo(int, androidx.core.view.accessibility.AccessibilityNodeInfoCompat, String, android.os.Bundle?);
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? createAccessibilityNodeInfo(int);
- method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat!>? findAccessibilityNodeInfosByText(String, int);
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? findFocus(int);
- method public Object? getProvider();
- method public boolean performAction(int, int, android.os.Bundle?);
- field public static final int HOST_VIEW_ID = -1; // 0xffffffff
- }
-
- public class AccessibilityRecordCompat {
- ctor @Deprecated public AccessibilityRecordCompat(Object!);
- method @Deprecated public boolean equals(Object?);
- method @Deprecated public int getAddedCount();
- method @Deprecated public CharSequence! getBeforeText();
- method @Deprecated public CharSequence! getClassName();
- method @Deprecated public CharSequence! getContentDescription();
- method @Deprecated public int getCurrentItemIndex();
- method @Deprecated public int getFromIndex();
- method @Deprecated public Object! getImpl();
- method @Deprecated public int getItemCount();
- method @Deprecated public int getMaxScrollX();
- method public static int getMaxScrollX(android.view.accessibility.AccessibilityRecord);
- method @Deprecated public int getMaxScrollY();
- method public static int getMaxScrollY(android.view.accessibility.AccessibilityRecord);
- method @Deprecated public android.os.Parcelable! getParcelableData();
- method @Deprecated public int getRemovedCount();
- method @Deprecated public int getScrollX();
- method @Deprecated public int getScrollY();
- method @Deprecated public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getSource();
- method @Deprecated public java.util.List<java.lang.CharSequence!>! getText();
- method @Deprecated public int getToIndex();
- method @Deprecated public int getWindowId();
- method @Deprecated public int hashCode();
- method @Deprecated public boolean isChecked();
- method @Deprecated public boolean isEnabled();
- method @Deprecated public boolean isFullScreen();
- method @Deprecated public boolean isPassword();
- method @Deprecated public boolean isScrollable();
- method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain(androidx.core.view.accessibility.AccessibilityRecordCompat!);
- method @Deprecated public static androidx.core.view.accessibility.AccessibilityRecordCompat! obtain();
- method @Deprecated public void recycle();
- method @Deprecated public void setAddedCount(int);
- method @Deprecated public void setBeforeText(CharSequence!);
- method @Deprecated public void setChecked(boolean);
- method @Deprecated public void setClassName(CharSequence!);
- method @Deprecated public void setContentDescription(CharSequence!);
- method @Deprecated public void setCurrentItemIndex(int);
- method @Deprecated public void setEnabled(boolean);
- method @Deprecated public void setFromIndex(int);
- method @Deprecated public void setFullScreen(boolean);
- method @Deprecated public void setItemCount(int);
- method @Deprecated public void setMaxScrollX(int);
- method public static void setMaxScrollX(android.view.accessibility.AccessibilityRecord, int);
- method @Deprecated public void setMaxScrollY(int);
- method public static void setMaxScrollY(android.view.accessibility.AccessibilityRecord, int);
- method @Deprecated public void setParcelableData(android.os.Parcelable!);
- method @Deprecated public void setPassword(boolean);
- method @Deprecated public void setRemovedCount(int);
- method @Deprecated public void setScrollX(int);
- method @Deprecated public void setScrollY(int);
- method @Deprecated public void setScrollable(boolean);
- method @Deprecated public void setSource(android.view.View!);
- method @Deprecated public void setSource(android.view.View!, int);
- method public static void setSource(android.view.accessibility.AccessibilityRecord, android.view.View?, int);
- method @Deprecated public void setToIndex(int);
- }
-
- public interface AccessibilityViewCommand {
- method public boolean perform(android.view.View, androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments?);
- }
-
- public abstract static class AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.CommandArguments();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setBundle(android.os.Bundle?);
- }
-
- public static final class AccessibilityViewCommand.MoveAtGranularityArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.MoveAtGranularityArguments();
- method public boolean getExtendSelection();
- method public int getGranularity();
- }
-
- public static final class AccessibilityViewCommand.MoveHtmlArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.MoveHtmlArguments();
- method public String? getHTMLElement();
- }
-
- public static final class AccessibilityViewCommand.MoveWindowArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.MoveWindowArguments();
- method public int getX();
- method public int getY();
- }
-
- public static final class AccessibilityViewCommand.ScrollToPositionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.ScrollToPositionArguments();
- method public int getColumn();
- method public int getRow();
- }
-
- public static final class AccessibilityViewCommand.SetProgressArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.SetProgressArguments();
- method public float getProgress();
- }
-
- public static final class AccessibilityViewCommand.SetSelectionArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.SetSelectionArguments();
- method public int getEnd();
- method public int getStart();
- }
-
- public static final class AccessibilityViewCommand.SetTextArguments extends androidx.core.view.accessibility.AccessibilityViewCommand.CommandArguments {
- ctor public AccessibilityViewCommand.SetTextArguments();
- method public CharSequence? getText();
- }
-
- public class AccessibilityWindowInfoCompat {
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getAnchor();
- method public void getBoundsInScreen(android.graphics.Rect);
- method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getChild(int);
- method public int getChildCount();
- method public int getId();
- method public int getLayer();
- method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getParent();
- method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getRoot();
- method public CharSequence? getTitle();
- method public int getType();
- method public boolean isAccessibilityFocused();
- method public boolean isActive();
- method public boolean isFocused();
- method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain();
- method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat?);
- method public void recycle();
- field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
- field public static final int TYPE_APPLICATION = 1; // 0x1
- field public static final int TYPE_INPUT_METHOD = 2; // 0x2
- field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
- field public static final int TYPE_SYSTEM = 3; // 0x3
- }
-
-}
-
-package androidx.core.view.animation {
-
- public final class PathInterpolatorCompat {
- method public static android.view.animation.Interpolator create(android.graphics.Path);
- method public static android.view.animation.Interpolator create(float, float);
- method public static android.view.animation.Interpolator create(float, float, float, float);
- }
-
-}
-
-package androidx.core.view.inputmethod {
-
- public final class EditorInfoCompat {
- ctor @Deprecated public EditorInfoCompat();
- method public static String![] getContentMimeTypes(android.view.inputmethod.EditorInfo);
- method public static CharSequence? getInitialSelectedText(android.view.inputmethod.EditorInfo, int);
- method public static CharSequence? getInitialTextAfterCursor(android.view.inputmethod.EditorInfo, int, int);
- method public static CharSequence? getInitialTextBeforeCursor(android.view.inputmethod.EditorInfo, int, int);
- method public static void setContentMimeTypes(android.view.inputmethod.EditorInfo, String![]?);
- method public static void setInitialSurroundingSubText(android.view.inputmethod.EditorInfo, CharSequence, int);
- method public static void setInitialSurroundingText(android.view.inputmethod.EditorInfo, CharSequence);
- field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
- field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
- }
-
- public final class InputConnectionCompat {
- ctor @Deprecated public InputConnectionCompat();
- method public static boolean commitContent(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
- method @Deprecated public static android.view.inputmethod.InputConnection createWrapper(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo, androidx.core.view.inputmethod.InputConnectionCompat.OnCommitContentListener);
- method public static android.view.inputmethod.InputConnection createWrapper(android.view.View, android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
- field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
- }
-
- public static interface InputConnectionCompat.OnCommitContentListener {
- method public boolean onCommitContent(androidx.core.view.inputmethod.InputContentInfoCompat, int, android.os.Bundle?);
- }
-
- public final class InputContentInfoCompat {
- ctor public InputContentInfoCompat(android.net.Uri, android.content.ClipDescription, android.net.Uri?);
- method public android.net.Uri getContentUri();
- method public android.content.ClipDescription getDescription();
- method public android.net.Uri? getLinkUri();
- method public void releasePermission();
- method public void requestPermission();
- method public Object? unwrap();
- method public static androidx.core.view.inputmethod.InputContentInfoCompat? wrap(Object?);
- }
-
-}
-
-package androidx.core.widget {
-
- public abstract class AutoScrollHelper implements android.view.View.OnTouchListener {
- ctor public AutoScrollHelper(android.view.View);
- method public abstract boolean canTargetScrollHorizontally(int);
- method public abstract boolean canTargetScrollVertically(int);
- method public boolean isEnabled();
- method public boolean isExclusive();
- method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
- method public abstract void scrollTargetBy(int, int);
- method public androidx.core.widget.AutoScrollHelper setActivationDelay(int);
- method public androidx.core.widget.AutoScrollHelper setEdgeType(int);
- method public androidx.core.widget.AutoScrollHelper! setEnabled(boolean);
- method public androidx.core.widget.AutoScrollHelper! setExclusive(boolean);
- method public androidx.core.widget.AutoScrollHelper setMaximumEdges(float, float);
- method public androidx.core.widget.AutoScrollHelper setMaximumVelocity(float, float);
- method public androidx.core.widget.AutoScrollHelper setMinimumVelocity(float, float);
- method public androidx.core.widget.AutoScrollHelper setRampDownDuration(int);
- method public androidx.core.widget.AutoScrollHelper setRampUpDuration(int);
- method public androidx.core.widget.AutoScrollHelper setRelativeEdges(float, float);
- method public androidx.core.widget.AutoScrollHelper setRelativeVelocity(float, float);
- field public static final int EDGE_TYPE_INSIDE = 0; // 0x0
- field public static final int EDGE_TYPE_INSIDE_EXTEND = 1; // 0x1
- field public static final int EDGE_TYPE_OUTSIDE = 2; // 0x2
- field public static final float NO_MAX = 3.4028235E38f;
- field public static final float NO_MIN = 0.0f;
- field public static final float RELATIVE_UNSPECIFIED = 0.0f;
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface AutoSizeableTextView {
- method public int getAutoSizeMaxTextSize();
- method public int getAutoSizeMinTextSize();
- method public int getAutoSizeStepGranularity();
- method public int[]! getAutoSizeTextAvailableSizes();
- method @androidx.core.widget.TextViewCompat.AutoSizeTextType public int getAutoSizeTextType();
- method public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
- method public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
- method public void setAutoSizeTextTypeWithDefaults(@androidx.core.widget.TextViewCompat.AutoSizeTextType int);
- field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final boolean PLATFORM_SUPPORTS_AUTOSIZE;
- }
-
- public final class CheckedTextViewCompat {
- method public static android.graphics.drawable.Drawable? getCheckMarkDrawable(android.widget.CheckedTextView);
- method public static android.content.res.ColorStateList? getCheckMarkTintList(android.widget.CheckedTextView);
- method public static android.graphics.PorterDuff.Mode? getCheckMarkTintMode(android.widget.CheckedTextView);
- method public static void setCheckMarkTintList(android.widget.CheckedTextView, android.content.res.ColorStateList?);
- method public static void setCheckMarkTintMode(android.widget.CheckedTextView, android.graphics.PorterDuff.Mode?);
- }
-
- public final class CompoundButtonCompat {
- method public static android.graphics.drawable.Drawable? getButtonDrawable(android.widget.CompoundButton);
- method public static android.content.res.ColorStateList? getButtonTintList(android.widget.CompoundButton);
- method public static android.graphics.PorterDuff.Mode? getButtonTintMode(android.widget.CompoundButton);
- method public static void setButtonTintList(android.widget.CompoundButton, android.content.res.ColorStateList?);
- method public static void setButtonTintMode(android.widget.CompoundButton, android.graphics.PorterDuff.Mode?);
- }
-
- public class ContentLoadingProgressBar extends android.widget.ProgressBar {
- ctor public ContentLoadingProgressBar(android.content.Context);
- ctor public ContentLoadingProgressBar(android.content.Context, android.util.AttributeSet?);
- method public void hide();
- method public void onAttachedToWindow();
- method public void onDetachedFromWindow();
- method public void show();
- }
-
- public final class EdgeEffectCompat {
- ctor @Deprecated public EdgeEffectCompat(android.content.Context!);
- method public static android.widget.EdgeEffect create(android.content.Context, android.util.AttributeSet?);
- method @Deprecated public boolean draw(android.graphics.Canvas!);
- method @Deprecated public void finish();
- method public static float getDistance(android.widget.EdgeEffect);
- method @Deprecated public boolean isFinished();
- method @Deprecated public boolean onAbsorb(int);
- method @Deprecated public boolean onPull(float);
- method @Deprecated public boolean onPull(float, float);
- method public static void onPull(android.widget.EdgeEffect, float, float);
- method public static float onPullDistance(android.widget.EdgeEffect, float, float);
- method @Deprecated public boolean onRelease();
- method @Deprecated public void setSize(int, int);
- }
-
- public class ImageViewCompat {
- method public static android.content.res.ColorStateList? getImageTintList(android.widget.ImageView);
- method public static android.graphics.PorterDuff.Mode? getImageTintMode(android.widget.ImageView);
- method public static void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList?);
- method public static void setImageTintMode(android.widget.ImageView, android.graphics.PorterDuff.Mode?);
- }
-
- public final class ListPopupWindowCompat {
- method @Deprecated public static android.view.View.OnTouchListener! createDragToOpenListener(Object!, android.view.View!);
- method public static android.view.View.OnTouchListener? createDragToOpenListener(android.widget.ListPopupWindow, android.view.View);
- }
-
- public class ListViewAutoScrollHelper extends androidx.core.widget.AutoScrollHelper {
- ctor public ListViewAutoScrollHelper(android.widget.ListView);
- method public boolean canTargetScrollHorizontally(int);
- method public boolean canTargetScrollVertically(int);
- method public void scrollTargetBy(int, int);
- }
-
- public final class ListViewCompat {
- method public static boolean canScrollList(android.widget.ListView, int);
- method public static void scrollListBy(android.widget.ListView, int);
- }
-
- public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.view.ScrollingView {
- ctor public NestedScrollView(android.content.Context);
- ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?);
- ctor public NestedScrollView(android.content.Context, android.util.AttributeSet?, int);
- method public boolean arrowScroll(int);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollExtent();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollOffset();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeHorizontalScrollRange();
- method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect!);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollExtent();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollOffset();
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int computeVerticalScrollRange();
- method public boolean dispatchNestedPreScroll(int, int, int[]?, int[]?, int);
- method public void dispatchNestedScroll(int, int, int, int, int[]?, int, int[]);
- method public boolean dispatchNestedScroll(int, int, int, int, int[]?, int);
- method public boolean executeKeyEvent(android.view.KeyEvent);
- method public void fling(int);
- method public boolean fullScroll(int);
- method public int getMaxScrollAmount();
- method public boolean hasNestedScrollingParent(int);
- method public boolean isFillViewport();
- method public boolean isSmoothScrollingEnabled();
- method public void onAttachedToWindow();
- method public void onNestedPreScroll(android.view.View, int, int, int[], int);
- method public void onNestedScroll(android.view.View, int, int, int, int, int, int[]);
- method public void onNestedScroll(android.view.View, int, int, int, int, int);
- method public void onNestedScrollAccepted(android.view.View, android.view.View, int, int);
- method public boolean onStartNestedScroll(android.view.View, android.view.View, int, int);
- method public void onStopNestedScroll(android.view.View, int);
- method public boolean pageScroll(int);
- method public void setFillViewport(boolean);
- method public void setOnScrollChangeListener(androidx.core.widget.NestedScrollView.OnScrollChangeListener?);
- method public void setSmoothScrollingEnabled(boolean);
- method public final void smoothScrollBy(int, int);
- method public final void smoothScrollBy(int, int, int);
- method public final void smoothScrollTo(int, int);
- method public final void smoothScrollTo(int, int, int);
- method public boolean startNestedScroll(int, int);
- method public void stopNestedScroll(int);
- }
-
- public static interface NestedScrollView.OnScrollChangeListener {
- method public void onScrollChange(androidx.core.widget.NestedScrollView, int, int, int, int);
- }
-
- public final class PopupMenuCompat {
- method public static android.view.View.OnTouchListener? getDragToOpenListener(Object);
- }
-
- public final class PopupWindowCompat {
- method public static boolean getOverlapAnchor(android.widget.PopupWindow);
- method public static int getWindowLayoutType(android.widget.PopupWindow);
- method public static void setOverlapAnchor(android.widget.PopupWindow, boolean);
- method public static void setWindowLayoutType(android.widget.PopupWindow, int);
- method public static void showAsDropDown(android.widget.PopupWindow, android.view.View, int, int, int);
- }
-
- @Deprecated public final class ScrollerCompat {
- method @Deprecated public void abortAnimation();
- method @Deprecated public boolean computeScrollOffset();
- method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!);
- method @Deprecated public static androidx.core.widget.ScrollerCompat! create(android.content.Context!, android.view.animation.Interpolator!);
- method @Deprecated public void fling(int, int, int, int, int, int, int, int);
- method @Deprecated public void fling(int, int, int, int, int, int, int, int, int, int);
- method @Deprecated public float getCurrVelocity();
- method @Deprecated public int getCurrX();
- method @Deprecated public int getCurrY();
- method @Deprecated public int getFinalX();
- method @Deprecated public int getFinalY();
- method @Deprecated public boolean isFinished();
- method @Deprecated public boolean isOverScrolled();
- method @Deprecated public void notifyHorizontalEdgeReached(int, int, int);
- method @Deprecated public void notifyVerticalEdgeReached(int, int, int);
- method @Deprecated public boolean springBack(int, int, int, int, int, int);
- method @Deprecated public void startScroll(int, int, int, int);
- method @Deprecated public void startScroll(int, int, int, int, int);
- }
-
- public final class TextViewCompat {
- method public static int getAutoSizeMaxTextSize(android.widget.TextView);
- method public static int getAutoSizeMinTextSize(android.widget.TextView);
- method public static int getAutoSizeStepGranularity(android.widget.TextView);
- method public static int[] getAutoSizeTextAvailableSizes(android.widget.TextView);
- method public static int getAutoSizeTextType(android.widget.TextView);
- method public static android.content.res.ColorStateList? getCompoundDrawableTintList(android.widget.TextView);
- method public static android.graphics.PorterDuff.Mode? getCompoundDrawableTintMode(android.widget.TextView);
- method public static android.graphics.drawable.Drawable![] getCompoundDrawablesRelative(android.widget.TextView);
- method public static int getFirstBaselineToTopHeight(android.widget.TextView);
- method public static int getLastBaselineToBottomHeight(android.widget.TextView);
- method public static int getMaxLines(android.widget.TextView);
- method public static int getMinLines(android.widget.TextView);
- method public static androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParams(android.widget.TextView);
- method public static void setAutoSizeTextTypeUniformWithConfiguration(android.widget.TextView, int, int, int, int) throws java.lang.IllegalArgumentException;
- method public static void setAutoSizeTextTypeUniformWithPresetSizes(android.widget.TextView, int[], int) throws java.lang.IllegalArgumentException;
- method public static void setAutoSizeTextTypeWithDefaults(android.widget.TextView, int);
- method public static void setCompoundDrawableTintList(android.widget.TextView, android.content.res.ColorStateList?);
- method public static void setCompoundDrawableTintMode(android.widget.TextView, android.graphics.PorterDuff.Mode?);
- method public static void setCompoundDrawablesRelative(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
- method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?, android.graphics.drawable.Drawable?);
- method public static void setCompoundDrawablesRelativeWithIntrinsicBounds(android.widget.TextView, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
- method public static void setCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback);
- method public static void setFirstBaselineToTopHeight(android.widget.TextView, @IntRange(from=0) @Px int);
- method public static void setLastBaselineToBottomHeight(android.widget.TextView, @IntRange(from=0) @Px int);
- method public static void setLineHeight(android.widget.TextView, @IntRange(from=0) @Px int);
- method public static void setPrecomputedText(android.widget.TextView, androidx.core.text.PrecomputedTextCompat);
- method public static void setTextAppearance(android.widget.TextView, @StyleRes int);
- method public static void setTextMetricsParams(android.widget.TextView, androidx.core.text.PrecomputedTextCompat.Params);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.view.ActionMode.Callback? unwrapCustomSelectionActionModeCallback(android.view.ActionMode.Callback?);
- method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static android.view.ActionMode.Callback? wrapCustomSelectionActionModeCallback(android.widget.TextView, android.view.ActionMode.Callback?);
- field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
- field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
- }
-
- @IntDef({androidx.core.widget.TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE, androidx.core.widget.TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface TextViewCompat.AutoSizeTextType {
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class TextViewOnReceiveContentListener implements androidx.core.view.OnReceiveContentListener {
- ctor public TextViewOnReceiveContentListener();
- method public androidx.core.view.ContentInfoCompat? onReceiveContent(android.view.View, androidx.core.view.ContentInfoCompat);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintableCheckedTextView {
- method public android.content.res.ColorStateList? getSupportCheckMarkTintList();
- method public android.graphics.PorterDuff.Mode? getSupportCheckMarkTintMode();
- method public void setSupportCheckMarkTintList(android.content.res.ColorStateList?);
- method public void setSupportCheckMarkTintMode(android.graphics.PorterDuff.Mode?);
- }
-
- public interface TintableCompoundButton {
- method public android.content.res.ColorStateList? getSupportButtonTintList();
- method public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
- method public void setSupportButtonTintList(android.content.res.ColorStateList?);
- method public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
- }
-
- public interface TintableCompoundDrawablesView {
- method public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
- method public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
- method public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
- method public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
- }
-
- @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TintableImageSourceView {
- method public android.content.res.ColorStateList? getSupportImageTintList();
- method public android.graphics.PorterDuff.Mode? getSupportImageTintMode();
- method public void setSupportImageTintList(android.content.res.ColorStateList?);
- method public void setSupportImageTintMode(android.graphics.PorterDuff.Mode?);
- }
-
-}
-
diff --git a/core/core/api/restricted_current.txt b/core/core/api/restricted_current.txt
index b9ff456..520534c 100644
--- a/core/core/api/restricted_current.txt
+++ b/core/core/api/restricted_current.txt
@@ -209,6 +209,10 @@
method @Deprecated public void setInterruptIfStopped(boolean);
}
+ public final class LocaleManagerCompat {
+ method @AnyThread public static androidx.core.os.LocaleListCompat getSystemLocales(android.content.Context);
+ }
+
public final class MultiWindowModeChangedInfo {
ctor public MultiWindowModeChangedInfo(boolean);
ctor @RequiresApi(26) public MultiWindowModeChangedInfo(boolean, android.content.res.Configuration);
@@ -1118,10 +1122,15 @@
method public static <T> T? getSystemService(android.content.Context, Class<T!>);
method public static String? getSystemServiceName(android.content.Context, Class<?>);
method public static boolean isDeviceProtectedStorage(android.content.Context);
+ method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, int);
+ method public static android.content.Intent? registerReceiver(android.content.Context, android.content.BroadcastReceiver?, android.content.IntentFilter, String?, android.os.Handler?, int);
method public static boolean startActivities(android.content.Context, android.content.Intent![]);
method public static boolean startActivities(android.content.Context, android.content.Intent![], android.os.Bundle?);
method public static void startActivity(android.content.Context, android.content.Intent, android.os.Bundle?);
method public static void startForegroundService(android.content.Context, android.content.Intent);
+ field public static final int RECEIVER_EXPORTED = 2; // 0x2
+ field public static final int RECEIVER_NOT_EXPORTED = 4; // 0x4
+ field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1
}
public class FileProvider extends android.content.ContentProvider {
@@ -2083,6 +2092,7 @@
method public java.util.Locale? getFirstMatch(String![]);
method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale?);
method public boolean isEmpty();
+ method @RequiresApi(21) public static boolean matchesLanguageAndScript(java.util.Locale, java.util.Locale);
method @IntRange(from=0) public int size();
method public String toLanguageTags();
method public Object? unwrap();
@@ -2101,7 +2111,18 @@
}
public final class ParcelCompat {
+ method public static <T> T![]? readArray(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> java.util.ArrayList<T!>? readArrayList(android.os.Parcel, ClassLoader?, Class<? extends T>);
method public static boolean readBoolean(android.os.Parcel);
+ method public static <K, V> java.util.HashMap<K!,V!>? readHashMap(android.os.Parcel, ClassLoader?, Class<? extends K>, Class<? extends V>);
+ method public static <T> void readList(android.os.Parcel, java.util.List<? super T>, ClassLoader?, Class<T!>);
+ method public static <K, V> void readMap(android.os.Parcel, java.util.Map<? super K,? super V>, ClassLoader?, Class<K!>, Class<V!>);
+ method public static <T extends android.os.Parcelable> T? readParcelable(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> T![]? readParcelableArray(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @RequiresApi(30) public static <T> android.os.Parcelable.Creator<T!>? readParcelableCreator(android.os.Parcel, ClassLoader?, Class<T!>);
+ method @RequiresApi(api=android.os.Build.VERSION_CODES.Q) public static <T> java.util.List<T!> readParcelableList(android.os.Parcel, java.util.List<T!>, ClassLoader?, Class<T!>);
+ method public static <T extends java.io.Serializable> T? readSerializable(android.os.Parcel, ClassLoader?, Class<T!>);
+ method public static <T> android.util.SparseArray<T!>? readSparseArray(android.os.Parcel, ClassLoader?, Class<? extends T>);
method public static void writeBoolean(android.os.Parcel, boolean);
}
@@ -3492,6 +3513,9 @@
method public static void setContentChangeTypes(android.view.accessibility.AccessibilityEvent, @androidx.core.view.accessibility.AccessibilityEventCompat.ContentChangeType int);
method public static void setMovementGranularity(android.view.accessibility.AccessibilityEvent, int);
field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 512; // 0x200
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 256; // 0x100
+ field public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 128; // 0x80
field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
@@ -3520,7 +3544,7 @@
field @Deprecated public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
}
- @IntDef(flag=true, value={androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_STATE_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_SUBTREE, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_TEXT, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_UNDEFINED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface AccessibilityEventCompat.ContentChangeType {
+ @IntDef(flag=true, value={androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_STATE_DESCRIPTION, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_SUBTREE, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_TEXT, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_UNDEFINED, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_DRAG_STARTED, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_DRAG_DROPPED, androidx.core.view.accessibility.AccessibilityEventCompat.CONTENT_CHANGE_TYPE_DRAG_CANCELLED}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface AccessibilityEventCompat.ContentChangeType {
}
public final class AccessibilityManagerCompat {
@@ -3558,7 +3582,7 @@
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! findFocus(int);
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! focusSearch(int);
method public java.util.List<androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat!>! getActionList();
- method public int getActions();
+ method @Deprecated public int getActions();
method public java.util.List<java.lang.String!> getAvailableExtraData();
method @Deprecated public void getBoundsInParent(android.graphics.Rect!);
method public void getBoundsInScreen(android.graphics.Rect!);
@@ -3571,6 +3595,7 @@
method public CharSequence! getContentDescription();
method public int getDrawingOrder();
method public CharSequence! getError();
+ method public android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo? getExtraRenderingInfo();
method public android.os.Bundle! getExtras();
method public CharSequence? getHintText();
method @Deprecated public Object! getInfo();
@@ -3593,6 +3618,7 @@
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat.TouchDelegateInfoCompat? getTouchDelegateInfo();
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalAfter();
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat! getTraversalBefore();
+ method public String? getUniqueId();
method public String! getViewIdResourceName();
method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat! getWindow();
method public int getWindowId();
@@ -3686,6 +3712,7 @@
method public void setTraversalAfter(android.view.View!, int);
method public void setTraversalBefore(android.view.View!);
method public void setTraversalBefore(android.view.View!, int);
+ method public void setUniqueId(String?);
method public void setViewIdResourceName(String!);
method public void setVisibleToUser(boolean);
method public android.view.accessibility.AccessibilityNodeInfo! unwrap();
@@ -3755,6 +3782,9 @@
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_COPY;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_CUT;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_DISMISS;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_CANCEL;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_DROP;
+ field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat ACTION_DRAG_START;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_EXPAND;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_FOCUS;
field public static final androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat! ACTION_HIDE_TOOLTIP;
@@ -3951,18 +3981,22 @@
method public void getBoundsInScreen(android.graphics.Rect);
method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getChild(int);
method public int getChildCount();
+ method public int getDisplayId();
method public int getId();
method public int getLayer();
method public androidx.core.view.accessibility.AccessibilityWindowInfoCompat? getParent();
+ method public void getRegionInScreen(android.graphics.Region);
method public androidx.core.view.accessibility.AccessibilityNodeInfoCompat? getRoot();
method public CharSequence? getTitle();
method public int getType();
method public boolean isAccessibilityFocused();
method public boolean isActive();
method public boolean isFocused();
+ method public boolean isInPictureInPictureMode();
method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain();
method public static androidx.core.view.accessibility.AccessibilityWindowInfoCompat? obtain(androidx.core.view.accessibility.AccessibilityWindowInfoCompat?);
method public void recycle();
+ method public android.view.accessibility.AccessibilityWindowInfo? unwrap();
field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
field public static final int TYPE_APPLICATION = 1; // 0x1
field public static final int TYPE_INPUT_METHOD = 2; // 0x2
diff --git a/core/core/lint-baseline.xml b/core/core/lint-baseline.xml
index 3dde51d..12f4527 100644
--- a/core/core/lint-baseline.xml
+++ b/core/core/lint-baseline.xml
@@ -241,7 +241,8 @@
errorLine1=" && Arrays.equals(nc1.getVibrationPattern(), nc2.getVibrationPattern())"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ column="42"/>
</issue>
<issue
@@ -250,7 +251,9 @@
errorLine1=" && Arrays.equals(nc1.getVibrationPattern(), nc2.getVibrationPattern())"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="183"
+ column="69"/>
</issue>
<issue
@@ -259,7 +262,9 @@
errorLine1=" && Objects.equals(nc1.getGroup(), nc2.getGroup())"
errorLine2=" ~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="184"
+ column="43"/>
</issue>
<issue
@@ -268,7 +273,9 @@
errorLine1=" && Objects.equals(nc1.getGroup(), nc2.getGroup())"
errorLine2=" ~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="184"
+ column="59"/>
</issue>
<issue
@@ -277,7 +284,9 @@
errorLine1=" && Objects.equals(nc1.getAudioAttributes(), nc2.getAudioAttributes());"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="185"
+ column="43"/>
</issue>
<issue
@@ -286,7 +295,9 @@
errorLine1=" && Objects.equals(nc1.getAudioAttributes(), nc2.getAudioAttributes());"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="185"
+ column="69"/>
</issue>
<issue
@@ -295,7 +306,9 @@
errorLine1=" assertEquals(expected.getImportance(), actual.getImportance());"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="200"
+ column="35"/>
</issue>
<issue
@@ -304,7 +317,9 @@
errorLine1=" assertEquals(expected.getLightColor(), actual.getLightColor());"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="201"
+ column="35"/>
</issue>
<issue
@@ -313,7 +328,9 @@
errorLine1=" assertEquals(expected.getId(), actual.getId());"
errorLine2=" ~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="202"
+ column="35"/>
</issue>
<issue
@@ -322,7 +339,9 @@
errorLine1=" assertEquals(expected.getName(), actual.getName());"
errorLine2=" ~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="203"
+ column="35"/>
</issue>
<issue
@@ -331,7 +350,9 @@
errorLine1=" assertEquals(expected.getDescription(), actual.getDescription());"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="204"
+ column="35"/>
</issue>
<issue
@@ -340,7 +361,9 @@
errorLine1=" assertEquals(expected.getSound(), actual.getSound());"
errorLine2=" ~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="205"
+ column="35"/>
</issue>
<issue
@@ -349,7 +372,9 @@
errorLine1=" assertArrayEquals(expected.getVibrationPattern(), actual.getVibrationPattern());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="206"
+ column="40"/>
</issue>
<issue
@@ -358,7 +383,9 @@
errorLine1=" assertEquals(expected.getGroup(), actual.getGroup());"
errorLine2=" ~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="207"
+ column="35"/>
</issue>
<issue
@@ -367,7 +394,9 @@
errorLine1=" assertEquals(expected.getAudioAttributes(), actual.getAudioAttributes());"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+ line="208"
+ column="35"/>
</issue>
<issue
@@ -376,7 +405,9 @@
errorLine1=" assertEquals(expected.getId(), actual.getId());"
errorLine2=" ~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelGroupCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelGroupCompatTest.java"
+ line="113"
+ column="35"/>
</issue>
<issue
@@ -385,7 +416,9 @@
errorLine1=" assertEquals(expected.getName(), actual.getName());"
errorLine2=" ~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationChannelGroupCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationChannelGroupCompatTest.java"
+ line="114"
+ column="35"/>
</issue>
<issue
@@ -394,7 +427,9 @@
errorLine1=" Notification nWith = builder.addInvisibleAction(0, "testAction", null)"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+ line="251"
+ column="38"/>
</issue>
<issue
@@ -403,7 +438,9 @@
errorLine1=" List<NotificationCompat.Action> actions = NotificationCompat.getInvisibleActions(nWith);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+ line="253"
+ column="70"/>
</issue>
<issue
@@ -412,7 +449,9 @@
errorLine1=" assertEquals(Icon.TYPE_BITMAP, ((Icon) firstBuiltIcon).getType());"
errorLine2=" ~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+ line="1467"
+ column="68"/>
</issue>
<issue
@@ -421,7 +460,9 @@
errorLine1=" assertEquals(Icon.TYPE_BITMAP, ((Icon) rebuiltIcon).getType());"
errorLine2=" ~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+ line="1482"
+ column="65"/>
</issue>
<issue
@@ -430,7 +471,9 @@
errorLine1=" assertEquals(Icon.TYPE_RESOURCE, firstBuiltIcon.getType());"
errorLine2=" ~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+ line="1499"
+ column="57"/>
</issue>
<issue
@@ -439,7 +482,9 @@
errorLine1=" assertEquals(Icon.TYPE_RESOURCE, rebuiltIcon.getType());"
errorLine2=" ~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+ line="1509"
+ column="54"/>
</issue>
<issue
@@ -448,7 +493,9 @@
errorLine1=" new NotificationCompat.BubbleMetadata.Builder(shortcutId)"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+ line="2113"
+ column="17"/>
</issue>
<issue
@@ -457,7 +504,9 @@
errorLine1=" NotificationCompat.getInvisibleActions(notification);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+ line="2326"
+ column="36"/>
</issue>
<issue
@@ -466,7 +515,9 @@
errorLine1=" assertBundleEquals("Notification.extras", n2.extras, n2.extras)"
errorLine2=" ~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationTester.kt"/>
+ file="src/androidTest/java/androidx/core/app/NotificationTester.kt"
+ line="32"
+ column="51"/>
</issue>
<issue
@@ -475,7 +526,9 @@
errorLine1=" assertBundleEquals("Notification.extras", n2.extras, n2.extras)"
errorLine2=" ~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/app/NotificationTester.kt"/>
+ file="src/androidTest/java/androidx/core/app/NotificationTester.kt"
+ line="32"
+ column="62"/>
</issue>
<issue
@@ -484,7 +537,9 @@
errorLine1=" .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE).build());"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="70"
+ column="18"/>
</issue>
<issue
@@ -493,7 +548,9 @@
errorLine1=" .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE)"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="72"
+ column="18"/>
</issue>
<issue
@@ -502,7 +559,9 @@
errorLine1=" .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NORMAL).build());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="73"
+ column="18"/>
</issue>
<issue
@@ -511,7 +570,9 @@
errorLine1=" .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE)"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="75"
+ column="18"/>
</issue>
<issue
@@ -520,7 +581,9 @@
errorLine1=" .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NORMAL)"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="76"
+ column="18"/>
</issue>
<issue
@@ -529,7 +592,9 @@
errorLine1=" .setTextDirection(LTR).build());"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="77"
+ column="18"/>
</issue>
<issue
@@ -538,7 +603,9 @@
errorLine1=" .setTextDirection(LTR).build());"
errorLine2=" ~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="77"
+ column="35"/>
</issue>
<issue
@@ -547,7 +614,9 @@
errorLine1=" .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE).build().getBreakStrategy());"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="83"
+ column="73"/>
</issue>
<issue
@@ -556,7 +625,9 @@
errorLine1=" .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE).build().getBreakStrategy());"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="83"
+ column="18"/>
</issue>
<issue
@@ -565,7 +636,9 @@
errorLine1=" .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NONE).build()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="85"
+ column="18"/>
</issue>
<issue
@@ -574,7 +647,9 @@
errorLine1=" .getHyphenationFrequency());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="86"
+ column="18"/>
</issue>
<issue
@@ -583,7 +658,9 @@
errorLine1=" assertEquals(RTL, new Params.Builder(PAINT).setTextDirection(RTL).build()"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="87"
+ column="53"/>
</issue>
<issue
@@ -592,7 +669,9 @@
errorLine1=" assertEquals(RTL, new Params.Builder(PAINT).setTextDirection(RTL).build()"
errorLine2=" ~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="87"
+ column="22"/>
</issue>
<issue
@@ -601,7 +680,9 @@
errorLine1=" assertEquals(RTL, new Params.Builder(PAINT).setTextDirection(RTL).build()"
errorLine2=" ~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="87"
+ column="70"/>
</issue>
<issue
@@ -610,7 +691,9 @@
errorLine1=" .getTextDirection());"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+ line="88"
+ column="18"/>
</issue>
<issue
@@ -619,7 +702,9 @@
errorLine1=" .toShortcutInfo());"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+ line="566"
+ column="18"/>
</issue>
<issue
@@ -628,7 +713,9 @@
errorLine1=" .toShortcutInfo());"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+ line="574"
+ column="18"/>
</issue>
<issue
@@ -637,7 +724,9 @@
errorLine1=" .toShortcutInfo());"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+ line="582"
+ column="18"/>
</issue>
<issue
@@ -646,7 +735,9 @@
errorLine1=" .toShortcutInfo());"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+ line="590"
+ column="18"/>
</issue>
<issue
@@ -655,7 +746,9 @@
errorLine1=" .toShortcutInfo());"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+ line="598"
+ column="18"/>
</issue>
<issue
@@ -664,7 +757,9 @@
errorLine1=" assertEquals(getDefaultSubscriptionId(), actual);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java"
+ line="110"
+ column="30"/>
</issue>
<issue
@@ -673,7 +768,9 @@
errorLine1=" assertEquals(expected, getDefaultSubscriptionId());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java"/>
+ file="src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java"
+ line="112"
+ column="40"/>
</issue>
<issue
@@ -682,7 +779,9 @@
errorLine1=" super(context, attrs, defStyleAttr, defStyleRes);"
errorLine2=" ~~~~~">
<location
- file="src/androidTest/java/androidx/core/widget/TestContentView.java"/>
+ file="src/androidTest/java/androidx/core/widget/TestContentView.java"
+ line="53"
+ column="9"/>
</issue>
<issue
@@ -691,7 +790,9 @@
errorLine1=" requestApplyInsets()"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/core/view/WindowInsetsCompatActivityTest.kt"/>
+ file="src/androidTest/java/androidx/core/view/WindowInsetsCompatActivityTest.kt"
+ line="424"
+ column="9"/>
</issue>
<issue
@@ -700,7 +801,9 @@
errorLine1=" builder.setSemanticAction(action.getSemanticAction());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4805"
+ column="47"/>
</issue>
<issue
@@ -709,7 +812,9 @@
errorLine1=" ? remoteInput.getEditChoicesBeforeSending()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="6449"
+ column="31"/>
</issue>
<issue
@@ -718,7 +823,9 @@
errorLine1=" ? src.getEditChoicesBeforeSending()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7483"
+ column="35"/>
</issue>
<issue
@@ -727,7 +834,9 @@
errorLine1=" actionBuilder.setSemanticAction(action.getSemanticAction());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="389"
+ column="49"/>
</issue>
<issue
@@ -736,7 +845,9 @@
errorLine1=" super(compat.getDispatchMode());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/WindowInsetsAnimationCompat.java"/>
+ file="src/main/java/androidx/core/view/WindowInsetsAnimationCompat.java"
+ line="968"
+ column="23"/>
</issue>
<issue
@@ -745,7 +856,9 @@
errorLine1=" requestRelaunchActivityMethod.invoke(activityThread,"
errorLine2=" ^">
<location
- file="src/main/java/androidx/core/app/ActivityRecreator.java"/>
+ file="src/main/java/androidx/core/app/ActivityRecreator.java"
+ line="152"
+ column="21"/>
</issue>
<issue
@@ -754,7 +867,9 @@
errorLine1=" performStopActivity3ParamsMethod.invoke(activityThread,"
errorLine2=" ^">
<location
- file="src/main/java/androidx/core/app/ActivityRecreator.java"/>
+ file="src/main/java/androidx/core/app/ActivityRecreator.java"
+ line="274"
+ column="29"/>
</issue>
<issue
@@ -763,7 +878,9 @@
errorLine1=" performStopActivity2ParamsMethod.invoke(activityThread,"
errorLine2=" ^">
<location
- file="src/main/java/androidx/core/app/ActivityRecreator.java"/>
+ file="src/main/java/androidx/core/app/ActivityRecreator.java"
+ line="277"
+ column="29"/>
</issue>
<issue
@@ -772,7 +889,9 @@
errorLine1=" return (String) getMethod.invoke(systemProperties, name);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/DisplayCompat.java"/>
+ file="src/main/java/androidx/core/view/DisplayCompat.java"
+ line="136"
+ column="29"/>
</issue>
<issue
@@ -781,7 +900,9 @@
errorLine1=" Object value = sActionBarOnMenuKeyMethod.invoke(actionBar, event);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/KeyEventDispatcher.java"/>
+ file="src/main/java/androidx/core/view/KeyEventDispatcher.java"
+ line="108"
+ column="32"/>
</issue>
<issue
@@ -790,7 +911,9 @@
errorLine1=" Boolean result = (Boolean) sMethodUserHandleIsAppMethod.invoke(null, uid);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/ProcessCompat.java"/>
+ file="src/main/java/androidx/core/os/ProcessCompat.java"
+ line="104"
+ column="48"/>
</issue>
<issue
@@ -799,7 +922,9 @@
errorLine1=" Boolean result = (Boolean) sMethodUserIdIsAppMethod.invoke(null, uid);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/ProcessCompat.java"/>
+ file="src/main/java/androidx/core/os/ProcessCompat.java"
+ line="143"
+ column="48"/>
</issue>
<issue
@@ -808,7 +933,9 @@
errorLine1=" removeItemAtMethod.invoke(menu, i);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/widget/TextViewCompat.java"/>
+ file="src/main/java/androidx/core/widget/TextViewCompat.java"
+ line="630"
+ column="25"/>
</issue>
<issue
@@ -817,7 +944,9 @@
errorLine1=" return (Typeface) sCreateFromFamiliesWithDefault.invoke("
errorLine2=" ^">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi21Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi21Impl.java"
+ line="127"
+ column="31"/>
</issue>
<issue
@@ -826,7 +955,9 @@
errorLine1=" final Boolean result = (Boolean) sAddFontWeightStyle.invoke("
errorLine2=" ^">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi21Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi21Impl.java"
+ line="138"
+ column="46"/>
</issue>
<issue
@@ -835,7 +966,9 @@
errorLine1=" final Boolean result = (Boolean) sAddFontWeightStyle.invoke("
errorLine2=" ^">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi24Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi24Impl.java"
+ line="112"
+ column="46"/>
</issue>
<issue
@@ -844,7 +977,9 @@
errorLine1=" return (Typeface) sCreateFromFamiliesWithDefault.invoke("
errorLine2=" ^">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi24Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi24Impl.java"
+ line="124"
+ column="31"/>
</issue>
<issue
@@ -853,7 +988,9 @@
errorLine1=" return (Boolean) mAddFontFromAssetManager.invoke(family,"
errorLine2=" ^">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="140"
+ column="30"/>
</issue>
<issue
@@ -862,7 +999,9 @@
errorLine1=" return (Boolean) mAddFontFromBuffer.invoke(family,"
errorLine2=" ^">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="155"
+ column="30"/>
</issue>
<issue
@@ -871,7 +1010,9 @@
errorLine1=" return (Typeface) mCreateFromFamiliesWithDefault.invoke(null /* static method */,"
errorLine2=" ^">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="171"
+ column="31"/>
</issue>
<issue
@@ -880,7 +1021,9 @@
errorLine1=" return (Boolean) mFreeze.invoke(family);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="183"
+ column="30"/>
</issue>
<issue
@@ -889,7 +1032,9 @@
errorLine1=" mAbortCreation.invoke(family);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="194"
+ column="13"/>
</issue>
<issue
@@ -898,7 +1043,9 @@
errorLine1=" return (Typeface) mCreateFromFamiliesWithDefault.invoke(null /* static method */,"
errorLine2=" ^">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"
+ line="51"
+ column="31"/>
</issue>
<issue
@@ -907,7 +1054,9 @@
errorLine1=" return (Boolean) sIsProjectedDrawableMethod.invoke(mDrawable);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/drawable/WrappedDrawableApi21.java"/>
+ file="src/main/java/androidx/core/graphics/drawable/WrappedDrawableApi21.java"
+ line="131"
+ column="34"/>
</issue>
<issue
@@ -916,7 +1065,9 @@
errorLine1=" mAction = new AccessibilityNodeInfo.AccessibilityAction(id, label);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="643"
+ column="27"/>
</issue>
<issue
@@ -925,7 +1076,9 @@
errorLine1=" return ((AccessibilityNodeInfo.AccessibilityAction) mAction).getId();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="657"
+ column="78"/>
</issue>
<issue
@@ -934,7 +1087,9 @@
errorLine1=" return ((AccessibilityNodeInfo.AccessibilityAction) mAction).getLabel();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="671"
+ column="78"/>
</issue>
<issue
@@ -943,7 +1098,9 @@
errorLine1=" return new CollectionInfoCompat(AccessibilityNodeInfo.CollectionInfo.obtain("
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="782"
+ column="86"/>
</issue>
<issue
@@ -952,7 +1109,9 @@
errorLine1=" return new CollectionInfoCompat(AccessibilityNodeInfo.CollectionInfo.obtain("
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="785"
+ column="86"/>
</issue>
<issue
@@ -961,7 +1120,9 @@
errorLine1=" return new CollectionInfoCompat(AccessibilityNodeInfo.CollectionInfo.obtain("
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="804"
+ column="86"/>
</issue>
<issue
@@ -970,7 +1131,9 @@
errorLine1=" return ((AccessibilityNodeInfo.CollectionInfo) mInfo).getColumnCount();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="822"
+ column="71"/>
</issue>
<issue
@@ -979,7 +1142,9 @@
errorLine1=" return ((AccessibilityNodeInfo.CollectionInfo) mInfo).getRowCount();"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="835"
+ column="71"/>
</issue>
<issue
@@ -988,7 +1153,9 @@
errorLine1=" return ((AccessibilityNodeInfo.CollectionInfo) mInfo).isHierarchical();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="848"
+ column="71"/>
</issue>
<issue
@@ -997,7 +1164,9 @@
errorLine1=" return ((AccessibilityNodeInfo.CollectionInfo) mInfo).getSelectionMode();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="866"
+ column="71"/>
</issue>
<issue
@@ -1006,7 +1175,9 @@
errorLine1=" return new CollectionItemInfoCompat(AccessibilityNodeInfo.CollectionItemInfo.obtain("
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="903"
+ column="94"/>
</issue>
<issue
@@ -1015,7 +1186,9 @@
errorLine1=" return new CollectionItemInfoCompat(AccessibilityNodeInfo.CollectionItemInfo.obtain("
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="906"
+ column="94"/>
</issue>
<issue
@@ -1024,7 +1197,9 @@
errorLine1=" return new CollectionItemInfoCompat(AccessibilityNodeInfo.CollectionItemInfo.obtain("
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="928"
+ column="94"/>
</issue>
<issue
@@ -1033,7 +1208,9 @@
errorLine1=" return ((AccessibilityNodeInfo.CollectionItemInfo) mInfo).getColumnIndex();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="946"
+ column="75"/>
</issue>
<issue
@@ -1042,7 +1219,9 @@
errorLine1=" return ((AccessibilityNodeInfo.CollectionItemInfo) mInfo).getColumnSpan();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="959"
+ column="75"/>
</issue>
<issue
@@ -1051,7 +1230,9 @@
errorLine1=" return ((AccessibilityNodeInfo.CollectionItemInfo) mInfo).getRowIndex();"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="972"
+ column="75"/>
</issue>
<issue
@@ -1060,7 +1241,9 @@
errorLine1=" return ((AccessibilityNodeInfo.CollectionItemInfo) mInfo).getRowSpan();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="985"
+ column="75"/>
</issue>
<issue
@@ -1069,7 +1252,9 @@
errorLine1=" return ((AccessibilityNodeInfo.CollectionItemInfo) mInfo).isHeading();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1002"
+ column="75"/>
</issue>
<issue
@@ -1078,7 +1263,9 @@
errorLine1=" return ((AccessibilityNodeInfo.CollectionItemInfo) mInfo).isSelected();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1015"
+ column="75"/>
</issue>
<issue
@@ -1087,7 +1274,9 @@
errorLine1=" AccessibilityNodeInfo.RangeInfo.obtain(type, min, max, current));"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1045"
+ column="57"/>
</issue>
<issue
@@ -1096,7 +1285,9 @@
errorLine1=" return ((AccessibilityNodeInfo.RangeInfo) mInfo).getCurrent();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1064"
+ column="66"/>
</issue>
<issue
@@ -1105,7 +1296,9 @@
errorLine1=" return ((AccessibilityNodeInfo.RangeInfo) mInfo).getMax();"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1077"
+ column="66"/>
</issue>
<issue
@@ -1114,7 +1307,9 @@
errorLine1=" return ((AccessibilityNodeInfo.RangeInfo) mInfo).getMin();"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1090"
+ column="66"/>
</issue>
<issue
@@ -1123,7 +1318,9 @@
errorLine1=" return ((AccessibilityNodeInfo.RangeInfo) mInfo).getType();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1107"
+ column="66"/>
</issue>
<issue
@@ -1132,7 +1329,9 @@
errorLine1=" mInfo = new TouchDelegateInfo(targetMap);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1127"
+ column="25"/>
</issue>
<issue
@@ -1141,7 +1340,9 @@
errorLine1=" return mInfo.getRegionCount();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1149"
+ column="30"/>
</issue>
<issue
@@ -1150,7 +1351,9 @@
errorLine1=" return mInfo.getRegionAt(index);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1168"
+ column="30"/>
</issue>
<issue
@@ -1159,7 +1362,9 @@
errorLine1=" AccessibilityNodeInfo info = mInfo.getTargetForRegion(region);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1196"
+ column="52"/>
</issue>
<issue
@@ -1168,7 +1373,9 @@
errorLine1=" AccessibilityNodeInfo.obtain(root, virtualDescendantId));"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1757"
+ column="43"/>
</issue>
<issue
@@ -1177,7 +1384,9 @@
errorLine1=" mInfo.setSource(root, virtualDescendantId);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1819"
+ column="19"/>
</issue>
<issue
@@ -1186,7 +1395,9 @@
errorLine1=" return AccessibilityNodeInfoCompat.wrapNonNullInstance(mInfo.findFocus(focus));"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1836"
+ column="74"/>
</issue>
<issue
@@ -1195,7 +1406,9 @@
errorLine1=" return AccessibilityNodeInfoCompat.wrapNonNullInstance(mInfo.focusSearch(direction));"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1858"
+ column="74"/>
</issue>
<issue
@@ -1204,7 +1417,9 @@
errorLine1=" mInfo.addChild(root, virtualDescendantId);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1930"
+ column="19"/>
</issue>
<issue
@@ -1213,7 +1428,9 @@
errorLine1=" return mInfo.removeChild(child);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1950"
+ column="26"/>
</issue>
<issue
@@ -1222,7 +1439,9 @@
errorLine1=" return mInfo.removeChild(root, virtualDescendantId);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1968"
+ column="26"/>
</issue>
<issue
@@ -1231,7 +1450,9 @@
errorLine1=" ArrayList<Integer> list = mInfo.getExtras()"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2006"
+ column="41"/>
</issue>
<issue
@@ -1240,7 +1461,9 @@
errorLine1=" mInfo.getExtras().putIntegerArrayList(key, list);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2010"
+ column="19"/>
</issue>
<issue
@@ -1249,7 +1472,9 @@
errorLine1=" mInfo.addAction((AccessibilityNodeInfo.AccessibilityAction) action.mAction);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2033"
+ column="19"/>
</issue>
<issue
@@ -1258,7 +1483,9 @@
errorLine1=" return mInfo.removeAction((AccessibilityNodeInfo.AccessibilityAction) action.mAction);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2058"
+ column="26"/>
</issue>
<issue
@@ -1267,7 +1494,9 @@
errorLine1=" return mInfo.performAction(action, arguments);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2095"
+ column="26"/>
</issue>
<issue
@@ -1276,7 +1505,9 @@
errorLine1=" mInfo.setMovementGranularities(granularities);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2115"
+ column="19"/>
</issue>
<issue
@@ -1285,7 +1516,9 @@
errorLine1=" return mInfo.getMovementGranularities();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2126"
+ column="26"/>
</issue>
<issue
@@ -1294,7 +1527,9 @@
errorLine1=" mInfo.setParent(root, virtualDescendantId);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2212"
+ column="19"/>
</issue>
<issue
@@ -1303,7 +1538,9 @@
errorLine1=" return mInfo.isVisibleToUser();"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2382"
+ column="26"/>
</issue>
<issue
@@ -1312,7 +1549,9 @@
errorLine1=" mInfo.setVisibleToUser(visibleToUser);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2402"
+ column="19"/>
</issue>
<issue
@@ -1321,7 +1560,9 @@
errorLine1=" return mInfo.isAccessibilityFocused();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2413"
+ column="26"/>
</issue>
<issue
@@ -1330,7 +1571,9 @@
errorLine1=" mInfo.setAccessibilityFocused(focused);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2433"
+ column="19"/>
</issue>
<issue
@@ -1339,7 +1582,9 @@
errorLine1=" return mInfo.isImportantForAccessibility();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2591"
+ column="26"/>
</issue>
<issue
@@ -1348,7 +1593,9 @@
errorLine1=" mInfo.setImportantForAccessibility(important);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2610"
+ column="19"/>
</issue>
<issue
@@ -1357,7 +1604,9 @@
errorLine1=" mInfo.getExtras().remove(SPANS_START_KEY);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2769"
+ column="19"/>
</issue>
<issue
@@ -1366,7 +1615,9 @@
errorLine1=" mInfo.getExtras().remove(SPANS_END_KEY);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2770"
+ column="19"/>
</issue>
<issue
@@ -1375,7 +1626,9 @@
errorLine1=" mInfo.getExtras().remove(SPANS_FLAGS_KEY);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2771"
+ column="19"/>
</issue>
<issue
@@ -1384,7 +1637,9 @@
errorLine1=" mInfo.getExtras().remove(SPANS_ID_KEY);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2772"
+ column="19"/>
</issue>
<issue
@@ -1393,7 +1648,9 @@
errorLine1=" return mInfo.getStateDescription();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2815"
+ column="26"/>
</issue>
<issue
@@ -1402,7 +1659,9 @@
errorLine1=" return mInfo.getExtras().getCharSequence(STATE_DESCRIPTION_KEY);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2817"
+ column="26"/>
</issue>
<issue
@@ -1411,7 +1670,9 @@
errorLine1=" mInfo.setStateDescription(stateDescription);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2850"
+ column="19"/>
</issue>
<issue
@@ -1420,7 +1681,9 @@
errorLine1=" mInfo.getExtras().putCharSequence(STATE_DESCRIPTION_KEY, stateDescription);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2852"
+ column="19"/>
</issue>
<issue
@@ -1429,7 +1692,9 @@
errorLine1=" return mInfo.getUniqueId();"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2915"
+ column="26"/>
</issue>
<issue
@@ -1438,7 +1703,9 @@
errorLine1=" return mInfo.getExtras().getString(UNIQUE_ID_KEY);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2917"
+ column="26"/>
</issue>
<issue
@@ -1447,7 +1714,9 @@
errorLine1=" mInfo.setUniqueId(uniqueId);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2935"
+ column="19"/>
</issue>
<issue
@@ -1456,7 +1725,9 @@
errorLine1=" mInfo.getExtras().putString(UNIQUE_ID_KEY, uniqueId);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2937"
+ column="19"/>
</issue>
<issue
@@ -1465,7 +1736,9 @@
errorLine1=" mInfo.setViewIdResourceName(viewId);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2880"
+ column="19"/>
</issue>
<issue
@@ -1474,7 +1747,9 @@
errorLine1=" return mInfo.getViewIdResourceName();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2898"
+ column="26"/>
</issue>
<issue
@@ -1483,7 +1758,9 @@
errorLine1=" return mInfo.getLiveRegion();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2924"
+ column="26"/>
</issue>
<issue
@@ -1492,7 +1769,9 @@
errorLine1=" mInfo.setLiveRegion(mode);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2944"
+ column="19"/>
</issue>
<issue
@@ -1501,7 +1780,9 @@
errorLine1=" return mInfo.getDrawingOrder();"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2961"
+ column="26"/>
</issue>
<issue
@@ -1510,7 +1791,9 @@
errorLine1=" mInfo.setDrawingOrder(drawingOrderInParent);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2980"
+ column="19"/>
</issue>
<issue
@@ -1519,7 +1802,9 @@
errorLine1=" AccessibilityNodeInfo.CollectionInfo info = mInfo.getCollectionInfo();"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2992"
+ column="63"/>
</issue>
<issue
@@ -1528,7 +1813,9 @@
errorLine1=" mInfo.setCollectionInfo((collectionInfo == null) ? null"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3002"
+ column="19"/>
</issue>
<issue
@@ -1537,7 +1824,9 @@
errorLine1=" mInfo.setCollectionItemInfo((collectionItemInfo == null) ? null"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3011"
+ column="19"/>
</issue>
<issue
@@ -1546,7 +1835,9 @@
errorLine1=" AccessibilityNodeInfo.CollectionItemInfo info = mInfo.getCollectionItemInfo();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3025"
+ column="67"/>
</issue>
<issue
@@ -1555,7 +1846,9 @@
errorLine1=" AccessibilityNodeInfo.RangeInfo info = mInfo.getRangeInfo();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3040"
+ column="58"/>
</issue>
<issue
@@ -1564,7 +1857,9 @@
errorLine1=" mInfo.setRangeInfo((AccessibilityNodeInfo.RangeInfo) rangeInfo.mInfo);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3060"
+ column="19"/>
</issue>
<issue
@@ -1573,7 +1868,9 @@
errorLine1=" actions = (List<Object>) (List<?>) mInfo.getActionList();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3078"
+ column="54"/>
</issue>
<issue
@@ -1582,7 +1879,9 @@
errorLine1=" mInfo.setContentInvalid(contentInvalid);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3106"
+ column="19"/>
</issue>
<issue
@@ -1591,7 +1890,9 @@
errorLine1=" return mInfo.isContentInvalid();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3118"
+ column="26"/>
</issue>
<issue
@@ -1600,7 +1901,9 @@
errorLine1=" return mInfo.isContextClickable();"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3131"
+ column="26"/>
</issue>
<issue
@@ -1609,7 +1912,9 @@
errorLine1=" mInfo.setContextClickable(contextClickable);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3150"
+ column="19"/>
</issue>
<issue
@@ -1618,7 +1923,9 @@
errorLine1=" return mInfo.getHintText();"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3161"
+ column="26"/>
</issue>
<issue
@@ -1627,7 +1934,9 @@
errorLine1=" return mInfo.getExtras().getCharSequence(HINT_TEXT_KEY);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3163"
+ column="26"/>
</issue>
<issue
@@ -1636,7 +1945,9 @@
errorLine1=" mInfo.setHintText(hintText);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3183"
+ column="19"/>
</issue>
<issue
@@ -1645,7 +1956,9 @@
errorLine1=" mInfo.getExtras().putCharSequence(HINT_TEXT_KEY, hintText);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3185"
+ column="19"/>
</issue>
<issue
@@ -1654,7 +1967,9 @@
errorLine1=" mInfo.setError(error);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3204"
+ column="19"/>
</issue>
<issue
@@ -1663,7 +1978,9 @@
errorLine1=" return mInfo.getError();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3215"
+ column="26"/>
</issue>
<issue
@@ -1672,7 +1989,9 @@
errorLine1=" mInfo.setLabelFor(labeled);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3229"
+ column="19"/>
</issue>
<issue
@@ -1681,7 +2000,9 @@
errorLine1=" mInfo.setLabelFor(root, virtualDescendantId);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3249"
+ column="19"/>
</issue>
<issue
@@ -1690,7 +2011,9 @@
errorLine1=" return AccessibilityNodeInfoCompat.wrapNonNullInstance(mInfo.getLabelFor());"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3266"
+ column="74"/>
</issue>
<issue
@@ -1699,7 +2022,9 @@
errorLine1=" mInfo.setLabeledBy(label);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3280"
+ column="19"/>
</issue>
<issue
@@ -1708,7 +2033,9 @@
errorLine1=" mInfo.setLabeledBy(root, virtualDescendantId);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3305"
+ column="19"/>
</issue>
<issue
@@ -1717,7 +2044,9 @@
errorLine1=" return AccessibilityNodeInfoCompat.wrapNonNullInstance(mInfo.getLabeledBy());"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3322"
+ column="74"/>
</issue>
<issue
@@ -1726,7 +2055,9 @@
errorLine1=" return mInfo.canOpenPopup();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3335"
+ column="26"/>
</issue>
<issue
@@ -1735,7 +2066,9 @@
errorLine1=" mInfo.setCanOpenPopup(opensPopup);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3353"
+ column="19"/>
</issue>
<issue
@@ -1744,7 +2077,9 @@
errorLine1=" List<AccessibilityNodeInfo> nodes = mInfo.findAccessibilityNodeInfosByViewId(viewId);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3382"
+ column="55"/>
</issue>
<issue
@@ -1753,7 +2088,9 @@
errorLine1=" return mInfo.getExtras();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3408"
+ column="26"/>
</issue>
<issue
@@ -1762,7 +2099,9 @@
errorLine1=" return mInfo.getInputType();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3421"
+ column="26"/>
</issue>
<issue
@@ -1771,7 +2110,9 @@
errorLine1=" mInfo.setInputType(inputType);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3442"
+ column="19"/>
</issue>
<issue
@@ -1780,7 +2121,9 @@
errorLine1=" return mInfo.getAvailableExtraData();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3460"
+ column="26"/>
</issue>
<issue
@@ -1789,7 +2132,9 @@
errorLine1=" mInfo.setAvailableExtraData(extraDataKeys);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3484"
+ column="19"/>
</issue>
<issue
@@ -1798,7 +2143,9 @@
errorLine1=" mInfo.setMaxTextLength(max);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3505"
+ column="19"/>
</issue>
<issue
@@ -1807,7 +2154,9 @@
errorLine1=" return mInfo.getMaxTextLength();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3517"
+ column="26"/>
</issue>
<issue
@@ -1816,7 +2165,9 @@
errorLine1=" mInfo.setTextSelection(start, end);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3538"
+ column="19"/>
</issue>
<issue
@@ -1825,7 +2176,9 @@
errorLine1=" return mInfo.getTextSelectionStart();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3549"
+ column="26"/>
</issue>
<issue
@@ -1834,7 +2187,9 @@
errorLine1=" return mInfo.getTextSelectionEnd();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3562"
+ column="26"/>
</issue>
<issue
@@ -1843,7 +2198,9 @@
errorLine1=" return AccessibilityNodeInfoCompat.wrapNonNullInstance(mInfo.getTraversalBefore());"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3579"
+ column="74"/>
</issue>
<issue
@@ -1852,7 +2209,9 @@
errorLine1=" mInfo.setTraversalBefore(view);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3601"
+ column="19"/>
</issue>
<issue
@@ -1861,7 +2220,9 @@
errorLine1=" mInfo.setTraversalBefore(root, virtualDescendantId);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3628"
+ column="19"/>
</issue>
<issue
@@ -1870,7 +2231,9 @@
errorLine1=" return AccessibilityNodeInfoCompat.wrapNonNullInstance(mInfo.getTraversalAfter());"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3644"
+ column="74"/>
</issue>
<issue
@@ -1879,7 +2242,9 @@
errorLine1=" mInfo.setTraversalAfter(view);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3666"
+ column="19"/>
</issue>
<issue
@@ -1888,7 +2253,9 @@
errorLine1=" mInfo.setTraversalAfter(root, virtualDescendantId);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3692"
+ column="19"/>
</issue>
<issue
@@ -1897,7 +2264,9 @@
errorLine1=" return AccessibilityWindowInfoCompat.wrapNonNullInstance(mInfo.getWindow());"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3705"
+ column="76"/>
</issue>
<issue
@@ -1906,7 +2275,9 @@
errorLine1=" return mInfo.isDismissable();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3718"
+ column="26"/>
</issue>
<issue
@@ -1915,7 +2286,9 @@
errorLine1=" mInfo.setDismissable(dismissable);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3736"
+ column="19"/>
</issue>
<issue
@@ -1924,7 +2297,9 @@
errorLine1=" return mInfo.isEditable();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3747"
+ column="26"/>
</issue>
<issue
@@ -1933,7 +2308,9 @@
errorLine1=" mInfo.setEditable(editable);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3767"
+ column="19"/>
</issue>
<issue
@@ -1942,7 +2319,9 @@
errorLine1=" return mInfo.isMultiLine();"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3778"
+ column="26"/>
</issue>
<issue
@@ -1951,7 +2330,9 @@
errorLine1=" mInfo.setMultiLine(multiLine);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3796"
+ column="19"/>
</issue>
<issue
@@ -1960,7 +2341,9 @@
errorLine1=" return mInfo.getTooltipText();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3808"
+ column="26"/>
</issue>
<issue
@@ -1969,7 +2352,9 @@
errorLine1=" return mInfo.getExtras().getCharSequence(TOOLTIP_TEXT_KEY);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3810"
+ column="26"/>
</issue>
<issue
@@ -1978,7 +2363,9 @@
errorLine1=" mInfo.setTooltipText(tooltipText);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3830"
+ column="19"/>
</issue>
<issue
@@ -1987,7 +2374,9 @@
errorLine1=" mInfo.getExtras().putCharSequence(TOOLTIP_TEXT_KEY, tooltipText);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3832"
+ column="19"/>
</issue>
<issue
@@ -1996,7 +2385,9 @@
errorLine1=" mInfo.setPaneTitle(paneTitle);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3850"
+ column="19"/>
</issue>
<issue
@@ -2005,7 +2396,9 @@
errorLine1=" mInfo.getExtras().putCharSequence(PANE_TITLE_KEY, paneTitle);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3852"
+ column="19"/>
</issue>
<issue
@@ -2014,7 +2407,9 @@
errorLine1=" return mInfo.getPaneTitle();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3864"
+ column="26"/>
</issue>
<issue
@@ -2023,7 +2418,9 @@
errorLine1=" return mInfo.getExtras().getCharSequence(PANE_TITLE_KEY);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3866"
+ column="26"/>
</issue>
<issue
@@ -2032,7 +2429,9 @@
errorLine1=" return mInfo.isScreenReaderFocusable();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3883"
+ column="26"/>
</issue>
<issue
@@ -2041,7 +2440,9 @@
errorLine1=" mInfo.setScreenReaderFocusable(screenReaderFocusable);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3902"
+ column="19"/>
</issue>
<issue
@@ -2050,7 +2451,9 @@
errorLine1=" return mInfo.isShowingHintText();"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3917"
+ column="26"/>
</issue>
<issue
@@ -2059,7 +2462,9 @@
errorLine1=" mInfo.setShowingHintText(showingHintText);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3937"
+ column="19"/>
</issue>
<issue
@@ -2068,7 +2473,9 @@
errorLine1=" return mInfo.isHeading();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3954"
+ column="26"/>
</issue>
<issue
@@ -2077,7 +2484,9 @@
errorLine1=" mInfo.setHeading(isHeading);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3974"
+ column="19"/>
</issue>
<issue
@@ -2086,7 +2495,9 @@
errorLine1=" return mInfo.isTextEntryKey();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3987"
+ column="26"/>
</issue>
<issue
@@ -2095,7 +2506,9 @@
errorLine1=" mInfo.setTextEntryKey(isTextEntryKey);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="4005"
+ column="19"/>
</issue>
<issue
@@ -2104,7 +2517,9 @@
errorLine1=" return mInfo.refresh();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="4022"
+ column="26"/>
</issue>
<issue
@@ -2113,7 +2528,9 @@
errorLine1=" return mInfo.getExtras().getCharSequence(ROLE_DESCRIPTION_KEY);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="4034"
+ column="26"/>
</issue>
<issue
@@ -2122,7 +2539,9 @@
errorLine1=" mInfo.getExtras().putCharSequence(ROLE_DESCRIPTION_KEY, roleDescription);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="4066"
+ column="19"/>
</issue>
<issue
@@ -2131,7 +2550,9 @@
errorLine1=" TouchDelegateInfo delegateInfo = mInfo.getTouchDelegateInfo();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="4088"
+ column="52"/>
</issue>
<issue
@@ -2140,7 +2561,9 @@
errorLine1=" mInfo.setTouchDelegateInfo(delegatedInfo.mInfo);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="4115"
+ column="19"/>
</issue>
<issue
@@ -2149,7 +2572,9 @@
errorLine1=" return info.loadDescription(packageManager);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java"/>
+ file="src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java"
+ line="199"
+ column="25"/>
</issue>
<issue
@@ -2158,7 +2583,9 @@
errorLine1=" return info.getCapabilities();"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java"/>
+ file="src/main/java/androidx/core/accessibilityservice/AccessibilityServiceInfoCompat.java"
+ line="288"
+ column="25"/>
</issue>
<issue
@@ -2167,7 +2594,9 @@
errorLine1=" return activityManager.isLowRamDevice();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/ActivityManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/ActivityManagerCompat.java"
+ line="41"
+ column="36"/>
</issue>
<issue
@@ -2176,7 +2605,9 @@
errorLine1=" return new ActivityOptionsCompatImpl(ActivityOptions.makeCustomAnimation(context,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+ file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+ line="69"
+ column="66"/>
</issue>
<issue
@@ -2185,7 +2616,9 @@
errorLine1=" return new ActivityOptionsCompatImpl(ActivityOptions.makeScaleUpAnimation("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+ file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+ line="99"
+ column="66"/>
</issue>
<issue
@@ -2194,7 +2627,9 @@
errorLine1=" return new ActivityOptionsCompatImpl(ActivityOptions.makeClipRevealAnimation("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+ file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+ line="123"
+ column="66"/>
</issue>
<issue
@@ -2203,7 +2638,9 @@
errorLine1=" return new ActivityOptionsCompatImpl(ActivityOptions.makeThumbnailScaleUpAnimation("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+ file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+ line="152"
+ column="66"/>
</issue>
<issue
@@ -2212,7 +2649,9 @@
errorLine1=" return new ActivityOptionsCompatImpl(ActivityOptions.makeSceneTransitionAnimation("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+ file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+ line="180"
+ column="66"/>
</issue>
<issue
@@ -2221,7 +2660,9 @@
errorLine1=" ActivityOptions.makeSceneTransitionAnimation(activity, pairs));"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+ file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+ line="217"
+ column="37"/>
</issue>
<issue
@@ -2230,7 +2671,9 @@
errorLine1=" return new ActivityOptionsCompatImpl(ActivityOptions.makeTaskLaunchBehind());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+ file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+ line="235"
+ column="66"/>
</issue>
<issue
@@ -2239,7 +2682,9 @@
errorLine1=" return new ActivityOptionsCompatImpl(ActivityOptions.makeBasic());"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+ file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+ line="247"
+ column="66"/>
</issue>
<issue
@@ -2248,7 +2693,9 @@
errorLine1=" mActivityOptions.requestUsageTimeReport(receiver);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+ file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+ line="277"
+ column="34"/>
</issue>
<issue
@@ -2257,7 +2704,9 @@
errorLine1=" mActivityOptions.setLaunchBounds(screenSpacePixelRect));"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+ file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+ line="288"
+ column="38"/>
</issue>
<issue
@@ -2266,7 +2715,9 @@
errorLine1=" return mActivityOptions.getLaunchBounds();"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"/>
+ file="src/main/java/androidx/core/app/ActivityOptionsCompat.java"
+ line="296"
+ column="37"/>
</issue>
<issue
@@ -2275,7 +2726,9 @@
errorLine1=" alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(triggerTime, showIntent),"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/AlarmManagerCompat.java"
+ line="62"
+ column="26"/>
</issue>
<issue
@@ -2284,7 +2737,9 @@
errorLine1=" alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(triggerTime, showIntent),"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/AlarmManagerCompat.java"
+ line="62"
+ column="40"/>
</issue>
<issue
@@ -2293,7 +2748,9 @@
errorLine1=" alarmManager.setAndAllowWhileIdle(type, triggerAtMillis, operation);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/AlarmManagerCompat.java"
+ line="120"
+ column="26"/>
</issue>
<issue
@@ -2302,7 +2759,9 @@
errorLine1=" alarmManager.setExact(type, triggerAtMillis, operation);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/AlarmManagerCompat.java"
+ line="165"
+ column="26"/>
</issue>
<issue
@@ -2311,7 +2770,9 @@
errorLine1=" alarmManager.setExactAndAllowWhileIdle(type, triggerAtMillis, operation);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/AlarmManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/AlarmManagerCompat.java"
+ line="225"
+ column="26"/>
</issue>
<issue
@@ -2320,7 +2781,9 @@
errorLine1=" return AppOpsManager.permissionToOp(permission);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+ line="79"
+ column="34"/>
</issue>
<issue
@@ -2329,7 +2792,9 @@
errorLine1=" return appOpsManager.noteOp(op, uid, packageName);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+ line="110"
+ column="34"/>
</issue>
<issue
@@ -2338,7 +2803,9 @@
errorLine1=" return appOpsManager.noteOpNoThrow(op, uid, packageName);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+ line="130"
+ column="34"/>
</issue>
<issue
@@ -2347,7 +2814,9 @@
errorLine1=" AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+ line="160"
+ column="51"/>
</issue>
<issue
@@ -2356,7 +2825,9 @@
errorLine1=" return appOpsManager.noteProxyOp(op, proxiedPackageName);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+ line="161"
+ column="34"/>
</issue>
<issue
@@ -2365,7 +2836,9 @@
errorLine1=" AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+ line="179"
+ column="51"/>
</issue>
<issue
@@ -2374,7 +2847,9 @@
errorLine1=" return appOpsManager.noteProxyOpNoThrow(op, proxiedPackageName);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/AppOpsManagerCompat.java"
+ line="180"
+ column="34"/>
</issue>
<issue
@@ -2383,7 +2858,9 @@
errorLine1=" return bitmap.hasMipMap();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/BitmapCompat.java"/>
+ file="src/main/java/androidx/core/graphics/BitmapCompat.java"
+ line="29"
+ column="27"/>
</issue>
<issue
@@ -2392,7 +2869,9 @@
errorLine1=" bitmap.setHasMipMap(hasMipMap);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/BitmapCompat.java"/>
+ file="src/main/java/androidx/core/graphics/BitmapCompat.java"
+ line="36"
+ column="20"/>
</issue>
<issue
@@ -2401,7 +2880,9 @@
errorLine1=" return bitmap.getAllocationByteCount();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/BitmapCompat.java"/>
+ file="src/main/java/androidx/core/graphics/BitmapCompat.java"
+ line="49"
+ column="27"/>
</issue>
<issue
@@ -2410,7 +2891,9 @@
errorLine1=" ? new BlendModeColorFilter(color, blendMode) : null;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/BlendModeColorFilterCompat.java"/>
+ file="src/main/java/androidx/core/graphics/BlendModeColorFilterCompat.java"
+ line="45"
+ column="23"/>
</issue>
<issue
@@ -2419,7 +2902,9 @@
errorLine1=" return bundle.getBinder(key);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/BundleCompat.java"/>
+ file="src/main/java/androidx/core/app/BundleCompat.java"
+ line="106"
+ column="27"/>
</issue>
<issue
@@ -2428,7 +2913,9 @@
errorLine1=" bundle.putBinder(key, binder);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/BundleCompat.java"/>
+ file="src/main/java/androidx/core/app/BundleCompat.java"
+ line="122"
+ column="20"/>
</issue>
<issue
@@ -2437,7 +2924,9 @@
errorLine1=" ((android.os.CancellationSignal) obj).cancel();"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/os/CancellationSignal.java"/>
+ file="src/main/java/androidx/core/os/CancellationSignal.java"
+ line="84"
+ column="55"/>
</issue>
<issue
@@ -2446,7 +2935,9 @@
errorLine1=" mCancellationSignalObj = new android.os.CancellationSignal();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/CancellationSignal.java"/>
+ file="src/main/java/androidx/core/os/CancellationSignal.java"
+ line="143"
+ column="42"/>
</issue>
<issue
@@ -2455,7 +2946,9 @@
errorLine1=" ((android.os.CancellationSignal) mCancellationSignalObj).cancel();"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/os/CancellationSignal.java"/>
+ file="src/main/java/androidx/core/os/CancellationSignal.java"
+ line="145"
+ column="78"/>
</issue>
<issue
@@ -2464,7 +2957,9 @@
errorLine1=" return LocaleListCompat.wrap(configuration.getLocales());"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/ConfigurationCompat.java"/>
+ file="src/main/java/androidx/core/os/ConfigurationCompat.java"
+ line="42"
+ column="56"/>
</issue>
<issue
@@ -2473,7 +2968,9 @@
errorLine1=" return new CursorWindow(name, windowSizeBytes);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/database/CursorWindowCompat.java"/>
+ file="src/main/java/androidx/core/database/CursorWindowCompat.java"
+ line="43"
+ column="20"/>
</issue>
<issue
@@ -2482,7 +2979,9 @@
errorLine1=" return new CursorWindow(name);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/database/CursorWindowCompat.java"/>
+ file="src/main/java/androidx/core/database/CursorWindowCompat.java"
+ line="45"
+ column="20"/>
</issue>
<issue
@@ -2491,7 +2990,9 @@
errorLine1=" return dialog.requireViewById(id);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/DialogCompat.java"/>
+ file="src/main/java/androidx/core/app/DialogCompat.java"
+ line="56"
+ column="27"/>
</issue>
<issue
@@ -2500,7 +3001,9 @@
errorLine1=" return Environment.getExternalStorageState(path);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/EnvironmentCompat.java"/>
+ file="src/main/java/androidx/core/os/EnvironmentCompat.java"
+ line="60"
+ column="32"/>
</issue>
<issue
@@ -2509,7 +3012,9 @@
errorLine1=" return Environment.getStorageState(path);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/EnvironmentCompat.java"/>
+ file="src/main/java/androidx/core/os/EnvironmentCompat.java"
+ line="62"
+ column="32"/>
</issue>
<issue
@@ -2518,7 +3023,9 @@
errorLine1=" return wrap(new LocaleList(localeList));"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
+ file="src/main/java/androidx/core/os/LocaleListCompat.java"
+ line="74"
+ column="25"/>
</issue>
<issue
@@ -2527,7 +3034,9 @@
errorLine1=" ? Locale.forLanguageTag(tags[i])"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
+ file="src/main/java/androidx/core/os/LocaleListCompat.java"
+ line="165"
+ column="34"/>
</issue>
<issue
@@ -2536,7 +3045,9 @@
errorLine1=" return LocaleListCompat.wrap(LocaleList.getAdjustedDefault());"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
+ file="src/main/java/androidx/core/os/LocaleListCompat.java"
+ line="206"
+ column="53"/>
</issue>
<issue
@@ -2545,7 +3056,9 @@
errorLine1=" return LocaleListCompat.wrap(LocaleList.getDefault());"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
+ file="src/main/java/androidx/core/os/LocaleListCompat.java"
+ line="226"
+ column="53"/>
</issue>
<issue
@@ -2554,7 +3067,9 @@
errorLine1=" final String script = locale.getScript();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/LocaleListCompatWrapper.java"/>
+ file="src/main/java/androidx/core/os/LocaleListCompatWrapper.java"
+ line="163"
+ column="42"/>
</issue>
<issue
@@ -2563,7 +3078,9 @@
errorLine1=" message.setAsynchronous(async);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/MessageCompat.java"/>
+ file="src/main/java/androidx/core/os/MessageCompat.java"
+ line="72"
+ column="21"/>
</issue>
<issue
@@ -2572,7 +3089,9 @@
errorLine1=" message.setAsynchronous(async);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/MessageCompat.java"/>
+ file="src/main/java/androidx/core/os/MessageCompat.java"
+ line="79"
+ column="25"/>
</issue>
<issue
@@ -2581,7 +3100,9 @@
errorLine1=" return message.isAsynchronous();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/MessageCompat.java"/>
+ file="src/main/java/androidx/core/os/MessageCompat.java"
+ line="98"
+ column="28"/>
</issue>
<issue
@@ -2590,7 +3111,9 @@
errorLine1=" return message.isAsynchronous();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/MessageCompat.java"/>
+ file="src/main/java/androidx/core/os/MessageCompat.java"
+ line="104"
+ column="32"/>
</issue>
<issue
@@ -2599,7 +3122,9 @@
errorLine1=" return LocaleList.matchesLanguageAndScript(supported, desired);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/LocaleListCompat.java"/>
+ file="src/main/java/androidx/core/os/LocaleListCompat.java"
+ line="251"
+ column="31"/>
</issue>
<issue
@@ -2608,7 +3133,9 @@
errorLine1=" return sourceActivity.shouldUpRecreateTask(targetIntent);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NavUtils.java"/>
+ file="src/main/java/androidx/core/app/NavUtils.java"
+ line="61"
+ column="35"/>
</issue>
<issue
@@ -2617,7 +3144,9 @@
errorLine1=" sourceActivity.navigateUpTo(upIntent);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NavUtils.java"/>
+ file="src/main/java/androidx/core/app/NavUtils.java"
+ line="109"
+ column="28"/>
</issue>
<issue
@@ -2626,7 +3155,9 @@
errorLine1=" Intent result = sourceActivity.getParentActivityIntent();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NavUtils.java"/>
+ file="src/main/java/androidx/core/app/NavUtils.java"
+ line="132"
+ column="44"/>
</issue>
<issue
@@ -2635,7 +3166,9 @@
errorLine1=" this(channel.getId(), channel.getImportance());"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="284"
+ column="22"/>
</issue>
<issue
@@ -2644,7 +3177,9 @@
errorLine1=" this(channel.getId(), channel.getImportance());"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="284"
+ column="39"/>
</issue>
<issue
@@ -2653,7 +3188,9 @@
errorLine1=" mName = channel.getName();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="286"
+ column="25"/>
</issue>
<issue
@@ -2662,7 +3199,9 @@
errorLine1=" mDescription = channel.getDescription();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="287"
+ column="32"/>
</issue>
<issue
@@ -2671,7 +3210,9 @@
errorLine1=" mGroupId = channel.getGroup();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="288"
+ column="28"/>
</issue>
<issue
@@ -2680,7 +3221,9 @@
errorLine1=" mShowBadge = channel.canShowBadge();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="289"
+ column="30"/>
</issue>
<issue
@@ -2689,7 +3232,9 @@
errorLine1=" mSound = channel.getSound();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="290"
+ column="26"/>
</issue>
<issue
@@ -2698,7 +3243,9 @@
errorLine1=" mAudioAttributes = channel.getAudioAttributes();"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="291"
+ column="36"/>
</issue>
<issue
@@ -2707,7 +3254,9 @@
errorLine1=" mLights = channel.shouldShowLights();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="292"
+ column="27"/>
</issue>
<issue
@@ -2716,7 +3265,9 @@
errorLine1=" mLightColor = channel.getLightColor();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="293"
+ column="31"/>
</issue>
<issue
@@ -2725,7 +3276,9 @@
errorLine1=" mVibrationEnabled = channel.shouldVibrate();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="294"
+ column="37"/>
</issue>
<issue
@@ -2734,7 +3287,9 @@
errorLine1=" mVibrationPattern = channel.getVibrationPattern();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="295"
+ column="37"/>
</issue>
<issue
@@ -2743,7 +3298,9 @@
errorLine1=" mParentId = channel.getParentChannelId();"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="297"
+ column="33"/>
</issue>
<issue
@@ -2752,7 +3309,9 @@
errorLine1=" mConversationId = channel.getConversationId();"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="298"
+ column="39"/>
</issue>
<issue
@@ -2761,7 +3320,9 @@
errorLine1=" mBypassDnd = channel.canBypassDnd();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="301"
+ column="30"/>
</issue>
<issue
@@ -2770,7 +3331,9 @@
errorLine1=" mLockscreenVisibility = channel.getLockscreenVisibility();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="302"
+ column="41"/>
</issue>
<issue
@@ -2779,7 +3342,9 @@
errorLine1=" mCanBubble = channel.canBubble();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="304"
+ column="34"/>
</issue>
<issue
@@ -2788,7 +3353,9 @@
errorLine1=" mImportantConversation = channel.isImportantConversation();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="307"
+ column="46"/>
</issue>
<issue
@@ -2797,7 +3364,9 @@
errorLine1=" NotificationChannel channel = new NotificationChannel(mId, mName, mImportance);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="320"
+ column="39"/>
</issue>
<issue
@@ -2806,7 +3375,9 @@
errorLine1=" channel.setDescription(mDescription);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="321"
+ column="17"/>
</issue>
<issue
@@ -2815,7 +3386,9 @@
errorLine1=" channel.setGroup(mGroupId);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="322"
+ column="17"/>
</issue>
<issue
@@ -2824,7 +3397,9 @@
errorLine1=" channel.setShowBadge(mShowBadge);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="323"
+ column="17"/>
</issue>
<issue
@@ -2833,7 +3408,9 @@
errorLine1=" channel.setSound(mSound, mAudioAttributes);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="324"
+ column="17"/>
</issue>
<issue
@@ -2842,7 +3419,9 @@
errorLine1=" channel.enableLights(mLights);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="325"
+ column="17"/>
</issue>
<issue
@@ -2851,7 +3430,9 @@
errorLine1=" channel.setLightColor(mLightColor);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="326"
+ column="17"/>
</issue>
<issue
@@ -2860,7 +3441,9 @@
errorLine1=" channel.setVibrationPattern(mVibrationPattern);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="327"
+ column="17"/>
</issue>
<issue
@@ -2869,7 +3452,9 @@
errorLine1=" channel.enableVibration(mVibrationEnabled);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="328"
+ column="17"/>
</issue>
<issue
@@ -2878,7 +3463,9 @@
errorLine1=" channel.setConversationId(mParentId, mConversationId);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelCompat.java"
+ line="330"
+ column="21"/>
</issue>
<issue
@@ -2887,7 +3474,9 @@
errorLine1=" this(group.getId());"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+ line="115"
+ column="20"/>
</issue>
<issue
@@ -2896,7 +3485,9 @@
errorLine1=" mName = group.getName();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+ line="117"
+ column="23"/>
</issue>
<issue
@@ -2905,7 +3496,9 @@
errorLine1=" mDescription = group.getDescription();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+ line="119"
+ column="34"/>
</issue>
<issue
@@ -2914,7 +3507,9 @@
errorLine1=" mBlocked = group.isBlocked();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+ line="123"
+ column="30"/>
</issue>
<issue
@@ -2923,7 +3518,9 @@
errorLine1=" mChannels = getChannelsCompat(group.getChannels());"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+ line="124"
+ column="49"/>
</issue>
<issue
@@ -2932,7 +3529,9 @@
errorLine1=" if (mId.equals(channel.getGroup())) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+ line="136"
+ column="36"/>
</issue>
<issue
@@ -2941,7 +3540,9 @@
errorLine1=" NotificationChannelGroup group = new NotificationChannelGroup(mId, mName);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+ line="152"
+ column="42"/>
</issue>
<issue
@@ -2950,7 +3551,9 @@
errorLine1=" group.setDescription(mDescription);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationChannelGroupCompat.java"
+ line="154"
+ column="19"/>
</issue>
<issue
@@ -2959,7 +3562,9 @@
errorLine1=" this.mSmallIcon = notification.getSmallIcon();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="1030"
+ column="48"/>
</issue>
<issue
@@ -2968,7 +3573,9 @@
errorLine1=" mNotification.audioAttributes = new AudioAttributes.Builder()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="1537"
+ column="49"/>
</issue>
<issue
@@ -2977,7 +3584,9 @@
errorLine1=" .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="1538"
+ column="26"/>
</issue>
<issue
@@ -2986,7 +3595,9 @@
errorLine1=" .setUsage(AudioAttributes.USAGE_NOTIFICATION)"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="1539"
+ column="26"/>
</issue>
<issue
@@ -2995,7 +3606,9 @@
errorLine1=" .build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="1540"
+ column="26"/>
</issue>
<issue
@@ -3004,7 +3617,9 @@
errorLine1=" mNotification.audioAttributes = new AudioAttributes.Builder()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="1566"
+ column="49"/>
</issue>
<issue
@@ -3013,7 +3628,9 @@
errorLine1=" .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="1567"
+ column="26"/>
</issue>
<issue
@@ -3022,7 +3639,9 @@
errorLine1=" .setLegacyStreamType(streamType)"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="1568"
+ column="26"/>
</issue>
<issue
@@ -3031,7 +3650,9 @@
errorLine1=" .build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="1569"
+ column="26"/>
</issue>
<issue
@@ -3040,7 +3661,9 @@
errorLine1=" return Notification.Builder.recoverBuilder(mContext, notification)"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2117"
+ column="45"/>
</issue>
<issue
@@ -3049,7 +3672,9 @@
errorLine1=" .createContentView();"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2118"
+ column="26"/>
</issue>
<issue
@@ -3058,7 +3683,9 @@
errorLine1=" return Notification.Builder.recoverBuilder(mContext, notification)"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2151"
+ column="45"/>
</issue>
<issue
@@ -3067,7 +3694,9 @@
errorLine1=" .createBigContentView();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2152"
+ column="26"/>
</issue>
<issue
@@ -3076,7 +3705,9 @@
errorLine1=" Notification.Builder.recoverBuilder(mContext, notification);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2186"
+ column="46"/>
</issue>
<issue
@@ -3085,7 +3716,9 @@
errorLine1=" return platformBuilder.createHeadsUpContentView();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2187"
+ column="40"/>
</issue>
<issue
@@ -3094,7 +3727,9 @@
errorLine1=" contentView.setTextViewTextSize(R.id.text, TypedValue.COMPLEX_UNIT_PX,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2892"
+ column="33"/>
</issue>
<issue
@@ -3103,7 +3738,9 @@
errorLine1=" contentView.setViewPadding(R.id.line1, 0, 0, 0, 0);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2896"
+ column="29"/>
</issue>
<issue
@@ -3112,7 +3749,9 @@
errorLine1=" contentView.setChronometerCountDown(R.id.chronometer,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2907"
+ column="37"/>
</issue>
<issue
@@ -3121,7 +3760,9 @@
errorLine1=" outerView.setViewPadding(R.id.notification_main_column_container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2988"
+ column="27"/>
</issue>
<issue
@@ -3130,7 +3771,9 @@
errorLine1=" new Notification.BigPictureStyle(builder.getBuilder())"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3131"
+ column="25"/>
</issue>
<issue
@@ -3139,7 +3782,9 @@
errorLine1=" .setBigContentTitle(mBigContentTitle)"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3132"
+ column="34"/>
</issue>
<issue
@@ -3148,7 +3793,9 @@
errorLine1=" .bigPicture(mPicture);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3133"
+ column="34"/>
</issue>
<issue
@@ -3157,7 +3804,9 @@
errorLine1=" new Notification.BigTextStyle(builder.getBuilder())"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3362"
+ column="25"/>
</issue>
<issue
@@ -3166,7 +3815,9 @@
errorLine1=" .setBigContentTitle(mBigContentTitle)"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3363"
+ column="34"/>
</issue>
<issue
@@ -3175,7 +3826,9 @@
errorLine1=" .bigText(mBigText);"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3364"
+ column="34"/>
</issue>
<issue
@@ -3184,7 +3837,9 @@
errorLine1=" style.setSummaryText(mSummaryText);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3366"
+ column="27"/>
</issue>
<issue
@@ -3193,7 +3848,9 @@
errorLine1=" frameworkStyle = new Notification.MessagingStyle(mUser.toAndroidPerson());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3713"
+ column="38"/>
</issue>
<issue
@@ -3202,7 +3859,9 @@
errorLine1=" frameworkStyle = new Notification.MessagingStyle(mUser.getName());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3715"
+ column="38"/>
</issue>
<issue
@@ -3211,7 +3870,9 @@
errorLine1=" frameworkStyle.addMessage(message.toAndroidMessage());"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3719"
+ column="36"/>
</issue>
<issue
@@ -3220,7 +3881,9 @@
errorLine1=" frameworkStyle.addHistoricMessage(historicMessage.toAndroidMessage());"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3724"
+ column="40"/>
</issue>
<issue
@@ -3229,7 +3892,9 @@
errorLine1=" frameworkStyle.setConversationTitle(mConversationTitle);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3736"
+ column="36"/>
</issue>
<issue
@@ -3238,7 +3903,9 @@
errorLine1=" frameworkStyle.setGroupConversation(mIsGroupConversation);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3742"
+ column="36"/>
</issue>
<issue
@@ -3247,7 +3914,9 @@
errorLine1=" frameworkStyle.setBuilder(builder.getBuilder());"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3744"
+ column="32"/>
</issue>
<issue
@@ -3256,7 +3925,9 @@
errorLine1=" new Notification.BigTextStyle(builder.getBuilder())"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3777"
+ column="21"/>
</issue>
<issue
@@ -3265,7 +3936,9 @@
errorLine1=" .setBigContentTitle(null)"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3778"
+ column="30"/>
</issue>
<issue
@@ -3274,7 +3947,9 @@
errorLine1=" .bigText(completeMessage);"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3779"
+ column="30"/>
</issue>
<issue
@@ -3283,7 +3958,9 @@
errorLine1=" frameworkMessage = new Notification.MessagingStyle.Message("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4167"
+ column="40"/>
</issue>
<issue
@@ -3292,7 +3969,9 @@
errorLine1=" frameworkMessage = new Notification.MessagingStyle.Message("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4171"
+ column="40"/>
</issue>
<issue
@@ -3301,7 +3980,9 @@
errorLine1=" frameworkMessage.setData(getDataMimeType(), getDataUri());"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4177"
+ column="38"/>
</issue>
<issue
@@ -3310,7 +3991,9 @@
errorLine1=" new Notification.InboxStyle(builder.getBuilder())"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4268"
+ column="25"/>
</issue>
<issue
@@ -3319,7 +4002,9 @@
errorLine1=" .setBigContentTitle(mBigContentTitle);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4269"
+ column="34"/>
</issue>
<issue
@@ -3328,7 +4013,9 @@
errorLine1=" style.setSummaryText(mSummaryText);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4271"
+ column="27"/>
</issue>
<issue
@@ -3337,7 +4024,9 @@
errorLine1=" style.addLine(text);"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4274"
+ column="27"/>
</issue>
<issue
@@ -3346,7 +4035,9 @@
errorLine1=" builder.getBuilder().setStyle(new Notification.DecoratedCustomViewStyle());"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4368"
+ column="38"/>
</issue>
<issue
@@ -3355,7 +4046,9 @@
errorLine1=" builder.getBuilder().setStyle(new Notification.DecoratedCustomViewStyle());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4368"
+ column="47"/>
</issue>
<issue
@@ -3364,7 +4057,9 @@
errorLine1=" button.setContentDescription(R.id.action_container, action.title);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4486"
+ column="24"/>
</issue>
<issue
@@ -3373,7 +4068,9 @@
errorLine1=" if (Build.VERSION.SDK_INT >= 23 && action.getIcon() != null) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4785"
+ column="59"/>
</issue>
<issue
@@ -3382,7 +4079,9 @@
errorLine1=" IconCompat iconCompat = IconCompat.createFromIcon(action.getIcon());"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4786"
+ column="78"/>
</issue>
<issue
@@ -3391,7 +4090,9 @@
errorLine1=" android.app.RemoteInput[] remoteInputs = action.getRemoteInputs();"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4794"
+ column="69"/>
</issue>
<issue
@@ -3400,7 +4101,9 @@
errorLine1=" builder.mAllowGeneratedReplies = action.getAllowGeneratedReplies();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4802"
+ column="61"/>
</issue>
<issue
@@ -3409,7 +4112,9 @@
errorLine1=" builder.setSemanticAction(action.getSemanticAction());"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4805"
+ column="54"/>
</issue>
<issue
@@ -3418,7 +4123,9 @@
errorLine1=" builder.setContextual(action.isContextual());"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4808"
+ column="50"/>
</issue>
<issue
@@ -3427,7 +4134,9 @@
errorLine1=" builder.setAuthenticationRequired(action.isAuthenticationRequired());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4811"
+ column="62"/>
</issue>
<issue
@@ -3436,7 +4145,9 @@
errorLine1=" actionBuilder = new Notification.Action.Builder("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="5662"
+ column="33"/>
</issue>
<issue
@@ -3445,7 +4156,9 @@
errorLine1=" actionBuilder = new Notification.Action.Builder("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="5671"
+ column="33"/>
</issue>
<issue
@@ -3454,7 +4167,9 @@
errorLine1=" actionBuilder.setAllowGeneratedReplies(actionCompat.getAllowGeneratedReplies());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="5683"
+ column="31"/>
</issue>
<issue
@@ -3463,7 +4178,9 @@
errorLine1=" actionBuilder.setAuthenticationRequired(actionCompat.isAuthenticationRequired());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="5686"
+ column="31"/>
</issue>
<issue
@@ -3472,7 +4189,9 @@
errorLine1=" actionBuilder.setAuthenticationRequired(actionCompat.isAuthenticationRequired());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="5686"
+ column="31"/>
</issue>
<issue
@@ -3481,7 +4200,9 @@
errorLine1=" actionBuilder.addExtras(actionExtras);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="5688"
+ column="27"/>
</issue>
<issue
@@ -3490,7 +4211,9 @@
errorLine1=" actionBuilder.addRemoteInput(remoteInput);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="5693"
+ column="35"/>
</issue>
<issue
@@ -3499,7 +4222,9 @@
errorLine1=" return actionBuilder.build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="5696"
+ column="34"/>
</issue>
<issue
@@ -3508,7 +4233,9 @@
errorLine1=" ? new RemoteInput(remoteInput.getResultKey(),"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="6444"
+ column="51"/>
</issue>
<issue
@@ -3517,7 +4244,9 @@
errorLine1=" remoteInput.getLabel(),"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="6445"
+ column="33"/>
</issue>
<issue
@@ -3526,7 +4255,9 @@
errorLine1=" remoteInput.getChoices(),"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="6446"
+ column="33"/>
</issue>
<issue
@@ -3535,7 +4266,9 @@
errorLine1=" remoteInput.getAllowFreeFormInput(),"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="6447"
+ column="33"/>
</issue>
<issue
@@ -3544,7 +4277,9 @@
errorLine1=" ? remoteInput.getEditChoicesBeforeSending()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="6449"
+ column="43"/>
</issue>
<issue
@@ -3553,7 +4288,9 @@
errorLine1=" remoteInput.getExtras(),"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="6451"
+ column="33"/>
</issue>
<issue
@@ -3562,7 +4299,9 @@
errorLine1=" new android.app.RemoteInput.Builder(remoteInputCompat.getResultKey())"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="6477"
+ column="25"/>
</issue>
<issue
@@ -3571,7 +4310,9 @@
errorLine1=" .setLabel(remoteInputCompat.getLabel())"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="6478"
+ column="34"/>
</issue>
<issue
@@ -3580,7 +4321,9 @@
errorLine1=" .setChoices(remoteInputCompat.getChoices())"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="6479"
+ column="34"/>
</issue>
<issue
@@ -3589,7 +4332,9 @@
errorLine1=" .setAllowFreeFormInput(remoteInputCompat.getAllowFreeFormInput())"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="6480"
+ column="34"/>
</issue>
<issue
@@ -3598,7 +4343,9 @@
errorLine1=" .addExtras(remoteInputCompat.getExtras())"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="6481"
+ column="34"/>
</issue>
<issue
@@ -3607,7 +4354,9 @@
errorLine1=" .build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="6482"
+ column="34"/>
</issue>
<issue
@@ -3616,7 +4365,9 @@
errorLine1=" return BubbleMetadata.fromPlatform(notification.getBubbleMetadata());"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7460"
+ column="61"/>
</issue>
<issue
@@ -3625,7 +4376,9 @@
errorLine1=" final android.app.RemoteInput[] srcArray = action.getRemoteInputs();"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7470"
+ column="59"/>
</issue>
<issue
@@ -3634,7 +4387,9 @@
errorLine1=" src.getResultKey(),"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7478"
+ column="29"/>
</issue>
<issue
@@ -3643,7 +4398,9 @@
errorLine1=" src.getLabel(),"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7479"
+ column="29"/>
</issue>
<issue
@@ -3652,7 +4409,9 @@
errorLine1=" src.getChoices(),"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7480"
+ column="29"/>
</issue>
<issue
@@ -3661,7 +4420,9 @@
errorLine1=" src.getAllowFreeFormInput(),"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7481"
+ column="29"/>
</issue>
<issue
@@ -3670,7 +4431,9 @@
errorLine1=" ? src.getEditChoicesBeforeSending()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7483"
+ column="39"/>
</issue>
<issue
@@ -3679,7 +4442,9 @@
errorLine1=" src.getExtras(),"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7485"
+ column="29"/>
</issue>
<issue
@@ -3688,7 +4453,9 @@
errorLine1=" allowGeneratedReplies = action.getExtras().getBoolean("
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7492"
+ column="44"/>
</issue>
<issue
@@ -3697,7 +4464,9 @@
errorLine1=" || action.getAllowGeneratedReplies();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7494"
+ column="31"/>
</issue>
<issue
@@ -3706,7 +4475,9 @@
errorLine1=" allowGeneratedReplies = action.getExtras().getBoolean("
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7496"
+ column="44"/>
</issue>
<issue
@@ -3715,7 +4486,9 @@
errorLine1=" action.getExtras().getBoolean(Action.EXTRA_SHOWS_USER_INTERFACE, true);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7501"
+ column="24"/>
</issue>
<issue
@@ -3724,7 +4497,9 @@
errorLine1=" semanticAction = action.getSemanticAction();"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7505"
+ column="37"/>
</issue>
<issue
@@ -3733,7 +4508,9 @@
errorLine1=" semanticAction = action.getExtras().getInt("
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7507"
+ column="37"/>
</issue>
<issue
@@ -3742,7 +4519,9 @@
errorLine1=" final boolean isContextual = Build.VERSION.SDK_INT >= 29 ? action.isContextual() : false;"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7511"
+ column="75"/>
</issue>
<issue
@@ -3751,7 +4530,9 @@
errorLine1=" Build.VERSION.SDK_INT >= 31 ? action.isAuthenticationRequired() : false;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7514"
+ column="54"/>
</issue>
<issue
@@ -3760,7 +4541,9 @@
errorLine1=" if (action.getIcon() == null && action.icon != 0) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7517"
+ column="24"/>
</issue>
<issue
@@ -3769,7 +4552,9 @@
errorLine1=" action.getExtras(), remoteInputs, null, allowGeneratedReplies,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7519"
+ column="32"/>
</issue>
<issue
@@ -3778,7 +4563,9 @@
errorLine1=" IconCompat icon = action.getIcon() == null"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7522"
+ column="38"/>
</issue>
<issue
@@ -3787,7 +4574,9 @@
errorLine1=" ? null : IconCompat.createFromIconOrNullIfZeroResId(action.getIcon());"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7523"
+ column="80"/>
</issue>
<issue
@@ -3796,7 +4585,9 @@
errorLine1=" return new Action(icon, action.title, action.actionIntent, action.getExtras(),"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7524"
+ column="79"/>
</issue>
<issue
@@ -3805,7 +4596,9 @@
errorLine1=" return new Action(action.icon, action.title, action.actionIntent, action.getExtras(),"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7528"
+ column="86"/>
</issue>
<issue
@@ -3814,7 +4607,9 @@
errorLine1=" return notification.getGroup();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7645"
+ column="33"/>
</issue>
<issue
@@ -3823,7 +4618,9 @@
errorLine1=" return notification.getSortKey();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7753"
+ column="33"/>
</issue>
<issue
@@ -3832,7 +4629,9 @@
errorLine1=" return notification.getChannelId();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7769"
+ column="33"/>
</issue>
<issue
@@ -3841,7 +4640,9 @@
errorLine1=" return notification.getTimeoutAfter();"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7781"
+ column="33"/>
</issue>
<issue
@@ -3850,7 +4651,9 @@
errorLine1=" return notification.getBadgeIconType();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7794"
+ column="33"/>
</issue>
<issue
@@ -3859,7 +4662,9 @@
errorLine1=" return notification.getShortcutId();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7806"
+ column="33"/>
</issue>
<issue
@@ -3868,7 +4673,9 @@
errorLine1=" return notification.getSettingsText();"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7817"
+ column="33"/>
</issue>
<issue
@@ -3877,7 +4684,9 @@
errorLine1=" LocusId locusId = notification.getLocusId();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7833"
+ column="44"/>
</issue>
<issue
@@ -3886,7 +4695,9 @@
errorLine1=" return notification.getGroupAlertBehavior();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7848"
+ column="33"/>
</issue>
<issue
@@ -3895,7 +4706,9 @@
errorLine1=" return notification.getAllowSystemGeneratedContextualActions();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="7861"
+ column="33"/>
</issue>
<issue
@@ -3904,7 +4717,9 @@
errorLine1=" mBuilder = new Notification.Builder(b.mContext, b.mChannelId);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="72"
+ column="24"/>
</issue>
<issue
@@ -3913,7 +4728,9 @@
errorLine1=" mBuilder.setSubText(b.mSubText)"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="101"
+ column="22"/>
</issue>
<issue
@@ -3922,7 +4739,9 @@
errorLine1=" .setUsesChronometer(b.mUseChronometer)"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="102"
+ column="22"/>
</issue>
<issue
@@ -3931,7 +4750,9 @@
errorLine1=" .setPriority(b.mPriority);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="103"
+ column="22"/>
</issue>
<issue
@@ -3940,7 +4761,9 @@
errorLine1=" mBuilder.setShowWhen(b.mShowWhen);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="133"
+ column="22"/>
</issue>
<issue
@@ -3949,7 +4772,9 @@
errorLine1=" mBuilder.setLocalOnly(b.mLocalOnly)"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="145"
+ column="22"/>
</issue>
<issue
@@ -3958,7 +4783,9 @@
errorLine1=" .setGroup(b.mGroupKey)"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="146"
+ column="22"/>
</issue>
<issue
@@ -3967,7 +4794,9 @@
errorLine1=" .setGroupSummary(b.mGroupSummary)"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="147"
+ column="22"/>
</issue>
<issue
@@ -3976,7 +4805,9 @@
errorLine1=" .setSortKey(b.mSortKey);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="148"
+ column="22"/>
</issue>
<issue
@@ -3985,7 +4816,9 @@
errorLine1=" mBuilder.setCategory(b.mCategory)"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="153"
+ column="22"/>
</issue>
<issue
@@ -3994,7 +4827,9 @@
errorLine1=" .setColor(b.mColor)"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="154"
+ column="22"/>
</issue>
<issue
@@ -4003,7 +4838,9 @@
errorLine1=" .setVisibility(b.mVisibility)"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="155"
+ column="22"/>
</issue>
<issue
@@ -4012,7 +4849,9 @@
errorLine1=" .setPublicVersion(b.mPublicVersion)"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="156"
+ column="22"/>
</issue>
<issue
@@ -4021,7 +4860,9 @@
errorLine1=" .setSound(n.sound, n.audioAttributes);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="157"
+ column="22"/>
</issue>
<issue
@@ -4030,7 +4871,9 @@
errorLine1=" mBuilder.addPerson(person);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="168"
+ column="30"/>
</issue>
<issue
@@ -4039,7 +4882,9 @@
errorLine1=" mBuilder.setSmallIcon(b.mSmallIcon);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="202"
+ column="26"/>
</issue>
<issue
@@ -4048,7 +4893,9 @@
errorLine1=" mBuilder.setExtras(b.mExtras)"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="206"
+ column="22"/>
</issue>
<issue
@@ -4057,7 +4904,9 @@
errorLine1=" .setRemoteInputHistory(b.mRemoteInputHistory);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="207"
+ column="22"/>
</issue>
<issue
@@ -4066,7 +4915,9 @@
errorLine1=" mBuilder.setCustomContentView(b.mContentView);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="209"
+ column="26"/>
</issue>
<issue
@@ -4075,7 +4926,9 @@
errorLine1=" mBuilder.setCustomBigContentView(b.mBigContentView);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="212"
+ column="26"/>
</issue>
<issue
@@ -4084,7 +4937,9 @@
errorLine1=" mBuilder.setCustomHeadsUpContentView(b.mHeadsUpContentView);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="215"
+ column="26"/>
</issue>
<issue
@@ -4093,7 +4948,9 @@
errorLine1=" mBuilder.setBadgeIconType(b.mBadgeIcon)"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="219"
+ column="22"/>
</issue>
<issue
@@ -4102,7 +4959,9 @@
errorLine1=" .setSettingsText(b.mSettingsText)"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="220"
+ column="22"/>
</issue>
<issue
@@ -4111,7 +4970,9 @@
errorLine1=" .setShortcutId(b.mShortcutId)"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="221"
+ column="22"/>
</issue>
<issue
@@ -4120,7 +4981,9 @@
errorLine1=" .setTimeoutAfter(b.mTimeout)"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="222"
+ column="22"/>
</issue>
<issue
@@ -4129,7 +4992,9 @@
errorLine1=" .setGroupAlertBehavior(b.mGroupAlertBehavior);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="223"
+ column="22"/>
</issue>
<issue
@@ -4138,7 +5003,9 @@
errorLine1=" mBuilder.setColorized(b.mColorized);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="225"
+ column="26"/>
</issue>
<issue
@@ -4147,7 +5014,9 @@
errorLine1=" mBuilder.addPerson(p.toAndroidPerson());"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="237"
+ column="26"/>
</issue>
<issue
@@ -4156,7 +5025,9 @@
errorLine1=" mBuilder.setAllowSystemGeneratedContextualActions("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="241"
+ column="22"/>
</issue>
<issue
@@ -4165,7 +5036,9 @@
errorLine1=" mBuilder.setBubbleMetadata("
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="244"
+ column="22"/>
</issue>
<issue
@@ -4174,7 +5047,9 @@
errorLine1=" mBuilder.setLocusId(b.mLocusId.toLocusId());"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="247"
+ column="26"/>
</issue>
<issue
@@ -4183,7 +5058,9 @@
errorLine1=" mBuilder.setForegroundServiceBehavior(b.mFgsDeferBehavior);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="252"
+ column="26"/>
</issue>
<issue
@@ -4192,7 +5069,9 @@
errorLine1=" mBuilder.setGroup(NotificationCompat.GROUP_KEY_SILENT);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="271"
+ column="30"/>
</issue>
<issue
@@ -4201,7 +5080,9 @@
errorLine1=" mBuilder.setGroupAlertBehavior(mGroupAlertBehavior);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="273"
+ column="26"/>
</issue>
<issue
@@ -4210,7 +5091,9 @@
errorLine1=" actionBuilder = new Notification.Action.Builder("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="358"
+ column="33"/>
</issue>
<issue
@@ -4219,7 +5102,9 @@
errorLine1=" actionBuilder = new Notification.Action.Builder("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="363"
+ column="33"/>
</issue>
<issue
@@ -4228,7 +5113,9 @@
errorLine1=" actionBuilder.addRemoteInput(remoteInput);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="371"
+ column="35"/>
</issue>
<issue
@@ -4237,7 +5124,9 @@
errorLine1=" actionBuilder.setAllowGeneratedReplies(action.getAllowGeneratedReplies());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="383"
+ column="31"/>
</issue>
<issue
@@ -4246,7 +5135,9 @@
errorLine1=" actionBuilder.setSemanticAction(action.getSemanticAction());"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="389"
+ column="31"/>
</issue>
<issue
@@ -4255,7 +5146,9 @@
errorLine1=" actionBuilder.setContextual(action.isContextual());"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="393"
+ column="31"/>
</issue>
<issue
@@ -4264,7 +5157,9 @@
errorLine1=" actionBuilder.setAuthenticationRequired(action.isAuthenticationRequired());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="397"
+ column="31"/>
</issue>
<issue
@@ -4273,7 +5168,9 @@
errorLine1=" actionBuilder.addExtras(actionExtras);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="402"
+ column="27"/>
</issue>
<issue
@@ -4282,7 +5179,9 @@
errorLine1=" mBuilder.addAction(actionBuilder.build());"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="403"
+ column="22"/>
</issue>
<issue
@@ -4291,7 +5190,9 @@
errorLine1=" mBuilder.addAction(actionBuilder.build());"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="403"
+ column="46"/>
</issue>
<issue
@@ -4300,7 +5201,9 @@
errorLine1=" return mBuilder.build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="413"
+ column="29"/>
</issue>
<issue
@@ -4309,7 +5212,9 @@
errorLine1=" Notification notification = mBuilder.build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="415"
+ column="51"/>
</issue>
<issue
@@ -4318,7 +5223,9 @@
errorLine1=" if (notification.getGroup() != null"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="419"
+ column="34"/>
</issue>
<issue
@@ -4327,7 +5234,9 @@
errorLine1=" if (notification.getGroup() != null"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="425"
+ column="34"/>
</issue>
<issue
@@ -4336,7 +5245,9 @@
errorLine1=" mBuilder.setExtras(mExtras);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="434"
+ column="22"/>
</issue>
<issue
@@ -4345,7 +5256,9 @@
errorLine1=" Notification notification = mBuilder.build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="435"
+ column="50"/>
</issue>
<issue
@@ -4354,7 +5267,9 @@
errorLine1=" if (notification.getGroup() != null"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="448"
+ column="34"/>
</issue>
<issue
@@ -4363,7 +5278,9 @@
errorLine1=" if (notification.getGroup() != null"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="454"
+ column="34"/>
</issue>
<issue
@@ -4372,7 +5289,9 @@
errorLine1=" mBuilder.setExtras(mExtras);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="462"
+ column="22"/>
</issue>
<issue
@@ -4381,7 +5300,9 @@
errorLine1=" Notification notification = mBuilder.build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="463"
+ column="50"/>
</issue>
<issue
@@ -4390,7 +5311,9 @@
errorLine1=" if (notification.getGroup() != null"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="473"
+ column="34"/>
</issue>
<issue
@@ -4399,7 +5322,9 @@
errorLine1=" if (notification.getGroup() != null"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="479"
+ column="34"/>
</issue>
<issue
@@ -4408,7 +5333,9 @@
errorLine1=" mBuilder.setExtras(mExtras);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="495"
+ column="22"/>
</issue>
<issue
@@ -4417,7 +5344,9 @@
errorLine1=" Notification notification = mBuilder.build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="496"
+ column="50"/>
</issue>
<issue
@@ -4426,7 +5355,9 @@
errorLine1=" Notification notification = mBuilder.build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+ line="505"
+ column="50"/>
</issue>
<issue
@@ -4435,7 +5366,9 @@
errorLine1=" return mNotificationManager.areNotificationsEnabled();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="232"
+ column="41"/>
</issue>
<issue
@@ -4444,7 +5377,9 @@
errorLine1=" return mNotificationManager.getImportance();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="263"
+ column="41"/>
</issue>
<issue
@@ -4453,7 +5388,9 @@
errorLine1=" mNotificationManager.createNotificationChannel(channel);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="291"
+ column="34"/>
</issue>
<issue
@@ -4462,7 +5399,9 @@
errorLine1=" mNotificationManager.createNotificationChannelGroup(group);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="330"
+ column="34"/>
</issue>
<issue
@@ -4471,7 +5410,9 @@
errorLine1=" mNotificationManager.createNotificationChannels(channels);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="357"
+ column="34"/>
</issue>
<issue
@@ -4480,7 +5421,9 @@
errorLine1=" mNotificationManager.createNotificationChannels(platformChannels);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="376"
+ column="34"/>
</issue>
<issue
@@ -4489,7 +5432,9 @@
errorLine1=" mNotificationManager.createNotificationChannelGroups(groups);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="390"
+ column="34"/>
</issue>
<issue
@@ -4498,7 +5443,9 @@
errorLine1=" mNotificationManager.createNotificationChannelGroups(platformGroups);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="409"
+ column="34"/>
</issue>
<issue
@@ -4507,7 +5454,9 @@
errorLine1=" mNotificationManager.deleteNotificationChannel(channelId);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="424"
+ column="34"/>
</issue>
<issue
@@ -4516,7 +5465,9 @@
errorLine1=" mNotificationManager.deleteNotificationChannelGroup(groupId);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="436"
+ column="34"/>
</issue>
<issue
@@ -4525,7 +5476,9 @@
errorLine1=" for (NotificationChannel channel : mNotificationManager.getNotificationChannels()) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="451"
+ column="69"/>
</issue>
<issue
@@ -4534,7 +5487,9 @@
errorLine1=" if (channelIds.contains(channel.getId())) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="452"
+ column="49"/>
</issue>
<issue
@@ -4543,7 +5498,9 @@
errorLine1=" && channelIds.contains(channel.getParentChannelId())) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="456"
+ column="56"/>
</issue>
<issue
@@ -4552,7 +5509,9 @@
errorLine1=" mNotificationManager.deleteNotificationChannel(channel.getId());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="459"
+ column="38"/>
</issue>
<issue
@@ -4561,7 +5520,9 @@
errorLine1=" mNotificationManager.deleteNotificationChannel(channel.getId());"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="459"
+ column="72"/>
</issue>
<issue
@@ -4570,7 +5531,9 @@
errorLine1=" return mNotificationManager.getNotificationChannel(channelId);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="472"
+ column="41"/>
</issue>
<issue
@@ -4579,7 +5542,9 @@
errorLine1=" return mNotificationManager.getNotificationChannel(channelId, conversationId);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="505"
+ column="41"/>
</issue>
<issue
@@ -4588,7 +5553,9 @@
errorLine1=" return mNotificationManager.getNotificationChannelGroup(channelGroupId);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="538"
+ column="41"/>
</issue>
<issue
@@ -4597,7 +5564,9 @@
errorLine1=" if (group.getId().equals(channelGroupId)) return group;"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="542"
+ column="27"/>
</issue>
<issue
@@ -4606,7 +5575,9 @@
errorLine1=" return mNotificationManager.getNotificationChannels();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="580"
+ column="41"/>
</issue>
<issue
@@ -4615,7 +5586,9 @@
errorLine1=" return mNotificationManager.getNotificationChannelGroups();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationManagerCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationManagerCompat.java"
+ line="612"
+ column="41"/>
</issue>
<issue
@@ -4624,7 +5597,9 @@
errorLine1=" mWrapped = new PrecomputedText.Params.Builder(paint)"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="198"
+ column="28"/>
</issue>
<issue
@@ -4633,7 +5608,9 @@
errorLine1=" .setBreakStrategy(strategy)"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="199"
+ column="26"/>
</issue>
<issue
@@ -4642,7 +5619,9 @@
errorLine1=" .setHyphenationFrequency(frequency)"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="200"
+ column="26"/>
</issue>
<issue
@@ -4651,7 +5630,9 @@
errorLine1=" .setTextDirection(textDir)"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="201"
+ column="26"/>
</issue>
<issue
@@ -4660,7 +5641,9 @@
errorLine1=" .build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="202"
+ column="26"/>
</issue>
<issue
@@ -4669,7 +5652,9 @@
errorLine1=" mPaint = wrapped.getTextPaint();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="214"
+ column="30"/>
</issue>
<issue
@@ -4678,7 +5663,9 @@
errorLine1=" mTextDir = wrapped.getTextDirection();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="215"
+ column="32"/>
</issue>
<issue
@@ -4687,7 +5674,9 @@
errorLine1=" mBreakStrategy = wrapped.getBreakStrategy();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="216"
+ column="38"/>
</issue>
<issue
@@ -4696,7 +5685,9 @@
errorLine1=" mHyphenationFrequency = wrapped.getHyphenationFrequency();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="217"
+ column="45"/>
</issue>
<issue
@@ -4705,7 +5696,9 @@
errorLine1=" if (mPaint.getLetterSpacing() != other.getTextPaint().getLetterSpacing()) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="293"
+ column="28"/>
</issue>
<issue
@@ -4714,7 +5707,9 @@
errorLine1=" if (mPaint.getLetterSpacing() != other.getTextPaint().getLetterSpacing()) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="293"
+ column="71"/>
</issue>
<issue
@@ -4723,7 +5718,9 @@
errorLine1=" if (!TextUtils.equals(mPaint.getFontFeatureSettings(),"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="296"
+ column="46"/>
</issue>
<issue
@@ -4732,7 +5729,9 @@
errorLine1=" other.getTextPaint().getFontFeatureSettings())) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="297"
+ column="46"/>
</issue>
<issue
@@ -4741,7 +5740,9 @@
errorLine1=" if (!mPaint.getTextLocales().equals(other.getTextPaint().getTextLocales())) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="305"
+ column="29"/>
</issue>
<issue
@@ -4750,7 +5751,9 @@
errorLine1=" if (!mPaint.getTextLocales().equals(other.getTextPaint().getTextLocales())) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="305"
+ column="74"/>
</issue>
<issue
@@ -4759,7 +5762,9 @@
errorLine1=" if (!mPaint.getTextLocale().equals(other.getTextPaint().getTextLocale())) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="309"
+ column="29"/>
</issue>
<issue
@@ -4768,7 +5773,9 @@
errorLine1=" if (!mPaint.getTextLocale().equals(other.getTextPaint().getTextLocale())) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="309"
+ column="73"/>
</issue>
<issue
@@ -4777,7 +5784,9 @@
errorLine1=" mPaint.getTextSkewX(), mPaint.getLetterSpacing(), mPaint.getFlags(),"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="353"
+ column="55"/>
</issue>
<issue
@@ -4786,7 +5795,9 @@
errorLine1=" mPaint.getTextLocales(), mPaint.getTypeface(), mPaint.isElegantTextHeight(),"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="354"
+ column="79"/>
</issue>
<issue
@@ -4795,7 +5806,9 @@
errorLine1=" mPaint.getTextLocales(), mPaint.getTypeface(), mPaint.isElegantTextHeight(),"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="354"
+ column="32"/>
</issue>
<issue
@@ -4804,7 +5817,9 @@
errorLine1=" mPaint.getTextSkewX(), mPaint.getLetterSpacing(), mPaint.getFlags(),"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="358"
+ column="55"/>
</issue>
<issue
@@ -4813,7 +5828,9 @@
errorLine1=" mPaint.getTextLocale(), mPaint.getTypeface(), mPaint.isElegantTextHeight(),"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="359"
+ column="32"/>
</issue>
<issue
@@ -4822,7 +5839,9 @@
errorLine1=" mPaint.getTextLocale(), mPaint.getTypeface(), mPaint.isElegantTextHeight(),"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="359"
+ column="78"/>
</issue>
<issue
@@ -4831,7 +5850,9 @@
errorLine1=" mPaint.getTextSkewX(), mPaint.getFlags(), mPaint.getTextLocale(),"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="363"
+ column="74"/>
</issue>
<issue
@@ -4840,7 +5861,9 @@
errorLine1=" mPaint.getTextSkewX(), mPaint.getFlags(), mPaint.getTextLocale(),"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="367"
+ column="74"/>
</issue>
<issue
@@ -4849,7 +5872,9 @@
errorLine1=" sb.append(", letterSpacing=" + mPaint.getLetterSpacing());"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="383"
+ column="55"/>
</issue>
<issue
@@ -4858,7 +5883,9 @@
errorLine1=" sb.append(", elegantTextHeight=" + mPaint.isElegantTextHeight());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="384"
+ column="59"/>
</issue>
<issue
@@ -4867,7 +5894,9 @@
errorLine1=" sb.append(", textLocale=" + mPaint.getTextLocales());"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="387"
+ column="52"/>
</issue>
<issue
@@ -4876,7 +5905,9 @@
errorLine1=" sb.append(", textLocale=" + mPaint.getTextLocale());"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="389"
+ column="52"/>
</issue>
<issue
@@ -4885,7 +5916,9 @@
errorLine1=" sb.append(", variationSettings=" + mPaint.getFontVariationSettings());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="393"
+ column="59"/>
</issue>
<issue
@@ -4894,7 +5927,9 @@
errorLine1=" PrecomputedText.create(text, params.mWrapped), params);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="439"
+ column="41"/>
</issue>
<issue
@@ -4903,7 +5938,9 @@
errorLine1=" StaticLayout.Builder.obtain(text, 0, text.length(), params.getTextPaint(),"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="467"
+ column="38"/>
</issue>
<issue
@@ -4912,7 +5949,9 @@
errorLine1=" .setBreakStrategy(params.getBreakStrategy())"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="469"
+ column="26"/>
</issue>
<issue
@@ -4921,7 +5960,9 @@
errorLine1=" .setHyphenationFrequency(params.getHyphenationFrequency())"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="470"
+ column="26"/>
</issue>
<issue
@@ -4930,7 +5971,9 @@
errorLine1=" .setTextDirection(params.getTextDirection())"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="471"
+ column="26"/>
</issue>
<issue
@@ -4939,7 +5982,9 @@
errorLine1=" .build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="472"
+ column="26"/>
</issue>
<issue
@@ -4948,7 +5993,9 @@
errorLine1=" return mWrapped.getParagraphCount();"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="530"
+ column="29"/>
</issue>
<issue
@@ -4957,7 +6004,9 @@
errorLine1=" return mWrapped.getParagraphStart(paraIndex);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="542"
+ column="29"/>
</issue>
<issue
@@ -4966,7 +6015,9 @@
errorLine1=" return mWrapped.getParagraphEnd(paraIndex);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="554"
+ column="29"/>
</issue>
<issue
@@ -4975,7 +6026,9 @@
errorLine1=" ShortcutInfo.Builder builder = new ShortcutInfo.Builder(mContext, mId)"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="126"
+ column="40"/>
</issue>
<issue
@@ -4984,7 +6037,9 @@
errorLine1=" .setShortLabel(mLabel)"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="127"
+ column="18"/>
</issue>
<issue
@@ -4993,7 +6048,9 @@
errorLine1=" .setIntents(mIntents);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="128"
+ column="18"/>
</issue>
<issue
@@ -5002,7 +6059,9 @@
errorLine1=" builder.setIcon(mIcon.toIcon(mContext));"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="130"
+ column="21"/>
</issue>
<issue
@@ -5011,7 +6070,9 @@
errorLine1=" builder.setLongLabel(mLongLabel);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="133"
+ column="21"/>
</issue>
<issue
@@ -5020,7 +6081,9 @@
errorLine1=" builder.setDisabledMessage(mDisabledMessage);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="136"
+ column="21"/>
</issue>
<issue
@@ -5029,7 +6092,9 @@
errorLine1=" builder.setActivity(mActivity);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="139"
+ column="21"/>
</issue>
<issue
@@ -5038,7 +6103,9 @@
errorLine1=" builder.setCategories(mCategories);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="142"
+ column="21"/>
</issue>
<issue
@@ -5047,7 +6114,9 @@
errorLine1=" builder.setRank(mRank);"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="144"
+ column="17"/>
</issue>
<issue
@@ -5056,7 +6125,9 @@
errorLine1=" builder.setExtras(mExtras);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="146"
+ column="21"/>
</issue>
<issue
@@ -5065,7 +6136,9 @@
errorLine1=" builder.setPersons(persons);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="154"
+ column="25"/>
</issue>
<issue
@@ -5074,7 +6147,9 @@
errorLine1=" builder.setLocusId(mLocusId.toLocusId());"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="157"
+ column="25"/>
</issue>
<issue
@@ -5083,7 +6158,9 @@
errorLine1=" builder.setLongLived(mIsLongLived);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="159"
+ column="21"/>
</issue>
<issue
@@ -5092,7 +6169,9 @@
errorLine1=" builder.setExtras(buildLegacyExtrasBundle());"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="164"
+ column="21"/>
</issue>
<issue
@@ -5101,7 +6180,9 @@
errorLine1=" return builder.build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="166"
+ column="24"/>
</issue>
<issue
@@ -5110,7 +6191,9 @@
errorLine1=" mExtras = new PersistableBundle();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="176"
+ column="23"/>
</issue>
<issue
@@ -5119,7 +6202,9 @@
errorLine1=" mExtras.putInt(EXTRA_PERSON_COUNT, mPersons.length);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="179"
+ column="21"/>
</issue>
<issue
@@ -5128,7 +6213,9 @@
errorLine1=" mExtras.putPersistableBundle(EXTRA_PERSON_ + (i + 1),"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="181"
+ column="25"/>
</issue>
<issue
@@ -5137,7 +6224,9 @@
errorLine1=" mExtras.putString(EXTRA_LOCUS_ID, mLocusId.getId());"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="186"
+ column="21"/>
</issue>
<issue
@@ -5146,7 +6235,9 @@
errorLine1=" mExtras.putBoolean(EXTRA_LONG_LIVED, mIsLongLived);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="188"
+ column="17"/>
</issue>
<issue
@@ -5155,7 +6246,9 @@
errorLine1=" if (bundle == null || !bundle.containsKey(EXTRA_PERSON_COUNT)) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="355"
+ column="39"/>
</issue>
<issue
@@ -5164,7 +6257,9 @@
errorLine1=" int personsLength = bundle.getInt(EXTRA_PERSON_COUNT);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="359"
+ column="36"/>
</issue>
<issue
@@ -5173,7 +6268,9 @@
errorLine1=" bundle.getPersistableBundle(EXTRA_PERSON_ + (i + 1)));"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="363"
+ column="28"/>
</issue>
<issue
@@ -5182,7 +6279,9 @@
errorLine1=" if (bundle == null || !bundle.containsKey(EXTRA_LONG_LIVED)) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="375"
+ column="39"/>
</issue>
<issue
@@ -5191,7 +6290,9 @@
errorLine1=" return bundle.getBoolean(EXTRA_LONG_LIVED);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="378"
+ column="23"/>
</issue>
<issue
@@ -5200,7 +6301,9 @@
errorLine1=" if (shortcutInfo.getLocusId() == null) return null;"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="503"
+ column="30"/>
</issue>
<issue
@@ -5209,7 +6312,9 @@
errorLine1=" return LocusIdCompat.toLocusIdCompat(shortcutInfo.getLocusId());"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="504"
+ column="63"/>
</issue>
<issue
@@ -5218,7 +6323,9 @@
errorLine1=" return getLocusIdFromExtra(shortcutInfo.getExtras());"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="506"
+ column="53"/>
</issue>
<issue
@@ -5227,7 +6334,9 @@
errorLine1=" final String locusId = bundle.getString(EXTRA_LOCUS_ID);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="535"
+ column="39"/>
</issue>
<issue
@@ -5236,7 +6345,9 @@
errorLine1=" mInfo.mId = shortcutInfo.getId();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="605"
+ column="38"/>
</issue>
<issue
@@ -5245,7 +6356,9 @@
errorLine1=" mInfo.mPackageName = shortcutInfo.getPackage();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="606"
+ column="47"/>
</issue>
<issue
@@ -5254,7 +6367,9 @@
errorLine1=" Intent[] intents = shortcutInfo.getIntents();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="607"
+ column="45"/>
</issue>
<issue
@@ -5263,7 +6378,9 @@
errorLine1=" mInfo.mActivity = shortcutInfo.getActivity();"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="609"
+ column="44"/>
</issue>
<issue
@@ -5272,7 +6389,9 @@
errorLine1=" mInfo.mLabel = shortcutInfo.getShortLabel();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="610"
+ column="41"/>
</issue>
<issue
@@ -5281,7 +6400,9 @@
errorLine1=" mInfo.mLongLabel = shortcutInfo.getLongLabel();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="611"
+ column="45"/>
</issue>
<issue
@@ -5290,7 +6411,9 @@
errorLine1=" mInfo.mDisabledMessage = shortcutInfo.getDisabledMessage();"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="612"
+ column="51"/>
</issue>
<issue
@@ -5299,7 +6422,9 @@
errorLine1=" mInfo.mDisabledReason = shortcutInfo.getDisabledReason();"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="614"
+ column="54"/>
</issue>
<issue
@@ -5308,7 +6433,9 @@
errorLine1=" mInfo.mDisabledReason = shortcutInfo.isEnabled()"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="616"
+ column="54"/>
</issue>
<issue
@@ -5317,7 +6444,9 @@
errorLine1=" mInfo.mCategories = shortcutInfo.getCategories();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="620"
+ column="46"/>
</issue>
<issue
@@ -5326,7 +6455,9 @@
errorLine1=" mInfo.mPersons = ShortcutInfoCompat.getPersonsFromExtra(shortcutInfo.getExtras());"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="621"
+ column="82"/>
</issue>
<issue
@@ -5335,7 +6466,9 @@
errorLine1=" mInfo.mUser = shortcutInfo.getUserHandle();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="622"
+ column="40"/>
</issue>
<issue
@@ -5344,7 +6477,9 @@
errorLine1=" mInfo.mLastChangedTimestamp = shortcutInfo.getLastChangedTimestamp();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="623"
+ column="56"/>
</issue>
<issue
@@ -5353,7 +6488,9 @@
errorLine1=" mInfo.mIsCached = shortcutInfo.isCached();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="625"
+ column="48"/>
</issue>
<issue
@@ -5362,7 +6499,9 @@
errorLine1=" mInfo.mIsDynamic = shortcutInfo.isDynamic();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="627"
+ column="45"/>
</issue>
<issue
@@ -5371,7 +6510,9 @@
errorLine1=" mInfo.mIsPinned = shortcutInfo.isPinned();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="628"
+ column="44"/>
</issue>
<issue
@@ -5380,7 +6521,9 @@
errorLine1=" mInfo.mIsDeclaredInManifest = shortcutInfo.isDeclaredInManifest();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="629"
+ column="56"/>
</issue>
<issue
@@ -5389,7 +6532,9 @@
errorLine1=" mInfo.mIsImmutable = shortcutInfo.isImmutable();"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="630"
+ column="47"/>
</issue>
<issue
@@ -5398,7 +6543,9 @@
errorLine1=" mInfo.mIsEnabled = shortcutInfo.isEnabled();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="631"
+ column="45"/>
</issue>
<issue
@@ -5407,7 +6554,9 @@
errorLine1=" mInfo.mHasKeyFieldsOnly = shortcutInfo.hasKeyFieldsOnly();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="632"
+ column="52"/>
</issue>
<issue
@@ -5416,7 +6565,9 @@
errorLine1=" mInfo.mRank = shortcutInfo.getRank();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="634"
+ column="40"/>
</issue>
<issue
@@ -5425,7 +6576,9 @@
errorLine1=" mInfo.mExtras = shortcutInfo.getExtras();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="635"
+ column="42"/>
</issue>
<issue
@@ -5434,7 +6587,9 @@
errorLine1=" mInfo.mExtras = new PersistableBundle();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="984"
+ column="41"/>
</issue>
<issue
@@ -5443,7 +6598,9 @@
errorLine1=" mInfo.mExtras.putStringArray("
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="991"
+ column="39"/>
</issue>
<issue
@@ -5452,7 +6609,9 @@
errorLine1=" mInfo.mExtras.putStringArray(capability + "/" + paramName,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="997"
+ column="43"/>
</issue>
<issue
@@ -5461,7 +6620,9 @@
errorLine1=" mInfo.mExtras = new PersistableBundle();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="1004"
+ column="41"/>
</issue>
<issue
@@ -5470,7 +6631,9 @@
errorLine1=" mInfo.mExtras.putString(EXTRA_SLICE_URI, UriCompat.toSafeString(mSliceUri));"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="1006"
+ column="35"/>
</issue>
<issue
@@ -5479,7 +6642,9 @@
errorLine1=" return context.getSystemService(ShortcutManager.class).isRequestPinShortcutSupported();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="155"
+ column="28"/>
</issue>
<issue
@@ -5488,7 +6653,9 @@
errorLine1=" return context.getSystemService(ShortcutManager.class).isRequestPinShortcutSupported();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="155"
+ column="68"/>
</issue>
<issue
@@ -5497,7 +6664,9 @@
errorLine1=" return context.getSystemService(ShortcutManager.class).requestPinShortcut("
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="197"
+ column="28"/>
</issue>
<issue
@@ -5506,7 +6675,9 @@
errorLine1=" return context.getSystemService(ShortcutManager.class).requestPinShortcut("
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="197"
+ column="68"/>
</issue>
<issue
@@ -5515,7 +6686,9 @@
errorLine1=" result = context.getSystemService(ShortcutManager.class)"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="241"
+ column="30"/>
</issue>
<issue
@@ -5524,7 +6697,9 @@
errorLine1=" .createShortcutResultIntent(shortcut.toShortcutInfo());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="242"
+ column="22"/>
</issue>
<issue
@@ -5533,7 +6708,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).getShortcuts(matchFlags);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="282"
+ column="29"/>
</issue>
<issue
@@ -5542,7 +6719,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).getShortcuts(matchFlags);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="282"
+ column="69"/>
</issue>
<issue
@@ -5551,7 +6730,9 @@
errorLine1=" final ShortcutManager manager = context.getSystemService(ShortcutManager.class);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="285"
+ column="53"/>
</issue>
<issue
@@ -5560,7 +6741,9 @@
errorLine1=" shortcuts.addAll(manager.getManifestShortcuts());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="288"
+ column="42"/>
</issue>
<issue
@@ -5569,7 +6752,9 @@
errorLine1=" shortcuts.addAll(manager.getDynamicShortcuts());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="291"
+ column="42"/>
</issue>
<issue
@@ -5578,7 +6763,9 @@
errorLine1=" shortcuts.addAll(manager.getPinnedShortcuts());"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="294"
+ column="42"/>
</issue>
<issue
@@ -5587,7 +6774,9 @@
errorLine1=" if (!context.getSystemService(ShortcutManager.class).addDynamicShortcuts(shortcuts)) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="335"
+ column="26"/>
</issue>
<issue
@@ -5596,7 +6785,9 @@
errorLine1=" if (!context.getSystemService(ShortcutManager.class).addDynamicShortcuts(shortcuts)) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="335"
+ column="66"/>
</issue>
<issue
@@ -5605,7 +6796,9 @@
errorLine1=" return context.getSystemService(ShortcutManager.class).getMaxShortcutCountPerActivity();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="354"
+ column="28"/>
</issue>
<issue
@@ -5614,7 +6807,9 @@
errorLine1=" return context.getSystemService(ShortcutManager.class).getMaxShortcutCountPerActivity();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="354"
+ column="68"/>
</issue>
<issue
@@ -5623,7 +6818,9 @@
errorLine1=" return context.getSystemService(ShortcutManager.class).isRateLimitingActive();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="371"
+ column="28"/>
</issue>
<issue
@@ -5632,7 +6829,9 @@
errorLine1=" return context.getSystemService(ShortcutManager.class).isRateLimitingActive();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="371"
+ column="68"/>
</issue>
<issue
@@ -5641,7 +6840,9 @@
errorLine1=" return context.getSystemService(ShortcutManager.class).getIconMaxWidth();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="391"
+ column="28"/>
</issue>
<issue
@@ -5650,7 +6851,9 @@
errorLine1=" return context.getSystemService(ShortcutManager.class).getIconMaxWidth();"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="391"
+ column="68"/>
</issue>
<issue
@@ -5659,7 +6862,9 @@
errorLine1=" return context.getSystemService(ShortcutManager.class).getIconMaxHeight();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="402"
+ column="28"/>
</issue>
<issue
@@ -5668,7 +6873,9 @@
errorLine1=" return context.getSystemService(ShortcutManager.class).getIconMaxHeight();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="402"
+ column="68"/>
</issue>
<issue
@@ -5677,7 +6884,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).reportShortcutUsed(shortcutId);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="429"
+ column="21"/>
</issue>
<issue
@@ -5686,7 +6895,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).reportShortcutUsed(shortcutId);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="429"
+ column="61"/>
</issue>
<issue
@@ -5695,7 +6906,9 @@
errorLine1=" if (!context.getSystemService(ShortcutManager.class).setDynamicShortcuts(shortcuts)) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="472"
+ column="26"/>
</issue>
<issue
@@ -5704,7 +6917,9 @@
errorLine1=" if (!context.getSystemService(ShortcutManager.class).setDynamicShortcuts(shortcuts)) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="472"
+ column="66"/>
</issue>
<issue
@@ -5713,7 +6928,9 @@
errorLine1=" List<ShortcutInfo> shortcuts = context.getSystemService("
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="496"
+ column="52"/>
</issue>
<issue
@@ -5722,7 +6939,9 @@
errorLine1=" ShortcutManager.class).getDynamicShortcuts();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="497"
+ column="44"/>
</issue>
<issue
@@ -5731,7 +6950,9 @@
errorLine1=" if (!context.getSystemService(ShortcutManager.class).updateShortcuts(shortcuts)) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="540"
+ column="26"/>
</issue>
<issue
@@ -5740,7 +6961,9 @@
errorLine1=" if (!context.getSystemService(ShortcutManager.class).updateShortcuts(shortcuts)) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="540"
+ column="66"/>
</issue>
<issue
@@ -5749,7 +6972,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class)"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="607"
+ column="21"/>
</issue>
<issue
@@ -5758,7 +6983,9 @@
errorLine1=" .disableShortcuts(shortcutIds, disabledMessage);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="608"
+ column="22"/>
</issue>
<issue
@@ -5767,7 +6994,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).enableShortcuts(shortcutIds);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="642"
+ column="21"/>
</issue>
<issue
@@ -5776,7 +7005,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).enableShortcuts(shortcutIds);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="642"
+ column="61"/>
</issue>
<issue
@@ -5785,7 +7016,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).removeDynamicShortcuts(shortcutIds);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="661"
+ column="21"/>
</issue>
<issue
@@ -5794,7 +7027,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).removeDynamicShortcuts(shortcutIds);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="661"
+ column="61"/>
</issue>
<issue
@@ -5803,7 +7038,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).removeAllDynamicShortcuts();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="679"
+ column="21"/>
</issue>
<issue
@@ -5812,7 +7049,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).removeAllDynamicShortcuts();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="679"
+ column="61"/>
</issue>
<issue
@@ -5821,7 +7060,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).removeLongLivedShortcuts(shortcutIds);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="706"
+ column="17"/>
</issue>
<issue
@@ -5830,7 +7071,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).removeLongLivedShortcuts(shortcutIds);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="706"
+ column="57"/>
</issue>
<issue
@@ -5839,7 +7082,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).pushDynamicShortcut("
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="766"
+ column="21"/>
</issue>
<issue
@@ -5848,7 +7093,9 @@
errorLine1=" context.getSystemService(ShortcutManager.class).pushDynamicShortcut("
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="766"
+ column="61"/>
</issue>
<issue
@@ -5857,7 +7104,9 @@
errorLine1=" final ShortcutManager sm = context.getSystemService(ShortcutManager.class);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="769"
+ column="48"/>
</issue>
<issue
@@ -5866,7 +7115,9 @@
errorLine1=" if (sm.isRateLimitingActive()) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="770"
+ column="20"/>
</issue>
<issue
@@ -5875,7 +7126,9 @@
errorLine1=" final List<ShortcutInfo> shortcuts = sm.getDynamicShortcuts();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="773"
+ column="53"/>
</issue>
<issue
@@ -5884,7 +7137,9 @@
errorLine1=" sm.removeDynamicShortcuts(Arrays.asList("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="775"
+ column="20"/>
</issue>
<issue
@@ -5893,7 +7148,9 @@
errorLine1=" sm.addDynamicShortcuts(Arrays.asList(shortcut.toShortcutInfo()));"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="778"
+ column="16"/>
</issue>
<issue
@@ -5902,7 +7159,9 @@
errorLine1=" Build.VERSION.SDK_INT < 19 || am == null || am.isLowRamDevice();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java"
+ line="833"
+ column="64"/>
</issue>
<issue
@@ -5911,7 +7170,9 @@
errorLine1=" textView.setTextAppearance(resId);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/widget/TextViewCompat.java"/>
+ file="src/main/java/androidx/core/widget/TextViewCompat.java"
+ line="289"
+ column="22"/>
</issue>
<issue
@@ -5920,7 +7181,9 @@
errorLine1="public class NotificationCompat {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="82"
+ column="14"/>
</issue>
<issue
@@ -5929,9 +7192,13 @@
errorLine1=" public AccessibilityNodeInfoCompat getParent() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2166"
+ column="40"/>
<location
file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2181"
+ column="17"
message="Setter here"/>
</issue>
@@ -5941,9 +7208,13 @@
errorLine1=" public CollectionInfoCompat getCollectionInfo() {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2990"
+ column="33"/>
<location
file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3000"
+ column="17"
message="Setter here"/>
</issue>
@@ -5953,9 +7224,13 @@
errorLine1=" public CollectionItemInfoCompat getCollectionItemInfo() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3023"
+ column="37"/>
<location
file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3009"
+ column="17"
message="Setter here"/>
</issue>
@@ -5965,9 +7240,13 @@
errorLine1=" public AccessibilityNodeInfoCompat getLabelFor() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3264"
+ column="40"/>
<location
file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3227"
+ column="17"
message="Setter here"/>
</issue>
@@ -5977,9 +7256,13 @@
errorLine1=" public AccessibilityNodeInfoCompat getLabeledBy() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3320"
+ column="40"/>
<location
file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3278"
+ column="17"
message="Setter here"/>
</issue>
@@ -5989,7 +7272,9 @@
errorLine1=" public boolean canOpenPopup() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3333"
+ column="20"/>
</issue>
<issue
@@ -5998,9 +7283,13 @@
errorLine1=" public AccessibilityNodeInfoCompat getTraversalBefore() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3577"
+ column="40"/>
<location
file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3599"
+ column="17"
message="Setter here"/>
</issue>
@@ -6010,9 +7299,13 @@
errorLine1=" public AccessibilityNodeInfoCompat getTraversalAfter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3642"
+ column="40"/>
<location
file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3664"
+ column="17"
message="Setter here"/>
</issue>
@@ -6022,7 +7315,9 @@
errorLine1=" public boolean hasMipMap() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"/>
+ file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"
+ line="181"
+ column="20"/>
</issue>
<issue
@@ -6031,7 +7326,9 @@
errorLine1=" public boolean hasAntiAlias() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"/>
+ file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"
+ line="205"
+ column="20"/>
</issue>
<issue
@@ -6040,7 +7337,9 @@
errorLine1=" @Nullable Object token, long delayMillis) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/os/HandlerCompat.java"/>
+ file="src/main/java/androidx/core/os/HandlerCompat.java"
+ line="181"
+ column="37"/>
</issue>
<issue
@@ -6049,7 +7348,9 @@
errorLine1=" public <T> T postAndWait(final Callable<T> callable, int timeoutMillis)"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/provider/SelfDestructiveThread.java"/>
+ file="src/main/java/androidx/core/provider/SelfDestructiveThread.java"
+ line="169"
+ column="58"/>
</issue>
<issue
@@ -6058,7 +7359,9 @@
errorLine1=" public AccessibilityActionCompat(int actionId, CharSequence label) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="610"
+ column="56"/>
</issue>
<issue
@@ -6067,7 +7370,9 @@
errorLine1=" public AccessibilityActionCompat(int actionId, CharSequence label,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="623"
+ column="56"/>
</issue>
<issue
@@ -6076,7 +7381,9 @@
errorLine1=" AccessibilityViewCommand command) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="624"
+ column="17"/>
</issue>
<issue
@@ -6085,7 +7392,9 @@
errorLine1=" public CharSequence getLabel() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="669"
+ column="16"/>
</issue>
<issue
@@ -6094,7 +7403,9 @@
errorLine1=" public boolean perform(View view, Bundle arguments) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="685"
+ column="32"/>
</issue>
<issue
@@ -6103,7 +7414,9 @@
errorLine1=" public boolean perform(View view, Bundle arguments) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="685"
+ column="43"/>
</issue>
<issue
@@ -6112,7 +7425,9 @@
errorLine1=" public AccessibilityActionCompat createReplacementAction(CharSequence label,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="709"
+ column="16"/>
</issue>
<issue
@@ -6121,7 +7436,9 @@
errorLine1=" public AccessibilityActionCompat createReplacementAction(CharSequence label,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="709"
+ column="66"/>
</issue>
<issue
@@ -6130,7 +7447,9 @@
errorLine1=" AccessibilityViewCommand command) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="710"
+ column="17"/>
</issue>
<issue
@@ -6139,7 +7458,9 @@
errorLine1=" public static CollectionInfoCompat obtain(int rowCount, int columnCount,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="779"
+ column="23"/>
</issue>
<issue
@@ -6148,7 +7469,9 @@
errorLine1=" public static CollectionInfoCompat obtain(int rowCount, int columnCount,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="801"
+ column="23"/>
</issue>
<issue
@@ -6157,7 +7480,9 @@
errorLine1=" public static CollectionItemInfoCompat obtain(int rowIndex, int rowSpan,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="900"
+ column="23"/>
</issue>
<issue
@@ -6166,7 +7491,9 @@
errorLine1=" public static CollectionItemInfoCompat obtain(int rowIndex, int rowSpan,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="925"
+ column="23"/>
</issue>
<issue
@@ -6175,7 +7502,9 @@
errorLine1=" public static RangeInfoCompat obtain(int type, float min, float max, float current) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1042"
+ column="23"/>
</issue>
<issue
@@ -6184,7 +7513,9 @@
errorLine1=" public static AccessibilityNodeInfoCompat wrap(@NonNull AccessibilityNodeInfo info) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1712"
+ column="19"/>
</issue>
<issue
@@ -6193,7 +7524,9 @@
errorLine1=" public AccessibilityNodeInfo unwrap() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1719"
+ column="12"/>
</issue>
<issue
@@ -6202,7 +7535,9 @@
errorLine1=" public static AccessibilityNodeInfoCompat obtain(View source) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1740"
+ column="19"/>
</issue>
<issue
@@ -6211,7 +7546,9 @@
errorLine1=" public static AccessibilityNodeInfoCompat obtain(View source) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1740"
+ column="54"/>
</issue>
<issue
@@ -6220,7 +7557,9 @@
errorLine1=" public static AccessibilityNodeInfoCompat obtain(View root, int virtualDescendantId) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1754"
+ column="19"/>
</issue>
<issue
@@ -6229,7 +7568,9 @@
errorLine1=" public static AccessibilityNodeInfoCompat obtain(View root, int virtualDescendantId) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1754"
+ column="54"/>
</issue>
<issue
@@ -6238,7 +7579,9 @@
errorLine1=" public static AccessibilityNodeInfoCompat obtain() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1768"
+ column="19"/>
</issue>
<issue
@@ -6247,7 +7590,9 @@
errorLine1=" public static AccessibilityNodeInfoCompat obtain(AccessibilityNodeInfoCompat info) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1779"
+ column="19"/>
</issue>
<issue
@@ -6256,7 +7601,9 @@
errorLine1=" public static AccessibilityNodeInfoCompat obtain(AccessibilityNodeInfoCompat info) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1779"
+ column="54"/>
</issue>
<issue
@@ -6265,7 +7612,9 @@
errorLine1=" public void setSource(View source) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1788"
+ column="27"/>
</issue>
<issue
@@ -6274,7 +7623,9 @@
errorLine1=" public void setSource(View root, int virtualDescendantId) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1814"
+ column="27"/>
</issue>
<issue
@@ -6283,7 +7634,9 @@
errorLine1=" public AccessibilityNodeInfoCompat findFocus(int focus) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1834"
+ column="12"/>
</issue>
<issue
@@ -6292,7 +7645,9 @@
errorLine1=" public AccessibilityNodeInfoCompat focusSearch(int direction) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1856"
+ column="12"/>
</issue>
<issue
@@ -6301,7 +7656,9 @@
errorLine1=" public AccessibilityNodeInfoCompat getChild(int index) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1895"
+ column="12"/>
</issue>
<issue
@@ -6310,7 +7667,9 @@
errorLine1=" public void addChild(View child) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1910"
+ column="26"/>
</issue>
<issue
@@ -6319,7 +7678,9 @@
errorLine1=" public void addChild(View root, int virtualDescendantId) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1928"
+ column="26"/>
</issue>
<issue
@@ -6328,7 +7689,9 @@
errorLine1=" public boolean removeChild(View child) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1948"
+ column="32"/>
</issue>
<issue
@@ -6337,7 +7700,9 @@
errorLine1=" public boolean removeChild(View root, int virtualDescendantId) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="1966"
+ column="32"/>
</issue>
<issue
@@ -6346,7 +7711,9 @@
errorLine1=" public void addAction(AccessibilityActionCompat action) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2031"
+ column="27"/>
</issue>
<issue
@@ -6355,7 +7722,9 @@
errorLine1=" public boolean removeAction(AccessibilityActionCompat action) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2056"
+ column="33"/>
</issue>
<issue
@@ -6364,7 +7733,9 @@
errorLine1=" public boolean performAction(int action, Bundle arguments) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2093"
+ column="46"/>
</issue>
<issue
@@ -6373,7 +7744,9 @@
errorLine1=" public List<AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(String text) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2145"
+ column="12"/>
</issue>
<issue
@@ -6382,7 +7755,9 @@
errorLine1=" public List<AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByText(String text) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2145"
+ column="79"/>
</issue>
<issue
@@ -6391,7 +7766,9 @@
errorLine1=" public AccessibilityNodeInfoCompat getParent() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2166"
+ column="12"/>
</issue>
<issue
@@ -6400,7 +7777,9 @@
errorLine1=" public void setParent(View parent) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2181"
+ column="27"/>
</issue>
<issue
@@ -6409,7 +7788,9 @@
errorLine1=" public void setParent(View root, int virtualDescendantId) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2207"
+ column="27"/>
</issue>
<issue
@@ -6418,7 +7799,9 @@
errorLine1=" public void getBoundsInScreen(Rect outBounds) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2260"
+ column="35"/>
</issue>
<issue
@@ -6427,7 +7810,9 @@
errorLine1=" public void setBoundsInScreen(Rect bounds) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2275"
+ column="35"/>
</issue>
<issue
@@ -6436,7 +7821,9 @@
errorLine1=" public CharSequence getPackageName() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2619"
+ column="12"/>
</issue>
<issue
@@ -6445,7 +7832,9 @@
errorLine1=" public void setPackageName(CharSequence packageName) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2634"
+ column="32"/>
</issue>
<issue
@@ -6454,7 +7843,9 @@
errorLine1=" public CharSequence getClassName() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2643"
+ column="12"/>
</issue>
<issue
@@ -6463,7 +7854,9 @@
errorLine1=" public void setClassName(CharSequence className) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2658"
+ column="30"/>
</issue>
<issue
@@ -6472,7 +7865,9 @@
errorLine1=" public CharSequence getText() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2667"
+ column="12"/>
</issue>
<issue
@@ -6481,7 +7876,9 @@
errorLine1=" public void setText(CharSequence text) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2697"
+ column="25"/>
</issue>
<issue
@@ -6490,7 +7887,9 @@
errorLine1=" public void addSpansToExtras(CharSequence text, View view) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2705"
+ column="34"/>
</issue>
<issue
@@ -6499,7 +7898,9 @@
errorLine1=" public void addSpansToExtras(CharSequence text, View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2705"
+ column="53"/>
</issue>
<issue
@@ -6508,7 +7909,9 @@
errorLine1=" public static ClickableSpan[] getClickableSpans(CharSequence text) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2742"
+ column="19"/>
</issue>
<issue
@@ -6517,7 +7920,9 @@
errorLine1=" public static ClickableSpan[] getClickableSpans(CharSequence text) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2742"
+ column="53"/>
</issue>
<issue
@@ -6526,7 +7931,9 @@
errorLine1=" public CharSequence getContentDescription() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2803"
+ column="12"/>
</issue>
<issue
@@ -6535,7 +7942,9 @@
errorLine1=" public void setContentDescription(CharSequence contentDescription) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2833"
+ column="39"/>
</issue>
<issue
@@ -6544,7 +7953,9 @@
errorLine1=" public void setViewIdResourceName(String viewId) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2878"
+ column="39"/>
</issue>
<issue
@@ -6553,7 +7964,9 @@
errorLine1=" public String getViewIdResourceName() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2896"
+ column="12"/>
</issue>
<issue
@@ -6562,7 +7975,9 @@
errorLine1=" public CollectionInfoCompat getCollectionInfo() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="2990"
+ column="12"/>
</issue>
<issue
@@ -6571,7 +7986,9 @@
errorLine1=" public void setCollectionInfo(Object collectionInfo) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3000"
+ column="35"/>
</issue>
<issue
@@ -6580,7 +7997,9 @@
errorLine1=" public void setCollectionItemInfo(Object collectionItemInfo) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3009"
+ column="39"/>
</issue>
<issue
@@ -6589,7 +8008,9 @@
errorLine1=" public CollectionItemInfoCompat getCollectionItemInfo() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3023"
+ column="12"/>
</issue>
<issue
@@ -6598,7 +8019,9 @@
errorLine1=" public RangeInfoCompat getRangeInfo() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3038"
+ column="12"/>
</issue>
<issue
@@ -6607,7 +8030,9 @@
errorLine1=" public void setRangeInfo(RangeInfoCompat rangeInfo) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3058"
+ column="30"/>
</issue>
<issue
@@ -6616,7 +8041,9 @@
errorLine1=" public List<AccessibilityActionCompat> getActionList() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3075"
+ column="12"/>
</issue>
<issue
@@ -6625,7 +8052,9 @@
errorLine1=" public void setError(CharSequence error) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3202"
+ column="26"/>
</issue>
<issue
@@ -6634,7 +8063,9 @@
errorLine1=" public CharSequence getError() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3213"
+ column="12"/>
</issue>
<issue
@@ -6643,7 +8074,9 @@
errorLine1=" public void setLabelFor(View labeled) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3227"
+ column="29"/>
</issue>
<issue
@@ -6652,7 +8085,9 @@
errorLine1=" public void setLabelFor(View root, int virtualDescendantId) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3247"
+ column="29"/>
</issue>
<issue
@@ -6661,7 +8096,9 @@
errorLine1=" public AccessibilityNodeInfoCompat getLabelFor() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3264"
+ column="12"/>
</issue>
<issue
@@ -6670,7 +8107,9 @@
errorLine1=" public void setLabeledBy(View label) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3278"
+ column="30"/>
</issue>
<issue
@@ -6679,7 +8118,9 @@
errorLine1=" public void setLabeledBy(View root, int virtualDescendantId) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3303"
+ column="30"/>
</issue>
<issue
@@ -6688,7 +8129,9 @@
errorLine1=" public AccessibilityNodeInfoCompat getLabeledBy() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3320"
+ column="12"/>
</issue>
<issue
@@ -6697,7 +8140,9 @@
errorLine1=" public List<AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByViewId(String viewId) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3380"
+ column="12"/>
</issue>
<issue
@@ -6706,7 +8151,9 @@
errorLine1=" public List<AccessibilityNodeInfoCompat> findAccessibilityNodeInfosByViewId(String viewId) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3380"
+ column="81"/>
</issue>
<issue
@@ -6715,7 +8162,9 @@
errorLine1=" public Bundle getExtras() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3406"
+ column="12"/>
</issue>
<issue
@@ -6724,7 +8173,9 @@
errorLine1=" public AccessibilityNodeInfoCompat getTraversalBefore() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3577"
+ column="12"/>
</issue>
<issue
@@ -6733,7 +8184,9 @@
errorLine1=" public void setTraversalBefore(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3599"
+ column="36"/>
</issue>
<issue
@@ -6742,7 +8195,9 @@
errorLine1=" public void setTraversalBefore(View root, int virtualDescendantId) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3626"
+ column="36"/>
</issue>
<issue
@@ -6751,7 +8206,9 @@
errorLine1=" public AccessibilityNodeInfoCompat getTraversalAfter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3642"
+ column="12"/>
</issue>
<issue
@@ -6760,7 +8217,9 @@
errorLine1=" public void setTraversalAfter(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3664"
+ column="35"/>
</issue>
<issue
@@ -6769,7 +8228,9 @@
errorLine1=" public void setTraversalAfter(View root, int virtualDescendantId) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3690"
+ column="35"/>
</issue>
<issue
@@ -6778,7 +8239,9 @@
errorLine1=" public AccessibilityWindowInfoCompat getWindow() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"/>
+ file="src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java"
+ line="3703"
+ column="12"/>
</issue>
<issue
@@ -6787,7 +8250,9 @@
errorLine1=" public AutoScrollHelper setEnabled(boolean enabled) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/widget/AutoScrollHelper.java"/>
+ file="src/main/java/androidx/core/widget/AutoScrollHelper.java"
+ line="235"
+ column="12"/>
</issue>
<issue
@@ -6796,7 +8261,9 @@
errorLine1=" public AutoScrollHelper setExclusive(boolean exclusive) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/widget/AutoScrollHelper.java"/>
+ file="src/main/java/androidx/core/widget/AutoScrollHelper.java"
+ line="263"
+ column="12"/>
</issue>
<issue
@@ -6805,7 +8272,9 @@
errorLine1=" int[] getAutoSizeTextAvailableSizes();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/widget/AutoSizeableTextView.java"/>
+ file="src/main/java/androidx/core/widget/AutoSizeableTextView.java"
+ line="151"
+ column="5"/>
</issue>
<issue
@@ -6814,7 +8283,9 @@
errorLine1=" public Builder(Locale locale) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="157"
+ column="24"/>
</issue>
<issue
@@ -6823,7 +8294,9 @@
errorLine1=" public Builder stereoReset(boolean stereoReset) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="176"
+ column="16"/>
</issue>
<issue
@@ -6832,7 +8305,9 @@
errorLine1=" public Builder setTextDirectionHeuristic(TextDirectionHeuristicCompat heuristic) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="192"
+ column="16"/>
</issue>
<issue
@@ -6841,7 +8316,9 @@
errorLine1=" public Builder setTextDirectionHeuristic(TextDirectionHeuristicCompat heuristic) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="192"
+ column="50"/>
</issue>
<issue
@@ -6850,7 +8327,9 @@
errorLine1=" public BidiFormatter build() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="204"
+ column="16"/>
</issue>
<issue
@@ -6859,7 +8338,9 @@
errorLine1=" public static BidiFormatter getInstance() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="235"
+ column="19"/>
</issue>
<issue
@@ -6868,7 +8349,9 @@
errorLine1=" public static BidiFormatter getInstance(boolean rtlContext) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="244"
+ column="19"/>
</issue>
<issue
@@ -6877,7 +8360,9 @@
errorLine1=" public static BidiFormatter getInstance(Locale locale) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="253"
+ column="19"/>
</issue>
<issue
@@ -6886,7 +8371,9 @@
errorLine1=" public static BidiFormatter getInstance(Locale locale) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="253"
+ column="45"/>
</issue>
<issue
@@ -6895,7 +8382,9 @@
errorLine1=" public boolean isRtl(String str) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="346"
+ column="26"/>
</issue>
<issue
@@ -6904,7 +8393,9 @@
errorLine1=" public boolean isRtl(CharSequence str) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="357"
+ column="26"/>
</issue>
<issue
@@ -6913,7 +8404,9 @@
errorLine1=" public String unicodeWrap(String str, TextDirectionHeuristicCompat heuristic, boolean isolate) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="390"
+ column="12"/>
</issue>
<issue
@@ -6922,7 +8415,9 @@
errorLine1=" public String unicodeWrap(String str, TextDirectionHeuristicCompat heuristic, boolean isolate) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="390"
+ column="31"/>
</issue>
<issue
@@ -6931,7 +8426,9 @@
errorLine1=" public String unicodeWrap(String str, TextDirectionHeuristicCompat heuristic, boolean isolate) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="390"
+ column="43"/>
</issue>
<issue
@@ -6940,7 +8437,9 @@
errorLine1=" public CharSequence unicodeWrap(CharSequence str, TextDirectionHeuristicCompat heuristic,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="409"
+ column="12"/>
</issue>
<issue
@@ -6949,7 +8448,9 @@
errorLine1=" public CharSequence unicodeWrap(CharSequence str, TextDirectionHeuristicCompat heuristic,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="409"
+ column="37"/>
</issue>
<issue
@@ -6958,7 +8459,9 @@
errorLine1=" public CharSequence unicodeWrap(CharSequence str, TextDirectionHeuristicCompat heuristic,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="409"
+ column="55"/>
</issue>
<issue
@@ -6967,7 +8470,9 @@
errorLine1=" public String unicodeWrap(String str, TextDirectionHeuristicCompat heuristic) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="440"
+ column="12"/>
</issue>
<issue
@@ -6976,7 +8481,9 @@
errorLine1=" public String unicodeWrap(String str, TextDirectionHeuristicCompat heuristic) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="440"
+ column="31"/>
</issue>
<issue
@@ -6985,7 +8492,9 @@
errorLine1=" public String unicodeWrap(String str, TextDirectionHeuristicCompat heuristic) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="440"
+ column="43"/>
</issue>
<issue
@@ -6994,7 +8503,9 @@
errorLine1=" public CharSequence unicodeWrap(CharSequence str, TextDirectionHeuristicCompat heuristic) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="455"
+ column="12"/>
</issue>
<issue
@@ -7003,7 +8514,9 @@
errorLine1=" public CharSequence unicodeWrap(CharSequence str, TextDirectionHeuristicCompat heuristic) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="455"
+ column="37"/>
</issue>
<issue
@@ -7012,7 +8525,9 @@
errorLine1=" public CharSequence unicodeWrap(CharSequence str, TextDirectionHeuristicCompat heuristic) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="455"
+ column="55"/>
</issue>
<issue
@@ -7021,7 +8536,9 @@
errorLine1=" public String unicodeWrap(String str, boolean isolate) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="468"
+ column="12"/>
</issue>
<issue
@@ -7030,7 +8547,9 @@
errorLine1=" public String unicodeWrap(String str, boolean isolate) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="468"
+ column="31"/>
</issue>
<issue
@@ -7039,7 +8558,9 @@
errorLine1=" public CharSequence unicodeWrap(CharSequence str, boolean isolate) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="482"
+ column="12"/>
</issue>
<issue
@@ -7048,7 +8569,9 @@
errorLine1=" public CharSequence unicodeWrap(CharSequence str, boolean isolate) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="482"
+ column="37"/>
</issue>
<issue
@@ -7057,7 +8580,9 @@
errorLine1=" public String unicodeWrap(String str) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="493"
+ column="12"/>
</issue>
<issue
@@ -7066,7 +8591,9 @@
errorLine1=" public String unicodeWrap(String str) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="493"
+ column="31"/>
</issue>
<issue
@@ -7075,7 +8602,9 @@
errorLine1=" public CharSequence unicodeWrap(CharSequence str) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="505"
+ column="12"/>
</issue>
<issue
@@ -7084,7 +8613,9 @@
errorLine1=" public CharSequence unicodeWrap(CharSequence str) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/BidiFormatter.java"/>
+ file="src/main/java/androidx/core/text/BidiFormatter.java"
+ line="505"
+ column="37"/>
</issue>
<issue
@@ -7093,7 +8624,9 @@
errorLine1=" public boolean onStateChanged(int[] stateSet) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/content/res/ComplexColorCompat.java"/>
+ file="src/main/java/androidx/core/content/res/ComplexColorCompat.java"
+ line="107"
+ column="35"/>
</issue>
<issue
@@ -7102,7 +8635,9 @@
errorLine1=" Object getWrapper();"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/app/CoreComponentFactory.java"/>
+ file="src/main/java/androidx/core/app/CoreComponentFactory.java"
+ line="118"
+ column="9"/>
</issue>
<issue
@@ -7111,7 +8646,9 @@
errorLine1=" public static void buildShortClassTag(Object cls, StringBuilder out) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/util/DebugUtils.java"/>
+ file="src/main/java/androidx/core/util/DebugUtils.java"
+ line="31"
+ column="43"/>
</issue>
<issue
@@ -7120,7 +8657,9 @@
errorLine1=" public static void buildShortClassTag(Object cls, StringBuilder out) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/util/DebugUtils.java"/>
+ file="src/main/java/androidx/core/util/DebugUtils.java"
+ line="31"
+ column="55"/>
</issue>
<issue
@@ -7129,7 +8668,9 @@
errorLine1=" public static Uri getUriForFile(@NonNull Context context, @NonNull String authority,"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/core/content/FileProvider.java"/>
+ file="src/main/java/androidx/core/content/FileProvider.java"
+ line="447"
+ column="19"/>
</issue>
<issue
@@ -7138,7 +8679,9 @@
errorLine1=" public Uri insert(@NonNull Uri uri, @NonNull ContentValues values) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/core/content/FileProvider.java"/>
+ file="src/main/java/androidx/core/content/FileProvider.java"
+ line="577"
+ column="12"/>
</issue>
<issue
@@ -7147,7 +8690,9 @@
errorLine1=" public FontInfo[] getFonts() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/provider/FontsContractCompat.java"/>
+ file="src/main/java/androidx/core/provider/FontsContractCompat.java"
+ line="399"
+ column="16"/>
</issue>
<issue
@@ -7156,7 +8701,9 @@
errorLine1=" public void onTypefaceRetrieved(Typeface typeface) {}"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/provider/FontsContractCompat.java"/>
+ file="src/main/java/androidx/core/provider/FontsContractCompat.java"
+ line="486"
+ column="41"/>
</issue>
<issue
@@ -7165,7 +8712,9 @@
errorLine1=" protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/widget/NestedScrollView.java"/>
+ file="src/main/java/androidx/core/widget/NestedScrollView.java"
+ line="1853"
+ column="60"/>
</issue>
<issue
@@ -7174,7 +8723,9 @@
errorLine1=" Notification.Builder getBuilder();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationBuilderWithBuilderAccessor.java"/>
+ file="src/main/java/androidx/core/app/NotificationBuilderWithBuilderAccessor.java"
+ line="34"
+ column="5"/>
</issue>
<issue
@@ -7183,7 +8734,9 @@
errorLine1=" public Context mContext;"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="901"
+ column="16"/>
</issue>
<issue
@@ -7192,7 +8745,9 @@
errorLine1=" public ArrayList<Action> mActions = new ArrayList<>();"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="905"
+ column="16"/>
</issue>
<issue
@@ -7201,7 +8756,9 @@
errorLine1=" public RemoteViews getContentView() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2455"
+ column="16"/>
</issue>
<issue
@@ -7210,7 +8767,9 @@
errorLine1=" public RemoteViews getBigContentView() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2463"
+ column="16"/>
</issue>
<issue
@@ -7219,7 +8778,9 @@
errorLine1=" public RemoteViews getHeadsUpContentView() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2471"
+ column="16"/>
</issue>
<issue
@@ -7228,7 +8789,9 @@
errorLine1=" protected Builder mBuilder;"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2539"
+ column="19"/>
</issue>
<issue
@@ -7237,7 +8800,9 @@
errorLine1=" public void apply(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2585"
+ column="27"/>
</issue>
<issue
@@ -7246,7 +8811,9 @@
errorLine1=" public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2601"
+ column="16"/>
</issue>
<issue
@@ -7255,7 +8822,9 @@
errorLine1=" public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2601"
+ column="44"/>
</issue>
<issue
@@ -7264,7 +8833,9 @@
errorLine1=" public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2609"
+ column="16"/>
</issue>
<issue
@@ -7273,7 +8844,9 @@
errorLine1=" public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2609"
+ column="47"/>
</issue>
<issue
@@ -7282,7 +8855,9 @@
errorLine1=" public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2617"
+ column="16"/>
</issue>
<issue
@@ -7291,7 +8866,9 @@
errorLine1=" public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2617"
+ column="51"/>
</issue>
<issue
@@ -7300,7 +8877,9 @@
errorLine1=" public Bitmap createColoredBitmap(int iconId, int color) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2928"
+ column="16"/>
</issue>
<issue
@@ -7309,7 +8888,9 @@
errorLine1=" public void buildIntoRemoteViews(RemoteViews outerView,"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2978"
+ column="42"/>
</issue>
<issue
@@ -7318,7 +8899,9 @@
errorLine1=" RemoteViews innerView) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="2979"
+ column="17"/>
</issue>
<issue
@@ -7327,7 +8910,9 @@
errorLine1=" public void apply(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3128"
+ column="27"/>
</issue>
<issue
@@ -7336,7 +8921,9 @@
errorLine1=" public void apply(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3359"
+ column="27"/>
</issue>
<issue
@@ -7345,7 +8932,9 @@
errorLine1=" public void apply(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="3703"
+ column="27"/>
</issue>
<issue
@@ -7354,7 +8943,9 @@
errorLine1=" public void apply(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4265"
+ column="27"/>
</issue>
<issue
@@ -7363,7 +8954,9 @@
errorLine1=" public void apply(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4366"
+ column="27"/>
</issue>
<issue
@@ -7372,7 +8965,9 @@
errorLine1=" public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4377"
+ column="16"/>
</issue>
<issue
@@ -7381,7 +8976,9 @@
errorLine1=" public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4377"
+ column="44"/>
</issue>
<issue
@@ -7390,7 +8987,9 @@
errorLine1=" public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4394"
+ column="16"/>
</issue>
<issue
@@ -7399,7 +8998,9 @@
errorLine1=" public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4394"
+ column="47"/>
</issue>
<issue
@@ -7408,7 +9009,9 @@
errorLine1=" public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4415"
+ column="16"/>
</issue>
<issue
@@ -7417,7 +9020,9 @@
errorLine1=" public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4415"
+ column="51"/>
</issue>
<issue
@@ -7426,7 +9031,9 @@
errorLine1=" public CharSequence title;"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4599"
+ column="16"/>
</issue>
<issue
@@ -7435,7 +9042,9 @@
errorLine1=" public PendingIntent actionIntent;"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompat.java"
+ line="4604"
+ column="16"/>
</issue>
<issue
@@ -7444,7 +9053,9 @@
errorLine1=" public IBinder onBind(Intent intent) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+ line="47"
+ column="12"/>
</issue>
<issue
@@ -7453,7 +9064,9 @@
errorLine1=" public abstract void notify(String packageName, int id, String tag, Notification notification);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+ line="62"
+ column="33"/>
</issue>
<issue
@@ -7462,7 +9075,9 @@
errorLine1=" public abstract void notify(String packageName, int id, String tag, Notification notification);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+ line="62"
+ column="61"/>
</issue>
<issue
@@ -7471,7 +9086,9 @@
errorLine1=" public abstract void notify(String packageName, int id, String tag, Notification notification);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+ line="62"
+ column="73"/>
</issue>
<issue
@@ -7480,7 +9097,9 @@
errorLine1=" public abstract void cancel(String packageName, int id, String tag);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+ line="67"
+ column="33"/>
</issue>
<issue
@@ -7489,7 +9108,9 @@
errorLine1=" public abstract void cancel(String packageName, int id, String tag);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+ line="67"
+ column="61"/>
</issue>
<issue
@@ -7498,7 +9119,9 @@
errorLine1=" public abstract void cancelAll(String packageName);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"/>
+ file="src/main/java/androidx/core/app/NotificationCompatSideChannelService.java"
+ line="72"
+ column="36"/>
</issue>
<issue
@@ -7507,7 +9130,9 @@
errorLine1=" public static Path createPathFromPathData(String pathData) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="72"
+ column="19"/>
</issue>
<issue
@@ -7516,7 +9141,9 @@
errorLine1=" public static Path createPathFromPathData(String pathData) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="72"
+ column="47"/>
</issue>
<issue
@@ -7525,7 +9152,9 @@
errorLine1=" public static PathDataNode[] createNodesFromPathData(String pathData) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="90"
+ column="19"/>
</issue>
<issue
@@ -7534,7 +9163,9 @@
errorLine1=" public static PathDataNode[] createNodesFromPathData(String pathData) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="90"
+ column="58"/>
</issue>
<issue
@@ -7543,7 +9174,9 @@
errorLine1=" public static PathDataNode[] deepCopyNodes(PathDataNode[] source) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="119"
+ column="19"/>
</issue>
<issue
@@ -7552,7 +9185,9 @@
errorLine1=" public static PathDataNode[] deepCopyNodes(PathDataNode[] source) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="119"
+ column="48"/>
</issue>
<issue
@@ -7561,7 +9196,9 @@
errorLine1=" public static void updateNodes(PathDataNode[] target, PathDataNode[] source) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="162"
+ column="36"/>
</issue>
<issue
@@ -7570,7 +9207,9 @@
errorLine1=" public static void updateNodes(PathDataNode[] target, PathDataNode[] source) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="162"
+ column="59"/>
</issue>
<issue
@@ -7579,7 +9218,9 @@
errorLine1=" public static boolean interpolatePathDataNodes(PathDataNode[] target, PathDataNode[] from,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="313"
+ column="52"/>
</issue>
<issue
@@ -7588,7 +9229,9 @@
errorLine1=" public static boolean interpolatePathDataNodes(PathDataNode[] target, PathDataNode[] from,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="313"
+ column="75"/>
</issue>
<issue
@@ -7597,7 +9240,9 @@
errorLine1=" PathDataNode[] to, float fraction) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="314"
+ column="13"/>
</issue>
<issue
@@ -7606,7 +9251,9 @@
errorLine1=" public float[] mParams;"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="350"
+ column="16"/>
</issue>
<issue
@@ -7615,7 +9262,9 @@
errorLine1=" public static void nodesToPath(PathDataNode[] node, Path path) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="368"
+ column="40"/>
</issue>
<issue
@@ -7624,7 +9273,9 @@
errorLine1=" public static void nodesToPath(PathDataNode[] node, Path path) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="368"
+ column="61"/>
</issue>
<issue
@@ -7633,7 +9284,9 @@
errorLine1=" public void interpolatePathDataNode(PathDataNode nodeFrom, PathDataNode nodeTo,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="386"
+ column="45"/>
</issue>
<issue
@@ -7642,7 +9295,9 @@
errorLine1=" public void interpolatePathDataNode(PathDataNode nodeFrom, PathDataNode nodeTo,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/PathParser.java"/>
+ file="src/main/java/androidx/core/graphics/PathParser.java"
+ line="386"
+ column="68"/>
</issue>
<issue
@@ -7651,7 +9306,9 @@
errorLine1=" public Builder setBreakStrategy(int strategy) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="144"
+ column="20"/>
</issue>
<issue
@@ -7660,7 +9317,9 @@
errorLine1=" public Builder setHyphenationFrequency(int frequency) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="162"
+ column="20"/>
</issue>
<issue
@@ -7669,7 +9328,9 @@
errorLine1=" public Builder setTextDirection(@NonNull TextDirectionHeuristic textDir) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="180"
+ column="20"/>
</issue>
<issue
@@ -7678,7 +9339,9 @@
errorLine1=" public static PrecomputedTextCompat create(@NonNull CharSequence text, @NonNull Params params) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="430"
+ column="19"/>
</issue>
<issue
@@ -7687,7 +9350,9 @@
errorLine1=" public static Future<PrecomputedTextCompat> getTextFuture("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="646"
+ column="19"/>
</issue>
<issue
@@ -7696,7 +9361,9 @@
errorLine1=" public CharSequence subSequence(int start, int end) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"/>
+ file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+ line="751"
+ column="12"/>
</issue>
<issue
@@ -7705,7 +9372,9 @@
errorLine1=" public ResultReceiver(Handler handler) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/os/ResultReceiver.java"/>
+ file="src/main/java/android/support/v4/os/ResultReceiver.java"
+ line="84"
+ column="27"/>
</issue>
<issue
@@ -7714,7 +9383,9 @@
errorLine1=" public void send(int resultCode, Bundle resultData) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/os/ResultReceiver.java"/>
+ file="src/main/java/android/support/v4/os/ResultReceiver.java"
+ line="96"
+ column="38"/>
</issue>
<issue
@@ -7723,7 +9394,9 @@
errorLine1=" protected void onReceiveResult(int resultCode, Bundle resultData) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/os/ResultReceiver.java"/>
+ file="src/main/java/android/support/v4/os/ResultReceiver.java"
+ line="121"
+ column="52"/>
</issue>
<issue
@@ -7732,7 +9405,9 @@
errorLine1=" public void setColorFilter(ColorFilter cf) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"/>
+ file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"
+ line="288"
+ column="32"/>
</issue>
<issue
@@ -7741,7 +9416,9 @@
errorLine1=" public ColorFilter getColorFilter() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"/>
+ file="src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawable.java"
+ line="294"
+ column="12"/>
</issue>
<issue
@@ -7750,7 +9427,9 @@
errorLine1=" public void onSharedElementStart(List<String> sharedElementNames,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="77"
+ column="38"/>
</issue>
<issue
@@ -7759,7 +9438,9 @@
errorLine1=" List<View> sharedElements, List<View> sharedElementSnapshots) {}"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="78"
+ column="13"/>
</issue>
<issue
@@ -7768,7 +9449,9 @@
errorLine1=" List<View> sharedElements, List<View> sharedElementSnapshots) {}"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="78"
+ column="40"/>
</issue>
<issue
@@ -7777,7 +9460,9 @@
errorLine1=" public void onSharedElementEnd(List<String> sharedElementNames,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="108"
+ column="36"/>
</issue>
<issue
@@ -7786,7 +9471,9 @@
errorLine1=" List<View> sharedElements, List<View> sharedElementSnapshots) {}"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="109"
+ column="13"/>
</issue>
<issue
@@ -7795,7 +9482,9 @@
errorLine1=" List<View> sharedElements, List<View> sharedElementSnapshots) {}"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="109"
+ column="40"/>
</issue>
<issue
@@ -7804,7 +9493,9 @@
errorLine1=" public void onRejectSharedElements(List<View> rejectedSharedElements) {}"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="133"
+ column="40"/>
</issue>
<issue
@@ -7813,7 +9504,9 @@
errorLine1=" public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {}"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="144"
+ column="37"/>
</issue>
<issue
@@ -7822,7 +9515,9 @@
errorLine1=" public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {}"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="144"
+ column="57"/>
</issue>
<issue
@@ -7831,7 +9526,9 @@
errorLine1=" public Parcelable onCaptureSharedElementSnapshot(View sharedElement, Matrix viewToGlobalMatrix,"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="166"
+ column="12"/>
</issue>
<issue
@@ -7840,7 +9537,9 @@
errorLine1=" public Parcelable onCaptureSharedElementSnapshot(View sharedElement, Matrix viewToGlobalMatrix,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="166"
+ column="54"/>
</issue>
<issue
@@ -7849,7 +9548,9 @@
errorLine1=" public Parcelable onCaptureSharedElementSnapshot(View sharedElement, Matrix viewToGlobalMatrix,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="166"
+ column="74"/>
</issue>
<issue
@@ -7858,7 +9559,9 @@
errorLine1=" RectF screenBounds) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="167"
+ column="13"/>
</issue>
<issue
@@ -7867,7 +9570,9 @@
errorLine1=" public View onCreateSnapshotView(Context context, Parcelable snapshot) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="257"
+ column="12"/>
</issue>
<issue
@@ -7876,7 +9581,9 @@
errorLine1=" public View onCreateSnapshotView(Context context, Parcelable snapshot) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="257"
+ column="38"/>
</issue>
<issue
@@ -7885,7 +9592,9 @@
errorLine1=" public View onCreateSnapshotView(Context context, Parcelable snapshot) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="257"
+ column="55"/>
</issue>
<issue
@@ -7894,7 +9603,9 @@
errorLine1=" public void onSharedElementsArrived(List<String> sharedElementNames,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="300"
+ column="41"/>
</issue>
<issue
@@ -7903,7 +9614,9 @@
errorLine1=" List<View> sharedElements, OnSharedElementsReadyListener listener) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="301"
+ column="13"/>
</issue>
<issue
@@ -7912,7 +9625,9 @@
errorLine1=" List<View> sharedElements, OnSharedElementsReadyListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/app/SharedElementCallback.java"/>
+ file="src/main/java/androidx/core/app/SharedElementCallback.java"
+ line="301"
+ column="40"/>
</issue>
<issue
@@ -7921,7 +9636,9 @@
errorLine1=" public ShortcutInfo toShortcutInfo() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="125"
+ column="12"/>
</issue>
<issue
@@ -7930,7 +9647,9 @@
errorLine1=" public IconCompat getIcon() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="343"
+ column="12"/>
</issue>
<issue
@@ -7939,7 +9658,9 @@
errorLine1=" public Builder setIcon(IconCompat icon) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
+ line="709"
+ column="32"/>
</issue>
<issue
@@ -7948,7 +9669,9 @@
errorLine1=" public abstract T addShortcuts(List<ShortcutInfoCompat> shortcuts);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+ line="38"
+ column="36"/>
</issue>
<issue
@@ -7957,7 +9680,9 @@
errorLine1=" public abstract T removeShortcuts(List<String> shortcutIds);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+ line="41"
+ column="39"/>
</issue>
<issue
@@ -7966,7 +9691,9 @@
errorLine1=" public List<ShortcutInfoCompat> getShortcuts() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+ line="47"
+ column="12"/>
</issue>
<issue
@@ -7975,7 +9702,9 @@
errorLine1=" public Void addShortcuts(List<ShortcutInfoCompat> shortcuts) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+ line="59"
+ column="16"/>
</issue>
<issue
@@ -7984,7 +9713,9 @@
errorLine1=" public Void addShortcuts(List<ShortcutInfoCompat> shortcuts) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+ line="59"
+ column="34"/>
</issue>
<issue
@@ -7993,7 +9724,9 @@
errorLine1=" public Void removeShortcuts(List<String> shortcutIds) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+ line="64"
+ column="16"/>
</issue>
<issue
@@ -8002,7 +9735,9 @@
errorLine1=" public Void removeShortcuts(List<String> shortcutIds) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+ line="64"
+ column="37"/>
</issue>
<issue
@@ -8011,7 +9746,9 @@
errorLine1=" public Void removeAllShortcuts() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"/>
+ file="src/main/java/androidx/core/content/pm/ShortcutInfoCompatSaver.java"
+ line="69"
+ column="16"/>
</issue>
<issue
@@ -8020,7 +9757,9 @@
errorLine1=" boolean isRtl(char[] array, int start, int count);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/text/TextDirectionHeuristicCompat.java"/>
+ file="src/main/java/androidx/core/text/TextDirectionHeuristicCompat.java"
+ line="33"
+ column="19"/>
</issue>
<issue
@@ -8029,7 +9768,9 @@
errorLine1=" boolean isRtl(CharSequence cs, int start, int count);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/text/TextDirectionHeuristicCompat.java"/>
+ file="src/main/java/androidx/core/text/TextDirectionHeuristicCompat.java"
+ line="45"
+ column="19"/>
</issue>
<issue
@@ -8038,7 +9779,9 @@
errorLine1=" public static void formatDuration(long duration, StringBuilder builder) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/util/TimeUtils.java"/>
+ file="src/main/java/androidx/core/util/TimeUtils.java"
+ line="153"
+ column="54"/>
</issue>
<issue
@@ -8047,7 +9790,9 @@
errorLine1=" public static void formatDuration(long duration, PrintWriter pw, int fieldLen) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/util/TimeUtils.java"/>
+ file="src/main/java/androidx/core/util/TimeUtils.java"
+ line="162"
+ column="54"/>
</issue>
<issue
@@ -8056,7 +9801,9 @@
errorLine1=" public static void formatDuration(long duration, PrintWriter pw) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/util/TimeUtils.java"/>
+ file="src/main/java/androidx/core/util/TimeUtils.java"
+ line="171"
+ column="54"/>
</issue>
<issue
@@ -8065,7 +9812,9 @@
errorLine1=" public static void formatDuration(long time, long now, PrintWriter pw) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/util/TimeUtils.java"/>
+ file="src/main/java/androidx/core/util/TimeUtils.java"
+ line="177"
+ column="60"/>
</issue>
<issue
@@ -8074,7 +9823,9 @@
errorLine1=" void setTintList(ColorStateList tint);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/drawable/TintAwareDrawable.java"/>
+ file="src/main/java/androidx/core/graphics/drawable/TintAwareDrawable.java"
+ line="36"
+ column="22"/>
</issue>
<issue
@@ -8083,7 +9834,9 @@
errorLine1=" void setTintMode(PorterDuff.Mode tintMode);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/drawable/TintAwareDrawable.java"/>
+ file="src/main/java/androidx/core/graphics/drawable/TintAwareDrawable.java"
+ line="37"
+ column="22"/>
</issue>
<issue
@@ -8092,7 +9845,9 @@
errorLine1=" public static ComplexColorCompat getNamedComplexColor(@NonNull TypedArray a,"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/content/res/TypedArrayUtils.java"/>
+ file="src/main/java/androidx/core/content/res/TypedArrayUtils.java"
+ line="137"
+ column="19"/>
</issue>
<issue
@@ -8101,7 +9856,9 @@
errorLine1=" @NonNull Context context, @NonNull Resources resources, int id, String path, int cookie,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompat.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompat.java"
+ line="219"
+ column="77"/>
</issue>
<issue
@@ -8110,7 +9867,9 @@
errorLine1=" protected Typeface createFromFamiliesWithDefault(Object family) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="167"
+ column="54"/>
</issue>
<issue
@@ -8119,7 +9878,9 @@
errorLine1=" public Typeface createFromFontFamilyFilesResourceEntry(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="200"
+ column="60"/>
</issue>
<issue
@@ -8128,7 +9889,9 @@
errorLine1=" FontResourcesParserCompat.FontFamilyFilesResourceEntry entry, Resources resources,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="201"
+ column="13"/>
</issue>
<issue
@@ -8137,7 +9900,9 @@
errorLine1=" FontResourcesParserCompat.FontFamilyFilesResourceEntry entry, Resources resources,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="201"
+ column="75"/>
</issue>
<issue
@@ -8146,7 +9911,9 @@
errorLine1=" public Typeface createFromFontInfo(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="226"
+ column="40"/>
</issue>
<issue
@@ -8155,7 +9922,9 @@
errorLine1=" Context context, Resources resources, int id, String path, int style) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="290"
+ column="13"/>
</issue>
<issue
@@ -8164,7 +9933,9 @@
errorLine1=" Context context, Resources resources, int id, String path, int style) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="290"
+ column="30"/>
</issue>
<issue
@@ -8173,7 +9944,9 @@
errorLine1=" Context context, Resources resources, int id, String path, int style) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="290"
+ column="59"/>
</issue>
<issue
@@ -8182,7 +9955,9 @@
errorLine1=" protected Class<?> obtainFontFamily() throws ClassNotFoundException {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="315"
+ column="15"/>
</issue>
<issue
@@ -8191,7 +9966,9 @@
errorLine1=" protected Constructor<?> obtainFontFamilyCtor(Class<?> fontFamily)"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="319"
+ column="15"/>
</issue>
<issue
@@ -8200,7 +9977,9 @@
errorLine1=" protected Constructor<?> obtainFontFamilyCtor(Class<?> fontFamily)"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="319"
+ column="51"/>
</issue>
<issue
@@ -8209,7 +9988,9 @@
errorLine1=" protected Method obtainAddFontFromAssetManagerMethod(Class<?> fontFamily)"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="324"
+ column="15"/>
</issue>
<issue
@@ -8218,7 +9999,9 @@
errorLine1=" protected Method obtainAddFontFromAssetManagerMethod(Class<?> fontFamily)"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="324"
+ column="58"/>
</issue>
<issue
@@ -8227,7 +10010,9 @@
errorLine1=" protected Method obtainAddFontFromBufferMethod(Class<?> fontFamily)"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="331"
+ column="15"/>
</issue>
<issue
@@ -8236,7 +10021,9 @@
errorLine1=" protected Method obtainAddFontFromBufferMethod(Class<?> fontFamily)"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="331"
+ column="52"/>
</issue>
<issue
@@ -8245,7 +10032,9 @@
errorLine1=" protected Method obtainFreezeMethod(Class<?> fontFamily) throws NoSuchMethodException {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="338"
+ column="15"/>
</issue>
<issue
@@ -8254,7 +10043,9 @@
errorLine1=" protected Method obtainFreezeMethod(Class<?> fontFamily) throws NoSuchMethodException {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="338"
+ column="41"/>
</issue>
<issue
@@ -8263,7 +10054,9 @@
errorLine1=" protected Method obtainAbortCreationMethod(Class<?> fontFamily) throws NoSuchMethodException {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="342"
+ column="15"/>
</issue>
<issue
@@ -8272,7 +10065,9 @@
errorLine1=" protected Method obtainAbortCreationMethod(Class<?> fontFamily) throws NoSuchMethodException {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="342"
+ column="48"/>
</issue>
<issue
@@ -8281,7 +10076,9 @@
errorLine1=" protected Method obtainCreateFromFamiliesWithDefaultMethod(Class<?> fontFamily)"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="346"
+ column="15"/>
</issue>
<issue
@@ -8290,7 +10087,9 @@
errorLine1=" protected Method obtainCreateFromFamiliesWithDefaultMethod(Class<?> fontFamily)"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi26Impl.java"
+ line="346"
+ column="64"/>
</issue>
<issue
@@ -8299,7 +10098,9 @@
errorLine1=" protected Typeface createFromFamiliesWithDefault(Object family) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"
+ line="47"
+ column="15"/>
</issue>
<issue
@@ -8308,7 +10109,9 @@
errorLine1=" protected Typeface createFromFamiliesWithDefault(Object family) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"
+ line="47"
+ column="54"/>
</issue>
<issue
@@ -8317,7 +10120,9 @@
errorLine1=" protected Method obtainCreateFromFamiliesWithDefaultMethod(Class<?> fontFamily)"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"
+ line="59"
+ column="15"/>
</issue>
<issue
@@ -8326,7 +10131,9 @@
errorLine1=" protected Method obtainCreateFromFamiliesWithDefaultMethod(Class<?> fontFamily)"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi28Impl.java"
+ line="59"
+ column="64"/>
</issue>
<issue
@@ -8335,7 +10142,9 @@
errorLine1=" protected FontsContractCompat.FontInfo findBestInfo(FontsContractCompat.FontInfo[] fonts,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+ line="73"
+ column="15"/>
</issue>
<issue
@@ -8344,7 +10153,9 @@
errorLine1=" protected FontsContractCompat.FontInfo findBestInfo(FontsContractCompat.FontInfo[] fonts,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+ line="73"
+ column="57"/>
</issue>
<issue
@@ -8353,7 +10164,9 @@
errorLine1=" protected Typeface createFromInputStream(Context context, InputStream is) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+ line="80"
+ column="15"/>
</issue>
<issue
@@ -8362,7 +10175,9 @@
errorLine1=" protected Typeface createFromInputStream(Context context, InputStream is) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+ line="80"
+ column="46"/>
</issue>
<issue
@@ -8371,7 +10186,9 @@
errorLine1=" protected Typeface createFromInputStream(Context context, InputStream is) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+ line="80"
+ column="63"/>
</issue>
<issue
@@ -8380,7 +10197,9 @@
errorLine1=" public Typeface createFromFontInfo(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+ line="86"
+ column="40"/>
</issue>
<issue
@@ -8389,7 +10208,9 @@
errorLine1=" public Typeface createFromFontFamilyFilesResourceEntry(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+ line="127"
+ column="60"/>
</issue>
<issue
@@ -8398,7 +10219,9 @@
errorLine1=" FontResourcesParserCompat.FontFamilyFilesResourceEntry familyEntry, Resources resources,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+ line="128"
+ column="13"/>
</issue>
<issue
@@ -8407,7 +10230,9 @@
errorLine1=" FontResourcesParserCompat.FontFamilyFilesResourceEntry familyEntry, Resources resources,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+ line="128"
+ column="81"/>
</issue>
<issue
@@ -8416,7 +10241,9 @@
errorLine1=" Context context, Resources resources, int id, String path, int style) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+ line="168"
+ column="13"/>
</issue>
<issue
@@ -8425,7 +10252,9 @@
errorLine1=" Context context, Resources resources, int id, String path, int style) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+ line="168"
+ column="30"/>
</issue>
<issue
@@ -8434,7 +10263,9 @@
errorLine1=" Context context, Resources resources, int id, String path, int style) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"/>
+ file="src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java"
+ line="168"
+ column="59"/>
</issue>
<issue
@@ -8443,7 +10274,9 @@
errorLine1=" Drawable getWrappedDrawable();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/drawable/WrappedDrawable.java"/>
+ file="src/main/java/androidx/core/graphics/drawable/WrappedDrawable.java"
+ line="33"
+ column="5"/>
</issue>
<issue
@@ -8452,7 +10285,9 @@
errorLine1=" void setWrappedDrawable(Drawable drawable);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/core/graphics/drawable/WrappedDrawable.java"/>
+ file="src/main/java/androidx/core/graphics/drawable/WrappedDrawable.java"
+ line="34"
+ column="29"/>
</issue>
</issues>
diff --git a/core/core/src/androidTest/AndroidManifest.xml b/core/core/src/androidTest/AndroidManifest.xml
index d87622f..08d31cd 100644
--- a/core/core/src/androidTest/AndroidManifest.xml
+++ b/core/core/src/androidTest/AndroidManifest.xml
@@ -119,6 +119,10 @@
android:exported="true"
android:theme="@android:style/Theme.Light.NoTitleBar" />
+ <activity
+ android:name="androidx.core.app.GetSystemLocalesActivity"
+ android:exported="true" />
+
<activity-alias
android:name="androidx.core.app.NavUtilsAliasActivity"
android:targetActivity="androidx.core.app.NavUtilsActivity">
diff --git a/core/core/src/androidTest/java/androidx/core/app/ActivityCompatTest.java b/core/core/src/androidTest/java/androidx/core/app/ActivityCompatTest.java
index dd22f6e..349fcc15 100644
--- a/core/core/src/androidTest/java/androidx/core/app/ActivityCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/app/ActivityCompatTest.java
@@ -19,6 +19,7 @@
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.mockito.AdditionalMatchers.aryEq;
import static org.mockito.ArgumentMatchers.eq;
@@ -32,7 +33,9 @@
import android.support.v4.BaseInstrumentationTestCase;
import android.view.View;
+import androidx.annotation.OptIn;
import androidx.core.app.ActivityCompat.PermissionCompatDelegate;
+import androidx.core.os.BuildCompat;
import androidx.core.test.R;
import androidx.test.core.app.ActivityScenario;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -148,6 +151,16 @@
ActivityCompat.requireViewById(getActivity(), View.NO_ID);
}
+ @Test
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ public void testShouldShowRequestPermissionRationaleForPostNotifications() throws Throwable {
+ if (!BuildCompat.isAtLeastT()) {
+ // permission doesn't exist yet, so should return false
+ assertFalse(ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
+ Manifest.permission.POST_NOTIFICATIONS));
+ }
+ }
+
@SdkSuppress(minSdkVersion = 23)
@Test
public void testOnSharedElementsReady() {
@@ -165,6 +178,5 @@
new ActivityCompat.SharedElementCallback21Impl(callback);
wrapper.onSharedElementsArrived(null, null, listener);
assertEquals(2, counter.get());
-
}
}
diff --git a/core/core/src/androidTest/java/androidx/core/app/ComponentActivityTest.java b/core/core/src/androidTest/java/androidx/core/app/ComponentActivityTest.java
index 9d5b663..3119729 100644
--- a/core/core/src/androidTest/java/androidx/core/app/ComponentActivityTest.java
+++ b/core/core/src/androidTest/java/androidx/core/app/ComponentActivityTest.java
@@ -23,6 +23,7 @@
import android.os.Build;
import android.support.v4.BaseInstrumentationTestCase;
+import androidx.core.os.BuildCompat;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
@@ -90,6 +91,16 @@
shouldNotDumpSpecialArgOnVersion("--translation", Build.VERSION_CODES.S);
}
+ @Test
+ public void testShouldDumpInternalState_listDumpables() {
+ shouldNotDumpSpecialArgOnT("--list-dumpables");
+ }
+
+ @Test
+ public void testShouldDumpInternalState_dumpDumpable() {
+ shouldNotDumpSpecialArgOnT("--dump-dumpable");
+ }
+
private void shouldNotDumpSpecialArgOnVersion(String specialArg, int minApiVersion) {
String[] args = { specialArg };
int actualApiVersion = Build.VERSION.SDK_INT;
@@ -103,6 +114,19 @@
}
}
+ private void shouldNotDumpSpecialArgOnT(String specialArg) {
+ String[] args = { specialArg };
+ int actualApiVersion = Build.VERSION.SDK_INT;
+
+ if (BuildCompat.isAtLeastT()) {
+ assertFalse(specialArg + " should be skipped on API " + actualApiVersion,
+ mComponentActivity.shouldDumpInternalState(args));
+ } else {
+ assertTrue(specialArg + " should be ignored on API " + actualApiVersion,
+ mComponentActivity.shouldDumpInternalState(args));
+ }
+ }
+
private class NeverAddedExtraData extends ComponentActivity.ExtraData {
}
diff --git a/core/core/src/androidTest/java/androidx/core/app/GetSystemLocalesActivity.java b/core/core/src/androidTest/java/androidx/core/app/GetSystemLocalesActivity.java
new file mode 100644
index 0000000..8f900195
--- /dev/null
+++ b/core/core/src/androidTest/java/androidx/core/app/GetSystemLocalesActivity.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.core.app;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.WindowManager;
+
+public class GetSystemLocalesActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+
+ super.onCreate(savedInstanceState);
+
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ setContentView(androidx.core.test.R.layout.activity_compat_activity);
+ }
+
+}
diff --git a/core/core/src/androidTest/java/androidx/core/app/GetSystemLocalesTest.java b/core/core/src/androidTest/java/androidx/core/app/GetSystemLocalesTest.java
new file mode 100644
index 0000000..c5ecec2
--- /dev/null
+++ b/core/core/src/androidTest/java/androidx/core/app/GetSystemLocalesTest.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.core.app;
+
+import static org.junit.Assert.assertEquals;
+
+import android.support.v4.BaseInstrumentationTestCase;
+
+import androidx.core.os.LocaleListCompat;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.LargeTest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@LargeTest
+/**
+ * TestCase to verify the working of {@link androidx.core.app.LocaleManagerCompat.getSystemLocales}.
+ */
+public class GetSystemLocalesTest extends BaseInstrumentationTestCase<GetSystemLocalesActivity> {
+
+ LocaleListCompat mExpectedSystemLocales = null;
+
+ public GetSystemLocalesTest() {
+ super(GetSystemLocalesActivity.class);
+ }
+
+
+ @Before
+ public void setup() {
+ // Since the application has no custom locales set, the initial locales should be same as
+ // the system locales.
+ mExpectedSystemLocales =
+ LocaleManagerCompat.getConfigurationLocales(mActivityTestRule.getActivity()
+ .getResources().getConfiguration());
+ }
+
+ @Test
+ public void testGetSystemLocales_noAppLocalesSet_systemLocalesSameAsInitLocales() {
+ // verify that the system locales are the same as the initial locales.
+ assertEquals(
+ mExpectedSystemLocales,
+ LocaleManagerCompat.getSystemLocales(mActivityTestRule.getActivity())
+ );
+ }
+}
diff --git a/core/core/src/androidTest/java/androidx/core/app/JobIntentServiceTest.java b/core/core/src/androidTest/java/androidx/core/app/JobIntentServiceTest.java
index af95506..ed0ed4d 100644
--- a/core/core/src/androidTest/java/androidx/core/app/JobIntentServiceTest.java
+++ b/core/core/src/androidTest/java/androidx/core/app/JobIntentServiceTest.java
@@ -264,6 +264,7 @@
Log.i(TAG, "Running!");
}
+ @SuppressWarnings("deprecation")
@Override
protected void onHandleWork(@NonNull Intent intent) {
Log.i(TAG, "Handling work: " + intent);
diff --git a/core/core/src/androidTest/java/androidx/core/app/ShareCompatTest.java b/core/core/src/androidTest/java/androidx/core/app/ShareCompatTest.java
index 0acf64e..90f0788 100644
--- a/core/core/src/androidTest/java/androidx/core/app/ShareCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/app/ShareCompatTest.java
@@ -38,7 +38,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
-
+@SuppressWarnings("deprecation")
@RunWith(AndroidJUnit4.class)
@MediumTest
public class ShareCompatTest extends BaseInstrumentationTestCase<TestActivity> {
@@ -54,6 +54,7 @@
super(TestActivity.class);
}
+ @SuppressWarnings("deprecation")
@Test
public void testBuilder() {
Activity activity = mActivityTestRule.getActivity();
@@ -71,6 +72,7 @@
activity.getComponentName());
}
+ @SuppressWarnings("deprecation")
@Test
public void testBuilderWithoutActivity() {
Context context = mActivityTestRule.getActivity().getApplicationContext();
@@ -86,6 +88,7 @@
assertNull(intent.getParcelableExtra(ShareCompat.EXTRA_CALLING_ACTIVITY_INTEROP));
}
+ @SuppressWarnings("deprecation")
@Test
public void testBuilderWithWrappedActivity() {
Activity activity = mActivityTestRule.getActivity();
@@ -104,6 +107,7 @@
activity.getComponentName());
}
+ @SuppressWarnings("deprecation")
@Test
@SdkSuppress(minSdkVersion = 16)
public void testBuilderSingleStreamUri() {
diff --git a/core/core/src/androidTest/java/androidx/core/content/ContextCompatTest.java b/core/core/src/androidTest/java/androidx/core/content/ContextCompatTest.java
index e55d822..85db291 100644
--- a/core/core/src/androidTest/java/androidx/core/content/ContextCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/content/ContextCompatTest.java
@@ -70,8 +70,14 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import android.Manifest;
import android.accounts.AccountManager;
import android.app.ActivityManager;
import android.app.AlarmManager;
@@ -87,12 +93,16 @@
import android.app.usage.UsageStatsManager;
import android.appwidget.AppWidgetManager;
import android.bluetooth.BluetoothManager;
+import android.content.BroadcastReceiver;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.ContextWrapper;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.RestrictionsManager;
import android.content.pm.LauncherApps;
import android.content.pm.PackageManager;
+import android.content.pm.PermissionInfo;
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.hardware.ConsumerIrManager;
@@ -134,9 +144,13 @@
import android.view.inputmethod.InputMethodManager;
import android.view.textservice.TextServicesManager;
+import androidx.annotation.OptIn;
+import androidx.core.app.NotificationManagerCompat;
+import androidx.core.os.BuildCompat;
import androidx.core.test.R;
import androidx.test.filters.LargeTest;
import androidx.test.filters.SdkSuppress;
+import androidx.test.platform.app.InstrumentationRegistry;
import org.junit.Before;
import org.junit.Test;
@@ -146,7 +160,14 @@
@LargeTest
public class ContextCompatTest extends BaseInstrumentationTestCase<ThemedYellowActivity> {
private Context mContext;
+ private IntentFilter mTestFilter = new IntentFilter();
+ private String mPermission;
+ private BroadcastReceiver mTestReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ }
+ };
public ContextCompatTest() {
super(ThemedYellowActivity.class);
}
@@ -154,6 +175,7 @@
@Before
public void setup() {
mContext = mActivityTestRule.getActivity();
+ mPermission = mContext.getPackageName() + ".DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION";
}
@Test
@@ -445,6 +467,93 @@
return ((size * tdensity) + (sdensity >> 1)) / sdensity;
}
+ @Test
+ public void testRegisterReceiver_noExportStateFlagThrowsException() {
+ assertThrows(IllegalArgumentException.class, () -> ContextCompat.registerReceiver(mContext,
+ mTestReceiver, mTestFilter, 0));
+ }
+
+ @Test
+ public void testRegisterReceiver_specifyBothExportStateFlagsThrowsException() {
+ assertThrows(IllegalArgumentException.class,
+ () -> ContextCompat.registerReceiver(mContext,
+ mTestReceiver, mTestFilter,
+ ContextCompat.RECEIVER_EXPORTED | ContextCompat.RECEIVER_NOT_EXPORTED));
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = 33)
+ public void testRegisterReceiverApi33() {
+ Context spyContext = spy(mContext);
+
+ ContextCompat.registerReceiver(spyContext, mTestReceiver, mTestFilter,
+ ContextCompat.RECEIVER_NOT_EXPORTED);
+ verify(spyContext).registerReceiver(eq(mTestReceiver), eq(mTestFilter), eq(null),
+ any(), eq(ContextCompat.RECEIVER_NOT_EXPORTED));
+
+ ContextCompat.registerReceiver(spyContext, mTestReceiver, mTestFilter,
+ ContextCompat.RECEIVER_EXPORTED);
+ verify(spyContext).registerReceiver(eq(mTestReceiver), eq(mTestFilter), eq(null), any(),
+ eq(ContextCompat.RECEIVER_EXPORTED));
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = 26, maxSdkVersion = 32)
+ public void testRegisterReceiverApi26() {
+ Context spyContext = spy(mContext);
+
+ ContextCompat.registerReceiver(spyContext, mTestReceiver, mTestFilter,
+ ContextCompat.RECEIVER_NOT_EXPORTED);
+ verify(spyContext).registerReceiver(eq(mTestReceiver), eq(mTestFilter),
+ eq(mPermission), any());
+
+ ContextCompat.registerReceiver(spyContext, mTestReceiver, mTestFilter,
+ ContextCompat.RECEIVER_EXPORTED);
+ verify(spyContext).registerReceiver(eq(mTestReceiver), eq(mTestFilter), eq(null), any(),
+ eq(0));
+
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = 29, maxSdkVersion = 32)
+ public void testRegisterReceiverPermissionNotGrantedApi26() {
+ InstrumentationRegistry
+ .getInstrumentation().getUiAutomation().adoptShellPermissionIdentity();
+ assertThrows(RuntimeException.class,
+ () -> ContextCompat.registerReceiver(mContext,
+ mTestReceiver, mTestFilter, ContextCompat.RECEIVER_NOT_EXPORTED));
+ }
+
+ @Test
+ @SdkSuppress(maxSdkVersion = 25)
+ public void testRegisterReceiver() {
+ Context spyContext = spy(mContext);
+
+ ContextCompat.registerReceiver(spyContext, mTestReceiver, mTestFilter,
+ ContextCompat.RECEIVER_NOT_EXPORTED);
+ verify(spyContext).registerReceiver(eq(mTestReceiver), eq(mTestFilter), eq(mPermission),
+ any());
+
+ ContextCompat.registerReceiver(spyContext, mTestReceiver, mTestFilter,
+ ContextCompat.RECEIVER_EXPORTED);
+ verify(spyContext).registerReceiver(eq(mTestReceiver), eq(mTestFilter), eq(null), any());
+ }
+
+ @Test
+ public void testRegisterReceiver_mergedPermission_hasSignatureProtectionLevel()
+ throws Exception {
+ // Packages registering unexported runtime receivers on pre-T devices will have their
+ // receiver protected by a permission; to ensure other apps on the device cannot send a
+ // broadcast to these receivers, the permission must be declared with the signature
+ // protectionLevel.
+ PermissionInfo permissionInfo =
+ mContext.getPackageManager().getPermissionInfo(mPermission, 0);
+
+ assertEquals("The permission guarding unexported runtime receivers must have the "
+ + "signature protectionLevel.", PermissionInfo.PROTECTION_SIGNATURE,
+ permissionInfo.protectionLevel);
+ }
+
@Test(expected = NullPointerException.class)
public void testCheckSelfPermissionNull() {
ContextCompat.checkSelfPermission(mContext, null);
@@ -474,4 +583,22 @@
ContextCompat.checkSelfPermission(mContext,
android.Manifest.permission.DELETE_PACKAGES));
}
+
+ @Test
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ public void testCheckSelfPermissionNotificationPermission() {
+ if (BuildCompat.isAtLeastT()) {
+ assertEquals(
+ mContext.checkCallingPermission(Manifest.permission.POST_NOTIFICATIONS),
+ ContextCompat.checkSelfPermission(
+ mContext,
+ Manifest.permission.POST_NOTIFICATIONS));
+ } else {
+ assertEquals("Notification permission allowed by default on devices <= SDK 32",
+ NotificationManagerCompat.from(mContext).areNotificationsEnabled()
+ ? PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED,
+ ContextCompat.checkSelfPermission(mContext,
+ Manifest.permission.POST_NOTIFICATIONS));
+ }
+ }
}
diff --git a/core/core/src/androidTest/java/androidx/core/content/PackageManagerCompatTest.java b/core/core/src/androidTest/java/androidx/core/content/PackageManagerCompatTest.java
index 98a9aea..d612ba4 100644
--- a/core/core/src/androidTest/java/androidx/core/content/PackageManagerCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/content/PackageManagerCompatTest.java
@@ -318,6 +318,7 @@
* this case, they are permission revocation apps.
*/
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
+ @SuppressWarnings("deprecation")
static void setupPermissionRevocationApps(
PackageManager packageManager, List<String> packageNames) {
List<ResolveInfo> resolveInfos = new ArrayList<>();
diff --git a/core/core/src/androidTest/java/androidx/core/content/pm/PackageInfoCompatHasSignaturesTest.kt b/core/core/src/androidTest/java/androidx/core/content/pm/PackageInfoCompatHasSignaturesTest.kt
index 53f5500..bc98c5f 100644
--- a/core/core/src/androidTest/java/androidx/core/content/pm/PackageInfoCompatHasSignaturesTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/content/pm/PackageInfoCompatHasSignaturesTest.kt
@@ -333,6 +333,7 @@
}
}
+ @Suppress("DEPRECATION")
private fun mockPackageManager() = mockThrowOnUnmocked<PackageManager> {
val mockCerts = params.mockCerts
whenever(getPackageInfo(TEST_PKG_NAME, params.mockCerts.flag)) {
diff --git a/core/core/src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java b/core/core/src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java
index b4eb56a..6bab3ca 100644
--- a/core/core/src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java
@@ -89,7 +89,7 @@
import java.util.Collections;
import java.util.List;
-@SuppressWarnings("unchecked")
+@SuppressWarnings({"unchecked", "deprecation"})
@RunWith(AndroidJUnit4.class)
public class ShortcutManagerCompatTest extends BaseInstrumentationTestCase<TestActivity> {
diff --git a/core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java b/core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
index 4fe35fa..3d49310 100644
--- a/core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/graphics/TypefaceCompatTest.java
@@ -64,6 +64,7 @@
import java.util.concurrent.TimeUnit;
@SmallTest
+@SuppressWarnings("deprecation")
public class TypefaceCompatTest {
public Context mContext;
diff --git a/core/core/src/androidTest/java/androidx/core/graphics/drawable/IconCompatTest.java b/core/core/src/androidTest/java/androidx/core/graphics/drawable/IconCompatTest.java
index cd79b88..0d25f5e 100644
--- a/core/core/src/androidTest/java/androidx/core/graphics/drawable/IconCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/graphics/drawable/IconCompatTest.java
@@ -57,6 +57,7 @@
import java.io.OutputStream;
import java.util.Arrays;
+@SuppressWarnings("deprecation")
@RunWith(AndroidJUnit4.class)
@SmallTest
public class IconCompatTest {
diff --git a/core/core/src/androidTest/java/androidx/core/os/LocaleListCompatTest.java b/core/core/src/androidTest/java/androidx/core/os/LocaleListCompatTest.java
index 3fd5f6d..6bd9800 100644
--- a/core/core/src/androidTest/java/androidx/core/os/LocaleListCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/os/LocaleListCompatTest.java
@@ -393,6 +393,44 @@
assertNotEquals(first.toLanguageTags(), second.toLanguageTags());
}
+ @SdkSuppress(minSdkVersion = 21)
+ @Test
+ public void testLocaleListCompat_matchesLanguageAndScript() {
+ assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("fr-Latn-FR"),
+ forLanguageTag("fr-Latn")));
+ assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-Hans-CN"),
+ forLanguageTag("zh-Hans")));
+ assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-Hant-TW"),
+ forLanguageTag("zh-Hant")));
+ assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("en-US"),
+ forLanguageTag("en-US")));
+ assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("en-US"),
+ forLanguageTag("en-CA")));
+ assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("ar-NA"),
+ forLanguageTag("ar-ZA")));
+ assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-CN"),
+ forLanguageTag("zh")));
+ assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-CN"),
+ forLanguageTag("zh-Hans")));
+ assertTrue(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-TW"),
+ forLanguageTag("zh-Hant")));
+
+ assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-Hant-TW"),
+ forLanguageTag("zh-Hans")));
+ assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("en-XA"),
+ forLanguageTag("en-US")));
+ assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("ar-YE"),
+ forLanguageTag("ar-XB")));
+ assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("en-US"),
+ forLanguageTag("zh-TW")));
+ assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-TW"),
+ forLanguageTag("zh")));
+ assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-CN"),
+ forLanguageTag("zh-Hant")));
+ assertFalse(LocaleListCompat.matchesLanguageAndScript(forLanguageTag("zh-TW"),
+ forLanguageTag("zh-Hans")));
+ }
+
private Locale forLanguageTag(String str) {
if (Build.VERSION.SDK_INT >= 21) {
return Locale.forLanguageTag(str);
diff --git a/core/core/src/androidTest/java/androidx/core/os/ParcelCompatTest.java b/core/core/src/androidTest/java/androidx/core/os/ParcelCompatTest.java
index e1d273b..873a9c2 100644
--- a/core/core/src/androidTest/java/androidx/core/os/ParcelCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/os/ParcelCompatTest.java
@@ -16,17 +16,31 @@
package androidx.core.os;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
+import android.content.pm.Signature;
+import android.graphics.Rect;
+import android.os.Build;
import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.SparseArray;
+import androidx.annotation.RequiresApi;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SdkSuppress;
import androidx.test.filters.SmallTest;
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Objects;
+
@RunWith(AndroidJUnit4.class)
@SmallTest
public class ParcelCompatTest {
@@ -40,4 +54,186 @@
assertTrue(ParcelCompat.readBoolean(p));
assertFalse(ParcelCompat.readBoolean(p));
}
+
+ @Test
+ public void readParcelable2Arg() {
+ Rect r = new Rect(0, 0, 10, 10);
+ Parcel p = Parcel.obtain();
+ p.writeParcelable(r, 0);
+
+ p.setDataPosition(0);
+ Rect r2 = ParcelCompat.readParcelable(p, Rect.class.getClassLoader(), Rect.class);
+ assertEquals(r, r2);
+ }
+
+ @Test
+ public void readArrayInT() {
+ Parcel p = Parcel.obtain();
+
+ Signature[] s = {new Signature("1234"),
+ null,
+ new Signature("abcd")};
+ p.writeArray(s);
+
+ p.setDataPosition(0);
+ Object[] objects = ParcelCompat.readArray(p, Signature.class.getClassLoader(),
+ Signature.class);
+ assertTrue(Arrays.equals(s, objects));
+ p.setDataPosition(0);
+
+ p.recycle();
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.S)
+ @Test
+ public void readSparseArrayInT() {
+ Parcel p = Parcel.obtain();
+
+ SparseArray<Signature> s = new SparseArray<>();
+ s.put(0, new Signature("1234567890abcdef"));
+ s.put(2, null);
+ s.put(3, new Signature("abcdef1234567890"));
+ p.writeSparseArray(s);
+
+ p.setDataPosition(0);
+ SparseArray<Signature> s1 = ParcelCompat.readSparseArray(p,
+ Signature.class.getClassLoader(), Signature.class);
+ assertEquals(s.size(), s1.size());
+ for (int index = 0; index < s.size(); index++) {
+ int key = s.keyAt(index);
+ assertTrue(Objects.equals(s.valueAt(index), s1.get(key)));
+ }
+
+ p.recycle();
+ }
+
+ @Test
+ @SuppressWarnings("unchecked")
+ public void readListInT() {
+ Parcel p = Parcel.obtain();
+ ArrayList<Signature> s = new ArrayList();
+ ArrayList<Signature> s2 = new ArrayList();
+ s.add(new Signature("1234567890abcdef"));
+ s.add(new Signature("abcdef1234567890"));
+
+ p.writeList(s);
+ p.setDataPosition(0);
+ ParcelCompat.readList(p, s2, Signature.class.getClassLoader(), Signature.class);
+ assertEquals(2, s2.size());
+ for (int i = 0; i < s2.size(); i++) {
+ assertEquals(s.get(i), s2.get(i));
+ }
+ p.recycle();
+ }
+
+ @Test
+ public void readArrayListInT() {
+ Parcel p = Parcel.obtain();
+
+ ArrayList<Signature> s = new ArrayList<>();
+ s.add(new Signature("1234567890abcdef"));
+ s.add(null);
+ s.add(new Signature("abcdef1234567890"));
+
+ p.writeList(s);
+ p.setDataPosition(0);
+ ArrayList<Signature> s1 = ParcelCompat.readArrayList(p, Signature.class.getClassLoader(),
+ Signature.class);
+ assertEquals(s, s1);
+
+ p.recycle();
+ }
+
+ @Test
+ public void readMapInT() {
+ Parcel p = Parcel.obtain();
+ ClassLoader loader = getClass().getClassLoader();
+ HashMap<String, Signature> map = new HashMap<>();
+ HashMap<String, Signature> map2 = new HashMap<>();
+
+ map.put("key1", new Signature("abcd"));
+ map.put("key2", new Signature("ABCD"));
+ p.writeMap(map);
+ p.setDataPosition(0);
+ ParcelCompat.readMap(p, map2, Signature.class.getClassLoader(), String.class,
+ Signature.class);
+ assertEquals(map, map2);
+
+ p.recycle();
+ }
+
+ @Test
+ public void readHashMapInT() {
+ Parcel p = Parcel.obtain();
+ ClassLoader loader = getClass().getClassLoader();
+ HashMap<String, Signature> map = new HashMap<>();
+ HashMap<String, Signature> map2 = new HashMap<>();
+
+ map.put("key1", new Signature("abcd"));
+ map.put("key2", new Signature("ABCD"));
+ p.writeMap(map);
+ p.setDataPosition(0);
+ map2 = ParcelCompat.readHashMap(p, loader, String.class, Signature.class);
+ assertEquals(map, map2);
+
+ p.recycle();
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.R)
+ @Test
+ public void readParcelableCreatorInT() {
+ final String signatureString = "1234567890abcdef";
+ Signature s = new Signature(signatureString);
+
+ Parcel p = Parcel.obtain();
+ p.writeParcelableCreator(s);
+ p.setDataPosition(0);
+ assertSame(Signature.CREATOR, ParcelCompat.readParcelableCreator(p,
+ Signature.class.getClassLoader(), Signature.class));
+
+ p.setDataPosition(0);
+ p.recycle();
+ }
+
+ @Test
+ public void readParcelableArrayInT() {
+ Parcel p = Parcel.obtain();
+ Signature[] s = {new Signature("1234"),
+ null,
+ new Signature("abcd")
+ };
+ p.writeParcelableArray(s, 0);
+ p.setDataPosition(0);
+ Parcelable[] s1 = ParcelCompat.readParcelableArray(p, Signature.class.getClassLoader(),
+ Signature.class);
+ assertTrue(Arrays.equals(s, s1));
+ p.recycle();
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+ @Test
+ public void readParcelableListInT() {
+ final Parcel p = Parcel.obtain();
+ ArrayList<Signature> list = new ArrayList<>();
+ ArrayList<Signature> list1 = new ArrayList<>();
+ list.add(new Signature("1234"));
+ list.add(new Signature("4321"));
+ p.writeParcelableList(list, 0);
+ p.setDataPosition(0);
+ ParcelCompat.readParcelableList(p, list1, Signature.class.getClassLoader(),
+ Signature.class);
+ assertEquals(list, list1);
+ p.recycle();
+ }
+
+ @Test
+ public void readSerializable2Arg() {
+ String s = "Hello World";
+ Parcel p = Parcel.obtain();
+ p.writeSerializable(s);
+
+ p.setDataPosition(0);
+ String s2 = ParcelCompat.readSerializable(p, String.class.getClassLoader(), String.class);
+ assertEquals(s, s2);
+ }
}
diff --git a/core/core/src/androidTest/java/androidx/core/provider/FontsContractCompatTest.java b/core/core/src/androidTest/java/androidx/core/provider/FontsContractCompatTest.java
index 4499af4..5112fed 100644
--- a/core/core/src/androidTest/java/androidx/core/provider/FontsContractCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/provider/FontsContractCompatTest.java
@@ -68,6 +68,7 @@
*/
@RunWith(AndroidJUnit4.class)
@MediumTest
+@SuppressWarnings("deprecation")
public class FontsContractCompatTest {
private static final String AUTHORITY = "androidx.core.provider.fonts.font";
private static final String PACKAGE = "androidx.core.test";
@@ -322,6 +323,7 @@
}
@Test
+ @SuppressWarnings("deprecation")
public void testGetProvider_duplicateCerts()
throws PackageManager.NameNotFoundException {
PackageManager packageManager = mock(PackageManager.class);
@@ -377,6 +379,7 @@
}
}
+ @SuppressWarnings("deprecation")
private ProviderInfo setupPackageManager(PackageManager packageManager)
throws PackageManager.NameNotFoundException {
ProviderInfo info = new ProviderInfo();
diff --git a/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java
index e32d604..e564d40 100644
--- a/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompatTest.java
@@ -125,6 +125,14 @@
assertThat(nodeCompat.isTextEntryKey(), is(false));
}
+ @Test
+ public void testGetSetUniqueId() {
+ final String uniqueId = (Build.VERSION.SDK_INT >= 19) ? "localUId" : null;
+ AccessibilityNodeInfoCompat nodeCompat = obtainedWrappedNodeCompat();
+ nodeCompat.setUniqueId(uniqueId);
+ assertThat(nodeCompat.getUniqueId(), equalTo(uniqueId));
+ }
+
@SdkSuppress(minSdkVersion = 19)
@Test
public void testAccessibilityActionsNotNull() {
@@ -268,4 +276,14 @@
accessibilityNodeInfoCompat.setAvailableExtraData(testData);
assertThat(accessibilityNodeInfoCompat.getAvailableExtraData(), equalTo(testData));
}
+
+ @SdkSuppress(minSdkVersion = 33)
+ @SmallTest
+ @Test
+ public void testGetExtraRenderingInfo() {
+ AccessibilityNodeInfoCompat accessibilityNodeInfoCompat = obtainedWrappedNodeCompat();
+ assertThat(
+ accessibilityNodeInfoCompat.getExtraRenderingInfo(),
+ equalTo(accessibilityNodeInfoCompat.unwrap().getExtraRenderingInfo()));
+ }
}
diff --git a/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompatTest.java b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompatTest.java
new file mode 100644
index 0000000..a1afdfda
--- /dev/null
+++ b/core/core/src/androidTest/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompatTest.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.core.view.accessibility;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsEqual.equalTo;
+
+import android.annotation.TargetApi;
+import android.graphics.Region;
+import android.view.accessibility.AccessibilityWindowInfo;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SdkSuppress;
+import androidx.test.filters.SmallTest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class AccessibilityWindowInfoCompatTest {
+
+ @TargetApi(21)
+ private AccessibilityWindowInfoCompat obtainedWrappedWindowCompat() {
+ AccessibilityWindowInfo accessibilityWindowInfo = AccessibilityWindowInfo.obtain();
+ return AccessibilityWindowInfoCompat.wrapNonNullInstance(accessibilityWindowInfo);
+ }
+
+ @SdkSuppress(minSdkVersion = 33)
+ @SmallTest
+ @Test
+ public void testUnwrap() {
+ AccessibilityWindowInfo accessibilityWindowInfo = AccessibilityWindowInfo.obtain();
+ AccessibilityWindowInfoCompat accessibilityWindowInfoCompat =
+ AccessibilityWindowInfoCompat.wrapNonNullInstance(accessibilityWindowInfo);
+ assertThat(accessibilityWindowInfoCompat.unwrap(), equalTo(accessibilityWindowInfo));
+ }
+
+ @SdkSuppress(minSdkVersion = 33)
+ @SmallTest
+ @Test
+ public void testIsPictureInPictureMode() {
+ AccessibilityWindowInfoCompat windowInfoCompat = obtainedWrappedWindowCompat();
+ assertThat(windowInfoCompat.isInPictureInPictureMode(), equalTo(
+ windowInfoCompat.unwrap().isInPictureInPictureMode()));
+ }
+
+ @SdkSuppress(minSdkVersion = 33)
+ @SmallTest
+ @Test
+ public void testGetDisplayId() {
+ AccessibilityWindowInfoCompat windowInfoCompat = obtainedWrappedWindowCompat();
+ assertThat(windowInfoCompat.getDisplayId(), equalTo(
+ windowInfoCompat.unwrap().getDisplayId()));
+ }
+
+ @SdkSuppress(minSdkVersion = 33)
+ @SmallTest
+ @Test
+ public void testGetRegionInScreen() {
+ AccessibilityWindowInfoCompat windowInfoCompat = obtainedWrappedWindowCompat();
+ Region region = new Region();
+ Region compatRegion = new Region();
+ windowInfoCompat.unwrap().getRegionInScreen(region);
+ windowInfoCompat.getRegionInScreen(region);
+ assertThat(region, equalTo(compatRegion));
+ }
+}
diff --git a/core/core/src/androidTest/java/androidx/core/widget/TextViewCompatTest.java b/core/core/src/androidTest/java/androidx/core/widget/TextViewCompatTest.java
index 2a9a40b..0765571 100644
--- a/core/core/src/androidTest/java/androidx/core/widget/TextViewCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/widget/TextViewCompatTest.java
@@ -489,6 +489,7 @@
@Test
@SdkSuppress(minSdkVersion = 26, maxSdkVersion = 27)
+ @SuppressWarnings("deprecation")
public void testSetCustomSelectionActionModeCallback_fixesBugInO() {
// Create mock context and package manager for the text view.
final PackageManager packageManagerMock = spy(mTextView.getContext().getPackageManager());
diff --git a/core/core/src/main/AndroidManifest.xml b/core/core/src/main/AndroidManifest.xml
index 8481017..d214fa6 100644
--- a/core/core/src/main/AndroidManifest.xml
+++ b/core/core/src/main/AndroidManifest.xml
@@ -16,4 +16,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:appComponentFactory="androidx.core.app.CoreComponentFactory" />
+ <permission android:name="${applicationId}.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"
+ android:protectionLevel="signature" />
+ <uses-permission android:name="${applicationId}.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"/>
</manifest>
diff --git a/core/core/src/main/java/androidx/core/app/ActivityCompat.java b/core/core/src/main/java/androidx/core/app/ActivityCompat.java
index 9c36ad6..4481909 100644
--- a/core/core/src/main/java/androidx/core/app/ActivityCompat.java
+++ b/core/core/src/main/java/androidx/core/app/ActivityCompat.java
@@ -16,6 +16,7 @@
package androidx.core.app;
+import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
@@ -40,15 +41,19 @@
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.core.content.ContextCompat;
import androidx.core.content.LocusIdCompat;
+import androidx.core.os.BuildCompat;
import androidx.core.view.DragAndDropPermissionsCompat;
import java.util.Arrays;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* Helper for accessing features in {@link android.app.Activity}.
@@ -331,6 +336,7 @@
* <p>Note that this is <em>not</em> a security feature -- you can not trust the
* referrer information, applications can spoof it.</p>
*/
+ @SuppressWarnings("deprecation")
@Nullable
public static Uri getReferrer(@NonNull Activity activity) {
if (Build.VERSION.SDK_INT >= 22) {
@@ -486,6 +492,15 @@
* RuntimePermissions</a> sample app demonstrates how to use this method to
* request permissions at run time.
* </p>
+ * <p>
+ * If {@link Manifest.permission#POST_NOTIFICATIONS} is requested before the device supports
+ * the notification permission, then {@link Manifest.permission#POST_NOTIFICATIONS} will be
+ * removed from {@link OnRequestPermissionsResultCallback#onRequestPermissionsResult}.
+ * For devices that don't support {@link Manifest.permission#POST_NOTIFICATIONS}, apps can
+ * send users to its notification settings to enable notifications. See
+ * {@link android.provider.Settings.ACTION_APP_NOTIFICATION_SETTINGS} for more information
+ * on launching notification settings.
+ * </p>
*
* @param activity The target activity.
* @param permissions The requested permissions. Must be non-null and not empty.
@@ -497,6 +512,7 @@
* @see #checkSelfPermission(android.content.Context, String)
* @see #shouldShowRequestPermissionRationale(android.app.Activity, String)
*/
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
public static void requestPermissions(final @NonNull Activity activity,
final @NonNull String[] permissions, final @IntRange(from = 0) int requestCode) {
if (sDelegate != null
@@ -505,11 +521,32 @@
return;
}
- for (String permission : permissions) {
- if (TextUtils.isEmpty(permission)) {
+ Set<Integer> indicesOfPermissionsToRemove = new HashSet<>();
+ for (int i = 0; i < permissions.length; i++) {
+ if (TextUtils.isEmpty(permissions[i])) {
throw new IllegalArgumentException("Permission request for permissions "
+ Arrays.toString(permissions) + " must not contain null or empty values");
}
+
+ if (!BuildCompat.isAtLeastT()) {
+ if (TextUtils.equals(permissions[i], Manifest.permission.POST_NOTIFICATIONS)) {
+ indicesOfPermissionsToRemove.add(i);
+ }
+ }
+ }
+
+ int numPermissionsToRemove = indicesOfPermissionsToRemove.size();
+ final String[] permissionsArray = numPermissionsToRemove > 0
+ ? new String[permissions.length - numPermissionsToRemove] : permissions;
+ if (numPermissionsToRemove > 0) {
+ if (numPermissionsToRemove == permissions.length) {
+ return;
+ }
+ for (int i = 0, modifiedIndex = 0; i < permissions.length; i++) {
+ if (!indicesOfPermissionsToRemove.contains(i)) {
+ permissionsArray[modifiedIndex++] = permissions[i];
+ }
+ }
}
if (Build.VERSION.SDK_INT >= 23) {
@@ -523,19 +560,19 @@
handler.post(new Runnable() {
@Override
public void run() {
- final int[] grantResults = new int[permissions.length];
+ final int[] grantResults = new int[permissionsArray.length];
PackageManager packageManager = activity.getPackageManager();
String packageName = activity.getPackageName();
- final int permissionCount = permissions.length;
+ final int permissionCount = permissionsArray.length;
for (int i = 0; i < permissionCount; i++) {
grantResults[i] = packageManager.checkPermission(
- permissions[i], packageName);
+ permissionsArray[i], packageName);
}
((OnRequestPermissionsResultCallback) activity).onRequestPermissionsResult(
- requestCode, permissions, grantResults);
+ requestCode, permissionsArray, grantResults);
}
});
}
@@ -551,8 +588,14 @@
* @see #checkSelfPermission(Context, String)
* @see #requestPermissions(Activity, String[], int)
*/
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
public static boolean shouldShowRequestPermissionRationale(@NonNull Activity activity,
@NonNull String permission) {
+ if (!BuildCompat.isAtLeastT()
+ && TextUtils.equals(Manifest.permission.POST_NOTIFICATIONS, permission)) {
+ // notification permission doesn't exist before T
+ return false;
+ }
if (Build.VERSION.SDK_INT >= 23) {
return Api23Impl.shouldShowRequestPermissionRationale(activity, permission);
}
diff --git a/core/core/src/main/java/androidx/core/app/ComponentActivity.java b/core/core/src/main/java/androidx/core/app/ComponentActivity.java
index 764e041..206cfd2 100644
--- a/core/core/src/main/java/androidx/core/app/ComponentActivity.java
+++ b/core/core/src/main/java/androidx/core/app/ComponentActivity.java
@@ -28,8 +28,10 @@
import androidx.annotation.CallSuper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
import androidx.annotation.RestrictTo;
import androidx.collection.SimpleArrayMap;
+import androidx.core.os.BuildCompat;
import androidx.core.view.KeyEventDispatcher;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
@@ -167,6 +169,7 @@
return !shouldSkipDump(args);
}
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
private static boolean shouldSkipDump(@Nullable String[] args) {
if (args != null && args.length > 0) {
// NOTE: values below are hardcoded on framework's Activity (like dumpInner())
@@ -177,6 +180,9 @@
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q;
case "--translation":
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S;
+ case "--list-dumpables":
+ case "--dump-dumpable":
+ return BuildCompat.isAtLeastT();
}
}
return false;
diff --git a/core/core/src/main/java/androidx/core/app/LocaleManagerCompat.java b/core/core/src/main/java/androidx/core/app/LocaleManagerCompat.java
new file mode 100644
index 0000000..9aabc8c
--- /dev/null
+++ b/core/core/src/main/java/androidx/core/app/LocaleManagerCompat.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.core.app;
+
+import android.app.LocaleManager;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.os.Build;
+import android.os.LocaleList;
+
+import androidx.annotation.AnyThread;
+import androidx.annotation.DoNotInline;
+import androidx.annotation.NonNull;
+import androidx.annotation.OptIn;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.VisibleForTesting;
+import androidx.core.os.BuildCompat;
+import androidx.core.os.LocaleListCompat;
+
+import java.util.Locale;
+
+/**
+ * Helper for accessing features in {@link android.app.LocaleManager} in a backwards compatible
+ * fashion.
+ *
+ * <p><b>Note:</b> Backwards compatibility for
+ * {@link LocaleManager#setApplicationLocales(LocaleList)} and
+ * {@link LocaleManager#getApplicationLocales()} is available via AppCompatDelegate.
+ */
+public final class LocaleManagerCompat {
+
+ private LocaleManagerCompat() {}
+
+ /**
+ * Returns the current system locales, ignoring app-specific overrides.
+ *
+ * <p><b>Note:</b> Apps should generally access the user's locale preferences as indicated in
+ * their in-process {@link android.os.LocaleList}s. However, in case an app-specific locale
+ * is set, this method helps cater to rare use-cases which might require specifically knowing
+ * the system locale.
+ */
+ @OptIn(markerClass = androidx.core.os.BuildCompat.PrereleaseSdkCheck.class)
+ @NonNull
+ @AnyThread
+ public static LocaleListCompat getSystemLocales(@NonNull Context context) {
+ LocaleListCompat systemLocales = LocaleListCompat.getEmptyLocaleList();
+ // TODO: modify the check to Build.Version.SDK_INT >= 33.
+ if (BuildCompat.isAtLeastT()) {
+ // If the API version is 33 or above we want to redirect the call to the framework API.
+ Object localeManager = getLocaleManagerForApplication(context);
+ if (localeManager != null) {
+ systemLocales = LocaleListCompat.wrap(Api33Impl.localeManagerGetSystemLocales(
+ localeManager));
+ }
+ } else {
+ // Changing app locales using AppCompatDelegate for API < 33 does not modify the
+ // context's configuration and hence this configuration can be used to fetch system
+ // locales.
+ systemLocales = getConfigurationLocales(context.getApplicationContext()
+ .getResources().getConfiguration());
+ }
+ return systemLocales;
+ }
+
+ /**
+ * Returns the localeManager for the current application.
+ */
+ @RequiresApi(33)
+ private static Object getLocaleManagerForApplication(Context context) {
+ return context.getSystemService(Context.LOCALE_SERVICE);
+ }
+
+ @VisibleForTesting
+ static LocaleListCompat getConfigurationLocales(Configuration conf) {
+ if (Build.VERSION.SDK_INT >= 24) {
+ return Api24Impl.getLocales(conf);
+ } else if (Build.VERSION.SDK_INT >= 21) {
+ return LocaleListCompat.forLanguageTags(Api21Impl.toLanguageTag(conf.locale));
+ } else {
+ // Create LocaleListCompat using the configuration locale directly since
+ // Locale.toLanguageTag() was added for API level 21 and above.
+ return LocaleListCompat.create(conf.locale);
+ }
+ }
+
+ @RequiresApi(21)
+ static class Api21Impl {
+ private Api21Impl() {}
+
+ @DoNotInline
+ static String toLanguageTag(Locale locale) {
+ return locale.toLanguageTag();
+ }
+ }
+
+ @RequiresApi(24)
+ static class Api24Impl {
+ private Api24Impl() {}
+
+ @DoNotInline
+ static LocaleListCompat getLocales(Configuration configuration) {
+ return LocaleListCompat.forLanguageTags(configuration.getLocales().toLanguageTags());
+ }
+ }
+
+ @RequiresApi(33)
+ static class Api33Impl {
+ private Api33Impl() {}
+
+ @DoNotInline
+ static LocaleList localeManagerGetSystemLocales(Object localeManager) {
+ LocaleManager mLocaleManager = (LocaleManager) localeManager;
+ return mLocaleManager.getSystemLocales();
+ }
+ }
+}
diff --git a/core/core/src/main/java/androidx/core/app/NotificationManagerCompat.java b/core/core/src/main/java/androidx/core/app/NotificationManagerCompat.java
index de76c7f..08343a4 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationManagerCompat.java
@@ -794,6 +794,7 @@
* Check the current list of enabled listener packages and update the records map
* accordingly.
*/
+ @SuppressWarnings("deprecation")
private void updateListenerMap() {
Set<String> enabledPackages = getEnabledListenerPackages(mContext);
if (enabledPackages.equals(mCachedEnabledPackages)) {
diff --git a/core/core/src/main/java/androidx/core/app/ShareCompat.java b/core/core/src/main/java/androidx/core/app/ShareCompat.java
index c209d4f..5cfe607 100644
--- a/core/core/src/main/java/androidx/core/app/ShareCompat.java
+++ b/core/core/src/main/java/androidx/core/app/ShareCompat.java
@@ -196,7 +196,7 @@
* @param intent Intent that was launched to share content
* @return ComponentName of the calling activity
*/
- @SuppressWarnings("WeakerAccess")
+ @SuppressWarnings({"WeakerAccess", "deprecation"})
@Nullable
static ComponentName getCallingActivity(@NonNull Intent intent) {
ComponentName result = intent.getParcelableExtra(EXTRA_CALLING_ACTIVITY);
@@ -882,6 +882,7 @@
* @return A URI referring to a data stream to be shared or null if one was not supplied
* @see Intent#EXTRA_STREAM
*/
+ @SuppressWarnings("deprecation")
@Nullable
public Uri getStream() {
return mIntent.getParcelableExtra(Intent.EXTRA_STREAM);
@@ -896,6 +897,7 @@
* @see Intent#EXTRA_STREAM
* @see Intent#ACTION_SEND_MULTIPLE
*/
+ @SuppressWarnings("deprecation")
@Nullable
public Uri getStream(int index) {
if (mStreams == null && isMultipleShare()) {
@@ -918,6 +920,7 @@
*
* @return Count of text items contained within the Intent
*/
+ @SuppressWarnings("deprecation")
public int getStreamCount() {
if (mStreams == null && isMultipleShare()) {
mStreams = mIntent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
@@ -1066,6 +1069,7 @@
*
* @return The calling application's label or null if unknown
*/
+ @SuppressWarnings("deprecation")
@Nullable
public CharSequence getCallingApplicationLabel() {
if (mCallingPackage == null) return null;
diff --git a/core/core/src/main/java/androidx/core/content/ContextCompat.java b/core/core/src/main/java/androidx/core/content/ContextCompat.java
index 942112e..0408fee 100644
--- a/core/core/src/main/java/androidx/core/content/ContextCompat.java
+++ b/core/core/src/main/java/androidx/core/content/ContextCompat.java
@@ -84,10 +84,12 @@
import android.app.usage.UsageStatsManager;
import android.appwidget.AppWidgetManager;
import android.bluetooth.BluetoothManager;
+import android.content.BroadcastReceiver;
import android.content.ClipboardManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.RestrictionsManager;
import android.content.pm.ApplicationInfo;
import android.content.pm.LauncherApps;
@@ -126,6 +128,7 @@
import android.telecom.TelecomManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.text.TextUtils;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
@@ -139,16 +142,23 @@
import androidx.annotation.ColorRes;
import androidx.annotation.DoNotInline;
import androidx.annotation.DrawableRes;
+import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
import androidx.core.app.ActivityOptionsCompat;
+import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.res.ResourcesCompat;
+import androidx.core.os.BuildCompat;
import androidx.core.os.EnvironmentCompat;
import androidx.core.os.ExecutorCompat;
import androidx.core.util.ObjectsCompat;
import java.io.File;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.HashMap;
import java.util.concurrent.Executor;
@@ -190,6 +200,35 @@
return null;
}
+
+ private static final String DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION_SUFFIX =
+ ".DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION";
+
+
+ /** @hide */
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ @IntDef(flag = true, value = {
+ RECEIVER_VISIBLE_TO_INSTANT_APPS, RECEIVER_EXPORTED, RECEIVER_NOT_EXPORTED,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface RegisterReceiverFlags {}
+ /**
+ * Flag for {@link #registerReceiver}: The receiver can receive broadcasts from Instant Apps.
+ */
+ public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 0x1;
+
+ /**
+ * Flag for {@link #registerReceiver}: The receiver can receive broadcasts from other Apps.
+ * Has the same behavior as marking a statically registered receiver with "exported=true"
+ */
+ public static final int RECEIVER_EXPORTED = 0x2;
+
+ /**
+ * Flag for {@link #registerReceiver}: The receiver cannot receive broadcasts from other Apps.
+ * Has the same behavior as marking a statically registered receiver with "exported=false"
+ */
+ public static final int RECEIVER_NOT_EXPORTED = 0x4;
+
/**
* Start a set of activities as a synthesized task stack, if able.
*
@@ -550,8 +589,15 @@
* permission, or {@link PackageManager#PERMISSION_DENIED} if not.
* @see PackageManager#checkPermission(String, String)
*/
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
public static int checkSelfPermission(@NonNull Context context, @NonNull String permission) {
ObjectsCompat.requireNonNull(permission, "permission must be non-null");
+ if (!BuildCompat.isAtLeastT()
+ && TextUtils.equals(android.Manifest.permission.POST_NOTIFICATIONS, permission)) {
+ return NotificationManagerCompat.from(context).areNotificationsEnabled()
+ ? PackageManager.PERMISSION_GRANTED
+ : PackageManager.PERMISSION_DENIED;
+ }
return context.checkPermission(permission, Process.myPid(), Process.myUid());
}
@@ -727,6 +773,89 @@
}
/**
+ * Register a broadcast receiver.
+ *
+ * @param context Context to retrieve service from.
+ * @param receiver The BroadcastReceiver to handle the broadcast.
+ * @param filter Selects the Intent broadcasts to be received.
+ * @param flags Specify one of {@link #RECEIVER_EXPORTED}, if you wish for your receiver
+ * to be able to receiver broadcasts from other applications, or
+ * {@link #RECEIVER_NOT_EXPORTED} if you only want your receiver to be able
+ * to receive broadcasts from the system or your own app.
+ * @return The first sticky intent found that matches <var>filter</var>,
+ * or null if there are none.
+ * @see Context#registerReceiver(BroadcastReceiver, IntentFilter, int)
+ */
+ @Nullable
+ public static Intent registerReceiver(@NonNull Context context,
+ @Nullable BroadcastReceiver receiver, @NonNull IntentFilter filter,
+ @RegisterReceiverFlags int flags) {
+ return registerReceiver(context, receiver, filter, null, null, flags);
+ }
+
+ /**
+ * Register a broadcast receiver.
+ *
+ * @param context Context to retrieve service from.
+ * @param receiver The BroadcastReceiver to handle the broadcast.
+ * @param filter Selects the Intent broadcasts to be received.
+ * @param broadcastPermission String naming a permission that a broadcaster must hold in
+ * order to send and Intent to you. If null, no permission is
+ * required.
+ * @param scheduler Handler identifying the thread will receive the Intent. If
+ * null, the main thread of the process will be used.
+ * @param flags Specify one of {@link #RECEIVER_EXPORTED}, if you wish for your
+ * receiver to be able to receiver broadcasts from other
+ * applications, or {@link #RECEIVER_NOT_EXPORTED} if you only want
+ * your receiver to be able to receive broadcasts from the system
+ * or your own app.
+ * @return The first sticky intent found that matches <var>filter</var>,
+ * or null if there are none.
+ * @see Context#registerReceiver(BroadcastReceiver, IntentFilter, String, Handler, int)
+ */
+ @Nullable
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ public static Intent registerReceiver(@NonNull Context context,
+ @Nullable BroadcastReceiver receiver, @NonNull IntentFilter filter,
+ @Nullable String broadcastPermission,
+ @Nullable Handler scheduler, @RegisterReceiverFlags int flags) {
+ if (((flags & RECEIVER_VISIBLE_TO_INSTANT_APPS) != 0) && ((flags & RECEIVER_NOT_EXPORTED)
+ != 0)) {
+ throw new IllegalArgumentException("Cannot specify both "
+ + "RECEIVER_VISIBLE_TO_INSTANT_APPS and RECEIVER_NOT_EXPORTED");
+ }
+
+ if ((flags & RECEIVER_VISIBLE_TO_INSTANT_APPS) != 0) {
+ flags |= RECEIVER_EXPORTED;
+ }
+
+ if (((flags & RECEIVER_EXPORTED) == 0) && ((flags & RECEIVER_NOT_EXPORTED) == 0)) {
+ throw new IllegalArgumentException("One of either RECEIVER_EXPORTED or "
+ + "RECEIVER_NOT_EXPORTED is required");
+ }
+
+ if (((flags & RECEIVER_EXPORTED) != 0) && ((flags & RECEIVER_NOT_EXPORTED) != 0)) {
+ throw new IllegalArgumentException("Cannot specify both RECEIVER_EXPORTED and "
+ + "RECEIVER_NOT_EXPORTED");
+ }
+
+ if (BuildCompat.isAtLeastT()) {
+ return Api33Impl.registerReceiver(context, receiver, filter, broadcastPermission,
+ scheduler, flags);
+ }
+ if (Build.VERSION.SDK_INT >= 26) {
+ return Api26Impl.registerReceiver(context, receiver, filter, broadcastPermission,
+ scheduler, flags);
+ }
+ if (((flags & RECEIVER_NOT_EXPORTED) != 0) && (broadcastPermission == null)) {
+ String permission = obtainAndCheckReceiverPermission(context);
+ return context.registerReceiver(receiver, filter, permission, scheduler /* handler */);
+ }
+ return context.registerReceiver(receiver, filter, broadcastPermission,
+ scheduler);
+ }
+
+ /**
* Gets the name of the system-level service that is represented by the specified class.
*
* @param context Context to retrieve service name from.
@@ -743,6 +872,25 @@
return LegacyServiceMapHolder.SERVICES.get(serviceClass);
}
+ /**
+ * Gets the name of the permission required to unexport receivers on pre Tiramisu versions of
+ * Android, and then asserts that the app registering the receiver also has that permission
+ * so it can receiver its own broadcasts.
+ *
+ * @param obj Context to check the permission in.
+ * @return The name of the permission
+ */
+ static String obtainAndCheckReceiverPermission(Context obj) {
+ String permission =
+ obj.getPackageName() + DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION_SUFFIX;
+ if (PermissionChecker.checkSelfPermission(obj, permission)
+ != PermissionChecker.PERMISSION_GRANTED) {
+ throw new RuntimeException("Permission " + permission + " is required by your "
+ + "application to receive broadcasts, please add it to your manifest");
+ }
+ return permission;
+ }
+
/** Nested class provides lazy initialization only when needed. */
private static final class LegacyServiceMapHolder {
static final HashMap<Class<?>, String> SERVICES = new HashMap<>();
@@ -925,6 +1073,18 @@
// This class is not instantiable.
}
+ @DoNotInline
+ static Intent registerReceiver(Context obj, @Nullable BroadcastReceiver receiver,
+ IntentFilter filter, String broadcastPermission, Handler scheduler, int flags) {
+ if ((flags & RECEIVER_NOT_EXPORTED) != 0 && broadcastPermission == null) {
+ String permission = obtainAndCheckReceiverPermission(obj);
+ // receivers that are not exported should also not be visible to instant apps
+ return obj.registerReceiver(receiver, filter, permission, scheduler);
+ }
+ flags &= Context.RECEIVER_VISIBLE_TO_INSTANT_APPS;
+ return obj.registerReceiver(receiver, filter, broadcastPermission, scheduler, flags);
+ }
+
@SuppressWarnings("UnusedReturnValue")
@DoNotInline
static ComponentName startForegroundService(Context obj, Intent service) {
@@ -955,4 +1115,17 @@
return obj.getAttributionTag();
}
}
+
+ @RequiresApi(33)
+ static class Api33Impl {
+ private Api33Impl() {
+ // This class is not instantiable
+ }
+
+ @DoNotInline
+ static Intent registerReceiver(Context obj, @Nullable BroadcastReceiver receiver,
+ IntentFilter filter, String broadcastPermission, Handler scheduler, int flags) {
+ return obj.registerReceiver(receiver, filter, broadcastPermission, scheduler, flags);
+ }
+ }
}
diff --git a/core/core/src/main/java/androidx/core/content/PackageManagerCompat.java b/core/core/src/main/java/androidx/core/content/PackageManagerCompat.java
index 8831564..f932e1d 100644
--- a/core/core/src/main/java/androidx/core/content/PackageManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/content/PackageManagerCompat.java
@@ -217,6 +217,7 @@
*/
@Nullable
@RestrictTo(LIBRARY)
+ @SuppressWarnings("deprecation")
public static String getPermissionRevocationVerifierApp(
@NonNull PackageManager packageManager) {
Intent permissionRevocationSettingsIntent =
diff --git a/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java b/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java
index 9a037c7..31372ce 100644
--- a/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/content/pm/PackageInfoCompat.java
@@ -81,6 +81,7 @@
* provided {@param packageManager}
*/
@NonNull
+ @SuppressWarnings("deprecation")
public static List<Signature> getSignatures(@NonNull PackageManager packageManager,
@NonNull String packageName) throws PackageManager.NameNotFoundException {
Signature[] array;
diff --git a/core/core/src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java b/core/core/src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java
index eeb9b34..02976d8 100644
--- a/core/core/src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/content/pm/ShortcutManagerCompat.java
@@ -860,6 +860,7 @@
return sShortcutInfoCompatSaver;
}
+ @SuppressWarnings("deprecation")
private static List<ShortcutInfoChangeListener> getShortcutInfoListeners(Context context) {
if (sShortcutInfoChangeListeners == null) {
List<ShortcutInfoChangeListener> result = new ArrayList<>();
diff --git a/core/core/src/main/java/androidx/core/content/pm/ShortcutXmlParser.java b/core/core/src/main/java/androidx/core/content/pm/ShortcutXmlParser.java
index 95a9003..5b1e2ef 100644
--- a/core/core/src/main/java/androidx/core/content/pm/ShortcutXmlParser.java
+++ b/core/core/src/main/java/androidx/core/content/pm/ShortcutXmlParser.java
@@ -86,6 +86,7 @@
* Returns a set of string which contains the ids of static shortcuts.
*/
@NonNull
+ @SuppressWarnings("deprecation")
private static Set<String> parseShortcutIds(@NonNull final Context context) {
final Set<String> result = new HashSet<>();
final Intent mainIntent = new Intent(Intent.ACTION_MAIN);
diff --git a/core/core/src/main/java/androidx/core/graphics/drawable/IconCompat.java b/core/core/src/main/java/androidx/core/graphics/drawable/IconCompat.java
index dd4b95a..8a8385c 100644
--- a/core/core/src/main/java/androidx/core/graphics/drawable/IconCompat.java
+++ b/core/core/src/main/java/androidx/core/graphics/drawable/IconCompat.java
@@ -682,6 +682,7 @@
return null;
}
+ @SuppressWarnings("deprecation")
static Resources getResources(Context context, String resPackage) {
if ("android".equals(resPackage)) {
return Resources.getSystem();
diff --git a/core/core/src/main/java/androidx/core/net/ConnectivityManagerCompat.java b/core/core/src/main/java/androidx/core/net/ConnectivityManagerCompat.java
index 3c2c8f1..47c9dca 100644
--- a/core/core/src/main/java/androidx/core/net/ConnectivityManagerCompat.java
+++ b/core/core/src/main/java/androidx/core/net/ConnectivityManagerCompat.java
@@ -137,6 +137,7 @@
* potentially-stale value from
* {@link ConnectivityManager#EXTRA_NETWORK_INFO}. May be {@code null}.
*/
+ @SuppressWarnings("deprecation")
@SuppressLint("ReferencesDeprecated")
@Nullable
@RequiresPermission(Manifest.permission.ACCESS_NETWORK_STATE)
diff --git a/core/core/src/main/java/androidx/core/os/LocaleListCompat.java b/core/core/src/main/java/androidx/core/os/LocaleListCompat.java
index a09c8bf..7409305 100644
--- a/core/core/src/main/java/androidx/core/os/LocaleListCompat.java
+++ b/core/core/src/main/java/androidx/core/os/LocaleListCompat.java
@@ -23,8 +23,10 @@
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
import androidx.annotation.RequiresApi;
import androidx.annotation.Size;
+import androidx.core.text.ICUCompat;
import java.util.Locale;
@@ -231,6 +233,87 @@
}
}
+ /**
+ * Determine whether two locales are considered a match, even if they are not exactly equal.
+ * They are considered as a match when both of their languages and scripts
+ * (explicit or inferred) are identical. This means that a user would be able to understand
+ * the content written in the supported locale even if they say they prefer the desired locale.
+ *
+ * E.g. [zh-HK] matches [zh-Hant]; [en-US] matches [en-CA].
+ *
+ * @param supported The supported {@link Locale} to be compared.
+ * @param desired The desired {@link Locale} to be compared.
+ * @return True if they match, false otherwise.
+ */
+ @RequiresApi(21)
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ public static boolean matchesLanguageAndScript(@NonNull Locale supported,
+ @NonNull Locale desired) {
+ if (BuildCompat.isAtLeastT()) {
+ return LocaleList.matchesLanguageAndScript(supported, desired);
+ } else if (Build.VERSION.SDK_INT >= 21) {
+ return Api21Impl.matchesLanguageAndScript(supported, desired);
+ } else {
+ throw new UnsupportedOperationException(
+ "This method is only supported on API level 21+");
+ }
+ }
+
+ @RequiresApi(21)
+ static class Api21Impl {
+ private Api21Impl() {
+ // This class is not instantiable.
+ }
+
+ @DoNotInline
+ static boolean matchesLanguageAndScript(@NonNull Locale supported,
+ @NonNull Locale desired) {
+ if (supported.equals(desired)) {
+ return true; // return early so we don't do unnecessary computation
+ }
+ if (!supported.getLanguage().equals(desired.getLanguage())) {
+ return false;
+ }
+ if (isPseudoLocale(supported) || isPseudoLocale(desired)) {
+ // The locales are not the same, but the languages are the same, and one of the
+ // locales
+ // is a pseudo-locale. So this is not a match.
+ return false;
+ }
+ final String supportedScr = ICUCompat.maximizeAndGetScript(supported);
+ if (supportedScr.isEmpty()) {
+ // If we can't guess a script, we don't know enough about the locales' language
+ // to find
+ // if the locales match. So we fall back to old behavior of matching, which
+ // considered
+ // locales with different regions different.
+ final String supportedRegion = supported.getCountry();
+ return supportedRegion.isEmpty() || supportedRegion.equals(desired.getCountry());
+ }
+ final String desiredScr = ICUCompat.maximizeAndGetScript(desired);
+ // There is no match if the two locales use different scripts. This will most imporantly
+ // take care of traditional vs simplified Chinese.
+ return supportedScr.equals(desiredScr);
+ }
+
+ private static final Locale[] PSEUDO_LOCALE = {
+ new Locale("en", "XA"), new Locale("ar", "XB")};
+
+ private static boolean isPseudoLocale(Locale locale) {
+ for (Locale pseudoLocale : PSEUDO_LOCALE) {
+ if (pseudoLocale.equals(locale)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @DoNotInline
+ static Locale forLanguageTag(String languageTag) {
+ return Locale.forLanguageTag(languageTag);
+ }
+ }
+
@Override
public boolean equals(Object other) {
return other instanceof LocaleListCompat && mImpl.equals(((LocaleListCompat) other).mImpl);
@@ -268,16 +351,4 @@
return LocaleList.getDefault();
}
}
-
- @RequiresApi(21)
- static class Api21Impl {
- private Api21Impl() {
- // This class is not instantiable.
- }
-
- @DoNotInline
- static Locale forLanguageTag(String languageTag) {
- return Locale.forLanguageTag(languageTag);
- }
- }
}
diff --git a/core/core/src/main/java/androidx/core/os/ParcelCompat.java b/core/core/src/main/java/androidx/core/os/ParcelCompat.java
index a181077..8fa56eb 100644
--- a/core/core/src/main/java/androidx/core/os/ParcelCompat.java
+++ b/core/core/src/main/java/androidx/core/os/ParcelCompat.java
@@ -16,9 +16,23 @@
package androidx.core.os;
+import android.annotation.SuppressLint;
+import android.os.Build;
import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.SparseArray;
+import androidx.annotation.DoNotInline;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
+import androidx.annotation.RequiresApi;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* Helper for accessing features in {@link Parcel}.
@@ -43,5 +57,329 @@
out.writeInt(value ? 1 : 0);
}
+ /**
+ * Same as {@link Parcel#readList(List, ClassLoader)} but accepts {@code clazz} parameter as
+ * the type required for each item.
+ *
+ * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+ * deserialized is not an instance of that class or any of its children classes or there was
+ * an error trying to instantiate an element.
+ */
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ @SuppressWarnings("deprecation")
+ public static <T> void readList(@NonNull Parcel in, @NonNull List<? super T> outVal,
+ @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+ if (BuildCompat.isAtLeastT()) {
+ TiramisuImpl.readList(in, outVal, loader, clazz);
+ } else {
+ in.readList(outVal, loader);
+ }
+ }
+
+ /**
+ * Same as {@link Parcel#readArrayList(ClassLoader)} but accepts {@code clazz} parameter as
+ * the type required for each item.
+ *
+ * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+ * deserialized is not an instance of that class or any of its children classes or there was
+ * an error trying to instantiate an element.
+ */
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ @SuppressLint({"ConcreteCollection", "NullableCollection"})
+ @SuppressWarnings({"deprecation", "unchecked"})
+ @Nullable
+ public static <T> ArrayList<T> readArrayList(@NonNull Parcel in, @Nullable ClassLoader loader,
+ @NonNull Class<? extends T> clazz) {
+ if (BuildCompat.isAtLeastT()) {
+ return TiramisuImpl.readArrayList(in, loader, clazz);
+ } else {
+ return in.readArrayList(loader);
+ }
+ }
+
+ /**
+ * Same as {@link Parcel#readArray(ClassLoader)} but accepts {@code clazz} parameter as
+ * the type required for each item.
+ *
+ * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+ * deserialized is not an instance of that class or any of its children classes or there was
+ * an error trying to instantiate an element.
+ */
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ @SuppressWarnings({"deprecation", "unchecked"})
+ @SuppressLint({"ArrayReturn", "NullableCollection"})
+ @Nullable
+ public static <T> T[] readArray(@NonNull Parcel in, @Nullable ClassLoader loader,
+ @NonNull Class<T> clazz) {
+ if (BuildCompat.isAtLeastT()) {
+ return TiramisuImpl.readArray(in, loader, clazz);
+ } else {
+ return (T[]) in.readArray(loader);
+ }
+ }
+
+ /**
+ * Same as {@link Parcel#readSparseArray(ClassLoader)} but accepts {@code clazz} parameter as
+ * the type required for each item.
+ *
+ * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+ * deserialized is not an instance of that class or any of its children classes or there was
+ * an error trying to instantiate an element.
+ */
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ @SuppressWarnings("deprecation")
+ @Nullable
+ public static <T> SparseArray<T> readSparseArray(@NonNull Parcel in,
+ @Nullable ClassLoader loader,
+ @NonNull Class<? extends T> clazz) {
+ if (BuildCompat.isAtLeastT()) {
+ return TiramisuImpl.readSparseArray(in, loader, clazz);
+ } else {
+ return in.readSparseArray(loader);
+ }
+ }
+
+
+ /**
+ * Same as {@link Parcel#readMap(Map, ClassLoader)} but accepts {@code clazzKey} and
+ * {@code clazzValue} parameter as the types required for each key and value pair.
+ *
+ * @throws android.os.BadParcelableException If the item to be deserialized is not an
+ * instance of that class or any of its children class.
+ */
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ @SuppressWarnings("deprecation")
+ public static <K, V> void readMap(@NonNull Parcel in, @NonNull Map<? super K, ? super V> outVal,
+ @Nullable ClassLoader loader, @NonNull Class<K> clazzKey,
+ @NonNull Class<V> clazzValue) {
+ if (BuildCompat.isAtLeastT()) {
+ TiramisuImpl.readMap(in, outVal, loader, clazzKey, clazzValue);
+ } else {
+ in.readMap(outVal, loader);
+ }
+ }
+
+ /**
+ * Same as {@link Parcel#readHashMap(ClassLoader)} but accepts {@code clazzKey} and
+ * {@code clazzValue} parameter as the types required for each key and value pair.
+ *
+ * @throws android.os.BadParcelableException if the item to be deserialized is not an
+ * instance of that class or any of its children class.
+ */
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ @SuppressLint({"ConcreteCollection", "NullableCollection"})
+ @SuppressWarnings({"deprecation", "unchecked"})
+ @Nullable
+ public static <K, V> HashMap<K, V> readHashMap(@NonNull Parcel in, @Nullable ClassLoader loader,
+ @NonNull Class<? extends K> clazzKey, @NonNull Class<? extends V> clazzValue) {
+ if (BuildCompat.isAtLeastT()) {
+ return TiramisuImpl.readHashMap(in, loader, clazzKey, clazzValue);
+ } else {
+ return in.readHashMap(loader);
+ }
+ }
+
+ /**
+ * Same as {@link Parcel#readParcelable(ClassLoader)} but accepts {@code clazz} parameter as
+ * the type required for each item.
+ *
+ * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+ * deserialized is not an instance of that class or any of its children classes or there was
+ * an error trying to instantiate an element.
+ */
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ @SuppressWarnings("deprecation")
+ @Nullable
+ public static <T extends Parcelable> T readParcelable(@NonNull Parcel in,
+ @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+ if (BuildCompat.isAtLeastT()) {
+ return TiramisuImpl.readParcelable(in, loader, clazz);
+ } else {
+ return in.readParcelable(loader);
+ }
+ }
+
+ /**
+ * Same as {@link Parcel#readParcelableCreator(ClassLoader)} but accepts {@code clazz} parameter
+ * as the required type.
+ *
+ * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+ * deserialized is not an instance of that class or any of its children classes or there
+ * there was an error trying to read the {@link Parcelable.Creator}.
+ */
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ @SuppressWarnings({"deprecation", "unchecked"})
+ @Nullable
+ @RequiresApi(30)
+ public static <T> Parcelable.Creator<T> readParcelableCreator(@NonNull Parcel in,
+ @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+ if (BuildCompat.isAtLeastT()) {
+ return TiramisuImpl.readParcelableCreator(in, loader, clazz);
+ } else {
+ return (Parcelable.Creator<T>) Api30Impl.readParcelableCreator(in, loader);
+ }
+ }
+
+ /**
+ * Same as {@link Parcel#readParcelableArray(ClassLoader)} but accepts {@code clazz} parameter
+ * as the type required for each item.
+ *
+ * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+ * deserialized is not an instance of that class or any of its children classes or there was
+ * an error trying to instantiate an element.
+ */
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ @SuppressWarnings({"deprecation", "unchecked"})
+ @SuppressLint({"ArrayReturn", "NullableCollection"})
+ @Nullable
+ public static <T> T[] readParcelableArray(@NonNull Parcel in, @Nullable ClassLoader loader,
+ @NonNull Class<T> clazz) {
+ if (BuildCompat.isAtLeastT()) {
+ return TiramisuImpl.readParcelableArray(in, loader, clazz);
+ } else {
+ return (T[]) in.readParcelableArray(loader);
+ }
+ }
+
+ /**
+ * Same as {@link Parcel#readParcelableList(List, ClassLoader)} but accepts {@code clazz}
+ * parameter as the type required for each item.
+ *
+ * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+ * deserialized is not an instance of that class or any of its children classes or there was
+ * an error trying to instantiate an element.
+ */
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ @NonNull
+ @SuppressWarnings({"deprecation", "unchecked"})
+ @RequiresApi(api = Build.VERSION_CODES.Q)
+ public static <T> List<T> readParcelableList(@NonNull Parcel in, @NonNull List<T> list,
+ @Nullable ClassLoader cl, @NonNull Class<T> clazz) {
+ if (BuildCompat.isAtLeastT()) {
+ return TiramisuImpl.readParcelableList(in, list, cl, clazz);
+ } else {
+ return Api29Impl.readParcelableList(in, (List) list, cl);
+ }
+ }
+
+ /**
+ * Same as {@link Parcel#readSerializable()} but accepts {@code loader} parameter
+ * as the primary classLoader for resolving the Serializable class; and {@code clazz} parameter
+ * as the required type.
+ *
+ * @throws android.os.BadParcelableException Throws BadParcelableException if the item to be
+ * deserialized is not an instance of that class or any of its children class or there there
+ * was an error deserializing the object.
+ */
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ @SuppressWarnings({"deprecation", "unchecked"})
+ @Nullable
+ public static <T extends Serializable> T readSerializable(@NonNull Parcel in,
+ @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+ if (BuildCompat.isAtLeastT()) {
+ return TiramisuImpl.readSerializable(in, loader, clazz);
+ } else {
+ return (T) in.readSerializable();
+ }
+ }
+
private ParcelCompat() {}
+
+ @RequiresApi(29)
+ static class Api29Impl {
+ private Api29Impl() {
+ // This class is non-instantiable.
+ }
+
+ @DoNotInline
+ static final <T extends Parcelable> List<T> readParcelableList(@NonNull Parcel in,
+ @NonNull List<T> list, @Nullable ClassLoader cl) {
+ return in.readParcelableList(list, cl);
+ }
+ }
+
+ @RequiresApi(30)
+ static class Api30Impl {
+ private Api30Impl() {
+ // This class is non-instantiable.
+ }
+
+ @DoNotInline
+ static final Parcelable.Creator<?> readParcelableCreator(@NonNull Parcel in,
+ @Nullable ClassLoader loader) {
+ return in.readParcelableCreator(loader);
+ }
+ }
+
+ @RequiresApi(33)
+ static class TiramisuImpl {
+ private TiramisuImpl() {
+ // This class is non-instantiable.
+ }
+
+ @DoNotInline
+ static <T extends Serializable> T readSerializable(@NonNull Parcel in,
+ @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+ return in.readSerializable(loader, clazz);
+ }
+
+ @DoNotInline
+ static <T extends Parcelable> T readParcelable(@NonNull Parcel in,
+ @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+ return in.readParcelable(loader, clazz);
+ }
+
+ @DoNotInline
+ public static <T> Parcelable.Creator<T> readParcelableCreator(Parcel in, ClassLoader loader,
+ Class<T> clazz) {
+ return in.readParcelableCreator(loader, clazz);
+ }
+
+ @DoNotInline
+ static <T> T[] readParcelableArray(@NonNull Parcel in, @Nullable ClassLoader loader,
+ @NonNull Class<T> clazz) {
+ return in.readParcelableArray(loader, clazz);
+ }
+
+ @DoNotInline
+ static <T> List<T> readParcelableList(@NonNull Parcel in, @NonNull List<T> list,
+ @Nullable ClassLoader cl, @NonNull Class<T> clazz) {
+ return in.readParcelableList(list, cl, clazz);
+ }
+
+ @DoNotInline
+ public static <T> void readList(@NonNull Parcel in, @NonNull List<? super T> outVal,
+ @Nullable ClassLoader loader, @NonNull Class<T> clazz) {
+ in.readList(outVal, loader, clazz);
+ }
+
+ @DoNotInline
+ public static <T> ArrayList<T> readArrayList(Parcel in, ClassLoader loader,
+ Class<? extends T> clazz) {
+ return in.readArrayList(loader, clazz);
+ }
+
+ @DoNotInline
+ public static <T> T[] readArray(Parcel in, ClassLoader loader, Class<T> clazz) {
+ return in.readArray(loader, clazz);
+ }
+
+ @DoNotInline
+ public static <T> SparseArray<T> readSparseArray(Parcel in, ClassLoader loader,
+ Class<? extends T> clazz) {
+ return in.readSparseArray(loader, clazz);
+ }
+
+ @DoNotInline
+ public static <K, V> void readMap(Parcel in, Map<? super K, ? super V> outVal,
+ ClassLoader loader, Class<K> clazzKey, Class<V> clazzValue) {
+ in.readMap(outVal, loader, clazzKey, clazzValue);
+ }
+
+ @DoNotInline
+ public static <V, K> HashMap<K, V> readHashMap(Parcel in, ClassLoader loader,
+ Class<? extends K> clazzKey, Class<? extends V> clazzValue) {
+ return in.readHashMap(loader, clazzKey, clazzValue);
+ }
+ }
}
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java
index ed6beeb..74a0ae7 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java
@@ -202,6 +202,36 @@
public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 0x00000040;
/**
+ * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
+ * A drag has started while accessibility is enabled. This is either via an
+ * AccessibilityAction, or via touch events. This is sent from the source that initiated the
+ * drag.
+ *
+ * @see AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_START
+ */
+ public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 0x00000080;
+
+ /**
+ * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
+ * A drag in with accessibility enabled has ended. This means the content has been
+ * successfully dropped. This is sent from the target that accepted the dragged content.
+ *
+ * @see AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_DROP
+ */
+ public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 0x00000100;
+
+ /**
+ * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
+ * A drag in with accessibility enabled has ended. This means the content has been
+ * unsuccessfully dropped, the user has canceled the action via an AccessibilityAction, or
+ * no drop has been detected within a timeout and the drag was automatically cancelled. This is
+ * sent from the source that initiated the drag.
+ *
+ * @see AccessibilityNodeInfo.AccessibilityAction#ACTION_DRAG_CANCEL
+ */
+ public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 0x0000200;
+
+ /**
* Mask for {@link AccessibilityEvent} all types.
*
* @see AccessibilityEvent#TYPE_VIEW_CLICKED
@@ -238,7 +268,10 @@
CONTENT_CHANGE_TYPE_STATE_DESCRIPTION,
CONTENT_CHANGE_TYPE_SUBTREE,
CONTENT_CHANGE_TYPE_TEXT,
- CONTENT_CHANGE_TYPE_UNDEFINED
+ CONTENT_CHANGE_TYPE_UNDEFINED,
+ CONTENT_CHANGE_TYPE_DRAG_STARTED,
+ CONTENT_CHANGE_TYPE_DRAG_DROPPED,
+ CONTENT_CHANGE_TYPE_DRAG_CANCELLED
})
@RestrictTo(LIBRARY_GROUP_PREFIX)
@Retention(RetentionPolicy.SOURCE)
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
index bfa3191..b14385f 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityNodeInfoCompat.java
@@ -23,6 +23,7 @@
import static java.util.Collections.emptyList;
import android.annotation.SuppressLint;
+import android.content.ClipData;
import android.graphics.Rect;
import android.graphics.Region;
import android.os.Build;
@@ -39,9 +40,12 @@
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo;
+import androidx.annotation.DoNotInline;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
+import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.core.R;
import androidx.core.accessibilityservice.AccessibilityServiceInfoCompat;
@@ -591,6 +595,54 @@
? AccessibilityNodeInfo.AccessibilityAction.ACTION_IME_ENTER : null,
android.R.id.accessibilityActionImeEnter, null, null, null);
+ /**
+ * Action to start a drag.
+ * <p>
+ * This action initiates a drag & drop within the system. The source's dragged content is
+ * prepared before the drag begins. In View, this action should prepare the arguments to
+ * {@link View#startDragAndDrop(ClipData, View.DragShadowBuilder, Object, int)}} and then
+ * call the method. The equivalent should be performed for other UI toolkits.
+ * </p>
+ *
+ * @see AccessibilityEventCompat#CONTENT_CHANGE_TYPE_DRAG_STARTED
+ */
+ @NonNull
+ public static final AccessibilityActionCompat ACTION_DRAG_START =
+ new AccessibilityActionCompat(Build.VERSION.SDK_INT >= 32
+ ? AccessibilityNodeInfo.AccessibilityAction.ACTION_DRAG_START : null,
+ android.R.id.accessibilityActionDragStart, null, null, null);
+
+ /**
+ * Action to trigger a drop of the content being dragged.
+ * <p>
+ * This action is added to potential drop targets if the source started a drag with
+ * {@link #ACTION_DRAG_START}. In View, these targets are Views that accepted
+ * {@link android.view.DragEvent#ACTION_DRAG_STARTED} and have an
+ * {@link View.OnDragListener}.
+ * </p>
+ *
+ * @see AccessibilityEventCompat#CONTENT_CHANGE_TYPE_DRAG_DROPPED
+ */
+ @NonNull
+ public static final AccessibilityActionCompat ACTION_DRAG_DROP =
+ new AccessibilityActionCompat(Build.VERSION.SDK_INT >= 32
+ ? AccessibilityNodeInfo.AccessibilityAction.ACTION_DRAG_DROP : null,
+ android.R.id.accessibilityActionDragDrop, null, null, null);
+
+ /**
+ * Action to cancel a drag.
+ * <p>
+ * This action is added to the source that started a drag with {@link #ACTION_DRAG_START}.
+ * </p>
+ *
+ * @see AccessibilityEventCompat#CONTENT_CHANGE_TYPE_DRAG_CANCELLED
+ */
+ @NonNull
+ public static final AccessibilityActionCompat ACTION_DRAG_CANCEL =
+ new AccessibilityActionCompat(Build.VERSION.SDK_INT >= 32
+ ? AccessibilityNodeInfo.AccessibilityAction.ACTION_DRAG_CANCEL : null,
+ android.R.id.accessibilityActionDragCancel, null, null, null);
+
final Object mAction;
private final int mId;
private final Class<? extends CommandArguments> mViewCommandArgumentClass;
@@ -1235,6 +1287,9 @@
private static final String STATE_DESCRIPTION_KEY =
"androidx.view.accessibility.AccessibilityNodeInfoCompat.STATE_DESCRIPTION_KEY";
+ private static final String UNIQUE_ID_KEY =
+ "androidx.view.accessibility.AccessibilityNodeInfoCompat.UNIQUE_ID_KEY";
+
// These don't line up with the internal framework constants, since they are independent
// and we might as well get all 32 bits of utility here.
private static final int BOOLEAN_PROPERTY_SCREEN_READER_FOCUSABLE = 0x00000001;
@@ -2023,7 +2078,10 @@
* @see android.view.accessibility.AccessibilityNodeInfo#ACTION_CLEAR_FOCUS
* @see android.view.accessibility.AccessibilityNodeInfo#ACTION_SELECT
* @see android.view.accessibility.AccessibilityNodeInfo#ACTION_CLEAR_SELECTION
+ *
+ * @deprecated Use {@link #getActionList()} instead.
*/
+ @Deprecated
public int getActions() {
return mInfo.getActions();
}
@@ -2898,6 +2956,42 @@
}
/**
+ * Gets the unique id of this node.
+ *
+ * @return the unique id or null if android version smaller
+ * than 19.
+ */
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ public @Nullable String getUniqueId() {
+ if (BuildCompat.isAtLeastT()) {
+ return mInfo.getUniqueId();
+ } else if (Build.VERSION.SDK_INT >= 19) {
+ return mInfo.getExtras().getString(UNIQUE_ID_KEY);
+ }
+ return null;
+ }
+
+ /**
+ * Sets the unique id of this node.
+ * <p>
+ * <strong>Note:</strong> Cannot be called from an
+ * {@link android.accessibilityservice.AccessibilityService}.
+ * This class is made immutable before being delivered to an AccessibilityService.
+ * </p>
+ *
+ * @param uniqueId the unique id of this node.
+ * @throws IllegalStateException If called from an AccessibilityService.
+ */
+ @OptIn(markerClass = BuildCompat.PrereleaseSdkCheck.class)
+ public void setUniqueId(@Nullable String uniqueId) {
+ if (BuildCompat.isAtLeastT()) {
+ mInfo.setUniqueId(uniqueId);
+ } else if (Build.VERSION.SDK_INT >= 19) {
+ mInfo.getExtras().putString(UNIQUE_ID_KEY, uniqueId);
+ }
+ }
+
+ /**
* Return an instance back to be reused.
* <p>
* <strong>Note:</strong> You must not touch the object after calling this function.
@@ -3106,6 +3200,23 @@
}
/**
+ * Gets the {@link android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo
+ * extra rendering info} if the node is meant to be refreshed with extra data
+ * to examine rendering related accessibility issues.
+ *
+ * @return The {@link android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo
+ * extra rendering info}.
+ */
+ @Nullable
+ public AccessibilityNodeInfo.ExtraRenderingInfo getExtraRenderingInfo() {
+ if (Build.VERSION.SDK_INT >= 33) {
+ return Api33Impl.getExtraRenderingInfo(mInfo);
+ } else {
+ return null;
+ }
+ }
+
+ /**
* Gets the actions that can be performed on the node.
*
* @return A list of AccessibilityActions.
@@ -4213,6 +4324,7 @@
builder.append("; text: ").append(getText());
builder.append("; contentDescription: ").append(getContentDescription());
builder.append("; viewId: ").append(getViewIdResourceName());
+ builder.append("; uniqueId: ").append(getUniqueId());
builder.append("; checkable: ").append(isCheckable());
builder.append("; checked: ").append(isChecked());
@@ -4348,8 +4460,27 @@
return "ACTION_PRESS_AND_HOLD";
case android.R.id.accessibilityActionImeEnter:
return "ACTION_IME_ENTER";
+ case android.R.id.accessibilityActionDragStart:
+ return "ACTION_DRAG_START";
+ case android.R.id.accessibilityActionDragDrop:
+ return "ACTION_DRAG_DROP";
+ case android.R.id.accessibilityActionDragCancel:
+ return "ACTION_DRAG_CANCEL";
default:
- return"ACTION_UNKNOWN";
+ return "ACTION_UNKNOWN";
+ }
+ }
+
+ @RequiresApi(33)
+ private static class Api33Impl {
+ private Api33Impl() {
+ // This class is non instantiable.
+ }
+
+ @DoNotInline
+ public static AccessibilityNodeInfo.ExtraRenderingInfo getExtraRenderingInfo(
+ AccessibilityNodeInfo info) {
+ return info.getExtraRenderingInfo();
}
}
}
diff --git a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompat.java b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompat.java
index bc4a1d5..1b7003c 100644
--- a/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompat.java
+++ b/core/core/src/main/java/androidx/core/view/accessibility/AccessibilityWindowInfoCompat.java
@@ -17,8 +17,10 @@
package androidx.core.view.accessibility;
import static android.os.Build.VERSION.SDK_INT;
+import static android.view.Display.DEFAULT_DISPLAY;
import android.graphics.Rect;
+import android.graphics.Region;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityWindowInfo;
@@ -136,6 +138,19 @@
}
/**
+ * Check if the window is in picture-in-picture mode.
+ *
+ * @return {@code true} if the window is in picture-in-picture mode, {@code false} otherwise.
+ */
+ public boolean isInPictureInPictureMode() {
+ if (SDK_INT >= 33) {
+ return Api33Impl.isInPictureInPictureMode((AccessibilityWindowInfo) mInfo);
+ } else {
+ return false;
+ }
+ }
+
+ /**
* Gets the parent window if such.
*
* @return The parent window.
@@ -163,7 +178,33 @@
}
/**
+ * Gets the touchable region of this window in the screen.
+ * <p>
+ * Compatibility:
+ * <ul>
+ * <li>API < 33: Gets the bounds of this window in the screen. </li>
+ * <li>API < 21: Does not operate. </li>
+ * </ul>
+ *
+ * @param outRegion The out window region.
+ */
+ public void getRegionInScreen(@NonNull Region outRegion) {
+ if (SDK_INT >= 33) {
+ Api33Impl.getRegionInScreen((AccessibilityWindowInfo) mInfo, outRegion);
+ } else if (SDK_INT >= 21) {
+ Rect outBounds = new Rect();
+ Api21Impl.getBoundsInScreen((AccessibilityWindowInfo) mInfo, outBounds);
+ outRegion.set(outBounds);
+ }
+ }
+
+ /**
* Gets the bounds of this window in the screen.
+ * <p>
+ * Compatibility:
+ * <ul>
+ * <li>API < 21: Does not operate. </li>
+ * </ul>
*
* @param outBounds The out window bounds.
*/
@@ -243,6 +284,25 @@
}
/**
+ * Returns the ID of the display this window is on, for use with
+ * {@link android.hardware.display.DisplayManager#getDisplay(int)}.
+ * <p>
+ * Compatibility:
+ * <ul>
+ * <li>Api < 33: Will return {@link android.view.Display.DEFAULT_DISPLAY}.</li>
+ * </ul>
+ *
+ * @return the logical display id.
+ */
+ public int getDisplayId() {
+ if (SDK_INT >= 33) {
+ return Api33Impl.getDisplayId((AccessibilityWindowInfo) mInfo);
+ } else {
+ return DEFAULT_DISPLAY;
+ }
+ }
+
+ /**
* Gets the title of the window.
*
* @return The title of the window, or the application label for the window if no title was
@@ -322,6 +382,18 @@
}
}
+ /**
+ * @return The unwrapped {@link android.view.accessibility.AccessibilityWindowInfo}.
+ */
+ @Nullable
+ public AccessibilityWindowInfo unwrap() {
+ if (SDK_INT >= 21) {
+ return (AccessibilityWindowInfo) mInfo;
+ } else {
+ return null;
+ }
+ }
+
@Override
public int hashCode() {
return (mInfo == null) ? 0 : mInfo.hashCode();
@@ -476,4 +548,26 @@
return info.getTitle();
}
}
+
+ @RequiresApi(33)
+ private static class Api33Impl {
+ private Api33Impl() {
+ // This class is non instantiable.
+ }
+
+ @DoNotInline
+ static int getDisplayId(AccessibilityWindowInfo info) {
+ return info.getDisplayId();
+ }
+
+ @DoNotInline
+ static void getRegionInScreen(AccessibilityWindowInfo info, Region outRegion) {
+ info.getRegionInScreen(outRegion);
+ }
+
+ @DoNotInline
+ static boolean isInPictureInPictureMode(AccessibilityWindowInfo info) {
+ return info.isInPictureInPictureMode();
+ }
+ }
}
\ No newline at end of file
diff --git a/core/core/src/main/java/androidx/core/widget/TextViewCompat.java b/core/core/src/main/java/androidx/core/widget/TextViewCompat.java
index 7a6a655..dfb25e3 100644
--- a/core/core/src/main/java/androidx/core/widget/TextViewCompat.java
+++ b/core/core/src/main/java/androidx/core/widget/TextViewCompat.java
@@ -650,6 +650,7 @@
}
}
+ @SuppressWarnings("deprecation")
private List<ResolveInfo> getSupportedActivities(final Context context,
final PackageManager packageManager) {
final List<ResolveInfo> supportedActivities = new ArrayList<>();
diff --git a/cursoradapter/cursoradapter/lint-baseline.xml b/cursoradapter/cursoradapter/lint-baseline.xml
index bd47b27..a676e5e 100644
--- a/cursoradapter/cursoradapter/lint-baseline.xml
+++ b/cursoradapter/cursoradapter/lint-baseline.xml
@@ -133,7 +133,8 @@
errorLine1=" public abstract void bindView(View view, Context context, Cursor cursor);"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+ column="46"/>
</issue>
<issue
@@ -142,7 +143,9 @@
errorLine1=" public abstract void bindView(View view, Context context, Cursor cursor);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+ line="281"
+ column="63"/>
</issue>
<issue
@@ -151,7 +154,9 @@
errorLine1=" public void changeCursor(Cursor cursor) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+ line="290"
+ column="30"/>
</issue>
<issue
@@ -160,7 +165,9 @@
errorLine1=" public Cursor swapCursor(Cursor newCursor) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+ line="307"
+ column="12"/>
</issue>
<issue
@@ -169,7 +176,9 @@
errorLine1=" public Cursor swapCursor(Cursor newCursor) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+ line="307"
+ column="30"/>
</issue>
<issue
@@ -178,7 +187,9 @@
errorLine1=" public CharSequence convertToString(Cursor cursor) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+ line="343"
+ column="12"/>
</issue>
<issue
@@ -187,7 +198,9 @@
errorLine1=" public CharSequence convertToString(Cursor cursor) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+ line="343"
+ column="41"/>
</issue>
<issue
@@ -196,7 +209,9 @@
errorLine1=" public Cursor runQueryOnBackgroundThread(CharSequence constraint) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+ line="373"
+ column="12"/>
</issue>
<issue
@@ -205,7 +220,9 @@
errorLine1=" public Cursor runQueryOnBackgroundThread(CharSequence constraint) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+ line="373"
+ column="46"/>
</issue>
<issue
@@ -214,7 +231,9 @@
errorLine1=" public FilterQueryProvider getFilterQueryProvider() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+ line="398"
+ column="12"/>
</issue>
<issue
@@ -223,7 +242,9 @@
errorLine1=" public void setFilterQueryProvider(FilterQueryProvider filterQueryProvider) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/CursorAdapter.java"
+ line="414"
+ column="40"/>
</issue>
<issue
@@ -232,7 +253,9 @@
errorLine1=" public ResourceCursorAdapter(Context context, int layout, Cursor c, int flags) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+ line="98"
+ column="34"/>
</issue>
<issue
@@ -241,7 +264,9 @@
errorLine1=" public ResourceCursorAdapter(Context context, int layout, Cursor c, int flags) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+ line="98"
+ column="63"/>
</issue>
<issue
@@ -250,7 +275,9 @@
errorLine1=" public View newView(Context context, Cursor cursor, ViewGroup parent) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+ line="111"
+ column="12"/>
</issue>
<issue
@@ -259,7 +286,9 @@
errorLine1=" public View newView(Context context, Cursor cursor, ViewGroup parent) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+ line="111"
+ column="25"/>
</issue>
<issue
@@ -268,7 +297,9 @@
errorLine1=" public View newView(Context context, Cursor cursor, ViewGroup parent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+ line="111"
+ column="42"/>
</issue>
<issue
@@ -277,7 +308,9 @@
errorLine1=" public View newView(Context context, Cursor cursor, ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+ line="111"
+ column="57"/>
</issue>
<issue
@@ -286,7 +319,9 @@
errorLine1=" public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+ line="116"
+ column="12"/>
</issue>
<issue
@@ -295,7 +330,9 @@
errorLine1=" public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+ line="116"
+ column="33"/>
</issue>
<issue
@@ -304,7 +341,9 @@
errorLine1=" public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+ line="116"
+ column="50"/>
</issue>
<issue
@@ -313,7 +352,9 @@
errorLine1=" public View newDropDownView(Context context, Cursor cursor, ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/ResourceCursorAdapter.java"
+ line="116"
+ column="65"/>
</issue>
<issue
@@ -322,7 +363,9 @@
errorLine1=" protected int[] mFrom;"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="44"
+ column="15"/>
</issue>
<issue
@@ -331,7 +374,9 @@
errorLine1=" protected int[] mTo;"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="51"
+ column="15"/>
</issue>
<issue
@@ -340,7 +385,9 @@
errorLine1=" public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="93"
+ column="32"/>
</issue>
<issue
@@ -349,7 +396,9 @@
errorLine1=" public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="93"
+ column="61"/>
</issue>
<issue
@@ -358,7 +407,9 @@
errorLine1=" public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="93"
+ column="71"/>
</issue>
<issue
@@ -367,7 +418,9 @@
errorLine1=" int[] to, int flags) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="94"
+ column="13"/>
</issue>
<issue
@@ -376,7 +429,9 @@
errorLine1=" public void bindView(View view, Context context, Cursor cursor) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="125"
+ column="26"/>
</issue>
<issue
@@ -385,7 +440,9 @@
errorLine1=" public void bindView(View view, Context context, Cursor cursor) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="125"
+ column="37"/>
</issue>
<issue
@@ -394,7 +451,9 @@
errorLine1=" public void bindView(View view, Context context, Cursor cursor) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="125"
+ column="54"/>
</issue>
<issue
@@ -403,7 +462,9 @@
errorLine1=" public ViewBinder getViewBinder() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="166"
+ column="12"/>
</issue>
<issue
@@ -412,7 +473,9 @@
errorLine1=" public void setViewBinder(ViewBinder viewBinder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="179"
+ column="31"/>
</issue>
<issue
@@ -421,7 +484,9 @@
errorLine1=" public void setViewImage(ImageView v, String value) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="198"
+ column="30"/>
</issue>
<issue
@@ -430,7 +495,9 @@
errorLine1=" public void setViewImage(ImageView v, String value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="198"
+ column="43"/>
</issue>
<issue
@@ -439,7 +506,9 @@
errorLine1=" public void setViewText(TextView v, String text) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="217"
+ column="29"/>
</issue>
<issue
@@ -448,7 +517,9 @@
errorLine1=" public void setViewText(TextView v, String text) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="217"
+ column="41"/>
</issue>
<issue
@@ -457,7 +528,9 @@
errorLine1=" public CursorToStringConverter getCursorToStringConverter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="266"
+ column="12"/>
</issue>
<issue
@@ -466,7 +539,9 @@
errorLine1=" public void setCursorToStringConverter(CursorToStringConverter cursorToStringConverter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="282"
+ column="44"/>
</issue>
<issue
@@ -475,7 +550,9 @@
errorLine1=" public CharSequence convertToString(Cursor cursor) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="298"
+ column="12"/>
</issue>
<issue
@@ -484,7 +561,9 @@
errorLine1=" public CharSequence convertToString(Cursor cursor) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="298"
+ column="41"/>
</issue>
<issue
@@ -493,7 +572,9 @@
errorLine1=" public Cursor swapCursor(Cursor newCursor) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="331"
+ column="12"/>
</issue>
<issue
@@ -502,7 +583,9 @@
errorLine1=" public Cursor swapCursor(Cursor newCursor) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="331"
+ column="30"/>
</issue>
<issue
@@ -511,7 +594,9 @@
errorLine1=" public void changeCursorAndColumns(Cursor c, String[] from, int[] to) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="350"
+ column="40"/>
</issue>
<issue
@@ -520,7 +605,9 @@
errorLine1=" public void changeCursorAndColumns(Cursor c, String[] from, int[] to) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="350"
+ column="50"/>
</issue>
<issue
@@ -529,7 +616,9 @@
errorLine1=" public void changeCursorAndColumns(Cursor c, String[] from, int[] to) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="350"
+ column="65"/>
</issue>
<issue
@@ -538,7 +627,9 @@
errorLine1=" boolean setViewValue(View view, Cursor cursor, int columnIndex);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="387"
+ column="30"/>
</issue>
<issue
@@ -547,7 +638,9 @@
errorLine1=" boolean setViewValue(View view, Cursor cursor, int columnIndex);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="387"
+ column="41"/>
</issue>
<issue
@@ -556,7 +649,9 @@
errorLine1=" CharSequence convertToString(Cursor cursor);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="405"
+ column="9"/>
</issue>
<issue
@@ -565,7 +660,9 @@
errorLine1=" CharSequence convertToString(Cursor cursor);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"/>
+ file="src/main/java/androidx/cursoradapter/widget/SimpleCursorAdapter.java"
+ line="405"
+ column="38"/>
</issue>
</issues>
diff --git a/development/studio/idea.properties b/development/studio/idea.properties
index f352237..3cabbbf 100644
--- a/development/studio/idea.properties
+++ b/development/studio/idea.properties
@@ -5,12 +5,12 @@
#---------------------------------------------------------------------
# Uncomment this option if you want to customize path to IDE config folder. Make sure you're using forward slashes.
#---------------------------------------------------------------------
-idea.config.path=${user.home}/.AndroidStudioAndroidX/config
+idea.config.path=${user.home}/.AndroidStudioAndroidXPlatform/config
#---------------------------------------------------------------------
# Uncomment this option if you want to customize path to IDE system folder. Make sure you're using forward slashes.
#---------------------------------------------------------------------
-idea.system.path=${user.home}/.AndroidStudioAndroidX/system
+idea.system.path=${user.home}/.AndroidStudioAndroidXPlatform/system
#---------------------------------------------------------------------
# Uncomment this option if you want to customize path to user installed plugins folder. Make sure you're using forward slashes.
diff --git a/docs-public/build.gradle b/docs-public/build.gradle
index f43fd20..8bf4f6e 100644
--- a/docs-public/build.gradle
+++ b/docs-public/build.gradle
@@ -8,20 +8,20 @@
}
dependencies {
- docs("androidx.activity:activity:1.5.0")
- docs("androidx.activity:activity-compose:1.5.0")
- samples("androidx.activity:activity-compose-samples:1.5.0")
- docs("androidx.activity:activity-ktx:1.5.0")
+ docs("androidx.activity:activity:1.6.0-alpha05")
+ docs("androidx.activity:activity-compose:1.6.0-alpha05")
+ samples("androidx.activity:activity-compose-samples:1.6.0-alpha03")
+ docs("androidx.activity:activity-ktx:1.6.0-alpha05")
docs("androidx.ads:ads-identifier:1.0.0-alpha04")
docs("androidx.ads:ads-identifier-provider:1.0.0-alpha04")
docs("androidx.annotation:annotation:1.4.0")
docs("androidx.annotation:annotation-experimental:1.2.0")
- docs("androidx.appcompat:appcompat:1.5.0-alpha01")
- docs("androidx.appcompat:appcompat-resources:1.5.0-alpha01")
- docs("androidx.appsearch:appsearch:1.0.0-alpha04")
- docs("androidx.appsearch:appsearch-ktx:1.0.0-alpha04")
- docs("androidx.appsearch:appsearch-local-storage:1.0.0-alpha04")
- docs("androidx.appsearch:appsearch-platform-storage:1.0.0-alpha04")
+ docs("androidx.appcompat:appcompat:1.6.0-alpha05")
+ docs("androidx.appcompat:appcompat-resources:1.6.0-alpha05")
+ docs("androidx.appsearch:appsearch:1.1.0-alpha01")
+ docs("androidx.appsearch:appsearch-ktx:1.1.0-alpha01")
+ docs("androidx.appsearch:appsearch-local-storage:1.1.0-alpha01")
+ docs("androidx.appsearch:appsearch-platform-storage:1.1.0-alpha01")
docs("androidx.arch.core:core-common:2.1.0")
docs("androidx.arch.core:core-runtime:2.1.0")
docs("androidx.arch.core:core-testing:2.1.0")
@@ -111,8 +111,8 @@
docs("androidx.core:core-role:1.1.0-rc01")
docs("androidx.core:core-animation:1.0.0-beta01")
docs("androidx.core:core-animation-testing:1.0.0-alpha02")
- docs("androidx.core:core:1.8.0")
- docs("androidx.core:core-ktx:1.8.0")
+ docs("androidx.core:core:1.9.0-alpha05")
+ docs("androidx.core:core-ktx:1.9.0-alpha05")
docs("androidx.core:core-splashscreen:1.0.0-rc01")
docs("androidx.cursoradapter:cursoradapter:1.0.0")
docs("androidx.customview:customview:1.2.0-alpha01")
diff --git a/docs-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index a050862..991a026 100644
--- a/docs-tip-of-tree/build.gradle
+++ b/docs-tip-of-tree/build.gradle
@@ -155,6 +155,7 @@
docs(project(":glance:glance"))
docs(project(":glance:glance-appwidget"))
docs(project(":glance:glance-wear-tiles"))
+ docs(project(":graphics:graphics-core"))
docs(project(":gridlayout:gridlayout"))
docs(project(":health:health-connect-client"))
samples(project(":health:health-connect-client-samples"))
diff --git a/draganddrop/draganddrop/lint-baseline.xml b/draganddrop/draganddrop/lint-baseline.xml
index 8dae4d20..9eab8b1 100644
--- a/draganddrop/draganddrop/lint-baseline.xml
+++ b/draganddrop/draganddrop/lint-baseline.xml
@@ -7,7 +7,8 @@
errorLine1=" public void testDropHelper_startDrag_hasInactiveHighlight() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ column="17"/>
</issue>
<issue
@@ -16,7 +17,9 @@
errorLine1=" public void testDropHelper_endDrag_hasNoHighlight() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ line="135"
+ column="17"/>
</issue>
<issue
@@ -25,7 +28,9 @@
errorLine1=" public void testDropHelper_acceptDragsWithLocalState_default_hasNoHighlight() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ line="156"
+ column="17"/>
</issue>
<issue
@@ -34,7 +39,9 @@
errorLine1=" public void testDropHelper_acceptDragsWithLocalState_false_hasNoHighlight() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ line="173"
+ column="17"/>
</issue>
<issue
@@ -43,7 +50,9 @@
errorLine1=" public void testDropHelper_acceptDragsWithLocalState_true_hasHighlight() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ line="191"
+ column="17"/>
</issue>
<issue
@@ -52,7 +61,9 @@
errorLine1=" public void testDropHelper_wrongMimeTypeImage_hasNoHighlight() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ line="210"
+ column="17"/>
</issue>
<issue
@@ -61,7 +72,9 @@
errorLine1=" public void testDropHelper_wrongMimeTypeText_hasNoHighlight() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ line="226"
+ column="17"/>
</issue>
<issue
@@ -70,7 +83,9 @@
errorLine1=" public void testDropHelper_enterAndExit_togglesHighlight() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ line="241"
+ column="17"/>
</issue>
<issue
@@ -79,7 +94,9 @@
errorLine1=" public void testDropHelper_dragToInnerNestedView_retainsActiveHighlight()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ line="275"
+ column="17"/>
</issue>
<issue
@@ -88,7 +105,9 @@
errorLine1=" public void testDropHelper_usesColorFromSystemAsDefault() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ line="301"
+ column="17"/>
</issue>
<issue
@@ -97,7 +116,9 @@
errorLine1=" public void testDropHelper_usesDefaultCornerRadius() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ line="325"
+ column="17"/>
</issue>
<issue
@@ -106,7 +127,9 @@
errorLine1=" public void testDropHelper_usesCornerRadius() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ line="345"
+ column="17"/>
</issue>
<issue
@@ -115,7 +138,9 @@
errorLine1=" public void testDropHelper_drop_callsListener() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ line="366"
+ column="17"/>
</issue>
<issue
@@ -124,7 +149,9 @@
errorLine1=" public void testDropHelper_nonEditText_drop_callsListener() throws Exception {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"/>
+ file="src/androidTest/java/androidx/draganddrop/DropHelperTest.java"
+ line="397"
+ column="17"/>
</issue>
</issues>
diff --git a/drawerlayout/drawerlayout/build.gradle b/drawerlayout/drawerlayout/build.gradle
index 4e5ebdd..8bf6fa0 100644
--- a/drawerlayout/drawerlayout/build.gradle
+++ b/drawerlayout/drawerlayout/build.gradle
@@ -3,18 +3,22 @@
plugins {
id("AndroidXPlugin")
id("com.android.library")
+ id("kotlin-android")
}
dependencies {
- api("androidx.annotation:annotation:1.1.0")
+ api("androidx.annotation:annotation:1.2.0")
api("androidx.core:core:1.2.0")
api(project(":customview:customview"))
+ androidTestImplementation(libs.kotlinStdlib)
androidTestImplementation(libs.testExtJunit)
androidTestImplementation(libs.testCore)
androidTestImplementation(libs.testRunner)
androidTestImplementation(libs.testRules)
androidTestImplementation(libs.truth)
+ androidTestImplementation(libs.espressoCore, excludes.espresso)
+ androidTestImplementation(project(":internal-testutils-runtime"))
}
androidx {
diff --git a/drawerlayout/drawerlayout/src/androidTest/AndroidManifest.xml b/drawerlayout/drawerlayout/src/androidTest/AndroidManifest.xml
index 62cff76..ee402d3 100644
--- a/drawerlayout/drawerlayout/src/androidTest/AndroidManifest.xml
+++ b/drawerlayout/drawerlayout/src/androidTest/AndroidManifest.xml
@@ -23,6 +23,8 @@
android:theme="@style/CustomDrawerLayoutTheme"/>
<activity
android:name="androidx.drawerlayout.widget.DrawerNoThemeActivity"/>
+ <activity
+ android:name="androidx.drawerlayout.widget.DrawerSingleStartActivity"/>
</application>
</manifest>
diff --git a/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerBackHandlingTest.kt b/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerBackHandlingTest.kt
new file mode 100644
index 0000000..f9f638f
--- /dev/null
+++ b/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerBackHandlingTest.kt
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package androidx.drawerlayout.widget
+
+import android.os.Build
+import android.view.KeyEvent
+import android.view.View
+import androidx.drawerlayout.test.R
+import androidx.test.espresso.Espresso
+import androidx.test.espresso.action.ViewActions
+import androidx.test.espresso.matcher.ViewMatchers
+import androidx.test.ext.junit.rules.ActivityScenarioRule
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import androidx.testutils.PollingCheck
+import androidx.testutils.withActivity
+import org.junit.Assert
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+public class DrawerBackHandlingTest {
+ @get:Rule
+ public val activityScenarioRule = ActivityScenarioRule(
+ DrawerSingleStartActivity::class.java
+ )
+
+ @Test
+ @SmallTest
+ public fun testBackPress() {
+ val listener = ObservableDrawerListener()
+ val drawerLayout = activityScenarioRule.withActivity {
+ val drawerLayout = findViewById<DrawerLayout>(R.id.drawer)
+ drawerLayout.addDrawerListener(listener)
+ drawerLayout.open()
+ drawerLayout
+ }
+
+ // Wait until the animation ends. We disable animations on test
+ // devices, but this is useful when running on a local device.
+ PollingCheck.waitFor {
+ listener.drawerOpenedCalled
+ }
+ listener.reset()
+
+ // Ensure that back pressed dispatcher callback is registered on T+.
+ if (Build.VERSION.SDK_INT >= 33) {
+ Assert.assertTrue(drawerLayout.isBackInvokedCallbackRegistered)
+ }
+
+ Espresso.onView(ViewMatchers.isRoot()).perform(ViewActions.pressKey(KeyEvent.KEYCODE_BACK))
+
+ PollingCheck.waitFor {
+ listener.drawerClosedCalled
+ }
+ listener.reset()
+
+ Assert.assertNull(drawerLayout.findOpenDrawer())
+
+ // Ensure that back pressed dispatcher callback is unregistered on T+.
+ if (Build.VERSION.SDK_INT >= 33) {
+ Assert.assertFalse(drawerLayout.isBackInvokedCallbackRegistered)
+ }
+ }
+
+ internal inner class ObservableDrawerListener : DrawerLayout.DrawerListener {
+ var drawerOpenedCalled = false
+ var drawerClosedCalled = false
+
+ override fun onDrawerSlide(drawerView: View, slideOffset: Float) {}
+
+ override fun onDrawerOpened(drawerView: View) {
+ drawerOpenedCalled = true
+ }
+
+ override fun onDrawerClosed(drawerView: View) {
+ drawerClosedCalled = true
+ }
+
+ override fun onDrawerStateChanged(newState: Int) {}
+
+ fun reset() {
+ drawerOpenedCalled = false
+ drawerClosedCalled = false
+ }
+ }
+}
diff --git a/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerSingleStartActivity.java b/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerSingleStartActivity.java
new file mode 100644
index 0000000..56596e78
--- /dev/null
+++ b/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerSingleStartActivity.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.drawerlayout.widget;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import androidx.drawerlayout.test.R;
+
+public class DrawerSingleStartActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.drawer_single_start_layout);
+ }
+}
diff --git a/drawerlayout/drawerlayout/src/androidTest/res/layout/drawer_single_start_layout.xml b/drawerlayout/drawerlayout/src/androidTest/res/layout/drawer_single_start_layout.xml
new file mode 100644
index 0000000..8993394
--- /dev/null
+++ b/drawerlayout/drawerlayout/src/androidTest/res/layout/drawer_single_start_layout.xml
@@ -0,0 +1,38 @@
+<?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.
+ -->
+
+<androidx.drawerlayout.widget.DrawerLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/drawer"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" />
+
+ <LinearLayout
+ android:id="@+id/panel"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="start"
+ android:orientation="vertical"
+ android:background="@android:color/holo_blue_bright" />
+
+</androidx.drawerlayout.widget.DrawerLayout>
+
diff --git a/drawerlayout/drawerlayout/src/main/java/androidx/drawerlayout/widget/DrawerLayout.java b/drawerlayout/drawerlayout/src/main/java/androidx/drawerlayout/widget/DrawerLayout.java
index c6f82fa..336580a 100644
--- a/drawerlayout/drawerlayout/src/main/java/androidx/drawerlayout/widget/DrawerLayout.java
+++ b/drawerlayout/drawerlayout/src/main/java/androidx/drawerlayout/widget/DrawerLayout.java
@@ -43,13 +43,18 @@
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.accessibility.AccessibilityEvent;
+import android.window.OnBackInvokedCallback;
+import android.window.OnBackInvokedDispatcher;
import androidx.annotation.ColorInt;
+import androidx.annotation.DoNotInline;
import androidx.annotation.DrawableRes;
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.Insets;
import androidx.core.graphics.drawable.DrawableCompat;
@@ -218,6 +223,14 @@
private boolean mInLayout;
private boolean mFirstLayout = true;
+ // The callback handling back events. If this is non-null, the
+ // callback has been registered at least once.
+ private OnBackInvokedCallback mBackInvokedCallback;
+
+ // The dispatcher on which the callback was registered. If this
+ // value is null, the callback is not registered anywhere.
+ private OnBackInvokedDispatcher mBackInvokedDispatcher;
+
private @LockMode int mLockModeLeft = LOCK_MODE_UNDEFINED;
private @LockMode int mLockModeRight = LOCK_MODE_UNDEFINED;
private @LockMode int mLockModeStart = LOCK_MODE_UNDEFINED;
@@ -884,6 +897,7 @@
updateChildrenImportantForAccessibility(drawerView, false);
updateChildAccessibilityAction(drawerView);
+ updateBackInvokedCallbackState();
// Only send WINDOW_STATE_CHANGE if the host has window focus. This
// may change if support for multiple foreground windows (e.g. IME)
@@ -912,6 +926,7 @@
updateChildrenImportantForAccessibility(drawerView, true);
updateChildAccessibilityAction(drawerView);
+ updateBackInvokedCallbackState();
// Only send WINDOW_STATE_CHANGE if the host has window focus.
if (hasWindowFocus()) {
@@ -1046,12 +1061,16 @@
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
mFirstLayout = true;
+
+ updateBackInvokedCallbackState();
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
mFirstLayout = true;
+
+ updateBackInvokedCallbackState();
}
@SuppressLint("WrongConstant")
@@ -1732,6 +1751,7 @@
updateChildrenImportantForAccessibility(drawerView, true);
updateChildAccessibilityAction(drawerView);
+ updateBackInvokedCallbackState();
} else if (animate) {
lp.openState |= LayoutParams.FLAG_IS_OPENING;
@@ -2029,6 +2049,40 @@
}
}
+ /**
+ * Call this method whenever a property changes that affects whether the view will handle a
+ * back press, which is the combination of properties inspected in {@link #closeDrawers()} and
+ * properties that affect whether this view would normally receive key press events.
+ */
+ void updateBackInvokedCallbackState() {
+ if (Build.VERSION.SDK_INT >= 33) {
+ View visibleDrawer = findVisibleDrawer();
+ OnBackInvokedDispatcher currentDispatcher = Api33Impl.findOnBackInvokedDispatcher(this);
+ boolean shouldBeRegistered = visibleDrawer != null
+ && currentDispatcher != null
+ && getDrawerLockMode(visibleDrawer) == LOCK_MODE_UNLOCKED
+ && ViewCompat.isAttachedToWindow(this);
+
+ if (shouldBeRegistered && mBackInvokedDispatcher == null) {
+ if (mBackInvokedCallback == null) {
+ mBackInvokedCallback = Api33Impl.newOnBackInvokedCallback(this::closeDrawers);
+ }
+ Api33Impl.tryRegisterOnBackInvokedCallback(
+ currentDispatcher, mBackInvokedCallback);
+ mBackInvokedDispatcher = currentDispatcher;
+ } else if (!shouldBeRegistered && mBackInvokedDispatcher != null) {
+ Api33Impl.tryUnregisterOnBackInvokedCallback(
+ mBackInvokedDispatcher, mBackInvokedCallback);
+ mBackInvokedDispatcher = null;
+ }
+ }
+ }
+
+ @VisibleForTesting
+ boolean isBackInvokedCallbackRegistered() {
+ return mBackInvokedDispatcher != null;
+ }
+
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && hasVisibleDrawer()) {
@@ -2529,4 +2583,38 @@
}
}
}
+
+ @RequiresApi(33)
+ static class Api33Impl {
+ private Api33Impl() {
+ // This class is not instantiable.
+ }
+
+ @DoNotInline
+ static void tryRegisterOnBackInvokedCallback(@NonNull Object dispatcherObj,
+ @NonNull Object callback) {
+ OnBackInvokedDispatcher dispatcher = (OnBackInvokedDispatcher) dispatcherObj;
+ dispatcher.registerOnBackInvokedCallback(OnBackInvokedDispatcher.PRIORITY_OVERLAY,
+ (OnBackInvokedCallback) callback);
+ }
+
+ @DoNotInline
+ static void tryUnregisterOnBackInvokedCallback(@NonNull Object dispatcherObj,
+ @NonNull Object callbackObj) {
+ OnBackInvokedDispatcher dispatcher = (OnBackInvokedDispatcher) dispatcherObj;
+ dispatcher.unregisterOnBackInvokedCallback((OnBackInvokedCallback) callbackObj);
+ }
+
+ @Nullable
+ @DoNotInline
+ static OnBackInvokedDispatcher findOnBackInvokedDispatcher(@NonNull DrawerLayout view) {
+ return view.findOnBackInvokedDispatcher();
+ }
+
+ @NonNull
+ @DoNotInline
+ static OnBackInvokedCallback newOnBackInvokedCallback(@NonNull Runnable action) {
+ return action::run;
+ }
+ }
}
diff --git a/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/FlingTests.java b/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/FlingTests.java
index 8870dfc..00d39a9 100644
--- a/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/FlingTests.java
+++ b/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/FlingTests.java
@@ -145,6 +145,9 @@
@Override
public void run() {
animHighFriction.setStartVelocity(5000).setStartValue(0).start();
+ // Set the duration scale to 1 to avoid prematurely ending the animation.
+ // ValueAnimator#getDurationScale is called in start().
+ animHighFriction.getAnimationHandler().mDurationScale = 1.0f;
animLowFriction.setStartVelocity(5000).setStartValue(0).start();
}
});
@@ -197,6 +200,8 @@
@Override
public void run() {
animHighThreshold.setStartVelocity(2000).setStartValue(0).start();
+ // Set the duration scale to 1 to avoid prematurely ending the animation.
+ animHighThreshold.getAnimationHandler().mDurationScale = 1.0f;
animLowThreshold.setStartVelocity(2000).setStartValue(0).start();
}
});
diff --git a/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/SpringTests.java b/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/SpringTests.java
index ff3f953..8548a1f 100644
--- a/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/SpringTests.java
+++ b/dynamicanimation/dynamicanimation/src/androidTest/java/androidx/dynamicanimation/tests/SpringTests.java
@@ -18,6 +18,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -39,7 +40,9 @@
import android.view.View;
import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
import androidx.core.view.ViewCompat;
+import androidx.dynamicanimation.animation.AnimationHandler;
import androidx.dynamicanimation.animation.DynamicAnimation;
import androidx.dynamicanimation.animation.FloatPropertyCompat;
import androidx.dynamicanimation.animation.FloatValueHolder;
@@ -51,6 +54,7 @@
import androidx.test.filters.FlakyTest;
import androidx.test.filters.LargeTest;
import androidx.test.filters.MediumTest;
+import androidx.test.filters.SdkSuppress;
import androidx.test.platform.app.InstrumentationRegistry;
import org.junit.Before;
@@ -148,6 +152,9 @@
@Override
public void run() {
anim.setStartValue(0).start();
+ // Set the duration scale to 1 to avoid prematurely ending the animation.
+ // ValueAnimator#getDurationScale is called in start().
+ anim.getAnimationHandler().mDurationScale = 1.0f;
}
});
@@ -244,10 +251,14 @@
public void run() {
anim2.setStartValue(800).addUpdateListener(updateListener).addEndListener(l2)
.start();
+ // Set the duration scale to 1 to avoid prematurely ending the animation.
+ anim2.getAnimationHandler().mDurationScale = 1.0f;
anim3.setStartValue(800).addUpdateListener(updateListener).addEndListener(l3)
.addEndListener(mockListener).start();
+ anim3.getAnimationHandler().mDurationScale = 1.0f;
anim1.setStartValue(800).addUpdateListener(updateListener).addEndListener(l1)
.start();
+ anim1.getAnimationHandler().mDurationScale = 1.0f;
}
});
@@ -308,9 +319,13 @@
public void run() {
anim1.setStartValue(360).addUpdateListener(updateListener).addEndListener(l1)
.start();
+ // Set the duration scale to 1 to avoid prematurely ending the animation.
+ anim1.getAnimationHandler().mDurationScale = 1.0f;
anim2.setStartValue(360).addUpdateListener(updateListener).addEndListener(l2)
.addEndListener(mockListener).start();
+ anim2.getAnimationHandler().mDurationScale = 1.0f;
anim3.setStartValue(360).addEndListener(l3).start();
+ anim3.getAnimationHandler().mDurationScale = 1.0f;
}
});
// The spring animation with critically-damped spring should return to rest position faster.
@@ -371,6 +386,8 @@
public void run() {
for (int j = 0; j < stiffness.length; j++) {
springAnims[j].start();
+ // Set the duration scale to 1 to avoid prematurely ending the animation.
+ springAnims[j].getAnimationHandler().mDurationScale = 1.0f;
}
}
});
@@ -525,6 +542,8 @@
@Override
public void run() {
anim.animateToFinalPosition(0.0f);
+ // Set the duration scale to 1 to avoid prematurely ending the animation.
+ anim.getAnimationHandler().mDurationScale = 1.0f;
}
});
assertTrue(anim.isRunning());
@@ -534,6 +553,8 @@
@Override
public void run() {
anim.animateToFinalPosition(1.0f);
+ // Set the duration scale to 1 to avoid prematurely ending the animation.
+ anim.getAnimationHandler().mDurationScale = 1.0f;
}
});
@@ -853,6 +874,41 @@
}
@Test
+ @SdkSuppress(minSdkVersion = 33)
+ public void testDurationScaleChangeListener() throws InterruptedException {
+ final SpringAnimation anim = new SpringAnimation(mView1, DynamicAnimation.Y, 0f);
+ final CountDownLatch registerUnregisterLatch = new CountDownLatch(2);
+
+ InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ // getAnimationHandler and AnimationHandler.getInstance() requires a looper, so run
+ // on the main thread.
+ AnimationHandler animHandler = anim.getAnimationHandler();
+ assertEquals(1, animHandler.getDurationScale(), 0);
+ assertNull(animHandler.mDurationScaleChangeListener);
+ animHandler.mDurationScaleChangeListener =
+ new MyDurationScaleChangeListener(animHandler, registerUnregisterLatch);
+
+ anim.start();
+ assertEquals(0, animHandler.getDurationScale(), 0);
+ }
+ });
+
+ // Wait for the animation to end on the main thread.
+ assertTrue(registerUnregisterLatch.await(1000, TimeUnit.MILLISECONDS));
+
+ InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ AnimationHandler animHandler = anim.getAnimationHandler();
+ // Remove our custom listener at the end.
+ animHandler.mDurationScaleChangeListener = null;
+ }
+ });
+ }
+
+ @Test
public void testCustomHandler() {
final SpringAnimation anim = new SpringAnimation(mView1, DynamicAnimation.Y, 0f);
MyAnimationFrameCallbackScheduler scheduler =
@@ -895,4 +951,29 @@
endTime = SystemClock.uptimeMillis();
}
}
+
+ @RequiresApi(api = 33)
+ class MyDurationScaleChangeListener extends AnimationHandler.DurationScaleChangeListener33 {
+
+ final CountDownLatch mRegisterUnregisterLatch;
+
+ MyDurationScaleChangeListener(AnimationHandler handler, CountDownLatch countDownLatch) {
+ // Call super to construct an inner class
+ handler.super();
+ mRegisterUnregisterLatch = countDownLatch;
+ }
+
+ @Override
+ public boolean register() {
+ mRegisterUnregisterLatch.countDown();
+ assertEquals(1, mRegisterUnregisterLatch.getCount());
+ return super.register();
+ }
+
+ @Override
+ public boolean unregister() {
+ mRegisterUnregisterLatch.countDown();
+ return super.unregister();
+ }
+ }
}
diff --git a/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/AnimationHandler.java b/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/AnimationHandler.java
index f5ce59b..121e503 100644
--- a/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/AnimationHandler.java
+++ b/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/AnimationHandler.java
@@ -16,6 +16,7 @@
package androidx.dynamicanimation.animation;
+import android.animation.ValueAnimator;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
@@ -23,6 +24,7 @@
import android.view.Choreographer;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.VisibleForTesting;
import androidx.collection.SimpleArrayMap;
@@ -39,7 +41,8 @@
* AnimationFrameCallbackProvider can be set on the handler to provide timing pulse that
* may be independent of UI frame update. This could be useful in testing.
*/
-class AnimationHandler {
+@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+public class AnimationHandler {
/**
* Callbacks that receives notifications for animation timing
*/
@@ -93,6 +96,11 @@
@SuppressWarnings("WeakerAccess") /* synthetic access */
long mCurrentFrameTime = 0;
private boolean mListDirty = false;
+ @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+ public float mDurationScale = 1.0f;
+ @Nullable
+ @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+ public DurationScaleChangeListener mDurationScaleChangeListener;
static AnimationHandler getInstance() {
if (sAnimatorHandler.get() == null) {
@@ -121,6 +129,13 @@
void addAnimationFrameCallback(final AnimationFrameCallback callback, long delay) {
if (mAnimationCallbacks.size() == 0) {
mScheduler.postFrameCallback(mRunnable);
+ if (Build.VERSION.SDK_INT >= 33) {
+ mDurationScale = ValueAnimator.getDurationScale();
+ if (mDurationScaleChangeListener == null) {
+ mDurationScaleChangeListener = new DurationScaleChangeListener33();
+ }
+ mDurationScaleChangeListener.register();
+ }
}
if (!mAnimationCallbacks.contains(callback)) {
mAnimationCallbacks.add(callback);
@@ -193,6 +208,12 @@
mAnimationCallbacks.remove(i);
}
}
+ // Unregister duration scale listener if there are no current animations.
+ if (mAnimationCallbacks.size() == 0) {
+ if (Build.VERSION.SDK_INT >= 33) {
+ mDurationScaleChangeListener.unregister();
+ }
+ }
mListDirty = false;
}
}
@@ -253,4 +274,55 @@
return Thread.currentThread() == mHandler.getLooper().getThread();
}
}
+
+ /**
+ * Returns the system-wide scaling factor for animations.
+ */
+ @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+ public float getDurationScale() {
+ return mDurationScale;
+ }
+
+ /**
+ * T+ listener for changes to the system-wide scaling factor for Animator-based animations.
+ */
+ @RequiresApi(api = 33)
+ @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+ public class DurationScaleChangeListener33 implements DurationScaleChangeListener {
+ ValueAnimator.DurationScaleChangeListener mListener;
+
+ @Override
+ public boolean register() {
+ if (mListener == null) {
+ mListener = scale -> AnimationHandler.this.mDurationScale = scale;
+ return ValueAnimator.registerDurationScaleChangeListener(mListener);
+ }
+ return true;
+ }
+
+ @Override
+ public boolean unregister() {
+ boolean unregistered = ValueAnimator.unregisterDurationScaleChangeListener(mListener);
+ mListener = null;
+ return unregistered;
+ }
+ }
+
+ /**
+ * listener for changes to the system-wide scaling factor for Animator-based animations.
+ */
+ @VisibleForTesting
+ public interface DurationScaleChangeListener {
+ /**
+ * Registers a duration scale change listener.
+ * @return true if a listener is registered or one is already registered.
+ */
+ boolean register();
+
+ /**
+ * Unregisters a duration scale change listener.
+ * @return true if a listener is unregistered.
+ */
+ boolean unregister();
+ }
}
diff --git a/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/DynamicAnimation.java b/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/DynamicAnimation.java
index c361dd8..58f0842 100644
--- a/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/DynamicAnimation.java
+++ b/dynamicanimation/dynamicanimation/src/main/java/androidx/dynamicanimation/animation/DynamicAnimation.java
@@ -25,6 +25,7 @@
import androidx.annotation.MainThread;
import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
import androidx.core.view.ViewCompat;
import java.util.ArrayList;
@@ -676,6 +677,8 @@
}
long deltaT = frameTime - mLastFrameTime;
mLastFrameTime = frameTime;
+ float durationScale = getAnimationHandler().getDurationScale();
+ deltaT = durationScale == 0.0f ? Integer.MAX_VALUE : (long) (deltaT / durationScale);
boolean finished = updateValueAndVelocity(deltaT);
// Clamp value & velocity.
mValue = Math.min(mValue, mMaxValue);
@@ -750,7 +753,8 @@
* @return the {@link AnimationHandler} for this animator.
*/
@NonNull
- AnimationHandler getAnimationHandler() {
+ @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+ public AnimationHandler getAnimationHandler() {
return mAnimationHandler != null ? mAnimationHandler : AnimationHandler.getInstance();
}
diff --git a/emoji/emoji/lint-baseline.xml b/emoji/emoji/lint-baseline.xml
index 7d4802c..1182ed3 100644
--- a/emoji/emoji/lint-baseline.xml
+++ b/emoji/emoji/lint-baseline.xml
@@ -160,7 +160,8 @@
errorLine1=" if (mResId == -1 || mResId == spans[index].getId()) {"
errorLine2=" ~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/util/EmojiMatcher.java"/>
+ file="src/androidTest/java/androidx/emoji/util/EmojiMatcher.java"
+ column="64"/>
</issue>
<issue
@@ -169,7 +170,9 @@
errorLine1=" mTextWatcher = new EmojiTextWatcher(editText);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+ line="54"
+ column="24"/>
</issue>
<issue
@@ -178,7 +181,9 @@
errorLine1=" mTextWatcher.onTextChanged(testString, 0, 0, 1);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+ line="62"
+ column="22"/>
</issue>
<issue
@@ -187,7 +192,9 @@
errorLine1=" mTextWatcher.onTextChanged(testString, 0, 0, 1);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+ line="74"
+ column="22"/>
</issue>
<issue
@@ -196,7 +203,9 @@
errorLine1=" mTextWatcher.onTextChanged(testString, 0, 0, 1);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+ line="86"
+ column="22"/>
</issue>
<issue
@@ -205,7 +214,9 @@
errorLine1=" assertEquals(EmojiCompat.REPLACE_STRATEGY_DEFAULT, mTextWatcher.getEmojiReplaceStrategy());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+ line="98"
+ column="73"/>
</issue>
<issue
@@ -214,7 +225,9 @@
errorLine1=" mTextWatcher.onTextChanged(testString, 0, 0, 1);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+ line="100"
+ column="22"/>
</issue>
<issue
@@ -223,7 +236,9 @@
errorLine1=" mTextWatcher.setEmojiReplaceStrategy(EmojiCompat.REPLACE_STRATEGY_ALL);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+ line="105"
+ column="22"/>
</issue>
<issue
@@ -232,7 +247,9 @@
errorLine1=" mTextWatcher.onTextChanged(testString, 0, 0, 1);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+ line="107"
+ column="22"/>
</issue>
<issue
@@ -241,7 +258,9 @@
errorLine1=" mTextWatcher.onTextChanged(testString, 0, 0, 1);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+ line="118"
+ column="22"/>
</issue>
<issue
@@ -250,7 +269,9 @@
errorLine1=" mTransformationMethod = new EmojiTransformationMethod(mWrappedTransformationMethod);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+ line="84"
+ column="33"/>
</issue>
<issue
@@ -259,7 +280,9 @@
errorLine1=" assertNull(mTransformationMethod.getTransformation(null, mView));"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+ line="89"
+ column="42"/>
</issue>
<issue
@@ -268,7 +291,9 @@
errorLine1=" mTransformationMethod.getTransformation("", null);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+ line="95"
+ column="31"/>
</issue>
<issue
@@ -277,7 +302,9 @@
errorLine1=" mTransformationMethod = new EmojiTransformationMethod(null);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+ line="100"
+ column="33"/>
</issue>
<issue
@@ -286,7 +313,9 @@
errorLine1=" final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+ line="102"
+ column="59"/>
</issue>
<issue
@@ -295,7 +324,9 @@
errorLine1=" final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+ line="110"
+ column="59"/>
</issue>
<issue
@@ -304,7 +335,9 @@
errorLine1=" final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+ line="124"
+ column="59"/>
</issue>
<issue
@@ -313,7 +346,9 @@
errorLine1=" final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+ line="137"
+ column="59"/>
</issue>
<issue
@@ -322,7 +357,9 @@
errorLine1=" final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+ line="150"
+ column="59"/>
</issue>
<issue
@@ -331,7 +368,9 @@
errorLine1=" final EmojiSpan span = mock(EmojiSpan.class);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"
+ line="124"
+ column="37"/>
</issue>
<issue
@@ -340,7 +379,9 @@
errorLine1=" EmojiSpan[] spans = spannable.getSpans(0, spannable.length(), EmojiSpan.class);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"
+ line="135"
+ column="71"/>
</issue>
<issue
@@ -349,7 +390,9 @@
errorLine1=" final EmojiSpan span = mock(EmojiSpan.class);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"
+ line="188"
+ column="37"/>
</issue>
<issue
@@ -358,7 +401,9 @@
errorLine1=" EmojiSpan[] spans = spannable.getSpans(0, spannable.length(), EmojiSpan.class);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"/>
+ file="src/androidTest/java/androidx/emoji/widget/SpannableBuilderTest.java"
+ line="200"
+ column="71"/>
</issue>
<issue
@@ -367,7 +412,9 @@
errorLine1=" loaderCallback.onLoaded(new MetadataRepo());"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"/>
+ file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"
+ line="88"
+ column="53"/>
</issue>
<issue
@@ -376,7 +423,9 @@
errorLine1=" sMetadataRepo = MetadataRepo.create(assetManager, FONT_FILE);"
errorLine2=" ~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"/>
+ file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"
+ line="119"
+ column="58"/>
</issue>
<issue
@@ -385,7 +434,9 @@
errorLine1=" mMetadataRepo = MetadataRepo.create(assetManager, FONT_FILE);"
errorLine2=" ~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"/>
+ file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"
+ line="144"
+ column="50"/>
</issue>
<issue
@@ -394,7 +445,9 @@
errorLine1=" super(context, attrs, defStyleAttr, defStyleRes);"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+ line="58"
+ column="9"/>
</issue>
<issue
@@ -403,7 +456,9 @@
errorLine1=" super(context, attrs, defStyleAttr, defStyleRes);"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+ line="65"
+ column="9"/>
</issue>
<issue
@@ -412,7 +467,9 @@
errorLine1=" super(context, attrs, defStyleAttr, defStyleRes);"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+ line="74"
+ column="9"/>
</issue>
<issue
@@ -421,7 +478,9 @@
errorLine1=" super(context, attrs, defStyleAttr, defStyleRes);"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+ line="99"
+ column="9"/>
</issue>
<issue
@@ -430,7 +489,9 @@
errorLine1=" super(context, attrs, defStyleAttr, defStyleRes);"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+ line="58"
+ column="9"/>
</issue>
<issue
@@ -439,7 +500,9 @@
errorLine1=" super(context, attrs, defStyleAttr, defStyleRes);"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+ file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+ line="53"
+ column="9"/>
</issue>
<issue
@@ -448,9 +511,13 @@
errorLine1=" public int getHasGlyph() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiMetadata.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiMetadata.java"
+ line="184"
+ column="16"/>
<location
file="src/main/java/androidx/emoji/text/EmojiMetadata.java"
+ line="193"
+ column="17"
message="Setter here"/>
</issue>
@@ -460,7 +527,9 @@
errorLine1=" public EditTextAttributeHelper(@NonNull View view, AttributeSet attrs, int defStyleAttr,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EditTextAttributeHelper.java"/>
+ file="src/main/java/androidx/emoji/widget/EditTextAttributeHelper.java"
+ line="40"
+ column="56"/>
</issue>
<issue
@@ -469,7 +538,9 @@
errorLine1=" public EmojiButton(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+ line="41"
+ column="24"/>
</issue>
<issue
@@ -478,7 +549,9 @@
errorLine1=" public EmojiButton(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+ line="46"
+ column="24"/>
</issue>
<issue
@@ -487,7 +560,9 @@
errorLine1=" public EmojiButton(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+ line="46"
+ column="41"/>
</issue>
<issue
@@ -496,7 +571,9 @@
errorLine1=" public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+ line="51"
+ column="24"/>
</issue>
<issue
@@ -505,7 +582,9 @@
errorLine1=" public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+ line="51"
+ column="41"/>
</issue>
<issue
@@ -514,7 +593,9 @@
errorLine1=" public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+ line="57"
+ column="24"/>
</issue>
<issue
@@ -523,7 +604,9 @@
errorLine1=" public EmojiButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiButton.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiButton.java"
+ line="57"
+ column="41"/>
</issue>
<issue
@@ -532,7 +615,9 @@
errorLine1=" public static EmojiCompat init(@NonNull final Config config) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="303"
+ column="19"/>
</issue>
<issue
@@ -541,7 +626,9 @@
errorLine1=" public static EmojiCompat reset(@NonNull final Config config) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="323"
+ column="19"/>
</issue>
<issue
@@ -550,7 +637,9 @@
errorLine1=" public static EmojiCompat reset(final EmojiCompat emojiCompat) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="338"
+ column="19"/>
</issue>
<issue
@@ -559,7 +648,9 @@
errorLine1=" public static EmojiCompat reset(final EmojiCompat emojiCompat) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="338"
+ column="43"/>
</issue>
<issue
@@ -568,7 +659,9 @@
errorLine1=" public static EmojiCompat get() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="353"
+ column="19"/>
</issue>
<issue
@@ -577,7 +670,9 @@
errorLine1=" final KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="542"
+ column="19"/>
</issue>
<issue
@@ -586,7 +681,9 @@
errorLine1=" public CharSequence process(@NonNull final CharSequence charSequence) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="626"
+ column="12"/>
</issue>
<issue
@@ -595,7 +692,9 @@
errorLine1=" public CharSequence process(@NonNull final CharSequence charSequence,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="662"
+ column="12"/>
</issue>
<issue
@@ -604,7 +703,9 @@
errorLine1=" public CharSequence process(@NonNull final CharSequence charSequence,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="697"
+ column="12"/>
</issue>
<issue
@@ -613,7 +714,9 @@
errorLine1=" public CharSequence process(@NonNull final CharSequence charSequence,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="737"
+ column="12"/>
</issue>
<issue
@@ -622,7 +725,9 @@
errorLine1=" public Config registerInitCallback(@NonNull InitCallback initCallback) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="990"
+ column="16"/>
</issue>
<issue
@@ -631,7 +736,9 @@
errorLine1=" public Config unregisterInitCallback(@NonNull InitCallback initCallback) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="1008"
+ column="16"/>
</issue>
<issue
@@ -640,7 +747,9 @@
errorLine1=" public Config setReplaceAll(final boolean replaceAll) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="1025"
+ column="16"/>
</issue>
<issue
@@ -649,7 +758,9 @@
errorLine1=" public Config setUseEmojiAsDefaultStyle(final boolean useEmojiAsDefaultStyle) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="1045"
+ column="16"/>
</issue>
<issue
@@ -658,7 +769,9 @@
errorLine1=" public Config setUseEmojiAsDefaultStyle(final boolean useEmojiAsDefaultStyle,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="1064"
+ column="16"/>
</issue>
<issue
@@ -667,7 +780,9 @@
errorLine1=" public Config setEmojiSpanIndicatorEnabled(boolean emojiSpanIndicatorEnabled) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="1088"
+ column="16"/>
</issue>
<issue
@@ -676,7 +791,9 @@
errorLine1=" public Config setEmojiSpanIndicatorColor(@ColorInt int color) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="1099"
+ column="16"/>
</issue>
<issue
@@ -685,7 +802,9 @@
errorLine1=" public Config setMetadataLoadStrategy(@LoadStrategy int strategy) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="1140"
+ column="16"/>
</issue>
<issue
@@ -694,7 +813,9 @@
errorLine1=" protected final MetadataRepoLoader getMetadataRepoLoader() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiCompat.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiCompat.java"
+ line="1161"
+ column="25"/>
</issue>
<issue
@@ -703,7 +824,9 @@
errorLine1=" public EmojiEditText(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+ line="48"
+ column="26"/>
</issue>
<issue
@@ -712,7 +835,9 @@
errorLine1=" public EmojiEditText(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+ line="53"
+ column="26"/>
</issue>
<issue
@@ -721,7 +846,9 @@
errorLine1=" public EmojiEditText(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+ line="53"
+ column="43"/>
</issue>
<issue
@@ -730,7 +857,9 @@
errorLine1=" public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+ line="58"
+ column="26"/>
</issue>
<issue
@@ -739,7 +868,9 @@
errorLine1=" public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+ line="58"
+ column="43"/>
</issue>
<issue
@@ -748,7 +879,9 @@
errorLine1=" public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+ line="64"
+ column="26"/>
</issue>
<issue
@@ -757,7 +890,9 @@
errorLine1=" public EmojiEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiEditText.java"
+ line="64"
+ column="43"/>
</issue>
<issue
@@ -766,7 +901,9 @@
errorLine1=" public EmojiExtractEditText(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+ line="56"
+ column="33"/>
</issue>
<issue
@@ -775,7 +912,9 @@
errorLine1=" public EmojiExtractEditText(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+ line="61"
+ column="33"/>
</issue>
<issue
@@ -784,7 +923,9 @@
errorLine1=" public EmojiExtractEditText(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+ line="61"
+ column="50"/>
</issue>
<issue
@@ -793,7 +934,9 @@
errorLine1=" public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+ line="66"
+ column="33"/>
</issue>
<issue
@@ -802,7 +945,9 @@
errorLine1=" public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+ line="66"
+ column="50"/>
</issue>
<issue
@@ -811,7 +956,9 @@
errorLine1=" public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+ line="72"
+ column="33"/>
</issue>
<issue
@@ -820,7 +967,9 @@
errorLine1=" public EmojiExtractEditText(Context context, AttributeSet attrs, int defStyleAttr,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractEditText.java"
+ line="72"
+ column="50"/>
</issue>
<issue
@@ -829,7 +978,9 @@
errorLine1=" public EmojiExtractTextLayout(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+ line="79"
+ column="35"/>
</issue>
<issue
@@ -838,7 +989,9 @@
errorLine1=" public EmojiExtractTextLayout(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+ line="84"
+ column="35"/>
</issue>
<issue
@@ -847,7 +1000,9 @@
errorLine1=" public EmojiExtractTextLayout(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+ line="90"
+ column="35"/>
</issue>
<issue
@@ -856,7 +1011,9 @@
errorLine1=" public EmojiExtractTextLayout(Context context, AttributeSet attrs,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+ line="97"
+ column="35"/>
</issue>
<issue
@@ -865,7 +1022,9 @@
errorLine1=" public EmojiExtractTextLayout(Context context, AttributeSet attrs,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+ line="97"
+ column="52"/>
</issue>
<issue
@@ -874,7 +1033,9 @@
errorLine1=" public void onUpdateExtractingViews(InputMethodService inputMethodService, EditorInfo ei) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+ line="163"
+ column="41"/>
</issue>
<issue
@@ -883,7 +1044,9 @@
errorLine1=" public void onUpdateExtractingViews(InputMethodService inputMethodService, EditorInfo ei) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiExtractTextLayout.java"
+ line="163"
+ column="80"/>
</issue>
<issue
@@ -892,7 +1055,9 @@
errorLine1=" public Typeface getTypeface() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiMetadata.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiMetadata.java"
+ line="120"
+ column="12"/>
</issue>
<issue
@@ -901,7 +1066,9 @@
errorLine1=" final int end, final Paint.FontMetricsInt fm) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/EmojiSpan.java"/>
+ file="src/main/java/androidx/emoji/text/EmojiSpan.java"
+ line="78"
+ column="34"/>
</issue>
<issue
@@ -910,7 +1077,9 @@
errorLine1=" public EmojiTextView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+ line="41"
+ column="26"/>
</issue>
<issue
@@ -919,7 +1088,9 @@
errorLine1=" public EmojiTextView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+ line="46"
+ column="26"/>
</issue>
<issue
@@ -928,7 +1099,9 @@
errorLine1=" public EmojiTextView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+ line="46"
+ column="43"/>
</issue>
<issue
@@ -937,7 +1110,9 @@
errorLine1=" public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+ line="51"
+ column="26"/>
</issue>
<issue
@@ -946,7 +1121,9 @@
errorLine1=" public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+ line="51"
+ column="43"/>
</issue>
<issue
@@ -955,7 +1132,9 @@
errorLine1=" public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+ line="57"
+ column="26"/>
</issue>
<issue
@@ -964,7 +1143,9 @@
errorLine1=" public EmojiTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/EmojiTextView.java"/>
+ file="src/main/java/androidx/emoji/widget/EmojiTextView.java"
+ line="57"
+ column="43"/>
</issue>
<issue
@@ -973,7 +1154,9 @@
errorLine1=" public ExtractButtonCompat(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+ file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+ line="38"
+ column="32"/>
</issue>
<issue
@@ -982,7 +1165,9 @@
errorLine1=" public ExtractButtonCompat(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+ file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+ line="42"
+ column="32"/>
</issue>
<issue
@@ -991,7 +1176,9 @@
errorLine1=" public ExtractButtonCompat(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+ file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+ line="42"
+ column="49"/>
</issue>
<issue
@@ -1000,7 +1187,9 @@
errorLine1=" public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+ file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+ line="46"
+ column="32"/>
</issue>
<issue
@@ -1009,7 +1198,9 @@
errorLine1=" public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+ file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+ line="46"
+ column="49"/>
</issue>
<issue
@@ -1018,7 +1209,9 @@
errorLine1=" public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+ file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+ line="51"
+ column="32"/>
</issue>
<issue
@@ -1027,7 +1220,9 @@
errorLine1=" public ExtractButtonCompat(Context context, AttributeSet attrs, int defStyleAttr,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"/>
+ file="src/main/java/androidx/emoji/widget/ExtractButtonCompat.java"
+ line="51"
+ column="49"/>
</issue>
<issue
@@ -1036,7 +1231,9 @@
errorLine1=" public FontRequestEmojiCompatConfig setHandler(Handler handler) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"/>
+ file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"
+ line="143"
+ column="12"/>
</issue>
<issue
@@ -1045,7 +1242,9 @@
errorLine1=" public FontRequestEmojiCompatConfig setHandler(Handler handler) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"/>
+ file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"
+ line="143"
+ column="52"/>
</issue>
<issue
@@ -1054,7 +1253,9 @@
errorLine1=" public FontRequestEmojiCompatConfig setRetryPolicy(RetryPolicy policy) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"/>
+ file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"
+ line="156"
+ column="12"/>
</issue>
<issue
@@ -1063,7 +1264,9 @@
errorLine1=" public FontRequestEmojiCompatConfig setRetryPolicy(RetryPolicy policy) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"/>
+ file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"
+ line="156"
+ column="56"/>
</issue>
<issue
@@ -1072,7 +1275,9 @@
errorLine1=" public FontFamilyResult fetchFonts(@NonNull Context context,"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"/>
+ file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"
+ line="335"
+ column="16"/>
</issue>
<issue
@@ -1081,7 +1286,9 @@
errorLine1=" public Typeface buildTypeface(@NonNull Context context,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"/>
+ file="src/main/java/androidx/emoji/text/FontRequestEmojiCompatConfig.java"
+ line="341"
+ column="16"/>
</issue>
<issue
@@ -1090,7 +1297,9 @@
errorLine1=" public static MetadataRepo create(@NonNull final Typeface typeface,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/MetadataRepo.java"/>
+ file="src/main/java/androidx/emoji/text/MetadataRepo.java"
+ line="103"
+ column="19"/>
</issue>
<issue
@@ -1099,7 +1308,9 @@
errorLine1=" public static MetadataRepo create(@NonNull final Typeface typeface,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/MetadataRepo.java"/>
+ file="src/main/java/androidx/emoji/text/MetadataRepo.java"
+ line="115"
+ column="19"/>
</issue>
<issue
@@ -1108,7 +1319,9 @@
errorLine1=" public static MetadataRepo create(@NonNull final AssetManager assetManager,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/MetadataRepo.java"/>
+ file="src/main/java/androidx/emoji/text/MetadataRepo.java"
+ line="127"
+ column="19"/>
</issue>
<issue
@@ -1117,7 +1330,9 @@
errorLine1=" final String assetPath) throws IOException {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/MetadataRepo.java"/>
+ file="src/main/java/androidx/emoji/text/MetadataRepo.java"
+ line="128"
+ column="19"/>
</issue>
<issue
@@ -1126,7 +1341,9 @@
errorLine1=" public char[] getEmojiCharArray() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/MetadataRepo.java"/>
+ file="src/main/java/androidx/emoji/text/MetadataRepo.java"
+ line="176"
+ column="12"/>
</issue>
<issue
@@ -1135,7 +1352,9 @@
errorLine1=" public MetadataList getMetadataList() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/MetadataRepo.java"/>
+ file="src/main/java/androidx/emoji/text/MetadataRepo.java"
+ line="184"
+ column="12"/>
</issue>
<issue
@@ -1144,7 +1363,9 @@
errorLine1=" public CharSequence subSequence(int start, int end) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"/>
+ file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"
+ line="124"
+ column="12"/>
</issue>
<issue
@@ -1153,7 +1374,9 @@
errorLine1=" public SpannableStringBuilder append(CharSequence text) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"/>
+ file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"
+ line="336"
+ column="12"/>
</issue>
<issue
@@ -1162,7 +1385,9 @@
errorLine1=" public SpannableStringBuilder append(CharSequence text) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"/>
+ file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"
+ line="336"
+ column="42"/>
</issue>
<issue
@@ -1171,7 +1396,9 @@
errorLine1=" public SpannableStringBuilder append(char text) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"/>
+ file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"
+ line="342"
+ column="12"/>
</issue>
<issue
@@ -1180,7 +1407,9 @@
errorLine1=" public SpannableStringBuilder append(CharSequence text, int start, int end) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"/>
+ file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"
+ line="348"
+ column="12"/>
</issue>
<issue
@@ -1189,7 +1418,9 @@
errorLine1=" public SpannableStringBuilder append(CharSequence text, int start, int end) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"/>
+ file="src/main/java/androidx/emoji/widget/SpannableBuilder.java"
+ line="348"
+ column="42"/>
</issue>
<issue
@@ -1198,7 +1429,9 @@
errorLine1=" public TypefaceEmojiSpan(final EmojiMetadata metadata) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/emoji/text/TypefaceEmojiSpan.java"/>
+ file="src/main/java/androidx/emoji/text/TypefaceEmojiSpan.java"
+ line="48"
+ column="36"/>
</issue>
</issues>
diff --git a/emoji2/emoji2-bundled/build.gradle b/emoji2/emoji2-bundled/build.gradle
index 0ea043e..9e9cca6 100644
--- a/emoji2/emoji2-bundled/build.gradle
+++ b/emoji2/emoji2-bundled/build.gradle
@@ -27,6 +27,10 @@
}
namespace "androidx.emoji2.bundled"
+ // Workaround for b/230466571 where targetSdkVersion gets merged incorrectly.
+ defaultConfig {
+ targetSdk null
+ }
}
dependencies {
diff --git a/emoji2/emoji2-bundled/lint-baseline.xml b/emoji2/emoji2-bundled/lint-baseline.xml
index ba06e13..0f674ac 100644
--- a/emoji2/emoji2-bundled/lint-baseline.xml
+++ b/emoji2/emoji2-bundled/lint-baseline.xml
@@ -52,7 +52,9 @@
errorLine1=" loaderCallback.onLoaded(MetadataRepo.create(mock(Typeface.class)));"
errorLine2=" ~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"/>
+ file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"
+ line="92"
+ column="66"/>
</issue>
<issue
@@ -61,7 +63,9 @@
errorLine1=" sMetadataRepo = MetadataRepo.create(assetManager, FONT_FILE);"
errorLine2=" ~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"/>
+ file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"
+ line="123"
+ column="58"/>
</issue>
<issue
@@ -70,7 +74,9 @@
errorLine1=" mMetadataRepo = MetadataRepo.create(assetManager, FONT_FILE);"
errorLine2=" ~~~~~~">
<location
- file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"/>
+ file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"
+ line="148"
+ column="50"/>
</issue>
</issues>
diff --git a/emoji2/emoji2-views-helper/build.gradle b/emoji2/emoji2-views-helper/build.gradle
index c177372..791cdec 100644
--- a/emoji2/emoji2-views-helper/build.gradle
+++ b/emoji2/emoji2-views-helper/build.gradle
@@ -24,6 +24,11 @@
android {
namespace "androidx.emoji2.viewsintegration"
+
+ // Workaround for b/230466571 where targetSdkVersion gets merged incorrectly.
+ defaultConfig {
+ targetSdk null
+ }
}
androidx {
diff --git a/emoji2/emoji2-views/build.gradle b/emoji2/emoji2-views/build.gradle
index a53c92e..5333ac1 100644
--- a/emoji2/emoji2-views/build.gradle
+++ b/emoji2/emoji2-views/build.gradle
@@ -30,6 +30,11 @@
}
}
namespace "androidx.emoji2.widget"
+
+ // Workaround for b/230466571 where targetSdkVersion gets merged incorrectly.
+ defaultConfig {
+ targetSdk null
+ }
}
androidx {
diff --git a/emoji2/emoji2/build.gradle b/emoji2/emoji2/build.gradle
index 888aa92..4abee4a 100644
--- a/emoji2/emoji2/build.gradle
+++ b/emoji2/emoji2/build.gradle
@@ -46,4 +46,9 @@
android {
namespace "androidx.emoji2"
+
+ // Workaround for b/230466571 where targetSdkVersion gets merged incorrectly.
+ defaultConfig {
+ targetSdk null
+ }
}
diff --git a/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java b/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
index 84de192..e661776 100644
--- a/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
+++ b/exifinterface/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
@@ -5970,7 +5970,11 @@
throw new UnsupportedOperationException("Failed to read EXIF from HEIF file. "
+ "Given stream is either malformed or unsupported.");
} finally {
- retriever.release();
+ try {
+ retriever.release();
+ } catch (IOException e) {
+ // Nothing we can do about it.
+ }
}
} else {
throw new UnsupportedOperationException("Reading EXIF from HEIF files "
diff --git a/fragment/fragment-ktx/api/1.5.0-beta01.txt b/fragment/fragment-ktx/api/1.5.0-beta01.txt
deleted file mode 100644
index 6d0a8d3..0000000
--- a/fragment/fragment-ktx/api/1.5.0-beta01.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
- public final class FragmentKt {
- method public static void clearFragmentResult(androidx.fragment.app.Fragment, String requestKey);
- method public static void clearFragmentResultListener(androidx.fragment.app.Fragment, String requestKey);
- method public static void setFragmentResult(androidx.fragment.app.Fragment, String requestKey, android.os.Bundle result);
- method public static void setFragmentResultListener(androidx.fragment.app.Fragment, String requestKey, kotlin.jvm.functions.Function2<? super java.lang.String,? super android.os.Bundle,kotlin.Unit> listener);
- }
-
- public final class FragmentManagerKt {
- method public static inline void commit(androidx.fragment.app.FragmentManager, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
- method 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.5.0-beta01.txt b/fragment/fragment-ktx/api/public_plus_experimental_1.5.0-beta01.txt
deleted file mode 100644
index 6d0a8d3..0000000
--- a/fragment/fragment-ktx/api/public_plus_experimental_1.5.0-beta01.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
- public final class FragmentKt {
- method public static void clearFragmentResult(androidx.fragment.app.Fragment, String requestKey);
- method public static void clearFragmentResultListener(androidx.fragment.app.Fragment, String requestKey);
- method public static void setFragmentResult(androidx.fragment.app.Fragment, String requestKey, android.os.Bundle result);
- method public static void setFragmentResultListener(androidx.fragment.app.Fragment, String requestKey, kotlin.jvm.functions.Function2<? super java.lang.String,? super android.os.Bundle,kotlin.Unit> listener);
- }
-
- public final class FragmentManagerKt {
- method public static inline void commit(androidx.fragment.app.FragmentManager, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
- method 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.5.0-beta01.txt b/fragment/fragment-ktx/api/res-1.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/fragment/fragment-ktx/api/res-1.5.0-beta01.txt
+++ /dev/null
diff --git a/fragment/fragment-ktx/api/restricted_1.5.0-beta01.txt b/fragment/fragment-ktx/api/restricted_1.5.0-beta01.txt
deleted file mode 100644
index 6d0a8d3..0000000
--- a/fragment/fragment-ktx/api/restricted_1.5.0-beta01.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
- public final class FragmentKt {
- method public static void clearFragmentResult(androidx.fragment.app.Fragment, String requestKey);
- method public static void clearFragmentResultListener(androidx.fragment.app.Fragment, String requestKey);
- method public static void setFragmentResult(androidx.fragment.app.Fragment, String requestKey, android.os.Bundle result);
- method public static void setFragmentResultListener(androidx.fragment.app.Fragment, String requestKey, kotlin.jvm.functions.Function2<? super java.lang.String,? super android.os.Bundle,kotlin.Unit> listener);
- }
-
- public final class FragmentManagerKt {
- method public static inline void commit(androidx.fragment.app.FragmentManager, optional boolean allowStateLoss, kotlin.jvm.functions.Function1<? super androidx.fragment.app.FragmentTransaction,kotlin.Unit> body);
- method 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/api/1.5.0-beta01.txt b/fragment/fragment-testing/api/1.5.0-beta01.txt
deleted file mode 100644
index e784213..0000000
--- a/fragment/fragment-testing/api/1.5.0-beta01.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app.testing {
-
- public final class FragmentScenario<F extends androidx.fragment.app.Fragment> implements java.io.Closeable {
- method public void close();
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
- method public androidx.fragment.app.testing.FragmentScenario<F> moveToState(androidx.lifecycle.Lifecycle.State newState);
- method public androidx.fragment.app.testing.FragmentScenario<F> onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction<F> action);
- method public androidx.fragment.app.testing.FragmentScenario<F> recreate();
- field public static final androidx.fragment.app.testing.FragmentScenario.Companion Companion;
- }
-
- public static final class FragmentScenario.Companion {
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
- }
-
- public static fun interface FragmentScenario.FragmentAction<F extends androidx.fragment.app.Fragment> {
- method public void perform(F fragment);
- }
-
- public final class FragmentScenarioKt {
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method public static inline <reified F extends androidx.fragment.app.Fragment, T> T! withFragment(androidx.fragment.app.testing.FragmentScenario<F>, kotlin.jvm.functions.Function1<? super F,? extends T> block);
- }
-
-}
-
diff --git a/fragment/fragment-testing/api/public_plus_experimental_1.5.0-beta01.txt b/fragment/fragment-testing/api/public_plus_experimental_1.5.0-beta01.txt
deleted file mode 100644
index e784213..0000000
--- a/fragment/fragment-testing/api/public_plus_experimental_1.5.0-beta01.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app.testing {
-
- public final class FragmentScenario<F extends androidx.fragment.app.Fragment> implements java.io.Closeable {
- method public void close();
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
- method public androidx.fragment.app.testing.FragmentScenario<F> moveToState(androidx.lifecycle.Lifecycle.State newState);
- method public androidx.fragment.app.testing.FragmentScenario<F> onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction<F> action);
- method public androidx.fragment.app.testing.FragmentScenario<F> recreate();
- field public static final androidx.fragment.app.testing.FragmentScenario.Companion Companion;
- }
-
- public static final class FragmentScenario.Companion {
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
- }
-
- public static fun interface FragmentScenario.FragmentAction<F extends androidx.fragment.app.Fragment> {
- method public void perform(F fragment);
- }
-
- public final class FragmentScenarioKt {
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method public static inline <reified F extends androidx.fragment.app.Fragment, T> T! withFragment(androidx.fragment.app.testing.FragmentScenario<F>, kotlin.jvm.functions.Function1<? super F,? extends T> block);
- }
-
-}
-
diff --git a/fragment/fragment-testing/api/res-1.5.0-beta01.txt b/fragment/fragment-testing/api/res-1.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/fragment/fragment-testing/api/res-1.5.0-beta01.txt
+++ /dev/null
diff --git a/fragment/fragment-testing/api/restricted_1.5.0-beta01.txt b/fragment/fragment-testing/api/restricted_1.5.0-beta01.txt
deleted file mode 100644
index e784213..0000000
--- a/fragment/fragment-testing/api/restricted_1.5.0-beta01.txt
+++ /dev/null
@@ -1,60 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app.testing {
-
- public final class FragmentScenario<F extends androidx.fragment.app.Fragment> implements java.io.Closeable {
- method public void close();
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public static <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
- method public androidx.fragment.app.testing.FragmentScenario<F> moveToState(androidx.lifecycle.Lifecycle.State newState);
- method public androidx.fragment.app.testing.FragmentScenario<F> onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction<F> action);
- method public androidx.fragment.app.testing.FragmentScenario<F> recreate();
- field public static final androidx.fragment.app.testing.FragmentScenario.Companion Companion;
- }
-
- public static final class FragmentScenario.Companion {
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launch(Class<F> fragmentClass);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, android.os.Bundle? fragmentArgs, @StyleRes int themeResId, androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass, optional android.os.Bundle? fragmentArgs);
- method public <F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F> launchInContainer(Class<F> fragmentClass);
- }
-
- public static fun interface FragmentScenario.FragmentAction<F extends androidx.fragment.app.Fragment> {
- method public void perform(F fragment);
- }
-
- public final class FragmentScenarioKt {
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragment(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.fragment.app.FragmentFactory? factory);
- method @Deprecated public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, optional androidx.fragment.app.FragmentFactory? factory);
- method public static inline <reified F extends androidx.fragment.app.Fragment> androidx.fragment.app.testing.FragmentScenario<F>! launchFragmentInContainer(optional android.os.Bundle? fragmentArgs, optional @StyleRes int themeResId, optional androidx.lifecycle.Lifecycle.State initialState, kotlin.jvm.functions.Function0<? extends F> instantiate);
- method public static inline <reified F extends androidx.fragment.app.Fragment, T> T! withFragment(androidx.fragment.app.testing.FragmentScenario<F>, kotlin.jvm.functions.Function1<? super F,? extends T> block);
- }
-
-}
-
diff --git a/fragment/fragment/api/1.5.0-beta01.txt b/fragment/fragment/api/1.5.0-beta01.txt
deleted file mode 100644
index 32377c9..0000000
--- a/fragment/fragment/api/1.5.0-beta01.txt
+++ /dev/null
@@ -1,543 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
- public class DialogFragment extends androidx.fragment.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
- ctor public DialogFragment();
- ctor public DialogFragment(@LayoutRes int);
- method public void dismiss();
- method public void dismissAllowingStateLoss();
- method @MainThread public void dismissNow();
- method public android.app.Dialog? getDialog();
- method public boolean getShowsDialog();
- method @StyleRes public int getTheme();
- method public boolean isCancelable();
- method public void onCancel(android.content.DialogInterface);
- method @MainThread public android.app.Dialog onCreateDialog(android.os.Bundle?);
- method public void onDismiss(android.content.DialogInterface);
- 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 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 public boolean popBackStackImmediate();
- method 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 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 public abstract void commitNow();
- method 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 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;
- }
-
-}
-
diff --git a/fragment/fragment/api/public_plus_experimental_1.5.0-beta01.txt b/fragment/fragment/api/public_plus_experimental_1.5.0-beta01.txt
deleted file mode 100644
index 32377c9..0000000
--- a/fragment/fragment/api/public_plus_experimental_1.5.0-beta01.txt
+++ /dev/null
@@ -1,543 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
- public class DialogFragment extends androidx.fragment.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
- ctor public DialogFragment();
- ctor public DialogFragment(@LayoutRes int);
- method public void dismiss();
- method public void dismissAllowingStateLoss();
- method @MainThread public void dismissNow();
- method public android.app.Dialog? getDialog();
- method public boolean getShowsDialog();
- method @StyleRes public int getTheme();
- method public boolean isCancelable();
- method public void onCancel(android.content.DialogInterface);
- method @MainThread public android.app.Dialog onCreateDialog(android.os.Bundle?);
- method public void onDismiss(android.content.DialogInterface);
- 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 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 public boolean popBackStackImmediate();
- method 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 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 public abstract void commitNow();
- method 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 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;
- }
-
-}
-
diff --git a/fragment/fragment/api/res-1.5.0-beta01.txt b/fragment/fragment/api/res-1.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/fragment/fragment/api/res-1.5.0-beta01.txt
+++ /dev/null
diff --git a/fragment/fragment/api/restricted_1.5.0-beta01.txt b/fragment/fragment/api/restricted_1.5.0-beta01.txt
deleted file mode 100644
index 7f0aa7c..0000000
--- a/fragment/fragment/api/restricted_1.5.0-beta01.txt
+++ /dev/null
@@ -1,572 +0,0 @@
-// Signature format: 4.0
-package androidx.fragment.app {
-
- public class DialogFragment extends androidx.fragment.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
- ctor public DialogFragment();
- ctor public DialogFragment(@LayoutRes int);
- method public void dismiss();
- method public void dismissAllowingStateLoss();
- method @MainThread public void dismissNow();
- method public android.app.Dialog? getDialog();
- method public boolean getShowsDialog();
- method @StyleRes public int getTheme();
- method public boolean isCancelable();
- method public void onCancel(android.content.DialogInterface);
- method @MainThread public android.app.Dialog onCreateDialog(android.os.Bundle?);
- method public void onDismiss(android.content.DialogInterface);
- 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 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 public boolean popBackStackImmediate();
- method 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 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 public abstract void commitNow();
- method 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 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;
- }
-
-}
-
diff --git a/fragment/fragment/lint-baseline.xml b/fragment/fragment/lint-baseline.xml
index a16c227..8e06b0c 100644
--- a/fragment/fragment/lint-baseline.xml
+++ b/fragment/fragment/lint-baseline.xml
@@ -79,7 +79,9 @@
errorLine1=" assertThat(fragment.exitTransition.exitingTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="160"
+ column="40"/>
</issue>
<issue
@@ -88,7 +90,9 @@
errorLine1=" assertThat(fragment.reenterTransition.enteringTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="162"
+ column="43"/>
</issue>
<issue
@@ -97,7 +101,9 @@
errorLine1=" assertThat(fragment.reenterTransition.enteringTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="162"
+ column="25"/>
</issue>
<issue
@@ -106,7 +112,9 @@
errorLine1=" assertThat(fragment.reenterTransition.exitingTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="163"
+ column="43"/>
</issue>
<issue
@@ -115,7 +123,9 @@
errorLine1=" assertThat(fragment.reenterTransition.exitingTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="163"
+ column="25"/>
</issue>
<issue
@@ -124,7 +134,9 @@
errorLine1=" assertThat(fragment.returnTransition.enteringTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="164"
+ column="42"/>
</issue>
<issue
@@ -133,7 +145,9 @@
errorLine1=" assertThat(fragment.returnTransition.enteringTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="164"
+ column="25"/>
</issue>
<issue
@@ -142,7 +156,9 @@
errorLine1=" assertThat(fragment.returnTransition.exitingTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="165"
+ column="42"/>
</issue>
<issue
@@ -151,7 +167,9 @@
errorLine1=" assertThat(fragment.returnTransition.exitingTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="165"
+ column="25"/>
</issue>
<issue
@@ -160,7 +178,9 @@
errorLine1=" assertThat(fragment.sharedElementEnter.enteringTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="167"
+ column="44"/>
</issue>
<issue
@@ -169,7 +189,9 @@
errorLine1=" assertThat(fragment.sharedElementEnter.enteringTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="167"
+ column="25"/>
</issue>
<issue
@@ -178,7 +200,9 @@
errorLine1=" assertThat(fragment.sharedElementEnter.exitingTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="168"
+ column="44"/>
</issue>
<issue
@@ -187,7 +211,9 @@
errorLine1=" assertThat(fragment.sharedElementEnter.exitingTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="168"
+ column="25"/>
</issue>
<issue
@@ -196,7 +222,9 @@
errorLine1=" assertThat(fragment.sharedElementReturn.enteringTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="169"
+ column="45"/>
</issue>
<issue
@@ -205,7 +233,9 @@
errorLine1=" assertThat(fragment.sharedElementReturn.enteringTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="169"
+ column="25"/>
</issue>
<issue
@@ -214,7 +244,9 @@
errorLine1=" assertThat(fragment.sharedElementReturn.exitingTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="170"
+ column="45"/>
</issue>
<issue
@@ -223,7 +255,9 @@
errorLine1=" assertThat(fragment.sharedElementReturn.exitingTargets).isEmpty()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTestUtil.kt"
+ line="170"
+ column="25"/>
</issue>
<issue
@@ -232,7 +266,9 @@
errorLine1=" val fragment = TransitionFragment()"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.kt"/>
+ file="src/androidTest/java/androidx/fragment/app/FragmentTransitionTest.kt"
+ line="1683"
+ column="20"/>
</issue>
<issue
@@ -241,7 +277,9 @@
errorLine1=" @RequiresApi(19)"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/fragment/app/FragmentTransitionCompat21.java"/>
+ file="src/main/java/androidx/fragment/app/FragmentTransitionCompat21.java"
+ line="361"
+ column="5"/>
</issue>
</issues>
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionTrampoline.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionTrampoline.kt
index 486e1fa..0905d7e 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionTrampoline.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/ActionTrampoline.kt
@@ -82,6 +82,7 @@
*
* @see applyTrampolineIntent
*/
+@Suppress("DEPRECATION")
internal fun Activity.launchTrampolineAction(intent: Intent) {
val actionIntent = requireNotNull(intent.getParcelableExtra<Intent>(ActionIntentKey)) {
"List adapter activity trampoline invoked without specifying target intent."
diff --git a/gradle.properties b/gradle.properties
index 465af51..18c3692 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -23,8 +23,11 @@
android.forceJacocoOutOfProcess=true
android.experimental.lint.missingBaselineIsEmptyBaseline=true
-# Generate versioned API files
-androidx.writeVersionedApiFiles=true
+# Don't generate versioned API files
+androidx.writeVersionedApiFiles=false
+
+# Don't warn about needing to update AGP
+android.suppressUnsupportedCompileSdk=Tiramisu,33
# Disable features we do not use
android.defaults.buildfeatures.aidl=false
diff --git a/graphics/OWNERS b/graphics/OWNERS
new file mode 100644
index 0000000..db046a2
--- /dev/null
+++ b/graphics/OWNERS
@@ -0,0 +1,5 @@
+# Bug component: 1137062
+sumir@google.com
+jreck@google.com
+xxayedawgxx@google.com
+njawad@google.com
\ No newline at end of file
diff --git a/graphics/graphics-core/api/current.txt b/graphics/graphics-core/api/current.txt
new file mode 100644
index 0000000..96e3492
--- /dev/null
+++ b/graphics/graphics-core/api/current.txt
@@ -0,0 +1,325 @@
+// Signature format: 4.0
+package androidx.graphics.lowlatency {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class GLFrontBufferedRenderer<T> {
+ ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
+ ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback);
+ method public void clear();
+ method public void commit();
+ method public boolean isValid();
+ method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
+ method public void release(boolean cancelPending);
+ method public void renderFrontBufferedLayer(T? param);
+ field public static final androidx.graphics.lowlatency.GLFrontBufferedRenderer.Companion Companion;
+ }
+
+ public static interface GLFrontBufferedRenderer.Callback<T> {
+ method @WorkerThread public default void onDoubleBufferedLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat frontBufferedLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+ method @WorkerThread public void onDrawDoubleBufferedLayer(androidx.graphics.opengl.egl.EglManager eglManager, java.util.Collection<? extends T> params);
+ method @WorkerThread public void onDrawFrontBufferedLayer(androidx.graphics.opengl.egl.EglManager eglManager, T? param);
+ method @WorkerThread public default void onFrontBufferedLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat frontBufferedLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+ }
+
+ public static final class GLFrontBufferedRenderer.Companion {
+ }
+
+}
+
+package androidx.graphics.opengl {
+
+ public final class GLRenderer {
+ ctor public GLRenderer(optional kotlin.jvm.functions.Function0<? extends androidx.graphics.opengl.egl.EglSpec> eglSpecFactory, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EglManager,? extends android.opengl.EGLConfig> eglConfigFactory);
+ method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.Surface surface, int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+ method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.SurfaceView surfaceView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+ method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.TextureView textureView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+ method public androidx.graphics.opengl.GLRenderer.RenderTarget createRenderTarget(int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+ method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
+ method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending);
+ method public boolean isRunning();
+ method public void registerEglContextCallback(androidx.graphics.opengl.GLRenderer.EglContextCallback callback);
+ method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
+ method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target);
+ method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+ method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height);
+ method public void start(optional String name);
+ method public void start();
+ method public void stop(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer,kotlin.Unit>? onStop);
+ method public void stop(boolean cancelPending);
+ method public void unregisterEglContextCallback(androidx.graphics.opengl.GLRenderer.EglContextCallback callback);
+ field public static final androidx.graphics.opengl.GLRenderer.Companion Companion;
+ }
+
+ public static final class GLRenderer.Companion {
+ }
+
+ public static interface GLRenderer.EglContextCallback {
+ method @WorkerThread public void onEglContextCreated(androidx.graphics.opengl.egl.EglManager eglManager);
+ method @WorkerThread public void onEglContextDestroyed(androidx.graphics.opengl.egl.EglManager eglManager);
+ }
+
+ public static interface GLRenderer.RenderCallback {
+ method @WorkerThread public void onDrawFrame(androidx.graphics.opengl.egl.EglManager eglManager);
+ method @WorkerThread public default android.opengl.EGLSurface? onSurfaceCreated(androidx.graphics.opengl.egl.EglSpec spec, android.opengl.EGLConfig config, android.view.Surface surface, int width, int height);
+ }
+
+ public static final class GLRenderer.RenderTarget {
+ method public void detach(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
+ method public void detach(boolean cancelPending);
+ method public boolean isAttached();
+ method public void requestRender(optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
+ method public void requestRender();
+ method public void resize(int width, int height, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+ method public void resize(int width, int height);
+ }
+
+}
+
+package androidx.graphics.opengl.egl {
+
+ public final inline class EglConfigAttributes {
+ ctor public EglConfigAttributes();
+ }
+
+ public static final class EglConfigAttributes.Builder {
+ method public void include(int[] attributes);
+ method public infix void to(int, int that);
+ }
+
+ public final class EglConfigAttributesKt {
+ method public static inline int[] EglConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EglConfigAttributes.Builder,kotlin.Unit> block);
+ method public static int[] getEglConfigAttributes1010102();
+ method public static int[] getEglConfigAttributes8888();
+ method public static int[] getEglConfigAttributesF16();
+ property public static final int[] EglConfigAttributes1010102;
+ property public static final int[] EglConfigAttributes8888;
+ property public static final int[] EglConfigAttributesF16;
+ field public static final int EglColorComponentTypeExt = 13113; // 0x3339
+ field public static final int EglColorComponentTypeFixedExt = 13114; // 0x333a
+ field public static final int EglColorComponentTypeFloatExt = 13115; // 0x333b
+ }
+
+ public final class EglException extends java.lang.RuntimeException {
+ ctor public EglException(int error, optional String msg);
+ method public int getError();
+ method public String getMsg();
+ property public final int error;
+ property public String message;
+ property public final String msg;
+ }
+
+ public final class EglManager {
+ ctor public EglManager(optional androidx.graphics.opengl.egl.EglSpec eglSpec);
+ method public android.opengl.EGLContext createContext(android.opengl.EGLConfig config);
+ method public android.opengl.EGLSurface getCurrentDrawSurface();
+ method public android.opengl.EGLSurface getCurrentReadSurface();
+ method public android.opengl.EGLSurface getDefaultSurface();
+ method public android.opengl.EGLConfig? getEglConfig();
+ method public android.opengl.EGLContext? getEglContext();
+ method public androidx.graphics.opengl.egl.EglSpec getEglSpec();
+ method public androidx.graphics.opengl.egl.EglVersion getEglVersion();
+ method public void initialize();
+ method public boolean isExtensionSupported(String extensionName);
+ method public android.opengl.EGLConfig? loadConfig(int[] configAttributes);
+ method public boolean makeCurrent(android.opengl.EGLSurface drawSurface, optional android.opengl.EGLSurface readSurface);
+ method public boolean makeCurrent(android.opengl.EGLSurface drawSurface);
+ method public void release();
+ method public void swapAndFlushBuffers();
+ property public final android.opengl.EGLSurface currentDrawSurface;
+ property public final android.opengl.EGLSurface currentReadSurface;
+ property public final android.opengl.EGLSurface defaultSurface;
+ property public final android.opengl.EGLConfig? eglConfig;
+ property public final android.opengl.EGLContext? eglContext;
+ property public final androidx.graphics.opengl.egl.EglSpec eglSpec;
+ property public final androidx.graphics.opengl.egl.EglVersion eglVersion;
+ field public static final androidx.graphics.opengl.egl.EglManager.Companion Companion;
+ }
+
+ public static final class EglManager.Companion {
+ }
+
+ public interface EglSpec {
+ method public int eglClientWaitSyncKHR(androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+ method public android.opengl.EGLContext eglCreateContext(android.opengl.EGLConfig config);
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.hardware.HardwareBuffer hardwareBuffer);
+ method public android.opengl.EGLSurface eglCreatePBufferSurface(android.opengl.EGLConfig config, int[]? configAttributes);
+ method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(int type, int[]? attributes);
+ method public android.opengl.EGLSurface eglCreateWindowSurface(android.opengl.EGLConfig config, android.view.Surface surface, int[]? configAttributes);
+ method public void eglDestroyContext(android.opengl.EGLContext eglContext);
+ method public boolean eglDestroyImageKHR(androidx.opengl.EGLImageKHR image);
+ method public boolean eglDestroySurface(android.opengl.EGLSurface surface);
+ method public boolean eglDestroySyncKHR(androidx.opengl.EGLSyncKHR sync);
+ method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public androidx.hardware.SyncFenceCompat eglDupNativeFenceFDANDROID(androidx.opengl.EGLSyncKHR sync);
+ method public android.opengl.EGLSurface eglGetCurrentDrawSurface();
+ method public android.opengl.EGLSurface eglGetCurrentReadSurface();
+ method public int eglGetError();
+ method public boolean eglGetSyncAttribKHR(androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+ method public androidx.graphics.opengl.egl.EglVersion eglInitialize();
+ method public boolean eglMakeCurrent(android.opengl.EGLContext context, android.opengl.EGLSurface drawSurface, android.opengl.EGLSurface readSurface);
+ method public String eglQueryString(int nameId);
+ method public boolean eglQuerySurface(android.opengl.EGLSurface surface, int attribute, int[] result, int offset);
+ method public boolean eglSwapBuffers(android.opengl.EGLSurface surface);
+ method public default String getErrorMessage();
+ method public default static String getStatusString(int error);
+ method public android.opengl.EGLConfig? loadConfig(int[] configAttributes);
+ field public static final androidx.graphics.opengl.egl.EglSpec.Companion Companion;
+ field public static final androidx.graphics.opengl.egl.EglSpec Egl14;
+ }
+
+ public static final class EglSpec.Companion {
+ method public String getStatusString(int error);
+ }
+
+ public final class EglVersion {
+ ctor public EglVersion(int major, int minor);
+ method public int component1();
+ method public int component2();
+ method public androidx.graphics.opengl.egl.EglVersion copy(int major, int minor);
+ method public int getMajor();
+ method public int getMinor();
+ property public final int major;
+ property public final int minor;
+ field public static final androidx.graphics.opengl.egl.EglVersion.Companion Companion;
+ field public static final androidx.graphics.opengl.egl.EglVersion Unknown;
+ field public static final androidx.graphics.opengl.egl.EglVersion V14;
+ field public static final androidx.graphics.opengl.egl.EglVersion V15;
+ }
+
+ public static final class EglVersion.Companion {
+ }
+
+}
+
+package androidx.graphics.surface {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.Q) public final class SurfaceControlCompat {
+ method public boolean isValid();
+ method public void release();
+ }
+
+ public static final class SurfaceControlCompat.Builder {
+ ctor public SurfaceControlCompat.Builder();
+ method public androidx.graphics.surface.SurfaceControlCompat build();
+ method public androidx.graphics.surface.SurfaceControlCompat.Builder setName(String name);
+ method public androidx.graphics.surface.SurfaceControlCompat.Builder setParent(android.view.SurfaceView surfaceView);
+ }
+
+ public static final class SurfaceControlCompat.Transaction {
+ ctor public SurfaceControlCompat.Transaction();
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction addTransactionCommittedListener(java.util.concurrent.Executor executor, androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener listener);
+ method public void close();
+ method public void commit();
+ method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void commitTransactionOnDraw(android.view.AttachedSurfaceControl attachedSurfaceControl);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, androidx.graphics.surface.SurfaceControlCompat? newParent);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.SurfaceView surfaceView);
+ method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.AttachedSurfaceControl attachedSurfaceControl);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setAlpha(androidx.graphics.surface.SurfaceControlCompat surfaceControl, float alpha);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer, optional kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setDamageRegion(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.graphics.Region? region);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setLayer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, int z);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setOpaque(androidx.graphics.surface.SurfaceControlCompat surfaceControl, boolean isOpaque);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setVisibility(androidx.graphics.surface.SurfaceControlCompat surfaceControl, boolean visible);
+ }
+
+ public static interface SurfaceControlCompat.TransactionCommittedListener {
+ method public void onTransactionCommitted();
+ }
+
+}
+
+package androidx.hardware {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public final class SyncFenceCompat implements java.lang.AutoCloseable {
+ ctor public SyncFenceCompat(int fd);
+ method public boolean await(long timeoutNanos);
+ method public boolean awaitForever();
+ method public void close();
+ method public long getSignalTime();
+ method public boolean isValid();
+ field public static final androidx.hardware.SyncFenceCompat.Companion Companion;
+ field public static final long SIGNAL_TIME_INVALID = -1L; // 0xffffffffffffffffL
+ field public static final long SIGNAL_TIME_PENDING = 9223372036854775807L; // 0x7fffffffffffffffL
+ }
+
+ public static final class SyncFenceCompat.Companion {
+ }
+
+}
+
+package androidx.opengl {
+
+ public final class EGLExt {
+ method public static int eglClientWaitSyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public static androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.opengl.EGLDisplay eglDisplay, android.hardware.HardwareBuffer hardwareBuffer);
+ method public static androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(android.opengl.EGLDisplay eglDisplay, int type, int[]? attributes);
+ method public static boolean eglDestroyImageKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLImageKHR image);
+ method public static boolean eglDestroySyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR eglSync);
+ method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public static androidx.hardware.SyncFenceCompat eglDupNativeFenceFDANDROID(android.opengl.EGLDisplay display, androidx.opengl.EGLSyncKHR sync);
+ method public static boolean eglGetSyncAttribKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+ method public static void glEGLImageTargetTexture2DOES(int target, androidx.opengl.EGLImageKHR image);
+ method public static java.util.Set<java.lang.String> parseExtensions(String queryString);
+ field public static final androidx.opengl.EGLExt.Companion Companion;
+ field public static final String EGL_ANDROID_IMAGE_NATIVE_BUFFER = "EGL_ANDROID_image_native_buffer";
+ field public static final String EGL_ANDROID_NATIVE_FENCE_SYNC = "EGL_ANDROID_native_fence_sync";
+ field public static final int EGL_CONDITION_SATISFIED_KHR = 12534; // 0x30f6
+ field public static final String EGL_EXT_BUFFER_AGE = "EGL_EXT_buffer_age";
+ field public static final String EGL_EXT_GL_COLORSPACE_BT2020_PQ = "EGL_EXT_gl_colorspace_bt2020_pq";
+ field public static final String EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH = "EGL_EXT_gl_colorspace_display_p3_passthrough";
+ field public static final String EGL_EXT_GL_COLORSPACE_SCRGB = "EGL_EXT_gl_colorspace_scrgb";
+ field public static final String EGL_EXT_PIXEL_FORMAT_FLOAT = "EGL_EXT_pixel_format_float";
+ field public static final int EGL_FALSE = 0; // 0x0
+ field public static final long EGL_FOREVER_KHR = -1L; // 0xffffffffffffffffL
+ field public static final String EGL_IMG_CONTEXT_PRIORITY = "EGL_IMG_context_priority";
+ field public static final String EGL_KHR_FENCE_SYNC = "EGL_KHR_fence_sync";
+ field public static final String EGL_KHR_GL_COLORSPACE = "EGL_KHR_gl_colorspace";
+ field public static final String EGL_KHR_IMAGE = "EGL_KHR_image";
+ field public static final String EGL_KHR_IMAGE_BASE = "EGL_KHR_image_base";
+ field public static final String EGL_KHR_NO_CONFIG_CONTEXT = "EGL_KHR_no_config_context";
+ field public static final String EGL_KHR_PARTIAL_UPDATE = "EGL_KHR_partial_update";
+ field public static final String EGL_KHR_SURFACELESS_CONTEXT = "EGL_KHR_surfaceless_context";
+ field public static final String EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE = "EGL_KHR_swap_buffers_with_damage";
+ field public static final String EGL_KHR_WAIT_SYNC = "EGL_KHR_wait_sync";
+ field public static final int EGL_SIGNALED_KHR = 12530; // 0x30f2
+ field public static final int EGL_SYNC_CONDITION_KHR = 12536; // 0x30f8
+ field public static final int EGL_SYNC_FENCE_KHR = 12537; // 0x30f9
+ field public static final int EGL_SYNC_FLUSH_COMMANDS_BIT_KHR = 1; // 0x1
+ field public static final int EGL_SYNC_NATIVE_FENCE_ANDROID = 12612; // 0x3144
+ field public static final int EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR = 12528; // 0x30f0
+ field public static final int EGL_SYNC_STATUS_KHR = 12529; // 0x30f1
+ field public static final int EGL_SYNC_TYPE_KHR = 12535; // 0x30f7
+ field public static final int EGL_TIMEOUT_EXPIRED_KHR = 12533; // 0x30f5
+ field public static final int EGL_TRUE = 1; // 0x1
+ field public static final int EGL_UNSIGNALED_KHR = 12531; // 0x30f3
+ }
+
+ public static final class EGLExt.Companion {
+ method public int eglClientWaitSyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.opengl.EGLDisplay eglDisplay, android.hardware.HardwareBuffer hardwareBuffer);
+ method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(android.opengl.EGLDisplay eglDisplay, int type, int[]? attributes);
+ method public boolean eglDestroyImageKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLImageKHR image);
+ method public boolean eglDestroySyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR eglSync);
+ method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public androidx.hardware.SyncFenceCompat eglDupNativeFenceFDANDROID(android.opengl.EGLDisplay display, androidx.opengl.EGLSyncKHR sync);
+ method public boolean eglGetSyncAttribKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+ method public void glEGLImageTargetTexture2DOES(int target, androidx.opengl.EGLImageKHR image);
+ method public java.util.Set<java.lang.String> parseExtensions(String queryString);
+ }
+
+ public interface EGLHandle {
+ method public long getNativeHandle();
+ property public abstract long nativeHandle;
+ }
+
+ public final class EGLImageKHR implements androidx.opengl.EGLHandle {
+ ctor public EGLImageKHR(long nativeHandle);
+ method public long getNativeHandle();
+ property public long nativeHandle;
+ }
+
+ public final class EGLSyncKHR implements androidx.opengl.EGLHandle {
+ ctor public EGLSyncKHR(long nativeHandle);
+ method public long getNativeHandle();
+ property public long nativeHandle;
+ }
+
+}
+
diff --git a/graphics/graphics-core/api/public_plus_experimental_current.txt b/graphics/graphics-core/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..96e3492
--- /dev/null
+++ b/graphics/graphics-core/api/public_plus_experimental_current.txt
@@ -0,0 +1,325 @@
+// Signature format: 4.0
+package androidx.graphics.lowlatency {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class GLFrontBufferedRenderer<T> {
+ ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
+ ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback);
+ method public void clear();
+ method public void commit();
+ method public boolean isValid();
+ method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
+ method public void release(boolean cancelPending);
+ method public void renderFrontBufferedLayer(T? param);
+ field public static final androidx.graphics.lowlatency.GLFrontBufferedRenderer.Companion Companion;
+ }
+
+ public static interface GLFrontBufferedRenderer.Callback<T> {
+ method @WorkerThread public default void onDoubleBufferedLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat frontBufferedLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+ method @WorkerThread public void onDrawDoubleBufferedLayer(androidx.graphics.opengl.egl.EglManager eglManager, java.util.Collection<? extends T> params);
+ method @WorkerThread public void onDrawFrontBufferedLayer(androidx.graphics.opengl.egl.EglManager eglManager, T? param);
+ method @WorkerThread public default void onFrontBufferedLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat frontBufferedLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+ }
+
+ public static final class GLFrontBufferedRenderer.Companion {
+ }
+
+}
+
+package androidx.graphics.opengl {
+
+ public final class GLRenderer {
+ ctor public GLRenderer(optional kotlin.jvm.functions.Function0<? extends androidx.graphics.opengl.egl.EglSpec> eglSpecFactory, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EglManager,? extends android.opengl.EGLConfig> eglConfigFactory);
+ method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.Surface surface, int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+ method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.SurfaceView surfaceView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+ method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.TextureView textureView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+ method public androidx.graphics.opengl.GLRenderer.RenderTarget createRenderTarget(int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+ method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
+ method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending);
+ method public boolean isRunning();
+ method public void registerEglContextCallback(androidx.graphics.opengl.GLRenderer.EglContextCallback callback);
+ method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
+ method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target);
+ method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+ method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height);
+ method public void start(optional String name);
+ method public void start();
+ method public void stop(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer,kotlin.Unit>? onStop);
+ method public void stop(boolean cancelPending);
+ method public void unregisterEglContextCallback(androidx.graphics.opengl.GLRenderer.EglContextCallback callback);
+ field public static final androidx.graphics.opengl.GLRenderer.Companion Companion;
+ }
+
+ public static final class GLRenderer.Companion {
+ }
+
+ public static interface GLRenderer.EglContextCallback {
+ method @WorkerThread public void onEglContextCreated(androidx.graphics.opengl.egl.EglManager eglManager);
+ method @WorkerThread public void onEglContextDestroyed(androidx.graphics.opengl.egl.EglManager eglManager);
+ }
+
+ public static interface GLRenderer.RenderCallback {
+ method @WorkerThread public void onDrawFrame(androidx.graphics.opengl.egl.EglManager eglManager);
+ method @WorkerThread public default android.opengl.EGLSurface? onSurfaceCreated(androidx.graphics.opengl.egl.EglSpec spec, android.opengl.EGLConfig config, android.view.Surface surface, int width, int height);
+ }
+
+ public static final class GLRenderer.RenderTarget {
+ method public void detach(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
+ method public void detach(boolean cancelPending);
+ method public boolean isAttached();
+ method public void requestRender(optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
+ method public void requestRender();
+ method public void resize(int width, int height, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+ method public void resize(int width, int height);
+ }
+
+}
+
+package androidx.graphics.opengl.egl {
+
+ public final inline class EglConfigAttributes {
+ ctor public EglConfigAttributes();
+ }
+
+ public static final class EglConfigAttributes.Builder {
+ method public void include(int[] attributes);
+ method public infix void to(int, int that);
+ }
+
+ public final class EglConfigAttributesKt {
+ method public static inline int[] EglConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EglConfigAttributes.Builder,kotlin.Unit> block);
+ method public static int[] getEglConfigAttributes1010102();
+ method public static int[] getEglConfigAttributes8888();
+ method public static int[] getEglConfigAttributesF16();
+ property public static final int[] EglConfigAttributes1010102;
+ property public static final int[] EglConfigAttributes8888;
+ property public static final int[] EglConfigAttributesF16;
+ field public static final int EglColorComponentTypeExt = 13113; // 0x3339
+ field public static final int EglColorComponentTypeFixedExt = 13114; // 0x333a
+ field public static final int EglColorComponentTypeFloatExt = 13115; // 0x333b
+ }
+
+ public final class EglException extends java.lang.RuntimeException {
+ ctor public EglException(int error, optional String msg);
+ method public int getError();
+ method public String getMsg();
+ property public final int error;
+ property public String message;
+ property public final String msg;
+ }
+
+ public final class EglManager {
+ ctor public EglManager(optional androidx.graphics.opengl.egl.EglSpec eglSpec);
+ method public android.opengl.EGLContext createContext(android.opengl.EGLConfig config);
+ method public android.opengl.EGLSurface getCurrentDrawSurface();
+ method public android.opengl.EGLSurface getCurrentReadSurface();
+ method public android.opengl.EGLSurface getDefaultSurface();
+ method public android.opengl.EGLConfig? getEglConfig();
+ method public android.opengl.EGLContext? getEglContext();
+ method public androidx.graphics.opengl.egl.EglSpec getEglSpec();
+ method public androidx.graphics.opengl.egl.EglVersion getEglVersion();
+ method public void initialize();
+ method public boolean isExtensionSupported(String extensionName);
+ method public android.opengl.EGLConfig? loadConfig(int[] configAttributes);
+ method public boolean makeCurrent(android.opengl.EGLSurface drawSurface, optional android.opengl.EGLSurface readSurface);
+ method public boolean makeCurrent(android.opengl.EGLSurface drawSurface);
+ method public void release();
+ method public void swapAndFlushBuffers();
+ property public final android.opengl.EGLSurface currentDrawSurface;
+ property public final android.opengl.EGLSurface currentReadSurface;
+ property public final android.opengl.EGLSurface defaultSurface;
+ property public final android.opengl.EGLConfig? eglConfig;
+ property public final android.opengl.EGLContext? eglContext;
+ property public final androidx.graphics.opengl.egl.EglSpec eglSpec;
+ property public final androidx.graphics.opengl.egl.EglVersion eglVersion;
+ field public static final androidx.graphics.opengl.egl.EglManager.Companion Companion;
+ }
+
+ public static final class EglManager.Companion {
+ }
+
+ public interface EglSpec {
+ method public int eglClientWaitSyncKHR(androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+ method public android.opengl.EGLContext eglCreateContext(android.opengl.EGLConfig config);
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.hardware.HardwareBuffer hardwareBuffer);
+ method public android.opengl.EGLSurface eglCreatePBufferSurface(android.opengl.EGLConfig config, int[]? configAttributes);
+ method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(int type, int[]? attributes);
+ method public android.opengl.EGLSurface eglCreateWindowSurface(android.opengl.EGLConfig config, android.view.Surface surface, int[]? configAttributes);
+ method public void eglDestroyContext(android.opengl.EGLContext eglContext);
+ method public boolean eglDestroyImageKHR(androidx.opengl.EGLImageKHR image);
+ method public boolean eglDestroySurface(android.opengl.EGLSurface surface);
+ method public boolean eglDestroySyncKHR(androidx.opengl.EGLSyncKHR sync);
+ method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public androidx.hardware.SyncFenceCompat eglDupNativeFenceFDANDROID(androidx.opengl.EGLSyncKHR sync);
+ method public android.opengl.EGLSurface eglGetCurrentDrawSurface();
+ method public android.opengl.EGLSurface eglGetCurrentReadSurface();
+ method public int eglGetError();
+ method public boolean eglGetSyncAttribKHR(androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+ method public androidx.graphics.opengl.egl.EglVersion eglInitialize();
+ method public boolean eglMakeCurrent(android.opengl.EGLContext context, android.opengl.EGLSurface drawSurface, android.opengl.EGLSurface readSurface);
+ method public String eglQueryString(int nameId);
+ method public boolean eglQuerySurface(android.opengl.EGLSurface surface, int attribute, int[] result, int offset);
+ method public boolean eglSwapBuffers(android.opengl.EGLSurface surface);
+ method public default String getErrorMessage();
+ method public default static String getStatusString(int error);
+ method public android.opengl.EGLConfig? loadConfig(int[] configAttributes);
+ field public static final androidx.graphics.opengl.egl.EglSpec.Companion Companion;
+ field public static final androidx.graphics.opengl.egl.EglSpec Egl14;
+ }
+
+ public static final class EglSpec.Companion {
+ method public String getStatusString(int error);
+ }
+
+ public final class EglVersion {
+ ctor public EglVersion(int major, int minor);
+ method public int component1();
+ method public int component2();
+ method public androidx.graphics.opengl.egl.EglVersion copy(int major, int minor);
+ method public int getMajor();
+ method public int getMinor();
+ property public final int major;
+ property public final int minor;
+ field public static final androidx.graphics.opengl.egl.EglVersion.Companion Companion;
+ field public static final androidx.graphics.opengl.egl.EglVersion Unknown;
+ field public static final androidx.graphics.opengl.egl.EglVersion V14;
+ field public static final androidx.graphics.opengl.egl.EglVersion V15;
+ }
+
+ public static final class EglVersion.Companion {
+ }
+
+}
+
+package androidx.graphics.surface {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.Q) public final class SurfaceControlCompat {
+ method public boolean isValid();
+ method public void release();
+ }
+
+ public static final class SurfaceControlCompat.Builder {
+ ctor public SurfaceControlCompat.Builder();
+ method public androidx.graphics.surface.SurfaceControlCompat build();
+ method public androidx.graphics.surface.SurfaceControlCompat.Builder setName(String name);
+ method public androidx.graphics.surface.SurfaceControlCompat.Builder setParent(android.view.SurfaceView surfaceView);
+ }
+
+ public static final class SurfaceControlCompat.Transaction {
+ ctor public SurfaceControlCompat.Transaction();
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction addTransactionCommittedListener(java.util.concurrent.Executor executor, androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener listener);
+ method public void close();
+ method public void commit();
+ method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void commitTransactionOnDraw(android.view.AttachedSurfaceControl attachedSurfaceControl);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, androidx.graphics.surface.SurfaceControlCompat? newParent);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.SurfaceView surfaceView);
+ method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.AttachedSurfaceControl attachedSurfaceControl);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setAlpha(androidx.graphics.surface.SurfaceControlCompat surfaceControl, float alpha);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer, optional kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setDamageRegion(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.graphics.Region? region);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setLayer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, int z);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setOpaque(androidx.graphics.surface.SurfaceControlCompat surfaceControl, boolean isOpaque);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setVisibility(androidx.graphics.surface.SurfaceControlCompat surfaceControl, boolean visible);
+ }
+
+ public static interface SurfaceControlCompat.TransactionCommittedListener {
+ method public void onTransactionCommitted();
+ }
+
+}
+
+package androidx.hardware {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public final class SyncFenceCompat implements java.lang.AutoCloseable {
+ ctor public SyncFenceCompat(int fd);
+ method public boolean await(long timeoutNanos);
+ method public boolean awaitForever();
+ method public void close();
+ method public long getSignalTime();
+ method public boolean isValid();
+ field public static final androidx.hardware.SyncFenceCompat.Companion Companion;
+ field public static final long SIGNAL_TIME_INVALID = -1L; // 0xffffffffffffffffL
+ field public static final long SIGNAL_TIME_PENDING = 9223372036854775807L; // 0x7fffffffffffffffL
+ }
+
+ public static final class SyncFenceCompat.Companion {
+ }
+
+}
+
+package androidx.opengl {
+
+ public final class EGLExt {
+ method public static int eglClientWaitSyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public static androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.opengl.EGLDisplay eglDisplay, android.hardware.HardwareBuffer hardwareBuffer);
+ method public static androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(android.opengl.EGLDisplay eglDisplay, int type, int[]? attributes);
+ method public static boolean eglDestroyImageKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLImageKHR image);
+ method public static boolean eglDestroySyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR eglSync);
+ method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public static androidx.hardware.SyncFenceCompat eglDupNativeFenceFDANDROID(android.opengl.EGLDisplay display, androidx.opengl.EGLSyncKHR sync);
+ method public static boolean eglGetSyncAttribKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+ method public static void glEGLImageTargetTexture2DOES(int target, androidx.opengl.EGLImageKHR image);
+ method public static java.util.Set<java.lang.String> parseExtensions(String queryString);
+ field public static final androidx.opengl.EGLExt.Companion Companion;
+ field public static final String EGL_ANDROID_IMAGE_NATIVE_BUFFER = "EGL_ANDROID_image_native_buffer";
+ field public static final String EGL_ANDROID_NATIVE_FENCE_SYNC = "EGL_ANDROID_native_fence_sync";
+ field public static final int EGL_CONDITION_SATISFIED_KHR = 12534; // 0x30f6
+ field public static final String EGL_EXT_BUFFER_AGE = "EGL_EXT_buffer_age";
+ field public static final String EGL_EXT_GL_COLORSPACE_BT2020_PQ = "EGL_EXT_gl_colorspace_bt2020_pq";
+ field public static final String EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH = "EGL_EXT_gl_colorspace_display_p3_passthrough";
+ field public static final String EGL_EXT_GL_COLORSPACE_SCRGB = "EGL_EXT_gl_colorspace_scrgb";
+ field public static final String EGL_EXT_PIXEL_FORMAT_FLOAT = "EGL_EXT_pixel_format_float";
+ field public static final int EGL_FALSE = 0; // 0x0
+ field public static final long EGL_FOREVER_KHR = -1L; // 0xffffffffffffffffL
+ field public static final String EGL_IMG_CONTEXT_PRIORITY = "EGL_IMG_context_priority";
+ field public static final String EGL_KHR_FENCE_SYNC = "EGL_KHR_fence_sync";
+ field public static final String EGL_KHR_GL_COLORSPACE = "EGL_KHR_gl_colorspace";
+ field public static final String EGL_KHR_IMAGE = "EGL_KHR_image";
+ field public static final String EGL_KHR_IMAGE_BASE = "EGL_KHR_image_base";
+ field public static final String EGL_KHR_NO_CONFIG_CONTEXT = "EGL_KHR_no_config_context";
+ field public static final String EGL_KHR_PARTIAL_UPDATE = "EGL_KHR_partial_update";
+ field public static final String EGL_KHR_SURFACELESS_CONTEXT = "EGL_KHR_surfaceless_context";
+ field public static final String EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE = "EGL_KHR_swap_buffers_with_damage";
+ field public static final String EGL_KHR_WAIT_SYNC = "EGL_KHR_wait_sync";
+ field public static final int EGL_SIGNALED_KHR = 12530; // 0x30f2
+ field public static final int EGL_SYNC_CONDITION_KHR = 12536; // 0x30f8
+ field public static final int EGL_SYNC_FENCE_KHR = 12537; // 0x30f9
+ field public static final int EGL_SYNC_FLUSH_COMMANDS_BIT_KHR = 1; // 0x1
+ field public static final int EGL_SYNC_NATIVE_FENCE_ANDROID = 12612; // 0x3144
+ field public static final int EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR = 12528; // 0x30f0
+ field public static final int EGL_SYNC_STATUS_KHR = 12529; // 0x30f1
+ field public static final int EGL_SYNC_TYPE_KHR = 12535; // 0x30f7
+ field public static final int EGL_TIMEOUT_EXPIRED_KHR = 12533; // 0x30f5
+ field public static final int EGL_TRUE = 1; // 0x1
+ field public static final int EGL_UNSIGNALED_KHR = 12531; // 0x30f3
+ }
+
+ public static final class EGLExt.Companion {
+ method public int eglClientWaitSyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.opengl.EGLDisplay eglDisplay, android.hardware.HardwareBuffer hardwareBuffer);
+ method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(android.opengl.EGLDisplay eglDisplay, int type, int[]? attributes);
+ method public boolean eglDestroyImageKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLImageKHR image);
+ method public boolean eglDestroySyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR eglSync);
+ method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public androidx.hardware.SyncFenceCompat eglDupNativeFenceFDANDROID(android.opengl.EGLDisplay display, androidx.opengl.EGLSyncKHR sync);
+ method public boolean eglGetSyncAttribKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+ method public void glEGLImageTargetTexture2DOES(int target, androidx.opengl.EGLImageKHR image);
+ method public java.util.Set<java.lang.String> parseExtensions(String queryString);
+ }
+
+ public interface EGLHandle {
+ method public long getNativeHandle();
+ property public abstract long nativeHandle;
+ }
+
+ public final class EGLImageKHR implements androidx.opengl.EGLHandle {
+ ctor public EGLImageKHR(long nativeHandle);
+ method public long getNativeHandle();
+ property public long nativeHandle;
+ }
+
+ public final class EGLSyncKHR implements androidx.opengl.EGLHandle {
+ ctor public EGLSyncKHR(long nativeHandle);
+ method public long getNativeHandle();
+ property public long nativeHandle;
+ }
+
+}
+
diff --git a/core/core-ktx/api/res-1.8.0-beta01.txt b/graphics/graphics-core/api/res-current.txt
similarity index 100%
rename from core/core-ktx/api/res-1.8.0-beta01.txt
rename to graphics/graphics-core/api/res-current.txt
diff --git a/graphics/graphics-core/api/restricted_current.txt b/graphics/graphics-core/api/restricted_current.txt
new file mode 100644
index 0000000..759014b
--- /dev/null
+++ b/graphics/graphics-core/api/restricted_current.txt
@@ -0,0 +1,327 @@
+// Signature format: 4.0
+package androidx.graphics.lowlatency {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public final class GLFrontBufferedRenderer<T> {
+ ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback, optional androidx.graphics.opengl.GLRenderer? glRenderer);
+ ctor public GLFrontBufferedRenderer(android.view.SurfaceView surfaceView, androidx.graphics.lowlatency.GLFrontBufferedRenderer.Callback<T> callback);
+ method public void clear();
+ method public void commit();
+ method public boolean isValid();
+ method public void release(boolean cancelPending, optional kotlin.jvm.functions.Function0<kotlin.Unit>? onReleaseComplete);
+ method public void release(boolean cancelPending);
+ method public void renderFrontBufferedLayer(T? param);
+ field public static final androidx.graphics.lowlatency.GLFrontBufferedRenderer.Companion Companion;
+ }
+
+ public static interface GLFrontBufferedRenderer.Callback<T> {
+ method @WorkerThread public default void onDoubleBufferedLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat frontBufferedLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+ method @WorkerThread public void onDrawDoubleBufferedLayer(androidx.graphics.opengl.egl.EglManager eglManager, java.util.Collection<? extends T> params);
+ method @WorkerThread public void onDrawFrontBufferedLayer(androidx.graphics.opengl.egl.EglManager eglManager, T? param);
+ method @WorkerThread public default void onFrontBufferedLayerRenderComplete(androidx.graphics.surface.SurfaceControlCompat frontBufferedLayerSurfaceControl, androidx.graphics.surface.SurfaceControlCompat.Transaction transaction);
+ }
+
+ public static final class GLFrontBufferedRenderer.Companion {
+ }
+
+}
+
+package androidx.graphics.opengl {
+
+ public final class GLRenderer {
+ ctor public GLRenderer(optional kotlin.jvm.functions.Function0<? extends androidx.graphics.opengl.egl.EglSpec> eglSpecFactory, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EglManager,? extends android.opengl.EGLConfig> eglConfigFactory);
+ method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.Surface surface, int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+ method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.SurfaceView surfaceView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+ method public androidx.graphics.opengl.GLRenderer.RenderTarget attach(android.view.TextureView textureView, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+ method public androidx.graphics.opengl.GLRenderer.RenderTarget createRenderTarget(int width, int height, androidx.graphics.opengl.GLRenderer.RenderCallback renderer);
+ method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
+ method public void detach(androidx.graphics.opengl.GLRenderer.RenderTarget target, boolean cancelPending);
+ method public boolean isRunning();
+ method public void registerEglContextCallback(androidx.graphics.opengl.GLRenderer.EglContextCallback callback);
+ method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
+ method public void requestRender(androidx.graphics.opengl.GLRenderer.RenderTarget target);
+ method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+ method public void resize(androidx.graphics.opengl.GLRenderer.RenderTarget target, int width, int height);
+ method public void start(optional String name);
+ method public void start();
+ method public void stop(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer,kotlin.Unit>? onStop);
+ method public void stop(boolean cancelPending);
+ method public void unregisterEglContextCallback(androidx.graphics.opengl.GLRenderer.EglContextCallback callback);
+ field public static final androidx.graphics.opengl.GLRenderer.Companion Companion;
+ }
+
+ public static final class GLRenderer.Companion {
+ }
+
+ public static interface GLRenderer.EglContextCallback {
+ method @WorkerThread public void onEglContextCreated(androidx.graphics.opengl.egl.EglManager eglManager);
+ method @WorkerThread public void onEglContextDestroyed(androidx.graphics.opengl.egl.EglManager eglManager);
+ }
+
+ public static interface GLRenderer.RenderCallback {
+ method @WorkerThread public void onDrawFrame(androidx.graphics.opengl.egl.EglManager eglManager);
+ method @WorkerThread public default android.opengl.EGLSurface? onSurfaceCreated(androidx.graphics.opengl.egl.EglSpec spec, android.opengl.EGLConfig config, android.view.Surface surface, int width, int height);
+ }
+
+ public static final class GLRenderer.RenderTarget {
+ method public void detach(boolean cancelPending, optional kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onDetachComplete);
+ method public void detach(boolean cancelPending);
+ method public boolean isAttached();
+ method public void requestRender(optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onRenderComplete);
+ method public void requestRender();
+ method public void resize(int width, int height, optional @WorkerThread kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.GLRenderer.RenderTarget,kotlin.Unit>? onResizeComplete);
+ method public void resize(int width, int height);
+ }
+
+}
+
+package androidx.graphics.opengl.egl {
+
+ public final inline class EglConfigAttributes {
+ ctor public EglConfigAttributes();
+ }
+
+ public static final class EglConfigAttributes.Builder {
+ ctor @kotlin.PublishedApi internal EglConfigAttributes.Builder();
+ method @kotlin.PublishedApi internal int[] build();
+ method public void include(int[] attributes);
+ method public infix void to(int, int that);
+ }
+
+ public final class EglConfigAttributesKt {
+ method public static inline int[] EglConfigAttributes(kotlin.jvm.functions.Function1<? super androidx.graphics.opengl.egl.EglConfigAttributes.Builder,kotlin.Unit> block);
+ method public static int[] getEglConfigAttributes1010102();
+ method public static int[] getEglConfigAttributes8888();
+ method public static int[] getEglConfigAttributesF16();
+ property public static final int[] EglConfigAttributes1010102;
+ property public static final int[] EglConfigAttributes8888;
+ property public static final int[] EglConfigAttributesF16;
+ field public static final int EglColorComponentTypeExt = 13113; // 0x3339
+ field public static final int EglColorComponentTypeFixedExt = 13114; // 0x333a
+ field public static final int EglColorComponentTypeFloatExt = 13115; // 0x333b
+ }
+
+ public final class EglException extends java.lang.RuntimeException {
+ ctor public EglException(int error, optional String msg);
+ method public int getError();
+ method public String getMsg();
+ property public final int error;
+ property public String message;
+ property public final String msg;
+ }
+
+ public final class EglManager {
+ ctor public EglManager(optional androidx.graphics.opengl.egl.EglSpec eglSpec);
+ method public android.opengl.EGLContext createContext(android.opengl.EGLConfig config);
+ method public android.opengl.EGLSurface getCurrentDrawSurface();
+ method public android.opengl.EGLSurface getCurrentReadSurface();
+ method public android.opengl.EGLSurface getDefaultSurface();
+ method public android.opengl.EGLConfig? getEglConfig();
+ method public android.opengl.EGLContext? getEglContext();
+ method public androidx.graphics.opengl.egl.EglSpec getEglSpec();
+ method public androidx.graphics.opengl.egl.EglVersion getEglVersion();
+ method public void initialize();
+ method public boolean isExtensionSupported(String extensionName);
+ method public android.opengl.EGLConfig? loadConfig(int[] configAttributes);
+ method public boolean makeCurrent(android.opengl.EGLSurface drawSurface, optional android.opengl.EGLSurface readSurface);
+ method public boolean makeCurrent(android.opengl.EGLSurface drawSurface);
+ method public void release();
+ method public void swapAndFlushBuffers();
+ property public final android.opengl.EGLSurface currentDrawSurface;
+ property public final android.opengl.EGLSurface currentReadSurface;
+ property public final android.opengl.EGLSurface defaultSurface;
+ property public final android.opengl.EGLConfig? eglConfig;
+ property public final android.opengl.EGLContext? eglContext;
+ property public final androidx.graphics.opengl.egl.EglSpec eglSpec;
+ property public final androidx.graphics.opengl.egl.EglVersion eglVersion;
+ field public static final androidx.graphics.opengl.egl.EglManager.Companion Companion;
+ }
+
+ public static final class EglManager.Companion {
+ }
+
+ public interface EglSpec {
+ method public int eglClientWaitSyncKHR(androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+ method public android.opengl.EGLContext eglCreateContext(android.opengl.EGLConfig config);
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.hardware.HardwareBuffer hardwareBuffer);
+ method public android.opengl.EGLSurface eglCreatePBufferSurface(android.opengl.EGLConfig config, int[]? configAttributes);
+ method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(int type, int[]? attributes);
+ method public android.opengl.EGLSurface eglCreateWindowSurface(android.opengl.EGLConfig config, android.view.Surface surface, int[]? configAttributes);
+ method public void eglDestroyContext(android.opengl.EGLContext eglContext);
+ method public boolean eglDestroyImageKHR(androidx.opengl.EGLImageKHR image);
+ method public boolean eglDestroySurface(android.opengl.EGLSurface surface);
+ method public boolean eglDestroySyncKHR(androidx.opengl.EGLSyncKHR sync);
+ method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public androidx.hardware.SyncFenceCompat eglDupNativeFenceFDANDROID(androidx.opengl.EGLSyncKHR sync);
+ method public android.opengl.EGLSurface eglGetCurrentDrawSurface();
+ method public android.opengl.EGLSurface eglGetCurrentReadSurface();
+ method public int eglGetError();
+ method public boolean eglGetSyncAttribKHR(androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+ method public androidx.graphics.opengl.egl.EglVersion eglInitialize();
+ method public boolean eglMakeCurrent(android.opengl.EGLContext context, android.opengl.EGLSurface drawSurface, android.opengl.EGLSurface readSurface);
+ method public String eglQueryString(int nameId);
+ method public boolean eglQuerySurface(android.opengl.EGLSurface surface, int attribute, int[] result, int offset);
+ method public boolean eglSwapBuffers(android.opengl.EGLSurface surface);
+ method public default String getErrorMessage();
+ method public default static String getStatusString(int error);
+ method public android.opengl.EGLConfig? loadConfig(int[] configAttributes);
+ field public static final androidx.graphics.opengl.egl.EglSpec.Companion Companion;
+ field public static final androidx.graphics.opengl.egl.EglSpec Egl14;
+ }
+
+ public static final class EglSpec.Companion {
+ method public String getStatusString(int error);
+ }
+
+ public final class EglVersion {
+ ctor public EglVersion(int major, int minor);
+ method public int component1();
+ method public int component2();
+ method public androidx.graphics.opengl.egl.EglVersion copy(int major, int minor);
+ method public int getMajor();
+ method public int getMinor();
+ property public final int major;
+ property public final int minor;
+ field public static final androidx.graphics.opengl.egl.EglVersion.Companion Companion;
+ field public static final androidx.graphics.opengl.egl.EglVersion Unknown;
+ field public static final androidx.graphics.opengl.egl.EglVersion V14;
+ field public static final androidx.graphics.opengl.egl.EglVersion V15;
+ }
+
+ public static final class EglVersion.Companion {
+ }
+
+}
+
+package androidx.graphics.surface {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.Q) public final class SurfaceControlCompat {
+ method public boolean isValid();
+ method public void release();
+ }
+
+ public static final class SurfaceControlCompat.Builder {
+ ctor public SurfaceControlCompat.Builder();
+ method public androidx.graphics.surface.SurfaceControlCompat build();
+ method public androidx.graphics.surface.SurfaceControlCompat.Builder setName(String name);
+ method public androidx.graphics.surface.SurfaceControlCompat.Builder setParent(android.view.SurfaceView surfaceView);
+ }
+
+ public static final class SurfaceControlCompat.Transaction {
+ ctor public SurfaceControlCompat.Transaction();
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction addTransactionCommittedListener(java.util.concurrent.Executor executor, androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener listener);
+ method public void close();
+ method public void commit();
+ method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public void commitTransactionOnDraw(android.view.AttachedSurfaceControl attachedSurfaceControl);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, androidx.graphics.surface.SurfaceControlCompat? newParent);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.SurfaceView surfaceView);
+ method @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public androidx.graphics.surface.SurfaceControlCompat.Transaction reparent(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.view.AttachedSurfaceControl attachedSurfaceControl);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setAlpha(androidx.graphics.surface.SurfaceControlCompat surfaceControl, float alpha);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer, optional kotlin.jvm.functions.Function0<kotlin.Unit>? releaseCallback);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setBuffer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.hardware.HardwareBuffer buffer);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setDamageRegion(androidx.graphics.surface.SurfaceControlCompat surfaceControl, android.graphics.Region? region);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setLayer(androidx.graphics.surface.SurfaceControlCompat surfaceControl, int z);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setOpaque(androidx.graphics.surface.SurfaceControlCompat surfaceControl, boolean isOpaque);
+ method public androidx.graphics.surface.SurfaceControlCompat.Transaction setVisibility(androidx.graphics.surface.SurfaceControlCompat surfaceControl, boolean visible);
+ }
+
+ public static interface SurfaceControlCompat.TransactionCommittedListener {
+ method public void onTransactionCommitted();
+ }
+
+}
+
+package androidx.hardware {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public final class SyncFenceCompat implements java.lang.AutoCloseable {
+ ctor public SyncFenceCompat(int fd);
+ method public boolean await(long timeoutNanos);
+ method public boolean awaitForever();
+ method public void close();
+ method public long getSignalTime();
+ method public boolean isValid();
+ field public static final androidx.hardware.SyncFenceCompat.Companion Companion;
+ field public static final long SIGNAL_TIME_INVALID = -1L; // 0xffffffffffffffffL
+ field public static final long SIGNAL_TIME_PENDING = 9223372036854775807L; // 0x7fffffffffffffffL
+ }
+
+ public static final class SyncFenceCompat.Companion {
+ }
+
+}
+
+package androidx.opengl {
+
+ public final class EGLExt {
+ method public static int eglClientWaitSyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public static androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.opengl.EGLDisplay eglDisplay, android.hardware.HardwareBuffer hardwareBuffer);
+ method public static androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(android.opengl.EGLDisplay eglDisplay, int type, int[]? attributes);
+ method public static boolean eglDestroyImageKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLImageKHR image);
+ method public static boolean eglDestroySyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR eglSync);
+ method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public static androidx.hardware.SyncFenceCompat eglDupNativeFenceFDANDROID(android.opengl.EGLDisplay display, androidx.opengl.EGLSyncKHR sync);
+ method public static boolean eglGetSyncAttribKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+ method public static void glEGLImageTargetTexture2DOES(int target, androidx.opengl.EGLImageKHR image);
+ method public static java.util.Set<java.lang.String> parseExtensions(String queryString);
+ field public static final androidx.opengl.EGLExt.Companion Companion;
+ field public static final String EGL_ANDROID_IMAGE_NATIVE_BUFFER = "EGL_ANDROID_image_native_buffer";
+ field public static final String EGL_ANDROID_NATIVE_FENCE_SYNC = "EGL_ANDROID_native_fence_sync";
+ field public static final int EGL_CONDITION_SATISFIED_KHR = 12534; // 0x30f6
+ field public static final String EGL_EXT_BUFFER_AGE = "EGL_EXT_buffer_age";
+ field public static final String EGL_EXT_GL_COLORSPACE_BT2020_PQ = "EGL_EXT_gl_colorspace_bt2020_pq";
+ field public static final String EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH = "EGL_EXT_gl_colorspace_display_p3_passthrough";
+ field public static final String EGL_EXT_GL_COLORSPACE_SCRGB = "EGL_EXT_gl_colorspace_scrgb";
+ field public static final String EGL_EXT_PIXEL_FORMAT_FLOAT = "EGL_EXT_pixel_format_float";
+ field public static final int EGL_FALSE = 0; // 0x0
+ field public static final long EGL_FOREVER_KHR = -1L; // 0xffffffffffffffffL
+ field public static final String EGL_IMG_CONTEXT_PRIORITY = "EGL_IMG_context_priority";
+ field public static final String EGL_KHR_FENCE_SYNC = "EGL_KHR_fence_sync";
+ field public static final String EGL_KHR_GL_COLORSPACE = "EGL_KHR_gl_colorspace";
+ field public static final String EGL_KHR_IMAGE = "EGL_KHR_image";
+ field public static final String EGL_KHR_IMAGE_BASE = "EGL_KHR_image_base";
+ field public static final String EGL_KHR_NO_CONFIG_CONTEXT = "EGL_KHR_no_config_context";
+ field public static final String EGL_KHR_PARTIAL_UPDATE = "EGL_KHR_partial_update";
+ field public static final String EGL_KHR_SURFACELESS_CONTEXT = "EGL_KHR_surfaceless_context";
+ field public static final String EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE = "EGL_KHR_swap_buffers_with_damage";
+ field public static final String EGL_KHR_WAIT_SYNC = "EGL_KHR_wait_sync";
+ field public static final int EGL_SIGNALED_KHR = 12530; // 0x30f2
+ field public static final int EGL_SYNC_CONDITION_KHR = 12536; // 0x30f8
+ field public static final int EGL_SYNC_FENCE_KHR = 12537; // 0x30f9
+ field public static final int EGL_SYNC_FLUSH_COMMANDS_BIT_KHR = 1; // 0x1
+ field public static final int EGL_SYNC_NATIVE_FENCE_ANDROID = 12612; // 0x3144
+ field public static final int EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR = 12528; // 0x30f0
+ field public static final int EGL_SYNC_STATUS_KHR = 12529; // 0x30f1
+ field public static final int EGL_SYNC_TYPE_KHR = 12535; // 0x30f7
+ field public static final int EGL_TIMEOUT_EXPIRED_KHR = 12533; // 0x30f5
+ field public static final int EGL_TRUE = 1; // 0x1
+ field public static final int EGL_UNSIGNALED_KHR = 12531; // 0x30f3
+ }
+
+ public static final class EGLExt.Companion {
+ method public int eglClientWaitSyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int flags, long timeoutNanos);
+ method @RequiresApi(android.os.Build.VERSION_CODES.O) public androidx.opengl.EGLImageKHR? eglCreateImageFromHardwareBuffer(android.opengl.EGLDisplay eglDisplay, android.hardware.HardwareBuffer hardwareBuffer);
+ method public androidx.opengl.EGLSyncKHR? eglCreateSyncKHR(android.opengl.EGLDisplay eglDisplay, int type, int[]? attributes);
+ method public boolean eglDestroyImageKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLImageKHR image);
+ method public boolean eglDestroySyncKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR eglSync);
+ method @RequiresApi(android.os.Build.VERSION_CODES.KITKAT) public androidx.hardware.SyncFenceCompat eglDupNativeFenceFDANDROID(android.opengl.EGLDisplay display, androidx.opengl.EGLSyncKHR sync);
+ method public boolean eglGetSyncAttribKHR(android.opengl.EGLDisplay eglDisplay, androidx.opengl.EGLSyncKHR sync, int attribute, int[] value, int offset);
+ method public void glEGLImageTargetTexture2DOES(int target, androidx.opengl.EGLImageKHR image);
+ method public java.util.Set<java.lang.String> parseExtensions(String queryString);
+ }
+
+ public interface EGLHandle {
+ method public long getNativeHandle();
+ property public abstract long nativeHandle;
+ }
+
+ public final class EGLImageKHR implements androidx.opengl.EGLHandle {
+ ctor public EGLImageKHR(long nativeHandle);
+ method public long getNativeHandle();
+ property public long nativeHandle;
+ }
+
+ public final class EGLSyncKHR implements androidx.opengl.EGLHandle {
+ ctor public EGLSyncKHR(long nativeHandle);
+ method public long getNativeHandle();
+ property public long nativeHandle;
+ }
+
+}
+
diff --git a/graphics/graphics-core/build.gradle b/graphics/graphics-core/build.gradle
new file mode 100644
index 0000000..ecccb42
--- /dev/null
+++ b/graphics/graphics-core/build.gradle
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import androidx.build.LibraryType
+import androidx.build.Publish
+
+plugins {
+ id("AndroidXPlugin")
+ id("com.android.library")
+ id("org.jetbrains.kotlin.android")
+}
+
+dependencies {
+ api(libs.kotlinStdlib)
+ implementation 'androidx.annotation:annotation:1.2.0'
+ androidTestImplementation(libs.testExtJunit)
+ androidTestImplementation(libs.testCore)
+ androidTestImplementation(libs.testRunner)
+ androidTestImplementation(libs.testRules)
+ androidTestImplementation("androidx.lifecycle:lifecycle-common:2.5.0-alpha01")
+ androidTestImplementation("androidx.test:core:1.4.0@aar")
+}
+
+android {
+ namespace 'androidx.graphics.core'
+
+ defaultConfig {
+ minSdkVersion 17
+ externalNativeBuild {
+ cmake {
+ cppFlags ''
+ }
+ }
+ }
+ ndkVersion "23.1.7779620"
+ externalNativeBuild {
+ cmake {
+ path file('src/main/cpp/CMakeLists.txt')
+ version '3.22.1'
+ }
+ }
+}
+
+androidx {
+ name = "Android Graphics Core"
+ type = LibraryType.PUBLISHED_LIBRARY
+ mavenGroup = LibraryGroups.GRAPHICS
+ inceptionYear = "2021"
+ description = "Leverage graphics facilities across multiple Android platform releases"
+}
diff --git a/graphics/graphics-core/lint-baseline.xml b/graphics/graphics-core/lint-baseline.xml
new file mode 100644
index 0000000..47f99e1
--- /dev/null
+++ b/graphics/graphics-core/lint-baseline.xml
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (7.1.0-beta02)" variant="all" version="7.1.0-beta02">
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testConfig8888() {"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglConfigAttributesTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testConfig1010102() {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglConfigAttributesTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testConfigF16() {"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglConfigAttributesTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testInclude() {"
+ errorLine2=" ~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglConfigAttributesTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testSupportsBufferAge() {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testSupportBufferAgeFromPartialUpdate() {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testSetDamage() {"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testSwapBuffersWithDamage() {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testColorSpace() {"
+ errorLine2=" ~~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testNoConfigContext() {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testPixelFormatFloat() {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testScRgb() {"
+ errorLine2=" ~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testDisplayP3() {"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testHDR() {"
+ errorLine2=" ~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testContextPriority() {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testSurfacelessContext() {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testFenceSync() {"
+ errorLine2=" ~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testWaitSync() {"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testNativeFenceSync() {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testExtensionsQueryStringParsing() {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglExtensionsTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testDestructuringComponents() {"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglVersionTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testEquals() {"
+ errorLine2=" ~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglVersionTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testToString() {"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglVersionTest.kt"/>
+ </issue>
+
+ <issue
+ id="MissingTestSizeAnnotation"
+ message="Missing test size annotation"
+ errorLine1=" fun testHashCode() {"
+ errorLine2=" ~~~~~~~~~~~~">
+ <location
+ file="src/androidTest/java/androidx/graphics/opengl/egl/EglVersionTest.kt"/>
+ </issue>
+
+</issues>
diff --git a/graphics/graphics-core/src/androidTest/AndroidManifest.xml b/graphics/graphics-core/src/androidTest/AndroidManifest.xml
new file mode 100644
index 0000000..50bc2e7
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/AndroidManifest.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <uses-feature android:glEsVersion="0x00020000" android:required="true" />
+ <supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" />
+ <supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />
+ <application>
+ <activity android:name="androidx.graphics.opengl.egl.EglTestActivity"
+ android:label="Graphics Core Test"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+
+ <activity android:name="androidx.graphics.surface.SurfaceControlWrapperTestActivity"
+ android:label="Graphics Core Test"
+ android:exported="true">
+ </activity>
+
+ <activity android:name="androidx.graphics.opengl.GLTestActivity"
+ android:label="Graphics Core Test"
+ android:exported="true">
+ </activity>
+
+ <activity android:name="androidx.graphics.lowlatency.FrontBufferedRendererTestActivity"
+ android:label="WetDryRendererTest"
+ android:exported="true"/>
+
+ </application>
+</manifest>
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/FrontBufferedRendererTestActivity.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/FrontBufferedRendererTestActivity.kt
new file mode 100644
index 0000000..addcfff
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/FrontBufferedRendererTestActivity.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.lowlatency
+
+import android.app.Activity
+import android.os.Bundle
+import android.view.SurfaceView
+import android.view.ViewGroup
+
+class FrontBufferedRendererTestActivity : Activity() {
+
+ private lateinit var mSurfaceView: SurfaceView
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val surfaceView = SurfaceView(this).also { mSurfaceView = it }
+ setContentView(surfaceView, ViewGroup.LayoutParams(WIDTH, HEIGHT))
+ }
+
+ fun getSurfaceView(): SurfaceView = mSurfaceView
+
+ companion object {
+ const val WIDTH = 100
+ const val HEIGHT = 100
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt
new file mode 100644
index 0000000..5facad9
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/GLFrontBufferedRendererTest.kt
@@ -0,0 +1,236 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.lowlatency
+
+import android.graphics.Color
+import android.hardware.HardwareBuffer
+import android.opengl.GLES20
+import android.os.Build
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.egl.EglManager
+import androidx.graphics.surface.SurfaceControlCompat
+import androidx.graphics.opengl.egl.deviceSupportsNativeAndroidFence
+import androidx.graphics.surface.SurfaceControlUtils
+import androidx.lifecycle.Lifecycle
+import androidx.test.core.app.ActivityScenario
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotEquals
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class GLFrontBufferedRendererTest {
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
+ @Test
+ fun testFrontBufferedLayerRender() {
+ if (!deviceSupportsNativeAndroidFence()) {
+ // If the Android device does not support the corresponding extensions to create
+ // a file descriptor from an EGLSync object then skip the test
+ return
+ }
+ val renderLatch = CountDownLatch(1)
+ val callbacks = object : GLFrontBufferedRenderer.Callback<Any> {
+ override fun onDrawFrontBufferedLayer(eglManager: EglManager, param: Any) {
+ GLES20.glViewport(
+ 0,
+ 0,
+ FrontBufferedRendererTestActivity.WIDTH,
+ FrontBufferedRendererTestActivity.HEIGHT
+ )
+ GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+
+ override fun onDrawDoubleBufferedLayer(
+ eglManager: EglManager,
+ params: Collection<Any>
+ ) {
+ GLES20.glViewport(
+ 0,
+ 0,
+ FrontBufferedRendererTestActivity.WIDTH,
+ FrontBufferedRendererTestActivity.HEIGHT
+ )
+ GLES20.glClearColor(0.0f, 0.0f, 1.0f, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+
+ override fun onFrontBufferedLayerRenderComplete(
+ frontBufferedLayerSurfaceControl: SurfaceControlCompat,
+ transaction: SurfaceControlCompat.Transaction
+ ) {
+ transaction.addTransactionCommittedListener(
+ Executors.newSingleThreadExecutor(),
+ object : SurfaceControlCompat.TransactionCommittedListener {
+ override fun onTransactionCommitted() {
+ renderLatch.countDown()
+ }
+ }
+ )
+ }
+ }
+ var renderer: GLFrontBufferedRenderer<Any>? = null
+ var surfaceView: SurfaceView? = null
+ try {
+ val scenario = ActivityScenario.launch(FrontBufferedRendererTestActivity::class.java)
+ .moveToState(Lifecycle.State.CREATED)
+ .onActivity {
+ surfaceView = it.getSurfaceView()
+ renderer = GLFrontBufferedRenderer(surfaceView!!, callbacks)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ renderer?.renderFrontBufferedLayer(Any())
+ }
+ assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
+
+ val coords = IntArray(2)
+ val width: Int
+ val height: Int
+ with(surfaceView!!) {
+ getLocationOnScreen(coords)
+ width = this.width
+ height = this.height
+ }
+
+ SurfaceControlUtils.validateOutput { bitmap ->
+ Color.RED ==
+ bitmap.getPixel(coords[0] + width / 2, coords[1] + height / 2)
+ }
+ } finally {
+ renderer.blockingRelease()
+ }
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
+ @Test
+ fun testDoubleBufferedLayerRender() {
+ if (!deviceSupportsNativeAndroidFence()) {
+ // If the Android device does not support the corresponding extensions to create
+ // a file descriptor from an EGLSync object then skip the test
+ return
+ }
+
+ val renderLatch = CountDownLatch(1)
+ val callbacks = object : GLFrontBufferedRenderer.Callback<Any> {
+ override fun onDrawFrontBufferedLayer(eglManager: EglManager, param: Any) {
+ GLES20.glViewport(
+ 0,
+ 0,
+ FrontBufferedRendererTestActivity.WIDTH,
+ FrontBufferedRendererTestActivity.HEIGHT
+ )
+ GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+
+ override fun onDrawDoubleBufferedLayer(
+ eglManager: EglManager,
+ params: Collection<Any>
+ ) {
+ GLES20.glViewport(
+ 0,
+ 0,
+ FrontBufferedRendererTestActivity.WIDTH,
+ FrontBufferedRendererTestActivity.HEIGHT
+ )
+ GLES20.glClearColor(0.0f, 0.0f, 1.0f, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+
+ override fun onDoubleBufferedLayerRenderComplete(
+ frontBufferedLayerSurfaceControl: SurfaceControlCompat,
+ transaction: SurfaceControlCompat.Transaction
+ ) {
+ transaction.addTransactionCommittedListener(
+ Executors.newSingleThreadExecutor(),
+ object : SurfaceControlCompat.TransactionCommittedListener {
+ override fun onTransactionCommitted() {
+ renderLatch.countDown()
+ }
+ })
+ }
+ }
+ var renderer: GLFrontBufferedRenderer<Any>? = null
+ var surfaceView: SurfaceView? = null
+ try {
+ val scenario = ActivityScenario.launch(FrontBufferedRendererTestActivity::class.java)
+ .moveToState(Lifecycle.State.CREATED)
+ .onActivity {
+ surfaceView = it.getSurfaceView()
+ renderer = GLFrontBufferedRenderer(surfaceView!!, callbacks)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ renderer?.renderFrontBufferedLayer(Any())
+ renderer?.commit()
+ }
+ assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
+
+ val coords = IntArray(2)
+ val width: Int
+ val height: Int
+ with(surfaceView!!) {
+ getLocationOnScreen(coords)
+ width = this.width
+ height = this.height
+ }
+
+ SurfaceControlUtils.validateOutput { bitmap ->
+ Color.BLUE ==
+ bitmap.getPixel(coords[0] + width / 2, coords[1] + height / 2)
+ }
+ } finally {
+ renderer.blockingRelease()
+ }
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
+ fun testUsageFlagContainsFrontBufferUsage() {
+ val usageFlags = GLFrontBufferedRenderer.obtainHardwareBufferUsageFlags()
+ if (GLFrontBufferedRenderer.supportsFrontBufferUsage()) {
+ assertNotEquals(0, usageFlags and HardwareBuffer.USAGE_FRONT_BUFFER)
+ } else {
+ assertEquals(0, usageFlags and HardwareBuffer.USAGE_FRONT_BUFFER)
+ }
+ }
+
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ private fun GLFrontBufferedRenderer<*>?.blockingRelease() {
+ if (this != null) {
+ val destroyLatch = CountDownLatch(1)
+ release(false) {
+ destroyLatch.countDown()
+ }
+ assertTrue(destroyLatch.await(3000, TimeUnit.MILLISECONDS))
+ } else {
+ fail("GLFrontBufferedRenderer is not initialized")
+ }
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/RenderBufferPoolTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/RenderBufferPoolTest.kt
new file mode 100644
index 0000000..bb5b365
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/lowlatency/RenderBufferPoolTest.kt
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.lowlatency
+
+import android.hardware.HardwareBuffer
+import android.os.Build
+import androidx.graphics.opengl.egl.EglManager
+import androidx.graphics.opengl.egl.EglSpec
+import androidx.graphics.opengl.egl.supportsNativeAndroidFence
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import kotlin.concurrent.thread
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+internal class RenderBufferPoolTest {
+
+ @Test
+ fun testHardwareBufferMatchesConfig() {
+ withEglSpec { eglSpec ->
+ val width = 2
+ val height = 3
+ val format = HardwareBuffer.RGB_565
+ val usage = HardwareBuffer.USAGE_GPU_COLOR_OUTPUT
+ val pool = createPool(
+ width,
+ height,
+ format,
+ usage
+ )
+ try {
+ val buffer = pool.obtain(eglSpec).hardwareBuffer
+ assertEquals(width, buffer.width)
+ assertEquals(height, buffer.height)
+ assertEquals(format, buffer.format)
+ assertEquals(usage, buffer.usage)
+ } finally {
+ pool.close()
+ }
+ }
+ }
+
+ @Test
+ fun testCloseReleasesRenderBuffer() {
+ withEglSpec { egl ->
+ val pool = createPool()
+ val renderBuffer = pool.obtain(egl)
+ pool.release(renderBuffer)
+ pool.close()
+ assertTrue(renderBuffer.isClosed)
+ }
+ }
+
+ @Test
+ fun testAllocationAtMaxPoolSizeBlocks() {
+ withEglSpec { egl ->
+ val poolSize = 2
+ val latch = CountDownLatch(1)
+ thread {
+ val pool = createPool(maxPoolSize = poolSize)
+ // Attempting to allocate 1 additional buffer than
+ // maximum specified pool size should block
+ repeat(poolSize + 1) {
+ pool.obtain(egl)
+ }
+ latch.countDown()
+ }
+ assertFalse(latch.await(3, TimeUnit.SECONDS))
+ }
+ }
+
+ @Test
+ fun testReleaseAtMaxPoolSizeUnblocks() {
+ withEglSpec { egl ->
+ val poolSize = 2
+ val latch = CountDownLatch(1)
+ val pool = createPool(maxPoolSize = poolSize)
+ val b1 = pool.obtain(egl)
+ pool.obtain(egl)
+ var b3: RenderBuffer? = null
+ thread {
+ b3 = pool.obtain(egl)
+ latch.countDown()
+ }
+ pool.release(b1)
+ assertTrue(latch.await(3, TimeUnit.SECONDS))
+ assertTrue(b1 === b3)
+ }
+ }
+
+ fun createPool(
+ width: Int = 2,
+ height: Int = 3,
+ format: Int = HardwareBuffer.RGB_565,
+ usage: Long = HardwareBuffer.USAGE_GPU_COLOR_OUTPUT,
+ maxPoolSize: Int = 2
+ ): RenderBufferPool =
+ RenderBufferPool(
+ width,
+ height,
+ format,
+ usage,
+ maxPoolSize
+ )
+
+ private fun withEglSpec(
+ block: (egl: EglSpec) -> Unit = {}
+ ) {
+ with(EglManager()) {
+ initialize()
+ if (supportsNativeAndroidFence()) {
+ block(eglSpec)
+ }
+ release()
+ }
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt
new file mode 100644
index 0000000..25515bc
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLRendererTest.kt
@@ -0,0 +1,934 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.opengl
+
+import android.graphics.Bitmap
+import android.graphics.Color
+import android.graphics.ColorSpace
+import android.graphics.PixelFormat
+import android.graphics.SurfaceTexture
+import android.hardware.HardwareBuffer
+import android.media.Image
+import android.media.ImageReader
+import android.opengl.EGL14
+import android.opengl.EGLSurface
+import android.opengl.GLES20
+import android.os.Build
+import android.os.Handler
+import android.os.HandlerThread
+import android.view.PixelCopy
+import android.view.Surface
+import android.view.SurfaceHolder
+import android.view.TextureView
+import androidx.annotation.RequiresApi
+import androidx.annotation.WorkerThread
+import androidx.graphics.lowlatency.HardwareBufferRenderer
+import androidx.graphics.lowlatency.RenderBuffer
+import androidx.graphics.lowlatency.RenderFence
+import androidx.graphics.opengl.egl.EglManager
+import androidx.graphics.opengl.egl.EglSpec
+import androidx.graphics.opengl.egl.deviceSupportsNativeAndroidFence
+import androidx.graphics.opengl.egl.supportsNativeAndroidFence
+import androidx.lifecycle.Lifecycle.State
+import androidx.test.core.app.ActivityScenario
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.atomic.AtomicBoolean
+import java.util.concurrent.atomic.AtomicInteger
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class GLRendererTest {
+
+ @Test
+ fun testStartAfterStop() {
+ with(GLRenderer()) {
+ start("thread1")
+ stop(true)
+ start("thread2")
+ stop(true)
+ }
+ }
+
+ @Test
+ fun testAttachBeforeStartThrows() {
+ try {
+ with(GLRenderer()) {
+ attach(
+ Surface(SurfaceTexture(17)),
+ 10,
+ 10,
+ object : GLRenderer.RenderCallback {
+ override fun onDrawFrame(eglManager: EglManager) {
+ // NO-OP
+ }
+ })
+ }
+ fail("Start should be called first")
+ } catch (exception: IllegalStateException) {
+ // Success, attach before call to start should fail
+ }
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+ fun testRender() {
+ val latch = CountDownLatch(1)
+ val renderer = object : GLRenderer.RenderCallback {
+ override fun onDrawFrame(eglManager: EglManager) {
+ GLES20.glClearColor(1.0f, 0.0f, 1.0f, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+ }
+
+ val width = 5
+ val height = 8
+ val reader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 1)
+ val glRenderer = GLRenderer()
+ glRenderer.start()
+
+ val target = glRenderer.attach(reader.surface, width, height, renderer)
+ target.requestRender {
+ latch.countDown()
+ }
+
+ assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+ val plane = reader.acquireLatestImage().planes[0]
+ assertEquals(4, plane.pixelStride)
+
+ val targetColor = Color.argb(255, 255, 0, 255)
+ Api19Helpers.verifyPlaneContent(width, height, plane, targetColor)
+
+ target.detach(true)
+
+ glRenderer.stop(true)
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+ fun testDetachExecutesPendingRequests() {
+ val latch = CountDownLatch(1)
+ val renderer = object : GLRenderer.RenderCallback {
+ override fun onDrawFrame(eglManager: EglManager) {
+ GLES20.glClearColor(1.0f, 0.0f, 1.0f, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+ }
+
+ val width = 5
+ val height = 8
+ val reader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 1)
+ val glRenderer = GLRenderer()
+ glRenderer.start()
+
+ val target = glRenderer.attach(reader.surface, width, height, renderer)
+ target.requestRender {
+ latch.countDown()
+ }
+ target.detach(false) // RequestRender Call should still execute
+
+ assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+ val plane = reader.acquireLatestImage().planes[0]
+ assertEquals(4, plane.pixelStride)
+
+ val targetColor = Color.argb(255, 255, 0, 255)
+ Api19Helpers.verifyPlaneContent(width, height, plane, targetColor)
+
+ glRenderer.stop(true)
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+ fun testStopExecutesPendingRequests() {
+ val latch = CountDownLatch(1)
+ val surfaceWidth = 5
+ val surfaceHeight = 8
+ val renderer = object : GLRenderer.RenderCallback {
+ override fun onDrawFrame(eglManager: EglManager) {
+ val size = eglManager.eglSpec.querySurfaceSize(eglManager.currentDrawSurface)
+ assertEquals(surfaceWidth, size.width)
+ assertEquals(surfaceHeight, size.height)
+ GLES20.glClearColor(1.0f, 0.0f, 1.0f, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+ }
+
+ val reader = ImageReader.newInstance(surfaceWidth, surfaceHeight, PixelFormat.RGBA_8888, 1)
+ val glRenderer = GLRenderer()
+ glRenderer.start()
+
+ val target = glRenderer.attach(reader.surface, surfaceWidth, surfaceHeight, renderer)
+ target.requestRender {
+ latch.countDown()
+ }
+ glRenderer.stop(false) // RequestRender call should still execute
+
+ assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+ val plane = reader.acquireLatestImage().planes[0]
+ assertEquals(4, plane.pixelStride)
+
+ val targetColor = Color.argb(255, 255, 0, 255)
+ Api19Helpers.verifyPlaneContent(surfaceWidth, surfaceHeight, plane, targetColor)
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+ fun testDetachExecutesMultiplePendingRequests() {
+ val numRenders = 4
+ val latch = CountDownLatch(numRenders)
+ val renderCount = AtomicInteger(0)
+ val renderer = object : GLRenderer.RenderCallback {
+ override fun onDrawFrame(eglManager: EglManager) {
+ var red: Float = 0f
+ var green: Float = 0f
+ var blue: Float = 0f
+ when (renderCount.get()) {
+ 1 -> {
+ red = 1f
+ }
+ 2 -> {
+ green = 1f
+ }
+ 3 -> {
+ blue = 1f
+ }
+ }
+ GLES20.glClearColor(red, green, blue, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+ }
+
+ val width = 5
+ val height = 8
+ val reader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 1)
+ val glRenderer = GLRenderer()
+ glRenderer.start()
+
+ val target = glRenderer.attach(reader.surface, width, height, renderer)
+ // Issuing multiple requestRender calls to ensure each of them are
+ // executed even when a detach call is made
+ repeat(numRenders) {
+ target.requestRender {
+ renderCount.incrementAndGet()
+ latch.countDown()
+ }
+ }
+
+ target.detach(false) // RequestRender calls should still execute
+
+ assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+ assertEquals(numRenders, renderCount.get())
+ val plane = reader.acquireLatestImage().planes[0]
+ assertEquals(4, plane.pixelStride)
+
+ val targetColor = Color.argb(255, 0, 0, 255)
+ Api19Helpers.verifyPlaneContent(width, height, plane, targetColor)
+
+ glRenderer.stop(true)
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+ fun testDetachCancelsPendingRequests() {
+ val latch = CountDownLatch(1)
+ val renderer = object : GLRenderer.RenderCallback {
+ override fun onDrawFrame(eglManager: EglManager) {
+ GLES20.glClearColor(1.0f, 0.0f, 1.0f, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+ }
+
+ val width = 5
+ val height = 8
+ val reader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 1)
+ val glRenderer = GLRenderer()
+ glRenderer.start()
+
+ val target = glRenderer.attach(reader.surface, width, height, renderer)
+ target.requestRender {
+ latch.countDown()
+ }
+ target.detach(false) // RequestRender Call should be cancelled
+
+ glRenderer.stop(true)
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+ fun testMultipleAttachedSurfaces() {
+ val latch = CountDownLatch(2)
+ val renderer1 = object : GLRenderer.RenderCallback {
+
+ override fun onDrawFrame(eglManager: EglManager) {
+ GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+ }
+
+ val renderer2 = object : GLRenderer.RenderCallback {
+ override fun onDrawFrame(eglManager: EglManager) {
+ GLES20.glClearColor(0.0f, 0.0f, 1.0f, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+ }
+
+ val width1 = 6
+ val height1 = 7
+
+ val width2 = 11
+ val height2 = 23
+ val reader1 = ImageReader.newInstance(width1, height1, PixelFormat.RGBA_8888, 1)
+
+ val reader2 = ImageReader.newInstance(width2, height2, PixelFormat.RGBA_8888, 1)
+
+ val glRenderer = GLRenderer()
+ glRenderer.start()
+
+ val target1 = glRenderer.attach(reader1.surface, width1, height1, renderer1)
+ val target2 = glRenderer.attach(reader2.surface, width2, height2, renderer2)
+ target1.requestRender {
+ latch.countDown()
+ }
+ target2.requestRender {
+ latch.countDown()
+ }
+
+ assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+ val plane1 = reader1.acquireLatestImage().planes[0]
+ val plane2 = reader2.acquireLatestImage().planes[0]
+
+ Api19Helpers.verifyPlaneContent(width1, height1, plane1, Color.argb(255, 255, 0, 0))
+ Api19Helpers.verifyPlaneContent(width2, height2, plane2, Color.argb(255, 0, 0, 255))
+
+ target1.detach(true)
+ target2.detach(true)
+
+ val attachLatch = CountDownLatch(1)
+ glRenderer.stop(true) {
+ attachLatch.countDown()
+ }
+
+ assertTrue(attachLatch.await(3000, TimeUnit.MILLISECONDS))
+ }
+
+ /**
+ * Helper class for test methods that refer to APIs that may not exist on earlier API levels.
+ * This must be broken out into a separate class instead of being defined within the
+ * test class as the test runner will inspect all methods + parameter types in advance.
+ * If a parameter type does not exist on a particular API level, it will crash even if
+ * there are corresponding @SdkSuppress and @RequiresApi
+ * See https://b.corp.google.com/issues/221485597
+ */
+ class Api19Helpers private constructor() {
+ companion object {
+ @RequiresApi(Build.VERSION_CODES.KITKAT)
+ fun verifyPlaneContent(width: Int, height: Int, plane: Image.Plane, targetColor: Int) {
+ val rowPadding = plane.rowStride - plane.pixelStride * width
+ var offset = 0
+ for (y in 0 until height) {
+ for (x in 0 until width) {
+ val red = plane.buffer[offset].toInt() and 0xff
+ val green = plane.buffer[offset + 1].toInt() and 0xff
+ val blue = plane.buffer[offset + 2].toInt() and 0xff
+ val alpha = plane.buffer[offset + 3].toInt() and 0xff
+ val packedColor = Color.argb(alpha, red, green, blue)
+ assertEquals("Index: $x, $y", targetColor, packedColor)
+ offset += plane.pixelStride
+ }
+ offset += rowPadding
+ }
+ }
+ }
+ }
+
+ @Test
+ fun testNonStartedGLRendererIsNotRunning() {
+ assertFalse(GLRenderer().isRunning())
+ }
+
+ @Test
+ fun testRepeatedStartAndStopRunningState() {
+ val glRenderer = GLRenderer()
+ assertFalse(glRenderer.isRunning())
+ glRenderer.start()
+ assertTrue(glRenderer.isRunning())
+ glRenderer.stop(true)
+ assertFalse(glRenderer.isRunning())
+ glRenderer.start()
+ assertTrue(glRenderer.isRunning())
+ glRenderer.stop(true)
+ assertFalse(glRenderer.isRunning())
+ }
+
+ @Test
+ fun testMultipleSurfaceHolderDestroyCallbacks() {
+ val destroyLatch = CountDownLatch(1)
+ val renderer = GLRenderer().apply { start() }
+ val scenario = withGLTestActivity {
+ assertNotNull(surfaceView)
+
+ var renderTarget: GLRenderer.RenderTarget? = null
+ val callbacks = object : SurfaceHolder.Callback {
+ override fun surfaceCreated(p0: SurfaceHolder) {
+ // no-op
+ }
+
+ override fun surfaceChanged(p0: SurfaceHolder, p1: Int, p2: Int, p3: Int) {
+ // no-op
+ }
+
+ override fun surfaceDestroyed(p0: SurfaceHolder) {
+ renderTarget?.detach(true)
+ destroyLatch.countDown()
+ }
+ }
+ surfaceView.holder.addCallback(callbacks)
+ renderTarget = renderer.attach(surfaceView, ColorRenderCallback(Color.RED))
+ }
+
+ val tearDownLatch = CountDownLatch(1)
+ scenario.moveToState(State.DESTROYED)
+ assertTrue(destroyLatch.await(3000, TimeUnit.MILLISECONDS))
+ renderer.stop(true) {
+ tearDownLatch.countDown()
+ }
+ assertTrue(tearDownLatch.await(3000, TimeUnit.MILLISECONDS))
+ }
+
+ @Test
+ fun testMultipleTextureViewDestroyCallbacks() {
+ val destroyLatch = CountDownLatch(1)
+ val renderer = GLRenderer().apply { start() }
+ val scenario = withGLTestActivity {
+ assertNotNull(textureView)
+
+ val renderTarget = renderer.attach(textureView, ColorRenderCallback(Color.RED))
+ val listener = textureView.surfaceTextureListener
+ textureView.surfaceTextureListener = object : TextureView.SurfaceTextureListener {
+ override fun onSurfaceTextureAvailable(p0: SurfaceTexture, p1: Int, p2: Int) {
+ listener?.onSurfaceTextureAvailable(p0, p1, p2)
+ }
+
+ override fun onSurfaceTextureSizeChanged(p0: SurfaceTexture, p1: Int, p2: Int) {
+ listener?.onSurfaceTextureSizeChanged(p0, p1, p2)
+ }
+
+ override fun onSurfaceTextureDestroyed(p0: SurfaceTexture): Boolean {
+ renderTarget.detach(true)
+ listener?.onSurfaceTextureDestroyed(p0)
+ destroyLatch.countDown()
+ return true
+ }
+
+ override fun onSurfaceTextureUpdated(p0: SurfaceTexture) {
+ listener?.onSurfaceTextureUpdated(p0)
+ }
+ }
+ }
+
+ val tearDownLatch = CountDownLatch(1)
+ scenario.moveToState(State.DESTROYED)
+ assertTrue(destroyLatch.await(3000, TimeUnit.MILLISECONDS))
+ renderer.stop(true) {
+ tearDownLatch.countDown()
+ }
+ assertTrue(tearDownLatch.await(3000, TimeUnit.MILLISECONDS))
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
+ fun testSurfaceViewAttach() {
+ withGLTestActivity {
+ assertNotNull(surfaceView)
+
+ val latch = CountDownLatch(1)
+ val glRenderer = GLRenderer().apply { start() }
+ val target = glRenderer.attach(surfaceView, ColorRenderCallback(Color.BLUE))
+
+ target.requestRender {
+ latch.countDown()
+ }
+
+ assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+
+ val bitmap = Bitmap.createBitmap(
+ GLTestActivity.TARGET_WIDTH,
+ GLTestActivity.TARGET_HEIGHT,
+ Bitmap.Config.ARGB_8888
+ )
+
+ blockingPixelCopy(bitmap) { surfaceView.holder.surface }
+
+ assertTrue(bitmap.isAllColor(Color.BLUE))
+
+ val stopLatch = CountDownLatch(1)
+ glRenderer.stop(true) {
+ stopLatch.countDown()
+ }
+
+ assertTrue(stopLatch.await(3000, TimeUnit.MILLISECONDS))
+ // Assert that targets are detached when the GLRenderer is stopped
+ assertFalse(target.isAttached())
+ }
+ }
+
+ @Test
+ fun testTextureViewOnResizeCalled() {
+ withGLTestActivity {
+ assertNotNull(textureView)
+ val glRenderer = GLRenderer().apply { start() }
+
+ val resizeLatch = CountDownLatch(1)
+ val target = glRenderer.attach(textureView, object : GLRenderer.RenderCallback {
+ override fun onDrawFrame(eglManager: EglManager) {
+ val size = eglManager.eglSpec.querySurfaceSize(eglManager.currentDrawSurface)
+ assertTrue(size.width > 0)
+ assertTrue(size.height > 0)
+ resizeLatch.countDown()
+ }
+ })
+ target.requestRender()
+
+ assertTrue(resizeLatch.await(3000, TimeUnit.MILLISECONDS))
+
+ val detachLatch = CountDownLatch(1)
+ target.detach(false) {
+ detachLatch.countDown()
+ }
+ assertTrue(detachLatch.await(3000, TimeUnit.MILLISECONDS))
+ glRenderer.stop(true)
+ }
+ }
+
+ @Test
+ fun testSurfaceViewOnResizeCalled() {
+ withGLTestActivity {
+ assertNotNull(surfaceView)
+ val glRenderer = GLRenderer().apply { start() }
+
+ val resizeLatch = CountDownLatch(1)
+ val target = glRenderer.attach(surfaceView, object : GLRenderer.RenderCallback {
+ override fun onDrawFrame(eglManager: EglManager) {
+ val size = eglManager.eglSpec.querySurfaceSize(eglManager.currentDrawSurface)
+ assertTrue(size.width > 0)
+ assertTrue(size.height > 0)
+ resizeLatch.countDown()
+ }
+ })
+ target.requestRender()
+
+ assertTrue(resizeLatch.await(3000, TimeUnit.MILLISECONDS))
+
+ val detachLatch = CountDownLatch(1)
+ target.detach(false) {
+ detachLatch.countDown()
+ }
+ assertTrue(detachLatch.await(3000, TimeUnit.MILLISECONDS))
+ glRenderer.stop(true)
+ }
+ }
+
+ data class Size(val width: Int, val height: Int)
+
+ fun EglSpec.querySurfaceSize(eglSurface: EGLSurface): Size {
+ val result = IntArray(1)
+ eglQuerySurface(
+ eglSurface, EGL14.EGL_WIDTH, result, 0)
+ val width = result[0]
+ eglQuerySurface(
+ eglSurface, EGL14.EGL_HEIGHT, result, 0)
+ val height = result[0]
+ return Size(width, height)
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N)
+ fun testTextureViewAttach() {
+ withGLTestActivity {
+ assertNotNull(textureView)
+
+ val latch = CountDownLatch(1)
+ val glRenderer = GLRenderer().apply { start() }
+ val target = glRenderer.attach(textureView, ColorRenderCallback(Color.BLUE))
+ target.requestRender {
+ latch.countDown()
+ }
+ assertTrue(latch.await(3000, TimeUnit.MILLISECONDS))
+
+ val bitmap = Bitmap.createBitmap(
+ GLTestActivity.TARGET_WIDTH,
+ GLTestActivity.TARGET_HEIGHT,
+ Bitmap.Config.ARGB_8888
+ )
+
+ blockingPixelCopy(bitmap) { Surface(textureView.surfaceTexture) }
+ assertTrue(bitmap.isAllColor(Color.BLUE))
+
+ val stopLatch = CountDownLatch(1)
+ glRenderer.stop(true) {
+ stopLatch.countDown()
+ }
+
+ assertTrue(stopLatch.await(3000, TimeUnit.MILLISECONDS))
+ // Assert that targets are detached when the GLRenderer is stopped
+ assertFalse(target.isAttached())
+ }
+ }
+
+ @Test
+ fun testEglContextCallbackInvoked() {
+ val createdLatch = CountDownLatch(1)
+ val destroyedLatch = CountDownLatch(1)
+ val createCount = AtomicInteger()
+ val destroyCount = AtomicInteger()
+ val callback = object : GLRenderer.EglContextCallback {
+
+ override fun onEglContextCreated(eglManager: EglManager) {
+ createCount.incrementAndGet()
+ createdLatch.countDown()
+ }
+
+ override fun onEglContextDestroyed(eglManager: EglManager) {
+ destroyCount.incrementAndGet()
+ destroyedLatch.countDown()
+ }
+ }
+
+ val glRenderer = GLRenderer().apply { start() }
+ glRenderer.registerEglContextCallback(callback)
+
+ glRenderer.attach(
+ Surface(SurfaceTexture(12)),
+ 10,
+ 10,
+ ColorRenderCallback(Color.RED)
+ ).requestRender()
+
+ assertTrue(createdLatch.await(3000, TimeUnit.MILLISECONDS))
+ assertEquals(1, createCount.get())
+
+ glRenderer.stop(true)
+
+ assertTrue(destroyedLatch.await(3000, TimeUnit.MILLISECONDS))
+ assertEquals(1, destroyCount.get())
+ }
+
+ @Test
+ fun testEglContextCallbackInvokedBeforeStart() {
+ val createdLatch = CountDownLatch(1)
+ val destroyedLatch = CountDownLatch(1)
+ val createCount = AtomicInteger()
+ val destroyCount = AtomicInteger()
+ val callback = object : GLRenderer.EglContextCallback {
+
+ override fun onEglContextCreated(eglManager: EglManager) {
+ createCount.incrementAndGet()
+ createdLatch.countDown()
+ }
+
+ override fun onEglContextDestroyed(eglManager: EglManager) {
+ destroyCount.incrementAndGet()
+ destroyedLatch.countDown()
+ }
+ }
+
+ val glRenderer = GLRenderer()
+ // Adding a callback before the glRenderer is started should still
+ // deliver onEglRendererCreated callbacks
+ glRenderer.registerEglContextCallback(callback)
+ glRenderer.start()
+
+ glRenderer.attach(
+ Surface(SurfaceTexture(12)),
+ 10,
+ 10,
+ ColorRenderCallback(Color.CYAN)
+ ).requestRender()
+
+ assertTrue(createdLatch.await(3000, TimeUnit.MILLISECONDS))
+ assertEquals(1, createCount.get())
+
+ glRenderer.stop(true)
+
+ assertTrue(destroyedLatch.await(3000, TimeUnit.MILLISECONDS))
+ assertEquals(1, destroyCount.get())
+ }
+
+ @Test
+ fun testEglContextCallbackRemove() {
+ val createdLatch = CountDownLatch(1)
+ val destroyedLatch = CountDownLatch(1)
+ val createCount = AtomicInteger()
+ val destroyCount = AtomicInteger()
+ val callback = object : GLRenderer.EglContextCallback {
+
+ override fun onEglContextCreated(eglManager: EglManager) {
+ createCount.incrementAndGet()
+ createdLatch.countDown()
+ }
+
+ override fun onEglContextDestroyed(eglManager: EglManager) {
+ destroyCount.incrementAndGet()
+ }
+ }
+
+ val glRenderer = GLRenderer()
+ // Adding a callback before the glRenderer is started should still
+ // deliver onEglRendererCreated callbacks
+ glRenderer.registerEglContextCallback(callback)
+ glRenderer.start()
+
+ glRenderer.attach(
+ Surface(SurfaceTexture(12)),
+ 10,
+ 10,
+ ColorRenderCallback(Color.CYAN)
+ ).requestRender()
+
+ assertTrue(createdLatch.await(3000, TimeUnit.MILLISECONDS))
+ assertEquals(1, createCount.get())
+
+ glRenderer.unregisterEglContextCallback(callback)
+
+ glRenderer.stop(false) {
+ destroyedLatch.countDown()
+ }
+
+ assertTrue(destroyedLatch.await(3000, TimeUnit.MILLISECONDS))
+ assertEquals(0, destroyCount.get())
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+ fun testRenderBufferTarget() {
+ val width = 10
+ val height = 10
+ val renderLatch = CountDownLatch(1)
+ val teardownLatch = CountDownLatch(1)
+ val glRenderer = GLRenderer().apply { start() }
+ var renderBuffer: RenderBuffer? = null
+
+ val supportsNativeFence = AtomicBoolean(false)
+ glRenderer.createRenderTarget(width, height, object : GLRenderer.RenderCallback {
+
+ @WorkerThread
+ override fun onDrawFrame(eglManager: EglManager) {
+ if (eglManager.supportsNativeAndroidFence()) {
+ supportsNativeFence.set(true)
+ var renderFence: RenderFence? = null
+ try {
+ val egl = eglManager.eglSpec
+ val buffer = RenderBuffer(
+ egl,
+ HardwareBuffer.create(
+ width,
+ height,
+ HardwareBuffer.RGBA_8888,
+ 1,
+ HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE
+ )
+ ).also { renderBuffer = it }
+ buffer.makeCurrent()
+ GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ GLES20.glFlush()
+ renderFence = RenderFence(egl)
+ renderFence.await(TimeUnit.SECONDS.toNanos(3))
+ } finally {
+ renderFence?.close()
+ }
+ }
+ renderLatch.countDown()
+ }
+ }).requestRender()
+
+ var hardwareBuffer: HardwareBuffer? = null
+ try {
+ assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
+ if (supportsNativeFence.get()) {
+ hardwareBuffer = renderBuffer?.hardwareBuffer
+ if (hardwareBuffer != null) {
+ val colorSpace = ColorSpace.get(ColorSpace.Named.LINEAR_SRGB)
+ // Copy to non hardware bitmap to be able to sample pixels
+ val bitmap = Bitmap.wrapHardwareBuffer(hardwareBuffer, colorSpace)
+ ?.copy(Bitmap.Config.ARGB_8888, false)
+ if (bitmap != null) {
+ assertTrue(bitmap.isAllColor(Color.RED))
+ } else {
+ fail("Unable to obtain Bitmap from hardware buffer")
+ }
+ } else {
+ fail("Unable to obtain hardwarebuffer from RenderBuffer")
+ }
+ }
+ } finally {
+ hardwareBuffer?.close()
+ glRenderer.stop(true) {
+ teardownLatch.countDown()
+ }
+ assertTrue(teardownLatch.await(3000, TimeUnit.MILLISECONDS))
+ }
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
+ fun testFrontBufferedRenderer() {
+ if (!deviceSupportsNativeAndroidFence()) {
+ // If the Android device does not support the corresponding
+ // EGL Extensions to obtain native Android fence objects from EGLSync
+ // instances then skip this test as we cannot guarantee consistency
+ // for front buffered rendering
+ return
+ }
+ val width = 10
+ val height = 10
+ val renderLatch = CountDownLatch(1)
+ val teardownLatch = CountDownLatch(1)
+ val glRenderer = GLRenderer().apply { start() }
+ var renderBuffer: RenderBuffer? = null
+
+ val callbacks = object : HardwareBufferRenderer.RenderCallbacks {
+ override fun obtainRenderBuffer(egl: EglSpec): RenderBuffer =
+ RenderBuffer(
+ egl,
+ HardwareBuffer.create(
+ width,
+ height,
+ HardwareBuffer.RGBA_8888,
+ 1,
+ HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE
+ )
+ ).also { renderBuffer = it }
+
+ override fun onDraw(eglManager: EglManager) {
+ GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ GLES20.glFlush()
+ }
+
+ override fun onDrawComplete(renderBuffer: RenderBuffer) {
+ renderLatch.countDown()
+ }
+ }
+
+ glRenderer.createRenderTarget(
+ width,
+ height,
+ HardwareBufferRenderer(callbacks)
+ ).requestRender()
+
+ var hardwareBuffer: HardwareBuffer? = null
+ try {
+ assertTrue(renderLatch.await(3000, TimeUnit.MILLISECONDS))
+ hardwareBuffer = renderBuffer?.hardwareBuffer
+ if (hardwareBuffer != null) {
+ val colorSpace = ColorSpace.get(ColorSpace.Named.LINEAR_SRGB)
+ // Copy to non hardware bitmap to be able to sample pixels
+ val bitmap = Bitmap.wrapHardwareBuffer(hardwareBuffer, colorSpace)
+ ?.copy(Bitmap.Config.ARGB_8888, false)
+ if (bitmap != null) {
+ assertTrue(bitmap.isAllColor(Color.RED))
+ } else {
+ fail("Unable to obtain Bitmap from hardware buffer")
+ }
+ } else {
+ fail("Unable to obtain hardwarebuffer from RenderBuffer")
+ }
+ } finally {
+ hardwareBuffer?.close()
+ glRenderer.stop(true) {
+ teardownLatch.countDown()
+ }
+ assertTrue(teardownLatch.await(3000, TimeUnit.MILLISECONDS))
+ }
+ }
+
+ /**
+ * Helper method to create a GLTestActivity instance and progress it through the Activity
+ * lifecycle to the resumed state so we can issue rendering commands into the corresponding
+ * SurfaceView/TextureView
+ */
+ private fun withGLTestActivity(
+ block: GLTestActivity.() -> Unit
+ ): ActivityScenario<GLTestActivity> =
+ ActivityScenario.launch(GLTestActivity::class.java).moveToState(State.RESUMED).onActivity {
+ block(it!!)
+ }
+
+ /**
+ * Helper RenderCallback that renders a solid color and invokes the provided CountdownLatch
+ * when rendering is complete
+ */
+ private class ColorRenderCallback(
+ val targetColor: Int
+ ) : GLRenderer.RenderCallback {
+
+ override fun onDrawFrame(eglManager: EglManager) {
+ GLES20.glClearColor(
+ Color.red(targetColor) / 255f,
+ Color.green(targetColor) / 255f,
+ Color.blue(targetColor) / 255f,
+ Color.alpha(targetColor) / 255f,
+ )
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+ }
+
+ /**
+ * Helper method that synchronously blocks until the PixelCopy operation is complete
+ */
+ @RequiresApi(Build.VERSION_CODES.N)
+ private fun blockingPixelCopy(
+ destBitmap: Bitmap,
+ surfaceProvider: () -> Surface
+ ) {
+ val copyLatch = CountDownLatch(1)
+ val copyThread = HandlerThread("copyThread").apply { start() }
+ val copyHandler = Handler(copyThread.looper)
+ PixelCopy.request(surfaceProvider.invoke(),
+ destBitmap,
+ { copyResult ->
+ assertEquals(PixelCopy.SUCCESS, copyResult)
+ copyLatch.countDown()
+ copyThread.quit()
+ },
+ copyHandler
+ )
+ assertTrue(copyLatch.await(3000, TimeUnit.MILLISECONDS))
+ }
+
+ private fun Bitmap.isAllColor(targetColor: Int): Boolean {
+ for (i in 0 until width) {
+ for (j in 0 until height) {
+ if (getPixel(i, j) != targetColor) {
+ return false
+ }
+ }
+ }
+ return true
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLTestActivity.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLTestActivity.kt
new file mode 100644
index 0000000..103c36b
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/GLTestActivity.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.opengl
+
+import android.app.Activity
+import android.os.Bundle
+import android.view.SurfaceView
+import android.view.TextureView
+import android.widget.LinearLayout
+
+class GLTestActivity : Activity() {
+
+ companion object {
+ const val TARGET_WIDTH = 30
+ const val TARGET_HEIGHT = 20
+ }
+
+ lateinit var surfaceView: SurfaceView
+ lateinit var textureView: TextureView
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ surfaceView = SurfaceView(this)
+ textureView = TextureView(this)
+ val ll = LinearLayout(this).apply {
+ orientation = LinearLayout.VERTICAL
+ weightSum = 2f
+ }
+ val layoutParams = LinearLayout.LayoutParams(TARGET_WIDTH, TARGET_HEIGHT)
+
+ ll.addView(surfaceView, layoutParams)
+ ll.addView(textureView, layoutParams)
+
+ setContentView(ll)
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLExtensionsTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLExtensionsTest.kt
new file mode 100644
index 0000000..15cb5ba
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EGLExtensionsTest.kt
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.opengl.egl
+
+import androidx.opengl.EGLExt
+import androidx.opengl.EGLExt.Companion.EGL_ANDROID_NATIVE_FENCE_SYNC
+import androidx.opengl.EGLExt.Companion.EGL_EXT_BUFFER_AGE
+import androidx.opengl.EGLExt.Companion.EGL_EXT_GL_COLORSPACE_BT2020_PQ
+import androidx.opengl.EGLExt.Companion.EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH
+import androidx.opengl.EGLExt.Companion.EGL_EXT_GL_COLORSPACE_SCRGB
+import androidx.opengl.EGLExt.Companion.EGL_EXT_PIXEL_FORMAT_FLOAT
+import androidx.opengl.EGLExt.Companion.EGL_IMG_CONTEXT_PRIORITY
+import androidx.opengl.EGLExt.Companion.EGL_KHR_FENCE_SYNC
+import androidx.opengl.EGLExt.Companion.EGL_KHR_GL_COLORSPACE
+import androidx.opengl.EGLExt.Companion.EGL_KHR_NO_CONFIG_CONTEXT
+import androidx.opengl.EGLExt.Companion.EGL_KHR_PARTIAL_UPDATE
+import androidx.opengl.EGLExt.Companion.EGL_KHR_SURFACELESS_CONTEXT
+import androidx.opengl.EGLExt.Companion.EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE
+import androidx.opengl.EGLExt.Companion.EGL_KHR_WAIT_SYNC
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class EGLExtensionsTest {
+
+ @Test
+ fun testSupportsBufferAge() {
+ assertTrue(EGLExt.parseExtensions("EGL_EXT_buffer_age").contains(EGL_EXT_BUFFER_AGE))
+ }
+
+ @Test
+ fun testSupportBufferAgeFromPartialUpdate() {
+ // Buffer age can be supported from either EGL_EXT_buffer_age or EGL_KHR_partial_update
+ assertTrue(
+ EGLExt.parseExtensions("EGL_KHR_partial_update").contains(EGL_KHR_PARTIAL_UPDATE)
+ )
+ }
+
+ @Test
+ fun testSetDamage() {
+ assertTrue(
+ EGLExt.parseExtensions("EGL_KHR_partial_update")
+ .contains(EGL_KHR_PARTIAL_UPDATE)
+ )
+ }
+
+ @Test
+ fun testSwapBuffersWithDamage() {
+ assertTrue(
+ EGLExt.parseExtensions("EGL_KHR_swap_buffers_with_damage")
+ .contains(EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE)
+ )
+ }
+
+ @Test
+ fun testColorSpace() {
+ assertTrue(
+ EGLExt.parseExtensions("EGL_KHR_gl_colorspace")
+ .contains(EGL_KHR_GL_COLORSPACE)
+ )
+ }
+
+ @Test
+ fun testNoConfigContext() {
+ assertTrue(
+ EGLExt.parseExtensions("EGL_KHR_no_config_context")
+ .contains(EGL_KHR_NO_CONFIG_CONTEXT)
+ )
+ }
+
+ @Test
+ fun testPixelFormatFloat() {
+ assertTrue(
+ EGLExt.parseExtensions("EGL_EXT_pixel_format_float")
+ .contains(EGL_EXT_PIXEL_FORMAT_FLOAT)
+ )
+ }
+
+ @Test
+ fun testScRgb() {
+ assertTrue(
+ EGLExt.parseExtensions("EGL_EXT_gl_colorspace_scrgb")
+ .contains(EGL_EXT_GL_COLORSPACE_SCRGB)
+ )
+ }
+
+ @Test
+ fun testDisplayP3() {
+ assertTrue(
+ EGLExt.parseExtensions("EGL_EXT_gl_colorspace_display_p3_passthrough")
+ .contains(EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH)
+ )
+ }
+
+ @Test
+ fun testHDR() {
+ assertTrue(
+ EGLExt.parseExtensions("EGL_EXT_gl_colorspace_bt2020_pq")
+ .contains(EGL_EXT_GL_COLORSPACE_BT2020_PQ)
+ )
+ }
+
+ @Test
+ fun testContextPriority() {
+ assertTrue(
+ EGLExt.parseExtensions("EGL_IMG_context_priority")
+ .contains(EGL_IMG_CONTEXT_PRIORITY)
+ )
+ }
+
+ @Test
+ fun testSurfacelessContext() {
+ assertTrue(
+ EGLExt.parseExtensions("EGL_KHR_surfaceless_context")
+ .contains(EGL_KHR_SURFACELESS_CONTEXT)
+ )
+ }
+
+ @Test
+ fun testFenceSync() {
+ assertTrue(
+ EGLExt.parseExtensions("EGL_KHR_fence_sync")
+ .contains(EGL_KHR_FENCE_SYNC)
+ )
+ }
+
+ @Test
+ fun testWaitSync() {
+ assertTrue(
+ EGLExt.parseExtensions("EGL_KHR_wait_sync")
+ .contains(EGL_KHR_WAIT_SYNC))
+ }
+
+ @Test
+ fun testNativeFenceSync() {
+ assertTrue(
+ EGLExt.parseExtensions("EGL_ANDROID_native_fence_sync")
+ .contains(EGL_ANDROID_NATIVE_FENCE_SYNC)
+ )
+ }
+
+ @Test
+ fun testExtensionsQueryStringParsing() {
+ val extensionQuery = "EGL_EXT_buffer_age " +
+ "EGL_KHR_partial_update " +
+ "EGL_KHR_swap_buffers_with_damage " +
+ "EGL_KHR_gl_colorspace " +
+ "EGL_KHR_no_config_context " +
+ "EGL_EXT_pixel_format_float " +
+ "EGL_EXT_gl_colorspace_scrgb " +
+ "EGL_EXT_gl_colorspace_display_p3_passthrough " +
+ "EGL_EXT_gl_colorspace_bt2020_pq " +
+ "EGL_IMG_context_priority " +
+ "EGL_KHR_surfaceless_context " +
+ "EGL_KHR_fence_sync " +
+ "EGL_KHR_wait_sync " +
+ "EGL_ANDROID_native_fence_sync "
+ with(EGLExt.parseExtensions(extensionQuery)) {
+ assertTrue(contains(EGL_EXT_BUFFER_AGE))
+ assertTrue(contains(EGL_KHR_PARTIAL_UPDATE))
+ assertTrue(contains(EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE))
+ assertTrue(contains(EGL_KHR_GL_COLORSPACE))
+ assertTrue(contains(EGL_KHR_NO_CONFIG_CONTEXT))
+ assertTrue(contains(EGL_EXT_PIXEL_FORMAT_FLOAT))
+ assertTrue(contains(EGL_EXT_GL_COLORSPACE_SCRGB))
+ assertTrue(contains(EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH))
+ assertTrue(contains(EGL_EXT_GL_COLORSPACE_BT2020_PQ))
+ assertTrue(contains(EGL_IMG_CONTEXT_PRIORITY))
+ assertTrue(contains(EGL_KHR_SURFACELESS_CONTEXT))
+ assertTrue(contains(EGL_KHR_FENCE_SYNC))
+ assertTrue(contains(EGL_KHR_WAIT_SYNC))
+ assertTrue(contains(EGL_ANDROID_NATIVE_FENCE_SYNC))
+ }
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglConfigAttributesTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglConfigAttributesTest.kt
new file mode 100644
index 0000000..5a5ea46
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglConfigAttributesTest.kt
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.opengl.egl
+
+import android.opengl.EGL14
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class EglConfigAttributesTest {
+
+ @Test
+ fun testConfig8888() {
+ with(EglConfigAttributes8888.attrs) {
+ assertTrue(find(EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT))
+ assertTrue(find(EGL14.EGL_RED_SIZE, 8))
+ assertTrue(find(EGL14.EGL_GREEN_SIZE, 8))
+ assertTrue(find(EGL14.EGL_BLUE_SIZE, 8))
+ assertTrue(find(EGL14.EGL_ALPHA_SIZE, 8))
+ assertTrue(find(EGL14.EGL_DEPTH_SIZE, 0))
+ assertTrue(find(EGL14.EGL_CONFIG_CAVEAT, EGL14.EGL_NONE))
+ assertTrue(find(EGL14.EGL_STENCIL_SIZE, 0))
+ assertTrue(find(EGL14.EGL_SURFACE_TYPE, EGL14.EGL_WINDOW_BIT))
+ assertEquals(this[size - 1], EGL14.EGL_NONE)
+ assertEquals(19, size)
+ }
+ }
+
+ @Test
+ fun testConfig1010102() {
+ with(EglConfigAttributes1010102.attrs) {
+ assertTrue(find(EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT))
+ assertTrue(find(EGL14.EGL_RED_SIZE, 10))
+ assertTrue(find(EGL14.EGL_GREEN_SIZE, 10))
+ assertTrue(find(EGL14.EGL_BLUE_SIZE, 10))
+ assertTrue(find(EGL14.EGL_ALPHA_SIZE, 2))
+ assertTrue(find(EGL14.EGL_DEPTH_SIZE, 0))
+ assertTrue(find(EGL14.EGL_STENCIL_SIZE, 0))
+ assertTrue(find(EGL14.EGL_SURFACE_TYPE, EGL14.EGL_WINDOW_BIT))
+ assertEquals(this[size - 1], EGL14.EGL_NONE)
+ assertEquals(17, size)
+ }
+ }
+
+ @Test
+ fun testConfigF16() {
+ with(EglConfigAttributesF16.attrs) {
+ assertTrue(find(EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT))
+ assertTrue(find(EglColorComponentTypeExt, EglColorComponentTypeFloatExt))
+ assertTrue(find(EGL14.EGL_RED_SIZE, 16))
+ assertTrue(find(EGL14.EGL_GREEN_SIZE, 16))
+ assertTrue(find(EGL14.EGL_BLUE_SIZE, 16))
+ assertTrue(find(EGL14.EGL_ALPHA_SIZE, 16))
+ assertTrue(find(EGL14.EGL_DEPTH_SIZE, 0))
+ assertTrue(find(EGL14.EGL_STENCIL_SIZE, 0))
+ assertTrue(find(EGL14.EGL_SURFACE_TYPE, EGL14.EGL_WINDOW_BIT))
+ assertEquals(this[size - 1], EGL14.EGL_NONE)
+ assertEquals(19, size)
+ }
+ }
+
+ @Test
+ fun testInclude() {
+ // Verify that custom config that uses an include initially and overwrites
+ // individual values is handled appropriately even if the config is technically invalid
+ val customConfig = EglConfigAttributes {
+ include(EglConfigAttributes8888)
+ EGL14.EGL_RED_SIZE to 27
+ EglColorComponentTypeExt to EglColorComponentTypeFloatExt
+ EGL14.EGL_STENCIL_SIZE to 32
+ }
+
+ with(customConfig.attrs) {
+ assertTrue(find(EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT))
+ assertTrue(find(EGL14.EGL_RED_SIZE, 27))
+ assertTrue(find(EglColorComponentTypeExt, EglColorComponentTypeFloatExt))
+ assertTrue(find(EGL14.EGL_STENCIL_SIZE, 32))
+ assertEquals(this[size - 1], EGL14.EGL_NONE)
+ assertEquals(21, size)
+ }
+ }
+
+ private fun IntArray.find(key: Int, value: Int): Boolean {
+ // size - 1 to skip trailing EGL_NONE
+ for (i in 0 until this.size - 1 step 2) {
+ if (this[i] == key) {
+ return this[i + 1] == value
+ }
+ }
+ return false
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglManagerTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglManagerTest.kt
new file mode 100644
index 0000000..f64d0bf
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglManagerTest.kt
@@ -0,0 +1,697 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.opengl.egl
+
+import android.graphics.Color
+import android.graphics.PixelFormat
+import android.graphics.SurfaceTexture
+import android.hardware.HardwareBuffer
+import android.hardware.SyncFence
+import android.media.ImageReader
+import android.opengl.EGL14
+import android.opengl.EGLSurface
+import android.opengl.GLES20
+import android.os.Build
+import android.view.Surface
+import androidx.annotation.RequiresApi
+import androidx.opengl.EGLBindings
+import androidx.opengl.EGLExt
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_CONDITION_KHR
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_FENCE_KHR
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_NATIVE_FENCE_ANDROID
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_TYPE_KHR
+import androidx.opengl.EGLExt.Companion.EGL_ANDROID_IMAGE_NATIVE_BUFFER
+import androidx.opengl.EGLExt.Companion.EGL_ANDROID_NATIVE_FENCE_SYNC
+import androidx.opengl.EGLExt.Companion.EGL_KHR_FENCE_SYNC
+import androidx.opengl.EGLExt.Companion.EGL_KHR_IMAGE
+import androidx.opengl.EGLExt.Companion.EGL_KHR_IMAGE_BASE
+import androidx.opengl.EGLExt.Companion.EGL_KHR_SURFACELESS_CONTEXT
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import java.util.concurrent.TimeUnit
+import kotlin.concurrent.thread
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+class EglManagerTest {
+
+ @Test
+ fun testInitializeAndRelease() {
+ testEglManager {
+ initialize()
+ val config = loadConfig(EglConfigAttributes8888)?.also {
+ createContext(it)
+ }
+ if (config == null) {
+ fail("Config 8888 should be supported")
+ }
+ // Even though EGL v 1.5 was introduced in API level 29 not all devices will advertise
+ // support for it. However, all devices should at least support EGL v 1.4
+ assertTrue(
+ "Unexpected EGL version, received $eglVersion",
+ eglVersion == EglVersion.V14 || eglVersion == EglVersion.V15
+ )
+ assertNotNull(eglContext)
+ assertNotNull(eglConfig)
+ }
+ }
+
+ @Test
+ fun testMultipleInitializeCallsIgnored() {
+ testEglManager {
+ initialize()
+ loadConfig(EglConfigAttributes8888)?.also {
+ createContext(it)
+ }
+ val currentContext = eglContext
+ val currentConfig = eglConfig
+ assertNotEquals(EGL14.EGL_NO_CONTEXT, currentContext)
+ // Subsequent calls to initialize should be ignored
+ // and the current EglContext should be the same as the previous call
+ initialize()
+ assertTrue(currentContext === eglContext)
+ assertTrue(currentConfig === eglConfig)
+ }
+ }
+
+ @Test
+ fun testMultipleReleaseCallsIgnored() {
+ testEglManager {
+ initialize()
+ loadConfig(EglConfigAttributes8888)?.also {
+ createContext(it)
+ }
+ // Multiple attempts to release should act as no-ops, i.e. we should not crash
+ // and the corresponding context should be nulled out
+ release()
+ assertEquals(EGL14.EGL_NO_CONTEXT, eglContext)
+
+ release()
+ assertEquals(EGL14.EGL_NO_CONTEXT, eglContext)
+ }
+ }
+
+ @Test
+ fun testDefaultSurface() {
+ testEglManager {
+ initialize()
+
+ assertEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+ assertEquals(currentDrawSurface, EGL14.EGL_NO_SURFACE)
+ assertEquals(currentReadSurface, EGL14.EGL_NO_SURFACE)
+
+ val config = loadConfig(EglConfigAttributes8888)
+
+ if (config == null) {
+ fail("Config 8888 should be supported")
+ }
+
+ createContext(config!!)
+
+ if (isExtensionSupported(EGL_KHR_SURFACELESS_CONTEXT)) {
+ assertEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+ } else {
+ assertNotEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+ }
+
+ assertEquals(currentDrawSurface, defaultSurface)
+ assertEquals(currentReadSurface, defaultSurface)
+
+ release()
+
+ assertEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+ assertEquals(currentDrawSurface, EGL14.EGL_NO_SURFACE)
+ assertEquals(currentReadSurface, EGL14.EGL_NO_SURFACE)
+ }
+ }
+
+ @Test
+ fun testDefaultSurfaceWithoutSurfacelessContext() {
+ // Create a new EGL Spec instance that does not support the
+ // EglKhrSurfacelessContext extension in order to verify
+ // the fallback support of initializing the current surface
+ // to a PBuffer instead of EGL14.EGL_NO_SURFACE
+ val wrappedEglSpec = object : EglSpec by EglSpec.Egl14 {
+ override fun eglQueryString(nameId: Int): String {
+ val queryString = EglSpec.Egl14.eglQueryString(nameId)
+ return if (nameId == EGL14.EGL_EXTENSIONS) {
+ // Parse the space separated string of EGL extensions into a set
+ val set = HashSet<String>().apply {
+ addAll(queryString.split(' '))
+ }
+ // Remove EglKhrSurfacelessContext if it exists
+ // and repack the set into a space separated string
+ set.remove(EGL_KHR_SURFACELESS_CONTEXT)
+ StringBuilder().let {
+ for (entry in set) {
+ it.append(entry)
+ it.append(' ')
+ }
+ it.toString()
+ }
+ } else {
+ queryString
+ }
+ }
+ }
+
+ testEglManager(wrappedEglSpec) {
+ initialize()
+
+ // Verify that the wrapped EGL spec implementation in fact does not
+ // advertise support for EglKhrSurfacelessContext
+ assertFalse(isExtensionSupported(EGL_KHR_SURFACELESS_CONTEXT))
+
+ assertEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+ assertEquals(currentDrawSurface, EGL14.EGL_NO_SURFACE)
+ assertEquals(currentReadSurface, EGL14.EGL_NO_SURFACE)
+
+ val config = loadConfig(EglConfigAttributes8888)
+
+ if (config == null) {
+ fail("Config 8888 should be supported")
+ }
+
+ // Create context at this point should fallback of eglCreatePBufferSurface
+ // instead of EGL_NO_SURFACE as a result of no longer advertising support
+ // for EglKhrSurfacelessContext
+ createContext(config!!)
+
+ assertNotEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+ assertEquals(currentDrawSurface, defaultSurface)
+ assertEquals(currentReadSurface, defaultSurface)
+
+ release()
+
+ assertEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+ assertEquals(currentDrawSurface, EGL14.EGL_NO_SURFACE)
+ assertEquals(currentReadSurface, EGL14.EGL_NO_SURFACE)
+ }
+ }
+
+ @Test
+ fun testCreatePBufferSurface() {
+ testEglManager {
+ initialize()
+
+ assertEquals(defaultSurface, EGL14.EGL_NO_SURFACE)
+ assertEquals(currentDrawSurface, EGL14.EGL_NO_SURFACE)
+ assertEquals(currentReadSurface, EGL14.EGL_NO_SURFACE)
+
+ val config = loadConfig(EglConfigAttributes8888)
+
+ if (config == null) {
+ fail("Config 8888 should be supported")
+ }
+ createContext(config!!)
+
+ val pBuffer = eglSpec.eglCreatePBufferSurface(
+ config,
+ EglConfigAttributes {
+ EGL14.EGL_WIDTH to 1
+ EGL14.EGL_HEIGHT to 1
+ })
+
+ makeCurrent(pBuffer)
+
+ assertNotEquals(EGL14.EGL_NO_SURFACE, currentReadSurface)
+ assertNotEquals(EGL14.EGL_NO_SURFACE, currentDrawSurface)
+ assertNotEquals(EGL14.EGL_NO_SURFACE, pBuffer)
+
+ assertEquals(pBuffer, currentReadSurface)
+ assertEquals(pBuffer, currentDrawSurface)
+
+ eglSpec.eglDestroySurface(pBuffer)
+ release()
+ }
+ }
+
+ @Test
+ fun testCreateWindowSurfaceDefault() {
+ testEglManager {
+ initialize()
+
+ val config = loadConfig(EglConfigAttributes8888)
+ if (config == null) {
+ fail("Config 8888 should be supported")
+ }
+
+ createContext(config!!)
+
+ val surface = Surface(SurfaceTexture(42))
+ // Create a window surface with the default attributes
+ val eglSurface = eglSpec.eglCreateWindowSurface(config, surface, null)
+ assertNotEquals(EGL14.EGL_NO_SURFACE, eglSurface)
+ eglSpec.eglDestroySurface(eglSurface)
+
+ release()
+ }
+ }
+
+ private fun EglSpec.isSingleBufferedSurface(surface: EGLSurface): Boolean {
+ return if (surface == EGL14.EGL_NO_SURFACE) {
+ false
+ } else {
+ val result = IntArray(1)
+ val queryResult = eglQuerySurface(
+ surface, EGL14.EGL_RENDER_BUFFER, result, 0)
+ queryResult && result[0] == EGL14.EGL_SINGLE_BUFFER
+ }
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+ @Test
+ fun testSurfaceContentsWithBackBuffer() {
+ verifySurfaceContentsWithWindowConfig()
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+ @Test
+ fun testSurfaceContentsWithFrontBuffer() {
+ verifySurfaceContentsWithWindowConfig(true)
+ }
+
+ @RequiresApi(api = Build.VERSION_CODES.KITKAT)
+ private fun verifySurfaceContentsWithWindowConfig(
+ singleBuffered: Boolean = false
+ ) {
+ testEglManager {
+ initialize()
+ val config = loadConfig(EglConfigAttributes8888)
+ if (config == null) {
+ fail("Config 8888 should be supported")
+ }
+ createContext(config!!)
+
+ val width = 8
+ val height = 5
+ val targetColor = Color.RED
+ val imageReader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 1)
+ var canRender = false
+
+ thread {
+ canRender = drawSurface(imageReader.surface, targetColor, singleBuffered)
+ }.join()
+
+ try {
+ if (canRender) {
+ val image = imageReader.acquireLatestImage()
+ val plane = image.planes[0]
+ assertEquals(4, plane.pixelStride)
+
+ val pixelStride = plane.pixelStride
+ val rowStride = plane.rowStride
+ val rowPadding = rowStride - pixelStride * width
+ var offset = 0
+ for (y in 0 until height) {
+ for (x in 0 until width) {
+ val red = plane.buffer[offset].toInt() and 0xff
+ val green = plane.buffer[offset + 1].toInt() and 0xff
+ val blue = plane.buffer[offset + 2].toInt() and 0xff
+ val alpha = plane.buffer[offset + 3].toInt() and 0xff
+ val packedColor = Color.argb(alpha, red, green, blue)
+ assertEquals("Index: " + x + ", " + y, targetColor, packedColor)
+ offset += pixelStride
+ }
+ offset += rowPadding
+ }
+ }
+ } finally {
+ imageReader.close()
+ release()
+ }
+ }
+ }
+
+ private fun drawSurface(
+ surface: Surface,
+ color: Int,
+ singleBuffered: Boolean
+ ): Boolean {
+ var canRender = false
+ testEglManager {
+ initialize()
+ val config = loadConfig(EglConfigAttributes8888)
+ if (config == null) {
+ fail("Config 8888 should be supported")
+ }
+ createContext(config!!)
+ val configAttributes = if (singleBuffered) {
+ EglConfigAttributes {
+ EGL14.EGL_RENDER_BUFFER to EGL14.EGL_SINGLE_BUFFER
+ }
+ } else {
+ null
+ }
+ val eglSurface = eglSpec.eglCreateWindowSurface(config, surface, configAttributes)
+ // Skip tests of the device does not support EGL_SINGLE_BUFFER
+ canRender = !singleBuffered || eglSpec.isSingleBufferedSurface(eglSurface)
+ if (canRender) {
+ makeCurrent(eglSurface)
+ assertEquals("Make current failed", EGL14.EGL_SUCCESS, eglSpec.eglGetError())
+ GLES20.glClearColor(
+ Color.red(color) / 255f,
+ Color.green(color) / 255f,
+ Color.blue(color) / 255f,
+ Color.alpha(color) / 255f
+ )
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ swapAndFlushBuffers()
+ assertEquals("Swapbuffers failed", EGL14.EGL_SUCCESS, eglSpec.eglGetError())
+ }
+
+ eglSpec.eglDestroySurface(eglSurface)
+ release()
+ }
+ return canRender
+ }
+
+ @Test
+ fun testEglGetNativeClientBufferANDROIDSupported() {
+ testEglManager {
+ initializeWithDefaultConfig()
+ val khrImageBaseSupported =
+ isExtensionSupported(EGL_KHR_IMAGE_BASE)
+ val androidImageNativeBufferSupported =
+ isExtensionSupported(EGL_ANDROID_IMAGE_NATIVE_BUFFER)
+ // According to EGL spec both these extensions are required in order to support
+ // eglGetNativeClientBufferAndroid
+ if (khrImageBaseSupported && androidImageNativeBufferSupported) {
+ assertTrue(EGLBindings.nSupportsEglGetNativeClientBufferAndroid())
+ }
+ }
+ }
+
+ @Test
+ fun testEglFenceAPIsSupported() {
+ testEglManager {
+ initializeWithDefaultConfig()
+ if (isExtensionSupported(EGL_KHR_IMAGE_BASE)) {
+ assertTrue(EGLBindings.nSupportsEglCreateImageKHR())
+ assertTrue(EGLBindings.nSupportsEglClientWaitSyncKHR())
+ assertTrue(EGLBindings.nSupportsEglGetSyncAttribKHR())
+ assertTrue(EGLBindings.nSupportsEglDestroyImageKHR())
+ }
+ }
+ }
+
+ @Test
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+ fun testEglCreateAndDestroyImageKHR() {
+ testEglManager {
+ initializeWithDefaultConfig()
+ if (isExtensionSupported(EGL_KHR_IMAGE_BASE) && isExtensionSupported(
+ EGL_ANDROID_IMAGE_NATIVE_BUFFER)) {
+ val hardwareBuffer = HardwareBuffer.create(
+ 10,
+ 10,
+ PixelFormat.RGBA_8888,
+ 1,
+ HardwareBuffer.USAGE_GPU_COLOR_OUTPUT
+ )
+ val image = eglSpec.eglCreateImageFromHardwareBuffer(hardwareBuffer)
+ assertNotNull(image)
+ assertTrue(eglSpec.eglDestroyImageKHR(image!!))
+ }
+ }
+ }
+
+ @Test
+ fun testGlImageTargetTexture2DOESSupported() {
+ testEglManager {
+ initializeWithDefaultConfig()
+ // According to EGL spec *EITHER* EGL_KHR_image_base or EGL_KHR_image
+ // indicate that the eglImageTargetTexture2DOES method is supported on this device
+ if (isExtensionSupported(EGL_KHR_IMAGE_BASE) || isExtensionSupported(EGL_KHR_IMAGE)) {
+ assertTrue(EGLBindings.nSupportsGlImageTargetTexture2DOES())
+ }
+ }
+ }
+
+ @Test
+ fun testEglCreateAndDestroySyncKHRSupported() {
+ testEglManager {
+ initializeWithDefaultConfig()
+ if (isExtensionSupported(EGL_KHR_FENCE_SYNC)) {
+ assertTrue(EGLBindings.nSupportsEglCreateSyncKHR())
+ assertTrue(EGLBindings.nSupportsEglDestroySyncKHR())
+ }
+ }
+ }
+
+ /**
+ * Helper method to determine if both EGLSync fences are supported
+ * along with Android platform specific EGLSync fence types
+ */
+ private fun EglManager.supportsNativeAndroidFence(): Boolean =
+ isExtensionSupported(EGL_KHR_FENCE_SYNC) &&
+ isExtensionSupported(EGL_ANDROID_NATIVE_FENCE_SYNC)
+
+ @Test
+ fun testEglCreateAndDestroyAndroidFenceSyncKHR() {
+ testEglManager {
+ initializeWithDefaultConfig()
+ if (supportsNativeAndroidFence()) {
+ val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_NATIVE_FENCE_ANDROID, null)
+ assertNotNull(sync)
+ val syncAttr = IntArray(1)
+ assertTrue(
+ eglSpec.eglGetSyncAttribKHR(sync!!, EGL_SYNC_TYPE_KHR, syncAttr, 0))
+ assertEquals(EGL_SYNC_NATIVE_FENCE_ANDROID, syncAttr[0])
+ assertTrue(eglSpec.eglDestroySyncKHR(sync))
+ }
+ }
+ }
+
+ @Test
+ fun testEglDupNativeFenceFDANDROIDSupported() {
+ testEglManager {
+ initializeWithDefaultConfig()
+ if (supportsNativeAndroidFence()) {
+ assertTrue(EGLBindings.nSupportsDupNativeFenceFDANDROID())
+ }
+ }
+ }
+
+ @Test
+ fun testEglCreateAndDestroyFenceSyncKHR() {
+ testEglManager {
+ initializeWithDefaultConfig()
+ if (isExtensionSupported(EGL_KHR_FENCE_SYNC)) {
+ val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_FENCE_KHR, null)
+ assertNotNull(sync)
+ val syncAttr = IntArray(1)
+ assertTrue(
+ eglSpec.eglGetSyncAttribKHR(sync!!, EGL_SYNC_TYPE_KHR, syncAttr, 0))
+ assertEquals(EGL_SYNC_FENCE_KHR, syncAttr[0])
+ assertTrue(
+ eglSpec.eglGetSyncAttribKHR(
+ sync,
+ EGL_SYNC_CONDITION_KHR,
+ syncAttr,
+ 0
+ )
+ )
+ assertEquals(EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR, syncAttr[0])
+ assertTrue(eglSpec.eglDestroySyncKHR(sync))
+ }
+ }
+ }
+
+ @Test
+ fun testEglGetSyncAttribKHROutOfBounds() {
+ testEglManager {
+ initializeWithDefaultConfig()
+ if (isExtensionSupported(EGL_KHR_FENCE_SYNC)) {
+ val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_FENCE_KHR, null)
+ assertNotNull(sync)
+ val syncAttr = IntArray(1)
+ try {
+ assertFalse(
+ eglSpec.eglGetSyncAttribKHR(
+ sync!!,
+ EGL_SYNC_TYPE_KHR,
+ syncAttr,
+ 1
+ )
+ )
+ fail("Should have thrown for array out of bounds exception")
+ } catch (_: IllegalArgumentException) {
+ // NO-OP
+ }
+
+ if (sync != null) {
+ assertTrue(eglSpec.eglDestroySyncKHR(sync))
+ }
+ }
+ }
+ }
+
+ @Test
+ fun testEglGetSyncAttribKHRNegativeOffset() {
+ testEglManager {
+ initializeWithDefaultConfig()
+ if (isExtensionSupported(EGL_KHR_FENCE_SYNC)) {
+ val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_FENCE_KHR, null)
+ assertNotNull(sync)
+ val syncAttr = IntArray(1)
+ try {
+ assertFalse(
+ eglSpec.eglGetSyncAttribKHR(
+ sync!!,
+ EGL_SYNC_TYPE_KHR,
+ syncAttr,
+ -1
+ )
+ )
+ fail("Should have thrown for negative offset into attributes array")
+ } catch (_: IllegalArgumentException) {
+ // NO-OP
+ }
+
+ if (sync != null) {
+ assertTrue(eglSpec.eglDestroySyncKHR(sync))
+ }
+ }
+ }
+ }
+
+ @Test
+ fun testEglClientWaitSyncKHR() {
+ testEglManager {
+ initializeWithDefaultConfig()
+ if (isExtensionSupported(EGL_KHR_FENCE_SYNC)) {
+ val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_FENCE_KHR, null)
+ assertNotNull(sync)
+
+ assertEquals("eglCreateSync failed", EGL14.EGL_SUCCESS, eglSpec.eglGetError())
+
+ GLES20.glFlush()
+ assertEquals("glFlush failed", GLES20.GL_NO_ERROR, GLES20.glGetError())
+
+ val status = eglSpec.eglClientWaitSyncKHR(
+ sync!!,
+ 0,
+ EGLExt.EGL_FOREVER_KHR
+ )
+ assertEquals("eglClientWaitSync failed",
+ EGLExt.EGL_CONDITION_SATISFIED_KHR, status)
+ assertEquals("eglClientWaitSyncKHR failed", EGL14.EGL_SUCCESS, EGL14.eglGetError())
+ assertTrue(eglSpec.eglDestroySyncKHR(sync))
+ assertEquals("eglDestroySyncKHR failed", EGL14.EGL_SUCCESS, EGL14.eglGetError())
+ }
+ }
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+ @Test
+ fun testEglDupNativeFenceFDANDROID() {
+ testEglManager {
+ initializeWithDefaultConfig()
+ if (supportsNativeAndroidFence()) {
+ val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_NATIVE_FENCE_ANDROID, null)
+ assertNotNull(sync)
+
+ assertEquals("eglCreateSyncFailed", EGL14.EGL_SUCCESS, eglSpec.eglGetError())
+
+ GLES20.glFlush()
+ assertEquals("glFlush failed", GLES20.GL_NO_ERROR, GLES20.glGetError())
+
+ val syncFence = eglSpec.eglDupNativeFenceFDANDROID(sync!!)
+ assertTrue(syncFence.isValid())
+ assertTrue(syncFence.await(TimeUnit.MILLISECONDS.toNanos(3000)))
+
+ assertTrue(eglSpec.eglDestroySyncKHR(sync))
+ assertEquals("eglDestroySyncKHR failed", EGL14.EGL_SUCCESS, EGL14.eglGetError())
+ syncFence.close()
+ assertFalse(syncFence.isValid())
+ }
+ }
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.KITKAT)
+ @Test
+ fun testEglDupNativeFenceFDANDROIDawaitForever() {
+ testEglManager {
+ initializeWithDefaultConfig()
+ if (supportsNativeAndroidFence()) {
+ val sync = eglSpec.eglCreateSyncKHR(EGL_SYNC_NATIVE_FENCE_ANDROID, null)
+ assertNotNull(sync)
+
+ assertEquals("eglCreateSync failed", EGL14.EGL_SUCCESS, eglSpec.eglGetError())
+
+ GLES20.glFlush()
+ assertEquals("glFlush failed", GLES20.GL_NO_ERROR, GLES20.glGetError())
+
+ val syncFence = eglSpec.eglDupNativeFenceFDANDROID(sync!!)
+ assertTrue(syncFence.isValid())
+ assertNotEquals(SyncFence.SIGNAL_TIME_INVALID, syncFence.getSignalTime())
+ assertTrue(syncFence.awaitForever())
+
+ assertTrue(eglSpec.eglDestroySyncKHR(sync))
+ assertEquals("eglDestroySyncKHR failed", EGL14.EGL_SUCCESS, EGL14.eglGetError())
+ syncFence.close()
+ assertFalse(syncFence.isValid())
+ assertEquals(SyncFence.SIGNAL_TIME_INVALID, syncFence.getSignalTime())
+ }
+ }
+ }
+
+ @Test
+ fun testSignedForeverConstantMatchesNDK() {
+ assertTrue(EGLBindings.nEqualToNativeForeverTimeout(EGLExt.EGL_FOREVER_KHR))
+ }
+
+ // Helper method used in testing to initialize EGL and default
+ // EGLConfig to the ARGB8888 configuration
+ private fun EglManager.initializeWithDefaultConfig() {
+ initialize()
+ val config = loadConfig(EglConfigAttributes8888)
+ if (config == null) {
+ fail("Config 8888 should be supported")
+ }
+ createContext(config!!)
+ }
+
+ /**
+ * Helper method to ensure EglManager has the corresponding release calls
+ * made to it and verifies that no exceptions were thrown as part of the test.
+ */
+ private fun testEglManager(
+ eglSpec: EglSpec = EglSpec.Egl14,
+ block: EglManager.() -> Unit = {}
+ ) {
+ with(EglManager(eglSpec)) {
+ assertEquals(EglVersion.Unknown, eglVersion)
+ assertEquals(EGL14.EGL_NO_CONTEXT, eglContext)
+ block()
+ release()
+ assertEquals(EglVersion.Unknown, eglVersion)
+ assertEquals(EGL14.EGL_NO_CONTEXT, eglContext)
+ }
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglTestActivity.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglTestActivity.kt
new file mode 100644
index 0000000..35c4355
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglTestActivity.kt
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.opengl.egl
+
+import android.animation.ValueAnimator
+import android.app.Activity
+import android.opengl.EGL14
+import android.opengl.EGLConfig
+import android.opengl.EGLSurface
+import android.opengl.GLES20
+import android.os.Bundle
+import android.view.Surface
+import android.view.SurfaceView
+import android.view.TextureView
+import android.widget.LinearLayout
+import androidx.graphics.opengl.GLRenderer
+import androidx.graphics.opengl.GLRenderer.RenderTarget
+import java.util.concurrent.atomic.AtomicInteger
+
+const val TAG: String = "EGLTestActivity"
+
+class EglTestActivity : Activity() {
+
+ private val mGLRenderer = GLRenderer()
+ private val mParam = AtomicInteger()
+ private val mRenderer1 = object : GLRenderer.RenderCallback {
+ override fun onSurfaceCreated(
+ spec: EglSpec,
+ config: EGLConfig,
+ surface: Surface,
+ width: Int,
+ height: Int
+ ): EGLSurface {
+ val attrs = EglConfigAttributes {
+ EGL14.EGL_RENDER_BUFFER to EGL14.EGL_SINGLE_BUFFER
+ }
+ return spec.eglCreateWindowSurface(config, surface, attrs)
+ }
+
+ override fun onDrawFrame(eglManager: EglManager) {
+ val red = mParam.toFloat() / 100f
+ GLES20.glClearColor(red, 0.0f, 0.0f, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+ }
+
+ private val mRenderer2 = object : GLRenderer.RenderCallback {
+ override fun onDrawFrame(eglManager: EglManager) {
+ val blue = mParam.toFloat() / 100f
+ GLES20.glClearColor(0.0f, 0.0f, blue, 1.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ }
+ }
+
+ private lateinit var mSurfaceView: SurfaceView
+ private lateinit var mTextureView: TextureView
+ private lateinit var mRenderTarget1: RenderTarget
+ private lateinit var mRenderTarget2: RenderTarget
+
+ private var mAnimator: ValueAnimator? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ mGLRenderer.start()
+
+ mAnimator = ValueAnimator.ofFloat(0.0f, 1.0f).apply {
+ duration = 3000
+ repeatCount = ValueAnimator.INFINITE
+ repeatMode = ValueAnimator.REVERSE
+ addUpdateListener {
+ mParam.set(((it.animatedValue as Float) * 100).toInt())
+ mRenderTarget1.requestRender()
+ mRenderTarget2.requestRender()
+ }
+ start()
+ }
+
+ val container = LinearLayout(this).apply {
+ orientation = LinearLayout.VERTICAL
+ weightSum = 2f
+ }
+ mSurfaceView = SurfaceView(this)
+ mTextureView = TextureView(this)
+
+ val params = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0).apply {
+ weight = 1f
+ }
+
+ mRenderTarget1 = mGLRenderer.attach(mSurfaceView, mRenderer1)
+ mRenderTarget2 = mGLRenderer.attach(mTextureView, mRenderer2)
+
+ container.addView(mSurfaceView, params)
+ container.addView(mTextureView, params)
+
+ setContentView(container)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ if (!mRenderTarget1.isAttached()) {
+ mRenderTarget1 = mGLRenderer.attach(mSurfaceView, mRenderer1)
+ }
+
+ if (!mRenderTarget2.isAttached()) {
+ mRenderTarget2 = mGLRenderer.attach(mTextureView, mRenderer2)
+ }
+ }
+
+ override fun onPause() {
+ super.onPause()
+ mRenderTarget1.detach(true)
+ mRenderTarget2.detach(true)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ mAnimator?.cancel()
+ mGLRenderer.stop(true)
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglTestUtils.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglTestUtils.kt
new file mode 100644
index 0000000..90fd93f
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglTestUtils.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.opengl.egl
+
+import androidx.opengl.EGLExt
+
+/**
+ * Helper method to determine if the Android device supports creation of native file descriptors
+ * from EGLSync objects
+ */
+fun deviceSupportsNativeAndroidFence(): Boolean {
+ val eglManager = EglManager().apply { initialize() }
+ val supportsAndroidFence = eglManager.supportsNativeAndroidFence()
+ eglManager.release()
+ return supportsAndroidFence
+}
+
+/**
+ * Queries the corresponding EGL fence extensions from an initialized [EglManager] instance
+ */
+fun EglManager.supportsNativeAndroidFence(): Boolean =
+ isExtensionSupported(EGLExt.EGL_KHR_FENCE_SYNC) &&
+ isExtensionSupported(EGLExt.EGL_ANDROID_NATIVE_FENCE_SYNC)
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglVersionTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglVersionTest.kt
new file mode 100644
index 0000000..87e2208
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/opengl/egl/EglVersionTest.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.opengl.egl
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class EglVersionTest {
+
+ @Test
+ fun testDestructuringComponents() {
+ val (major, minor) = EglVersion(8, 3)
+ assertEquals(8, major)
+ assertEquals(3, minor)
+ }
+
+ @Test
+ fun testEquals() {
+ assertEquals(EglVersion(2, 9), EglVersion(2, 9))
+ }
+
+ @Test
+ fun testToString() {
+ assertEquals("EGL version 5.9", EglVersion(5, 9).toString())
+ }
+
+ @Test
+ fun testHashCode() {
+ val hashCode = 31 * 8 + 4
+ assertEquals(hashCode, EglVersion(8, 4).hashCode())
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt
new file mode 100644
index 0000000..254fed8
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlCompatTest.kt
@@ -0,0 +1,999 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.surface
+
+import android.graphics.Color
+import android.graphics.ColorSpace
+import android.graphics.Region
+import android.os.Build
+import android.os.SystemClock
+import android.view.SurfaceHolder
+import androidx.hardware.SyncFenceCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.core.app.ActivityScenario
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.Executor
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+@SdkSuppress(minSdkVersion = 29)
+class SurfaceControlCompatTest {
+ var executor: Executor? = null
+
+ @Before
+ fun setup() {
+ executor = Executors.newSingleThreadExecutor(Executors.defaultThreadFactory())
+ }
+
+ private abstract class SurfaceHolderCallback : SurfaceHolder.Callback {
+ override fun surfaceChanged(p0: SurfaceHolder, p1: Int, p2: Int, p3: Int) {
+ }
+
+ override fun surfaceDestroyed(p0: SurfaceHolder) {
+ }
+ }
+
+ @Test
+ fun testSurfaceControlCompatBuilder_parent() {
+ val callbackLatch = CountDownLatch(1)
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(Lifecycle.State.CREATED)
+
+ try {
+ scenario.onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ SurfaceControlCompat.Builder()
+ .setParent(it.mSurfaceView)
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ callbackLatch.countDown()
+ }
+ }
+
+ it.addSurface(it.getSurfaceView(), callback)
+ }
+ scenario.moveToState(Lifecycle.State.RESUMED)
+ assertTrue(callbackLatch.await(3000, TimeUnit.MILLISECONDS))
+ } catch (e: java.lang.IllegalArgumentException) {
+ fail()
+ } finally {
+ // ensure activity is destroyed after any failures
+ scenario.moveToState(Lifecycle.State.DESTROYED)
+ }
+ }
+
+ @Test
+ fun testSurfaceTransactionCreate() {
+ try {
+ SurfaceControlCompat.Transaction()
+ } catch (e: java.lang.IllegalArgumentException) {
+ fail()
+ }
+ }
+
+ class TransactionOnCompleteListener : SurfaceControlCompat.TransactionCompletedListener {
+ var mCallbackTime = -1L
+ var mLatch = CountDownLatch(1)
+
+ override fun onTransactionCompleted() {
+ mCallbackTime = SystemClock.elapsedRealtime()
+ mLatch.countDown()
+ }
+ }
+
+ class TransactionOnCommitListener : SurfaceControlCompat.TransactionCommittedListener {
+ var mCallbackTime = -1L
+ var mLatch = CountDownLatch(1)
+
+ override fun onTransactionCommitted() {
+ mCallbackTime = SystemClock.elapsedRealtime()
+ mLatch.countDown()
+ }
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+ @Test
+ fun testSurfaceTransactionOnCommitCallback() {
+ val listener = TransactionOnCommitListener()
+
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(Lifecycle.State.CREATED)
+
+ try {
+ scenario.onActivity {
+ SurfaceControlCompat.Transaction()
+ .addTransactionCommittedListener(executor!!, listener)
+ .commit()
+ }
+ scenario.moveToState(Lifecycle.State.RESUMED)
+
+ listener.mLatch.await(3, TimeUnit.SECONDS)
+ assertEquals(0, listener.mLatch.count)
+ assertTrue(listener.mCallbackTime > 0)
+ } finally {
+ // ensure activity is destroyed after any failures
+ scenario.moveToState(Lifecycle.State.DESTROYED)
+ }
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+ @Test
+ fun testSurfaceTransactionOnCommitCallback_multiple() {
+ val listener = TransactionOnCommitListener()
+ val listener2 = TransactionOnCommitListener()
+
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(Lifecycle.State.CREATED)
+
+ try {
+ scenario.onActivity {
+ SurfaceControlCompat.Transaction()
+ .addTransactionCommittedListener(executor!!, listener)
+ .addTransactionCommittedListener(executor!!, listener2)
+ .commit()
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED)
+
+ listener.mLatch.await(3, TimeUnit.SECONDS)
+ listener2.mLatch.await(3, TimeUnit.SECONDS)
+
+ assertEquals(0, listener.mLatch.count)
+ assertEquals(0, listener2.mLatch.count)
+
+ assertTrue(listener.mCallbackTime > 0)
+ assertTrue(listener2.mCallbackTime > 0)
+ } finally {
+ // ensure activity is destroyed after any failures
+ scenario.moveToState(Lifecycle.State.DESTROYED)
+ }
+ }
+
+ @Test
+ fun testTransactionIsValid_valid() {
+ val callbackLatch = CountDownLatch(1)
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(Lifecycle.State.CREATED)
+ try {
+ scenario.onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat.Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ assertTrue(scCompat.isValid())
+ callbackLatch.countDown()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED)
+ assertTrue(callbackLatch.await(3000, TimeUnit.MILLISECONDS))
+ } catch (e: java.lang.IllegalArgumentException) {
+ fail()
+ } finally {
+ // ensure activity is destroyed after any failures
+ scenario.moveToState(Lifecycle.State.DESTROYED)
+ }
+ }
+
+ @Test
+ fun testTransactionIsValid_validNotValid() {
+ val callbackLatch = CountDownLatch(1)
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(Lifecycle.State.CREATED)
+ try {
+ scenario.onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat.Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ assertTrue(scCompat.isValid())
+ scCompat.release()
+ assertFalse(scCompat.isValid())
+
+ callbackLatch.countDown()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED)
+ assertTrue(callbackLatch.await(3000, TimeUnit.MILLISECONDS))
+ } catch (e: java.lang.IllegalArgumentException) {
+ fail()
+ } finally {
+ // ensure activity is destroyed after any failures
+ scenario.moveToState(Lifecycle.State.DESTROYED)
+ }
+ }
+
+ @Test
+ fun testTransactionReparent_null() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer =
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ assertNotNull(buffer)
+
+ SurfaceControlCompat.Transaction()
+ .setBuffer(scCompat, buffer)
+ .setVisibility(scCompat, true)
+ .reparent(scCompat, null)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.BLACK == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionReparent_childOfSibling() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+ val scCompat2 = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer =
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ assertNotNull(buffer)
+
+ val buffer2 =
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.GREEN
+ )
+ assertNotNull(buffer2)
+
+ SurfaceControlCompat.Transaction()
+ .setBuffer(scCompat, buffer)
+ .setBuffer(scCompat2, buffer2)
+ .setVisibility(scCompat, true)
+ .setVisibility(scCompat2, true)
+ .reparent(scCompat, scCompat2)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testExtractSyncFenceFd() {
+ val fileDescriptor = 7
+ val syncFence = SyncFenceCompat(7)
+ assertEquals(fileDescriptor, JniBindings.nExtractFenceFd(syncFence))
+ }
+
+ @Test
+ fun testTransactionSetBuffer_nullCallback() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer =
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ assertNotNull(buffer)
+
+ SurfaceControlCompat.Transaction()
+ .setBuffer(scCompat, buffer)
+ .setVisibility(
+ scCompat,
+ true
+ ).commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetVisibility_show() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer =
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ assertNotNull(buffer)
+
+ SurfaceControlCompat.Transaction()
+ .setBuffer(scCompat, buffer)
+ .setVisibility(
+ scCompat,
+ true
+ ).commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetVisibility_hide() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer =
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ assertNotNull(buffer)
+
+ SurfaceControlCompat.Transaction()
+ .setBuffer(scCompat, buffer)
+ .setVisibility(
+ scCompat,
+ false
+ ).commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.BLACK == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetLayer_zero() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat1 = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+ val scCompat2 = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ SurfaceControlCompat.Transaction()
+ .setLayer(scCompat1, 1)
+ .setBuffer(
+ scCompat1,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ )
+ .setVisibility(scCompat1, true)
+ .setLayer(scCompat2, 0)
+ .setBuffer(
+ scCompat2,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.GREEN
+ )
+ )
+ .setVisibility(scCompat2, true)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetLayer_positive() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat1 = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+ val scCompat2 = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ SurfaceControlCompat.Transaction()
+ .setLayer(scCompat1, 1)
+ .setBuffer(
+ scCompat1,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.GREEN
+ )
+ )
+ .setVisibility(scCompat1, true)
+ .setLayer(scCompat2, 24)
+ .setBuffer(
+ scCompat2,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ )
+ .setVisibility(scCompat2, true)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetLayer_negative() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat1 = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+ val scCompat2 = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ SurfaceControlCompat.Transaction()
+ .setLayer(scCompat1, 1)
+ .setBuffer(
+ scCompat1,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ )
+ .setVisibility(scCompat1, true)
+ .setLayer(scCompat2, -7)
+ .setBuffer(
+ scCompat2,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.GREEN
+ )
+ )
+ .setVisibility(scCompat2, true)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetDamageRegion_all() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ SurfaceControlCompat.Transaction()
+ .setDamageRegion(
+ scCompat,
+ Region(0, 0, it.DEFAULT_WIDTH, it.DEFAULT_HEIGHT)
+ )
+ .setBuffer(
+ scCompat,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ )
+ .setVisibility(scCompat, true)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetDamageRegion_null() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ SurfaceControlCompat.Transaction()
+ .setDamageRegion(
+ scCompat,
+ null
+ )
+ .setBuffer(
+ scCompat,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ )
+ .setVisibility(scCompat, true)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetBufferTransparency_opaque() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer = SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+
+ SurfaceControlCompat.Transaction()
+ .setBuffer(scCompat, buffer)
+ .setVisibility(scCompat, true)
+ .setOpaque(
+ scCompat,
+ true
+ )
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetAlpha_0_0() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer = SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ SurfaceControlCompat.Transaction()
+ .setBuffer(scCompat, buffer)
+ .setOpaque(
+ scCompat,
+ false
+ )
+ .setAlpha(scCompat, 0.0f)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.BLACK == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetAlpha_0_5() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer = SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ SurfaceControlCompat.Transaction()
+ .setBuffer(scCompat, buffer)
+ .setVisibility(scCompat, true)
+ .setAlpha(scCompat, 0.5f)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+
+ val fConnector: ColorSpace.Connector = ColorSpace.connect(
+ ColorSpace.get(ColorSpace.Named.SRGB),
+ bitmap.colorSpace!!
+ )
+
+ val red = fConnector.transform(1.0f, 0.0f, 0.0f)
+ val black = fConnector.transform(0.0f, 0.0f, 0.0f)
+ val expectedResult = Color.valueOf(red[0], red[1], red[2], 0.5f)
+ .compositeOver(Color.valueOf(black[0], black[1], black[2], 1.0f))
+
+ (Math.abs(
+ expectedResult.red() - bitmap.getColor(coord[0], coord[1]).red()
+ ) < 2.5e-3f) &&
+ (Math.abs(
+ expectedResult.green() - bitmap.getColor(coord[0], coord[1]).green()
+ ) < 2.5e-3f) &&
+ (Math.abs(
+ expectedResult.blue() - bitmap.getColor(coord[0], coord[1]).blue()
+ ) < 2.5e-3f)
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetAlpha_1_0() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer = SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ SurfaceControlCompat.Transaction()
+ .setBuffer(scCompat, buffer)
+ .setVisibility(scCompat, true)
+ .setAlpha(scCompat, 1.0f)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.TIRAMISU)
+ @Test
+ fun testSurfaceTransactionCommitOnDraw() {
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlCompat
+ .Builder()
+ .setParent(it.getSurfaceView())
+ .setName("SurfaceControlCompatTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer = SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+
+ SurfaceControlCompat.Transaction()
+ .setBuffer(scCompat, buffer)
+ .setVisibility(scCompat, true)
+ .setAlpha(scCompat, 1.0f)
+ .commitTransactionOnDraw(it.mSurfaceView.rootSurfaceControl!!)
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ fun Color.compositeOver(background: Color): Color {
+ val fg = this.convert(background.colorSpace)
+
+ val bgA = background.alpha()
+ val fgA = fg.alpha()
+ val a = fgA + (bgA * (1f - fgA))
+
+ val r = compositeComponent(fg.red(), background.red(), fgA, bgA, a)
+ val g = compositeComponent(fg.green(), background.green(), fgA, bgA, a)
+ val b = compositeComponent(fg.blue(), background.blue(), fgA, bgA, a)
+
+ return Color.valueOf(r, g, b, a, background.colorSpace)
+ }
+
+ @Suppress("NOTHING_TO_INLINE")
+ private inline fun compositeComponent(
+ fgC: Float,
+ bgC: Float,
+ fgA: Float,
+ bgA: Float,
+ a: Float
+ ) = if (a == 0f) 0f else ((fgC * fgA) + ((bgC * bgA) * (1f - fgA))) / a
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlUtils.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlUtils.kt
new file mode 100644
index 0000000..fd29ac8
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlUtils.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.surface
+
+import android.app.Instrumentation
+import android.graphics.Bitmap
+import android.hardware.HardwareBuffer
+import android.os.SystemClock
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import org.junit.Assert
+
+@SdkSuppress(minSdkVersion = 29)
+internal class SurfaceControlUtils {
+ companion object {
+ fun validateOutput(block: (bitmap: Bitmap) -> Boolean) {
+ var sleepDurationMillis = 1000L
+ var success = false
+ for (i in 0..3) {
+ val bitmap = getScreenshot(InstrumentationRegistry.getInstrumentation())
+ success = block(bitmap)
+ if (!success) {
+ SystemClock.sleep(sleepDurationMillis)
+ sleepDurationMillis *= 2
+ } else {
+ break
+ }
+ }
+ Assert.assertTrue(success)
+ }
+
+ fun getScreenshot(instrumentation: Instrumentation): Bitmap {
+ val uiAutomation = instrumentation.uiAutomation
+ val screenshot = uiAutomation.takeScreenshot()
+ return screenshot
+ }
+
+ fun getSolidBuffer(width: Int, height: Int, color: Int): HardwareBuffer {
+ return nGetSolidBuffer(width, height, color)
+ }
+
+ private external fun nGetSolidBuffer(width: Int, height: Int, color: Int): HardwareBuffer
+
+ init {
+ System.loadLibrary("sc-compat-test")
+ }
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTest.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTest.kt
new file mode 100644
index 0000000..a4dd57e
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTest.kt
@@ -0,0 +1,1033 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.surface
+
+import android.graphics.Color
+import android.graphics.ColorSpace
+import android.graphics.Region
+import android.os.Build
+import android.os.SystemClock
+import android.view.Surface
+import android.view.SurfaceControl
+import android.view.SurfaceHolder
+import androidx.hardware.SyncFenceCompat
+import androidx.lifecycle.Lifecycle
+import androidx.test.core.app.ActivityScenario
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.Executor
+import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Before
+import org.junit.Ignore
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+@SmallTest
+@SdkSuppress(minSdkVersion = 29)
+class SurfaceControlWrapperTest {
+ var executor: Executor? = null
+
+ @Before
+ fun setup() {
+ executor = Executors.newSingleThreadExecutor(Executors.defaultThreadFactory())
+ }
+
+ private abstract class SurfaceHolderCallback : SurfaceHolder.Callback {
+ override fun surfaceChanged(p0: SurfaceHolder, p1: Int, p2: Int, p3: Int) {
+ }
+
+ override fun surfaceDestroyed(p0: SurfaceHolder) {
+ }
+ }
+
+ @Test
+ fun testCreateFromWindow() {
+ var surfaceControl = SurfaceControl.Builder()
+ .setName("SurfaceControlCompact_createFromWindow")
+ .build()
+ try {
+ SurfaceControlWrapper.Builder()
+ .setParent(Surface(surfaceControl))
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+ } catch (e: IllegalArgumentException) {
+ fail()
+ }
+ }
+
+ @Test
+ fun testSurfaceControlWrapperBuilder_surfaceParent() {
+ val surfaceControl = SurfaceControl.Builder()
+ .setName("SurfaceControlCompact_createFromWindow")
+ .build()
+ try {
+ SurfaceControlWrapper.Builder()
+ .setParent(Surface(surfaceControl))
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+ } catch (e: IllegalArgumentException) {
+ fail()
+ }
+ }
+
+ @Ignore("b/237850882")
+ @Test
+ fun testSurfaceTransactionCreate() {
+ try {
+ SurfaceControlWrapper.Transaction()
+ } catch (e: java.lang.IllegalArgumentException) {
+ fail()
+ }
+ }
+
+ class TransactionOnCompleteListener : SurfaceControlCompat.TransactionCompletedListener {
+ var mCallbackTime = -1L
+ var mLatch = CountDownLatch(1)
+
+ override fun onTransactionCompleted() {
+ mCallbackTime = SystemClock.elapsedRealtime()
+ mLatch.countDown()
+ }
+ }
+
+ class TransactionOnCommitListener : SurfaceControlCompat.TransactionCommittedListener {
+ var mCallbackTime = -1L
+ var mLatch = CountDownLatch(1)
+
+ override fun onTransactionCommitted() {
+ mCallbackTime = SystemClock.elapsedRealtime()
+ mLatch.countDown()
+ }
+ }
+
+ @Test
+ fun testSurfaceTransactionOnCompleteCallback() {
+ val listener = TransactionOnCompleteListener()
+
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(Lifecycle.State.CREATED)
+
+ try {
+ scenario.onActivity {
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .commit()
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED)
+
+ listener.mLatch.await(3, TimeUnit.SECONDS)
+ assertEquals(0, listener.mLatch.count)
+ assertTrue(listener.mCallbackTime > 0)
+ } finally {
+ // ensure activity is destroyed after any failures
+ scenario.moveToState(Lifecycle.State.DESTROYED)
+ }
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+ @Test
+ fun testSurfaceTransactionOnCommitCallback() {
+ val listener = TransactionOnCommitListener()
+
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(Lifecycle.State.CREATED)
+
+ try {
+ scenario.onActivity {
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCommittedListener(executor!!, listener)
+ .commit()
+ }
+ scenario.moveToState(Lifecycle.State.RESUMED)
+
+ listener.mLatch.await(3, TimeUnit.SECONDS)
+ assertEquals(0, listener.mLatch.count)
+ assertTrue(listener.mCallbackTime > 0)
+ } finally {
+ // ensure activity is destroyed after any failures
+ scenario.moveToState(Lifecycle.State.DESTROYED)
+ }
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+ @Test
+ fun testSurfaceTransactionOnCommitCallback_multiple() {
+ val listener = TransactionOnCommitListener()
+ val listener2 = TransactionOnCommitListener()
+
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(Lifecycle.State.CREATED)
+
+ try {
+ scenario.onActivity {
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCommittedListener(executor!!, listener)
+ .addTransactionCommittedListener(executor!!, listener2)
+ .commit()
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED)
+
+ listener.mLatch.await(3, TimeUnit.SECONDS)
+ listener2.mLatch.await(3, TimeUnit.SECONDS)
+
+ assertEquals(0, listener.mLatch.count)
+ assertEquals(0, listener2.mLatch.count)
+
+ assertTrue(listener.mCallbackTime > 0)
+ assertTrue(listener2.mCallbackTime > 0)
+ } finally {
+ // ensure activity is destroyed after any failures
+ scenario.moveToState(Lifecycle.State.DESTROYED)
+ }
+ }
+
+ @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
+ @Test
+ fun testSurfaceTransactionOnCommitCallbackAndOnCompleteCallback() {
+ val listener1 = TransactionOnCommitListener()
+ val listener2 = TransactionOnCompleteListener()
+
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(Lifecycle.State.CREATED)
+
+ try {
+ scenario.onActivity {
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCommittedListener(executor!!, listener1)
+ .addTransactionCompletedListener(executor!!, listener2)
+ .commit()
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED)
+
+ listener1.mLatch.await(3, TimeUnit.SECONDS)
+ listener2.mLatch.await(3, TimeUnit.SECONDS)
+
+ assertEquals(0, listener1.mLatch.count)
+ assertEquals(0, listener2.mLatch.count)
+ assertTrue(listener1.mCallbackTime > 0)
+ assertTrue(listener2.mCallbackTime > 0)
+ } finally {
+ // ensure activity is destroyed after any failures
+ scenario.moveToState(Lifecycle.State.DESTROYED)
+ }
+ }
+
+ @Ignore("b/237850882")
+ @Test
+ fun testTransactionIsValid_valid() {
+ var surfaceControl = SurfaceControl.Builder()
+ .setName("SurfaceControlCompact_createFromWindow")
+ .build()
+ var scCompat: SurfaceControlWrapper? = null
+ try {
+ scCompat = SurfaceControlWrapper.Builder()
+ .setParent(Surface(surfaceControl))
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+ } catch (e: IllegalArgumentException) {
+ fail()
+ }
+
+ assertTrue(scCompat!!.isValid())
+ }
+
+ @Test
+ fun testTransactionIsValid_validNotValid() {
+ var surfaceControl = SurfaceControl.Builder()
+ .setName("SurfaceControlCompact_createFromWindow")
+ .build()
+ var scCompat: SurfaceControlWrapper? = null
+
+ try {
+ scCompat = SurfaceControlWrapper.Builder()
+ .setParent(Surface(surfaceControl))
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+ } catch (e: IllegalArgumentException) {
+ fail()
+ }
+
+ assertTrue(scCompat!!.isValid())
+ scCompat.release()
+ assertFalse(scCompat.isValid())
+ }
+
+ @Ignore("b/237850882")
+ @Test
+ fun testTransactionReparent_null() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer =
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ assertNotNull(buffer)
+
+ SurfaceControlWrapper.Transaction()
+ .setBuffer(scCompat, buffer)
+ .reparent(scCompat, null)
+ .commit()
+
+ // Trying to set a callback with a transaction of a null reparent doesn't
+ // get called, so lets set a listener for a 2nd transaction instead. This
+ // should be placed in the queue where this will be executed after the
+ // reparent transaction
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assertTrue(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.BLACK == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Ignore("b/237850882")
+ @Test
+ fun testTransactionReparent_childOfSibling() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+ val scCompat2 = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapper")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer =
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ assertNotNull(buffer)
+
+ val buffer2 =
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.GREEN
+ )
+ assertNotNull(buffer2)
+
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .setBuffer(scCompat, buffer)
+ .setBuffer(scCompat2, buffer2)
+ .reparent(scCompat, scCompat2)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assertTrue(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Ignore("b/237850882")
+ @Test
+ fun testExtractSyncFenceFd() {
+ val fileDescriptor = 7
+ val syncFence = SyncFenceCompat(7)
+ assertEquals(fileDescriptor, JniBindings.nExtractFenceFd(syncFence))
+ }
+
+ @Test
+ fun testTransactionSetVisibility_show() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer =
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ assertNotNull(buffer)
+
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .setBuffer(scCompat, buffer)
+ .setVisibility(
+ scCompat,
+ true
+ ).commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assertTrue(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Ignore("b/237850882")
+ @Test
+ fun testTransactionSetVisibility_hide() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer =
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ assertNotNull(buffer)
+
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .setBuffer(scCompat, buffer)
+ .setVisibility(
+ scCompat,
+ false
+ ).commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assertTrue(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.BLACK == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetLayer_zero() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat1 = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+ val scCompat2 = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .setLayer(scCompat1, 1)
+ .setBuffer(
+ scCompat1,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ )
+ .setLayer(scCompat2, 0)
+ .setBuffer(
+ scCompat2,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.GREEN
+ )
+ )
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Ignore("b/237850882")
+ @Test
+ fun testTransactionSetLayer_positive() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat1 = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+ val scCompat2 = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .setLayer(scCompat1, 1)
+ .setBuffer(
+ scCompat1,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.GREEN
+ )
+ )
+ .setLayer(scCompat2, 24)
+ .setBuffer(
+ scCompat2,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ )
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Ignore("b/237850882")
+ @Test
+ fun testTransactionSetLayer_negative() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat1 = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+ val scCompat2 = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .setLayer(scCompat1, 1)
+ .setBuffer(
+ scCompat1,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ )
+ .setLayer(scCompat2, -7)
+ .setBuffer(
+ scCompat2,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.GREEN
+ )
+ )
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Ignore("b/237850882")
+ @Test
+ fun testTransactionSetDamageRegion_all() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .setDamageRegion(
+ scCompat,
+ Region(0, 0, it.DEFAULT_WIDTH, it.DEFAULT_HEIGHT)
+ )
+ .setBuffer(
+ scCompat,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ )
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Ignore("b/237850882")
+ @Test
+ fun testTransactionSetDamageRegion_null() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .setDamageRegion(
+ scCompat,
+ null
+ )
+ .setBuffer(
+ scCompat,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ )
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Ignore("b/237850882")
+ @Test
+ fun testTransactionSetDesiredPresentTime_now() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .setBuffer(
+ scCompat,
+ SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ )
+ .setDesiredPresentTime(0)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetBufferTransparency_opaque() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer = SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .setBuffer(scCompat, buffer)
+ .setOpaque(
+ scCompat,
+ true
+ )
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Test
+ fun testTransactionSetAlpha_0_0() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer = SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .setBuffer(scCompat, buffer)
+ .setOpaque(
+ scCompat,
+ false
+ )
+ .setAlpha(scCompat, 0.0f)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.BLACK == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ @Ignore("b/237850882")
+ @Test
+ fun testTransactionSetAlpha_0_5() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer = SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .setBuffer(scCompat, buffer)
+ .setAlpha(scCompat, 0.5f)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+
+ val fConnector: ColorSpace.Connector = ColorSpace.connect(
+ ColorSpace.get(ColorSpace.Named.SRGB),
+ bitmap.colorSpace!!
+ )
+
+ val red = fConnector.transform(1.0f, 0.0f, 0.0f)
+ val black = fConnector.transform(0.0f, 0.0f, 0.0f)
+ val expectedResult = Color.valueOf(red[0], red[1], red[2], 0.5f)
+ .compositeOver(Color.valueOf(black[0], black[1], black[2], 1.0f))
+
+ (Math.abs(
+ expectedResult.red() - bitmap.getColor(coord[0], coord[1]).red()
+ ) < 2.5e-3f) &&
+ (Math.abs(
+ expectedResult.green() - bitmap.getColor(coord[0], coord[1]).green()
+ ) < 2.5e-3f) &&
+ (Math.abs(
+ expectedResult.blue() - bitmap.getColor(coord[0], coord[1]).blue()
+ ) < 2.5e-3f)
+ }
+ }
+ }
+
+ @Ignore("b/237850882")
+ @Test
+ fun testTransactionSetAlpha_1_0() {
+ val listener = TransactionOnCompleteListener()
+ val scenario = ActivityScenario.launch(SurfaceControlWrapperTestActivity::class.java)
+ .moveToState(
+ Lifecycle.State.CREATED
+ ).onActivity {
+ val callback = object : SurfaceHolderCallback() {
+ override fun surfaceCreated(sh: SurfaceHolder) {
+ val scCompat = SurfaceControlWrapper
+ .Builder()
+ .setParent(it.getSurfaceView().holder.surface)
+ .setDebugName("SurfaceControlWrapperTest")
+ .build()
+
+ // Buffer colorspace is RGBA, so Color.BLUE will be visually Red
+ val buffer = SurfaceControlUtils.getSolidBuffer(
+ it.DEFAULT_WIDTH,
+ it.DEFAULT_HEIGHT,
+ Color.BLUE
+ )
+ SurfaceControlWrapper.Transaction()
+ .addTransactionCompletedListener(executor!!, listener)
+ .setBuffer(scCompat, buffer)
+ .setAlpha(scCompat, 1.0f)
+ .commit()
+ }
+ }
+
+ it.addSurface(it.mSurfaceView, callback)
+ }
+
+ scenario.moveToState(Lifecycle.State.RESUMED).onActivity {
+ assert(listener.mLatch.await(3000, TimeUnit.MILLISECONDS))
+ SurfaceControlUtils.validateOutput { bitmap ->
+ val coord = intArrayOf(0, 0)
+ it.mSurfaceView.getLocationOnScreen(coord)
+ Color.RED == bitmap.getPixel(coord[0], coord[1])
+ }
+ }
+ }
+
+ fun Color.compositeOver(background: Color): Color {
+ val fg = this.convert(background.colorSpace)
+
+ val bgA = background.alpha()
+ val fgA = fg.alpha()
+ val a = fgA + (bgA * (1f - fgA))
+
+ val r = compositeComponent(fg.red(), background.red(), fgA, bgA, a)
+ val g = compositeComponent(fg.green(), background.green(), fgA, bgA, a)
+ val b = compositeComponent(fg.blue(), background.blue(), fgA, bgA, a)
+
+ return Color.valueOf(r, g, b, a, background.colorSpace)
+ }
+
+ @Suppress("NOTHING_TO_INLINE")
+ private inline fun compositeComponent(
+ fgC: Float,
+ bgC: Float,
+ fgA: Float,
+ bgA: Float,
+ a: Float
+ ) = if (a == 0f) 0f else ((fgC * fgA) + ((bgC * bgA) * (1f - fgA))) / a
+}
diff --git a/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTestActivity.kt b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTestActivity.kt
new file mode 100644
index 0000000..962cce7
--- /dev/null
+++ b/graphics/graphics-core/src/androidTest/java/androidx/graphics/surface/SurfaceControlWrapperTestActivity.kt
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.surface
+
+import android.app.Activity
+import android.os.Bundle
+import android.view.Gravity
+import android.view.SurfaceHolder
+import android.view.SurfaceView
+import android.widget.FrameLayout
+
+class SurfaceControlWrapperTestActivity : Activity() {
+ lateinit var mSurfaceView: SurfaceView
+ lateinit var mFrameLayout: FrameLayout
+ lateinit var mLayoutParams: FrameLayout.LayoutParams
+ var DEFAULT_WIDTH = 100
+ var DEFAULT_HEIGHT = 100
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ mLayoutParams = FrameLayout.LayoutParams(
+ DEFAULT_WIDTH, DEFAULT_HEIGHT,
+ Gravity.LEFT or Gravity.TOP
+ )
+ mLayoutParams.topMargin = 100
+ mLayoutParams.leftMargin = 100
+
+ mFrameLayout = FrameLayout(this)
+ mSurfaceView = SurfaceView(this)
+ mSurfaceView.holder.setFixedSize(DEFAULT_WIDTH, DEFAULT_HEIGHT)
+ setContentView(mFrameLayout)
+ }
+
+ fun addSurface(surfaceView: SurfaceView, callback: SurfaceHolder.Callback) {
+ surfaceView.holder.addCallback(callback)
+ mFrameLayout.addView(surfaceView, mLayoutParams)
+ }
+
+ fun getSurfaceView(): SurfaceView {
+ return mSurfaceView
+ }
+}
diff --git a/graphics/graphics-core/src/main/androidx/graphics/androidx-graphics-graphics-core-documentation.md b/graphics/graphics-core/src/main/androidx/graphics/androidx-graphics-graphics-core-documentation.md
new file mode 100644
index 0000000..ffaf9e0
--- /dev/null
+++ b/graphics/graphics-core/src/main/androidx/graphics/androidx-graphics-graphics-core-documentation.md
@@ -0,0 +1,5 @@
+# Module root
+
+AndroidX Graphics Core
+
+# Support classes for building applications that leverage more advanced graphics facilities
diff --git a/graphics/graphics-core/src/main/cpp/CMakeLists.txt b/graphics/graphics-core/src/main/cpp/CMakeLists.txt
new file mode 100644
index 0000000..b1fb8f4
--- /dev/null
+++ b/graphics/graphics-core/src/main/cpp/CMakeLists.txt
@@ -0,0 +1,75 @@
+
+# For more information about using CMake with Android Studio, read the
+# documentation: https://d.android.com/studio/projects/add-native-code.html
+
+# Sets the minimum version of CMake required to build the native library.
+
+cmake_minimum_required(VERSION 3.18.1)
+
+# Declares and names the project.
+
+project("graphics-core")
+
+add_definitions(-D__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__)
+
+# Creates and names a library, sets it as either STATIC
+# or SHARED, and provides the relative paths to its source code.
+# You can define multiple libraries, and CMake builds them for you.
+# Gradle automatically packages shared libraries with your APK.
+
+add_library( # Sets the name of the library.
+ graphics-core
+
+ # Sets the library as a shared library.
+ SHARED
+
+ # Provides a relative path to your source file(s).
+ graphics-core.cpp
+ egl_utils.cpp)
+
+add_library(
+ sync-fence
+ SHARED
+ sync_fence.cpp)
+
+add_library(
+ sc-compat-test
+ SHARED
+ sc_test_utils.cpp)
+
+# Searches for a specified prebuilt library and stores the path as a
+# variable. Because CMake includes system libraries in the search path by
+# default, you only need to specify the name of the public NDK library
+# you want to add. CMake verifies that the library exists before
+# completing its build.
+
+find_library( # Sets the name of the path variable.
+ log-lib
+
+ # Specifies the name of the NDK library that
+ # you want CMake to locate.
+ log )
+
+# Specifies libraries CMake should link to your target library. You
+# can link multiple libraries, such as libraries you define in this
+# build script, prebuilt third-party libraries, or system libraries.
+
+target_link_libraries( # Specifies the target library.
+ graphics-core
+
+ # Links the target library to the log library
+ # included in the NDK.
+ ${log-lib}
+ EGL
+ GLESv2
+ android)
+
+target_link_libraries(
+ sync-fence
+ ${log-lib}
+ android)
+
+target_link_libraries(
+ sc-compat-test
+ ${log-lib}
+ android)
diff --git a/graphics/graphics-core/src/main/cpp/egl_utils.cpp b/graphics/graphics-core/src/main/cpp/egl_utils.cpp
new file mode 100644
index 0000000..e04afa4
--- /dev/null
+++ b/graphics/graphics-core/src/main/cpp/egl_utils.cpp
@@ -0,0 +1,555 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <jni.h>
+#include <string>
+#include <poll.h>
+#include <unistd.h>
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <android/log.h>
+#include <EGL/eglplatform.h>
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+#include <android/sync.h>
+#include <android/hardware_buffer_jni.h>
+#include <mutex>
+
+#define EGL_UTILS "EglUtils"
+#define ALOGE(...) __android_log_print(ANDROID_LOG_ERROR, EGL_UTILS, __VA_ARGS__)
+
+/**
+ * Cached reference to the eglGetNativeClientBufferANDROID egl extension method
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC eglGetNativeClientBufferANDROID = nullptr;
+
+/**
+ * Cached reference to the eglImageTargetTexture2DOES egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES = nullptr;
+
+/**
+ * Cached reference to the eglCreateImageKHR egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLCREATEIMAGEKHRPROC eglCreateImageKHR = nullptr;
+
+/**
+ * Cached reference to the eglDestroyImageKHR egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLDESTROYIMAGEKHRPROC eglDestroyImageKHR = nullptr;
+
+/**
+ * Cached reference to the eglCreateSyncKHR egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLCREATESYNCKHRPROC eglCreateSyncKHR = nullptr;
+
+/**
+ * Cached reference to the eglGetSyncAttribKHR egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLGETSYNCATTRIBKHRPROC eglGetSyncAttribKHR = nullptr;
+
+/**
+ * Cached reference to the eglClientWaitSyncKHR egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLCLIENTWAITSYNCKHRPROC eglClientWaitSyncKHR = nullptr;
+
+/**
+ * Cached reference to the eglDestroySyncKHR egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLDESTROYSYNCKHRPROC eglDestroySyncKHR = nullptr;
+
+/**
+ * Cached reference to the eglDupNativeFenceFDANDROID egl extension method.
+ * On first invocation within the corresponding JNI method, a call to eglGetProcAddress
+ * is made to determine if this method exists. If it does then this function pointer
+ * is persisted for subsequent method calls.
+ */
+PFNEGLDUPNATIVEFENCEFDANDROIDPROC eglDupNativeFenceFDANDROID = nullptr;
+
+/**
+ * Helper method for querying the EGL extension method eglGetNativeClientBufferANDROID.
+ * This is used in initial invocations of the corresponding JNI method to obtain
+ * an EGLClientBuffer instance from a HardwareBuffer as well as for testing purposes
+ * to guarantee that Android devices that advertise support for the corresponding
+ * extensions actually expose this API.
+ */
+static PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC obtainEglGetNativeClientBufferANDROID() {
+ return reinterpret_cast<PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC>(
+ eglGetProcAddress("eglGetNativeClientBufferANDROID"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglCreateImageKHR.
+ * This is used in initial invocations of the corresponding JNI method to obtain
+ * an EGLImage from an EGLClientBuffer as well as for testing purposes
+ * to guarantee that Android devices that advertise support for the corresponding
+ * extensions actually expose this API.
+ */
+static PFNEGLCREATEIMAGEKHRPROC obtainEglCreateImageKHR() {
+ return reinterpret_cast<PFNEGLCREATEIMAGEKHRPROC>(
+ eglGetProcAddress("eglCreateImageKHR"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglDestroyImageKHR.
+ * This is used in initial invocations of the corresponding JNI method to destroy
+ * an EGLImage as well as for testing purposes to guarantee that Android devices
+ * that advertise support for the corresponding extensions actually expose this API.
+ */
+static PFNEGLDESTROYIMAGEKHRPROC obtainEglDestroyImageKHR() {
+ return reinterpret_cast<PFNEGLDESTROYIMAGEKHRPROC>(
+ eglGetProcAddress("eglDestroyImageKHR"));
+}
+
+/**
+ * Helper method for querying the EGL extension method glImageTargetTexture2DOES.
+ * This is used in initial invocations of the corresponding JNI method to load
+ * an EGLImage instance into a caller defined GL Texture as well as for testing
+ * purposes to guarantee that Android devices that advertise support for the
+ * corresponding extensions actually expose this API.
+ */
+static PFNGLEGLIMAGETARGETTEXTURE2DOESPROC obtainGlImageTargetTexture2DOES() {
+ return reinterpret_cast<PFNGLEGLIMAGETARGETTEXTURE2DOESPROC>(
+ eglGetProcAddress("glEGLImageTargetTexture2DOES"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglDupNativeFenceFDANDROID.
+ * This is used in initial invocations of the corresponding JNI method to to create EGL fence sync
+ * objects that are associated with a native synchronization fence object that are referenced using
+ * a file descriptor. Additionally this is used for testing purposes to guarantee that Android
+ * devices that advertise support for the corresponding extensions actually expose this API.
+ */
+static PFNEGLDUPNATIVEFENCEFDANDROIDPROC obtainEglDupNativeFenceFDANDROID() {
+ return reinterpret_cast<PFNEGLDUPNATIVEFENCEFDANDROIDPROC>(
+ eglGetProcAddress("eglDupNativeFenceFDANDROID"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglCreateSyncKHR.
+ * This is used in initial invocations of the corresponding JNI method to to create EGL fence sync
+ * object. Additionally this is used for testing purposes to guarantee that Android
+ * devices that advertise support for the corresponding extensions actually expose this API.
+ */
+static PFNEGLCREATESYNCKHRPROC obtainEglCreateSyncKHR() {
+ return reinterpret_cast<PFNEGLCREATESYNCKHRPROC>(
+ eglGetProcAddress("eglCreateSyncKHR"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglGetSyncAttribKHR.
+ * This is used in initial invocations of the corresponding JNI method to query
+ * properties of an EGLSync object returned by eglCreateSyncKHR as well as for
+ * testing purposes to guarantee that Android devices that advertise support for
+ * the corresponding extensions actually expose this API.
+ */
+static PFNEGLGETSYNCATTRIBKHRPROC obtainEglGetSyncAttribKHR() {
+ return reinterpret_cast<PFNEGLGETSYNCATTRIBKHRPROC>(
+ eglGetProcAddress("eglGetSyncAttribKHR"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglClientWaitSyncKHR.
+ * This is used in initial invocations of the corresponding JNI method to block
+ * the current thread until the specified sync object is signalled or until a timeout
+ * has passed. Additionally this is used for testing purposes to guarantee that Android devices
+ * that advertise support for the corresponding extensions actually expose this API.
+ */
+static PFNEGLCLIENTWAITSYNCKHRPROC obtainEglClientWaitSyncKHR() {
+ return reinterpret_cast<PFNEGLCLIENTWAITSYNCKHRPROC>(
+ eglGetProcAddress("eglClientWaitSyncKHR"));
+}
+
+/**
+ * Helper method for querying the EGL extension method eglDestroySyncKHR.
+ * This is used in initial invocations of the corresponding JNI method to destroy an EGL fence sync
+ * object. Additionally this is used for testing purposes to guarantee that Android devices that
+ * advertise support for corresponding extensions actually expose this API.
+ */
+static PFNEGLDESTROYSYNCKHRPROC obtainEglDestroySyncKHR() {
+ return reinterpret_cast<PFNEGLDESTROYSYNCKHRPROC>(
+ eglGetProcAddress("eglDestroySyncKHR"));
+}
+
+extern "C"
+JNIEXPORT jlong JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nCreateImageFromHardwareBuffer(
+ JNIEnv *env, jobject thiz, jlong egl_display_ptr, jobject hardware_buffer) {
+ static std::once_flag eglGetNativeClientBufferANDROIDFlag;
+ static std::once_flag eglCreateImageKHRFlag;
+ std::call_once(eglGetNativeClientBufferANDROIDFlag, [](){
+ eglGetNativeClientBufferANDROID = obtainEglGetNativeClientBufferANDROID();
+ });
+ if (!eglGetNativeClientBufferANDROID) {
+ ALOGE("Unable to resolve eglGetNativeClientBufferANDROID");
+ return 0;
+ }
+
+ std::call_once(eglCreateImageKHRFlag, [](){
+ eglCreateImageKHR = obtainEglCreateImageKHR();
+ });
+ if (!eglCreateImageKHR) {
+ ALOGE("Unable to resolve eglCreateImageKHR");
+ return 0;
+ }
+
+ AHardwareBuffer *buffer =
+ AHardwareBuffer_fromHardwareBuffer(env, hardware_buffer);
+ EGLClientBuffer eglClientBuffer = eglGetNativeClientBufferANDROID(buffer);
+
+ EGLint imageAttrs[] = {EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE};
+ auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+ EGLImage image = eglCreateImageKHR(
+ display,
+ EGL_NO_CONTEXT,
+ EGL_NATIVE_BUFFER_ANDROID,
+ eglClientBuffer,
+ imageAttrs
+ );
+
+ return reinterpret_cast<jlong>(image);
+}
+
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nDestroyImageKHR(
+ JNIEnv *env, jobject thiz, jlong egl_display_ptr, jlong egl_image_ptr) {
+ static std::once_flag eglDestroyImageKHRFlag;
+ std::call_once(eglDestroyImageKHRFlag, [](){
+ eglDestroyImageKHR = obtainEglDestroyImageKHR();
+ });
+ if (!eglDestroyImageKHR) {
+ ALOGE("Unable to resolve eglDestroyImageKHR");
+ return static_cast<jboolean>(false);
+ }
+
+ auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+ auto eglImage = reinterpret_cast<EGLImage>(egl_image_ptr);
+ return static_cast<jboolean>(eglDestroyImageKHR(display, eglImage));
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nImageTargetTexture2DOES(
+ JNIEnv *env, jobject thiz, jint target, jlong egl_image_ptr) {
+ static std::once_flag glEGLImageTargetTexture2DOESFlag;
+ std::call_once(glEGLImageTargetTexture2DOESFlag, [](){
+ glEGLImageTargetTexture2DOES = obtainGlImageTargetTexture2DOES();
+ });
+ if (!glEGLImageTargetTexture2DOES) {
+ ALOGE("Unable to resolve glEGLImageTargetTexture2DOES");
+ return;
+ }
+
+ glEGLImageTargetTexture2DOES(target, reinterpret_cast<EGLImage>(egl_image_ptr));
+}
+
+extern "C"
+JNIEXPORT jint JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nDupNativeFenceFDANDROID(
+ JNIEnv *env, jobject thiz, jlong egl_display_ptr, jlong sync_ptr) {
+ static std::once_flag eglDupNativeFenceFDANDROIDflag;
+ std::call_once(eglDupNativeFenceFDANDROIDflag, [](){
+ eglDupNativeFenceFDANDROID = obtainEglDupNativeFenceFDANDROID();
+ });
+ if (!eglDupNativeFenceFDANDROID) {
+ ALOGE("Unable to resolve eglDupNativeFenceFDAndroid");
+ return EGL_NO_NATIVE_FENCE_FD_ANDROID;
+ }
+
+ auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+ auto sync = reinterpret_cast<EGLSync>(sync_ptr);
+ return (jint)eglDupNativeFenceFDANDROID(display, sync);
+}
+
+extern "C"
+JNIEXPORT jlong JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nCreateSyncKHR(
+ JNIEnv *env, jobject thiz, jlong egl_display_ptr, jint type,
+ jintArray attrs) {
+ static std::once_flag eglCreateSyncKHRFlag;
+ std::call_once(eglCreateSyncKHRFlag, [](){
+ eglCreateSyncKHR = obtainEglCreateSyncKHR();
+ });
+ if (!eglCreateSyncKHR) {
+ ALOGE("Unable to resolve eglCreateSyncKHR");
+ return 0;
+ }
+
+ auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+ auto attrib_list = reinterpret_cast<EGLint *>(attrs);
+ return reinterpret_cast<jlong>(eglCreateSyncKHR(display, type, attrib_list));
+}
+
+static jobject createIllegalArgumentException(JNIEnv* env, jstring message) {
+ jclass exceptionClass = env->FindClass("java/lang/IllegalArgumentException");
+ if (exceptionClass != nullptr) {
+ jmethodID init = env->GetMethodID(exceptionClass, "<init>", "(Ljava/lang/String;)V");
+ jobject instance;
+ if (init != nullptr) {
+ instance = env->NewObject(exceptionClass, init, message);
+ } else {
+ ALOGE("Unable to find constructor for IllegalArgumentException");
+ instance = nullptr;
+ }
+ env->DeleteLocalRef(exceptionClass);
+ return instance;
+ } else {
+ ALOGE("Unable to find IllegalArgumentException class");
+ return nullptr;
+ }
+}
+
+static int jniThrowIllegalArgumentException(JNIEnv* env, const char* msg) {
+ jstring message = env->NewStringUTF(msg);
+ if (message != nullptr) {
+ jobject exception = createIllegalArgumentException(env, message);
+ int status = 0;
+ if (exception != nullptr) {
+ if (env->Throw((jthrowable) exception) != JNI_OK) {
+ ALOGE("Unable to throw IllegalArgumentException");
+ status = -1;
+ }
+ } else {
+ status = -1;
+ }
+ env->DeleteLocalRef(message);
+ return status;
+ } else {
+ env->ExceptionClear();
+ return -1;
+ }
+}
+
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nGetSyncAttribKHR(
+ JNIEnv *env,
+ jobject thiz,
+ jlong egl_display_ptr,
+ jlong sync_ptr,
+ jint attrib,
+ jintArray result_ref,
+ jint offset
+ ) {
+ static std::once_flag eglGetSyncAttribKHRFlag;
+ std::call_once(eglGetSyncAttribKHRFlag, []() {
+ eglGetSyncAttribKHR = obtainEglGetSyncAttribKHR();
+ });
+ if (!eglGetSyncAttribKHR) {
+ ALOGE("Unable to resolve eglGetSyncAttribKHR");
+ return static_cast<jboolean>(false);
+ }
+
+ if (!result_ref) {
+ jniThrowIllegalArgumentException(env,
+ "Null pointer received, invalid array provided to store eglGetSyncAttribKHR result");
+ return static_cast<jboolean>(false);
+ }
+
+ if (offset < 0) {
+ jniThrowIllegalArgumentException(env,
+ "Invalid offset provided, must be greater than or equal to 0");
+ return static_cast<jboolean>(false);
+ }
+
+ jint remaining = env->GetArrayLength(result_ref) - offset;
+ if (remaining < 1) {
+ jniThrowIllegalArgumentException(env, "length - offset is out of bounds");
+ return static_cast<jboolean>(false);
+ }
+
+ auto result_base = (GLint *)env->GetIntArrayElements(result_ref, (jboolean *)nullptr);
+ auto result = (GLint *)(result_base + offset);
+ auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+ auto sync = reinterpret_cast<EGLSync>(sync_ptr);
+ auto success = static_cast<jboolean>(eglGetSyncAttribKHR(display, sync, attrib, result));
+ env->ReleaseIntArrayElements(result_ref, (jint*) result_base, 0);
+ return success;
+}
+
+extern "C"
+JNIEXPORT jint JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nClientWaitSyncKHR(
+ JNIEnv *env,
+ jobject thiz,
+ jlong egl_display_ptr,
+ jlong sync_ptr,
+ jint flags,
+ jlong timeout
+) {
+ static std::once_flag eglClientWaitKRFlag;
+ std::call_once(eglClientWaitKRFlag, []() {
+ eglClientWaitSyncKHR = obtainEglClientWaitSyncKHR();
+ });
+
+ auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+ auto sync = reinterpret_cast<EGLSync>(sync_ptr);
+ auto wait_flags = static_cast<EGLint>(flags);
+ auto wait_timeout = static_cast<EGLTimeKHR>(timeout);
+ return static_cast<jint>(eglClientWaitSyncKHR(display, sync, wait_flags, wait_timeout));
+}
+
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nDestroySyncKHR(
+ JNIEnv *env, jobject thiz, jlong egl_display_ptr, jlong sync_ptr) {
+ static std::once_flag eglDestroySyncKHRFlag;
+ std::call_once(eglDestroySyncKHRFlag, [](){
+ eglDestroySyncKHR = obtainEglDestroySyncKHR();
+ });
+ if (!eglDestroySyncKHR) {
+ ALOGE("Unable to resolve eglDestroySyncKHR");
+ return static_cast<jboolean>(false);
+ }
+
+ auto display = reinterpret_cast<EGLDisplay *>(egl_display_ptr);
+ auto sync = reinterpret_cast<EGLSync>(sync_ptr);
+ return static_cast<jboolean>(eglDestroySyncKHR(display, sync));
+}
+
+/**
+ * Helper method used in testing to verify if the eglGetNativeClientBufferANDROID method
+ * is actually supported on the Android device.
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglGetNativeClientBufferAndroid(
+ JNIEnv *env, jobject thiz) {
+ return obtainEglGetNativeClientBufferANDROID() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglCreateImageKHR method
+ * is actually supported on the Android device.
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglCreateImageKHR(
+ JNIEnv *env, jobject thiz) {
+ return obtainEglCreateImageKHR() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglDestroyImageKHR method
+ * is actually supported on the Android device.
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglDestroyImageKHR(
+ JNIEnv *env, jobject thiz) {
+ return obtainEglDestroyImageKHR() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the glImageTargetTexture2DOES method
+ * is actually supported on the Android device.
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsGlImageTargetTexture2DOES(
+ JNIEnv *env, jobject thiz) {
+ return obtainGlImageTargetTexture2DOES() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglCreateSyncKHR method is actually supported
+ * on the Android device
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglCreateSyncKHR(
+ JNIEnv *env, jobject thiz) {
+ return obtainEglCreateSyncKHR() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglDestroySyncKHR method is actually supported
+ * on the Android device
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglDestroySyncKHR(
+ JNIEnv *env, jobject thiz) {
+ return obtainEglDestroySyncKHR() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglDupNativeFenceFDAndroid methid is actually
+ * supported on the Android device
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsDupNativeFenceFDANDROID(
+ JNIEnv *env, jobject thiz) {
+ return obtainEglDupNativeFenceFDANDROID() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglGetSyncAttribKHR method is actually supported
+ * on the Android device
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglGetSyncAttribKHR(
+ JNIEnv *env, jobject thiz) {
+ return obtainEglGetSyncAttribKHR() != nullptr;
+}
+
+/**
+ * Helper method used in testing to verify if the eglClientWaitSyncKHR method is actually supported
+ * on the Android device
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nSupportsEglClientWaitSyncKHR(
+ JNIEnv *env, jobject thiz) {
+ return obtainEglClientWaitSyncKHR() != nullptr;
+}
+
+/**
+ * Java does not support unsigned long types. Ensure that our casting of Java types the native
+ * equivalent matches.
+ */
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_opengl_EGLBindings_00024Companion_nEqualToNativeForeverTimeout(
+ JNIEnv *env, jobject thiz, jlong timeout_nanos) {
+ return static_cast<EGLTimeKHR>(timeout_nanos) == EGL_FOREVER_KHR;
+}
diff --git a/graphics/graphics-core/src/main/cpp/graphics-core.cpp b/graphics/graphics-core/src/main/cpp/graphics-core.cpp
new file mode 100644
index 0000000..7b71cb6
--- /dev/null
+++ b/graphics/graphics-core/src/main/cpp/graphics-core.cpp
@@ -0,0 +1,407 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "ASurfaceControlTest"
+
+#include <jni.h>
+#include <string>
+#include <poll.h>
+#include <unistd.h>
+#include <ctime>
+#include <unistd.h>
+#include <android/native_activity.h>
+#include <android/surface_control.h>
+#include <android/api-level.h>
+#include <android/log.h>
+#include <android/native_window_jni.h>
+#include <android/hardware_buffer_jni.h>
+#include <android/log.h>
+#include <android/sync.h>
+
+#define ALOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
+
+extern "C"
+JNIEXPORT jlong JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nCreate(JNIEnv *env, jobject thiz,
+ jlong surfaceControl,
+ jstring debug_name) {
+ if (android_get_device_api_level() >= 29) {
+ auto aSurfaceControl = reinterpret_cast<ASurfaceControl *>(surfaceControl);
+ auto debugName = env->GetStringUTFChars(debug_name, nullptr);
+ return reinterpret_cast<jlong>(ASurfaceControl_create(aSurfaceControl,
+ debugName));
+ } else {
+ return 0;
+ }
+}
+
+extern "C"
+JNIEXPORT jlong JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nCreateFromSurface(JNIEnv *env,
+ jobject thiz,
+ jobject surface,
+ jstring debug_name) {
+ if (android_get_device_api_level() >= 29) {
+ auto AWindow = ANativeWindow_fromSurface(env, surface);
+ auto debugName = env->GetStringUTFChars(debug_name, nullptr);
+ auto surfaceControl = reinterpret_cast<jlong>(ASurfaceControl_createFromWindow(AWindow,
+ debugName));
+ ANativeWindow_release(AWindow);
+ return surfaceControl;
+ } else {
+ return 0;
+ }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nRelease(JNIEnv *env,
+ jobject thiz,
+ jlong surfaceControl) {
+ if (android_get_device_api_level() >= 29) {
+ ASurfaceControl_release(reinterpret_cast<ASurfaceControl *>(surfaceControl));
+ } else {
+ return;
+ }
+}
+
+extern "C"
+JNIEXPORT jlong JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nTransactionCreate(
+ JNIEnv *env, jobject thiz) {
+ if (android_get_device_api_level() >= 29) {
+ return reinterpret_cast<jlong>(ASurfaceTransaction_create());
+ } else {
+ return 0;
+ }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nTransactionDelete(
+ JNIEnv *env, jobject thiz,
+ jlong surfaceTransaction) {
+ if (android_get_device_api_level() >= 29) {
+ ASurfaceTransaction_delete(reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction));
+ }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nTransactionApply(
+ JNIEnv *env, jobject thiz,
+ jlong surfaceTransaction) {
+ if (android_get_device_api_level() >= 29) {
+ ASurfaceTransaction_apply(reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction));
+ }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nTransactionReparent(
+ JNIEnv *env, jobject thiz,
+ jlong surfaceTransaction, jlong surfaceControl, jlong newParent) {
+ if (android_get_device_api_level() >= 29) {
+ auto parent = (newParent!=0L) ? reinterpret_cast<ASurfaceControl *>(newParent) : nullptr;
+ ASurfaceTransaction_reparent(reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction),
+ reinterpret_cast<ASurfaceControl *>(surfaceControl),
+ parent);
+ }
+}
+
+static struct {
+ bool CLASS_INFO_INITIALIZED = false;
+ jclass clazz{};
+ jmethodID onComplete{};
+
+} gTransactionCompletedListenerClassInfo;
+
+static struct {
+ bool CLASS_INFO_INITIALIZED = false;
+ jclass clazz{};
+ jmethodID onCommit{};
+} gTransactionCommittedListenerClassInfo;
+
+#define NANO_SECONDS 1000000000LL
+
+int64_t getSystemTime() {
+ struct timespec time;
+ int result = clock_gettime(CLOCK_MONOTONIC, &time);
+ if (result < 0) {
+ return -errno;
+ }
+ return (time.tv_sec * NANO_SECONDS) + time.tv_nsec;
+}
+
+/**
+ * This wrapper class mimics the one found in CTS tests, specifcally
+ * android_view_cts_ASurfaceControlTest.cpp and serves
+ * to allow us to set a callback for Transaction onComplete.
+ */
+class CallbackWrapper {
+public:
+ virtual ~CallbackWrapper() = default;
+
+ virtual void callback(ASurfaceTransactionStats *stats) = 0;
+
+ static void transactionCallbackThunk(void *context, ASurfaceTransactionStats *stats) {
+ CallbackWrapper *listener = reinterpret_cast<CallbackWrapper *>(context);
+ listener->callback(stats);
+ delete listener;
+ }
+
+protected:
+ JavaVM *mVm{};
+ jobject mCallbackObject{};
+
+ JNIEnv *getEnv() {
+ JNIEnv *env;
+ mVm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_6);
+ return env;
+ }
+};
+
+class OnCompleteCallbackWrapper : public CallbackWrapper {
+public:
+ explicit OnCompleteCallbackWrapper(JNIEnv *env, jobject object) {
+ env->GetJavaVM(&mVm);
+ mCallbackObject = env->NewGlobalRef(object);
+ }
+
+ ~OnCompleteCallbackWrapper() override {
+ getEnv()->DeleteGlobalRef(mCallbackObject);
+ }
+
+ void callback(ASurfaceTransactionStats *stats) override {
+ JNIEnv *env = getEnv();
+ env->CallVoidMethod(mCallbackObject,
+ gTransactionCompletedListenerClassInfo.onComplete);
+ }
+};
+
+class OnCommitCallbackWrapper : public CallbackWrapper {
+public:
+ explicit OnCommitCallbackWrapper(JNIEnv *env, jobject object) {
+ env->GetJavaVM(&mVm);
+ mCallbackObject = env->NewGlobalRef(object);
+ }
+
+ ~OnCommitCallbackWrapper() override {
+ getEnv()->DeleteGlobalRef(mCallbackObject);
+ }
+
+ void callback(ASurfaceTransactionStats *stats) override {
+ JNIEnv *env = getEnv();
+ env->CallVoidMethod(mCallbackObject,
+ gTransactionCommittedListenerClassInfo.onCommit);
+ }
+};
+
+void setupTransactionCompletedListenerClassInfo(JNIEnv *env) {
+ //ensure we only ever initialize class info once
+ if (!gTransactionCompletedListenerClassInfo.CLASS_INFO_INITIALIZED) {
+ //setup transactionCompleteListenerClassInfo for test usage
+ jclass transactionCompletedListenerClazz =
+ env->FindClass(
+ "androidx/graphics/surface/SurfaceControlCompat$TransactionCompletedListener");
+ gTransactionCompletedListenerClassInfo.clazz =
+ static_cast<jclass>(env->NewGlobalRef(transactionCompletedListenerClazz));
+ gTransactionCompletedListenerClassInfo.onComplete =
+ env->GetMethodID(transactionCompletedListenerClazz, "onTransactionCompleted",
+ "()V");
+
+ gTransactionCompletedListenerClassInfo.CLASS_INFO_INITIALIZED = true;
+ }
+
+}
+
+void setupTransactionCommittedListenerClassInfo(JNIEnv *env) {
+ //ensure we only ever initialize class info once
+ if (!gTransactionCommittedListenerClassInfo.CLASS_INFO_INITIALIZED) {
+ //setup transactionCommittedListenerClassInfo for test usage
+ jclass transactionCommittedListenerClazz =
+ env->FindClass(
+ "androidx/graphics/surface/SurfaceControlCompat$TransactionCommittedListener");
+ gTransactionCommittedListenerClassInfo.clazz =
+ static_cast<jclass>(env->NewGlobalRef(transactionCommittedListenerClazz));
+ gTransactionCommittedListenerClassInfo.onCommit =
+ env->GetMethodID(transactionCommittedListenerClazz, "onTransactionCommitted",
+ "()V");
+
+ gTransactionCommittedListenerClassInfo.CLASS_INFO_INITIALIZED = true;
+ }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nTransactionSetOnComplete(
+ JNIEnv *env,
+ jobject thiz,
+ jlong surfaceTransaction, jobject callback) {
+ if (android_get_device_api_level() >= 29) {
+ setupTransactionCompletedListenerClassInfo(env);
+ void *context = new OnCompleteCallbackWrapper(env, callback);
+ ASurfaceTransaction_setOnComplete(
+ reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction),
+ reinterpret_cast<void *>(context),
+ CallbackWrapper::transactionCallbackThunk);
+ }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nTransactionSetOnCommit(
+ JNIEnv *env, jobject thiz, jlong surfaceTransaction, jobject listener) {
+ if (android_get_device_api_level() >= 31) {
+ setupTransactionCommittedListenerClassInfo(env);
+ void *context = new OnCommitCallbackWrapper(env, listener);
+ ASurfaceTransaction_setOnCommit(
+ reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction),
+ reinterpret_cast<void *>(context),
+ CallbackWrapper::transactionCallbackThunk);
+ }
+}
+
+int extract_fence_fd(JNIEnv *env, jobject syncFence) {
+ jclass sfClass = env->GetObjectClass(syncFence);
+ jfieldID fid = env->GetFieldID(sfClass, "fd", "I");
+ return env->GetIntField(syncFence, fid);
+}
+
+/* Helper method to extract the SyncFenceCompat file descriptor
+ */
+extern "C"
+JNIEXPORT jint JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nExtractFenceFd(JNIEnv *env,
+ jobject thiz,
+ jobject syncFence) {
+ return extract_fence_fd(env, syncFence);
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetBuffer(JNIEnv *env,
+ jobject thiz,
+ jlong surfaceTransaction,
+ jlong surfaceControl,
+ jobject hBuffer,
+ jobject syncFence) {
+ if (android_get_device_api_level() >= 29) {
+ auto transaction = reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction);
+ auto sc = reinterpret_cast<ASurfaceControl *>(surfaceControl);
+ auto hardwareBuffer = AHardwareBuffer_fromHardwareBuffer(env, hBuffer);
+ auto fence_fd = extract_fence_fd(env, syncFence);
+ ASurfaceTransaction_setBuffer(transaction, sc, hardwareBuffer, fence_fd);
+ }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetVisibility(
+ JNIEnv *env, jobject thiz,
+ jlong surfaceTransaction, jlong surfaceControl, jbyte jVisibility) {
+ if (android_get_device_api_level() >= 29) {
+ auto st = reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction);
+ auto sc = reinterpret_cast<ASurfaceControl *>(surfaceControl);
+ ASurfaceTransaction_setVisibility(st, sc, jVisibility);
+ }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetZOrder(
+ JNIEnv *env, jobject thiz,
+ jlong surfaceTransaction, jlong surfaceControl, jint z_order) {
+ if (android_get_device_api_level() >= 29) {
+ auto st = reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction);
+ auto sc = reinterpret_cast<ASurfaceControl *>(surfaceControl);
+ ASurfaceTransaction_setZOrder(st, sc, z_order);
+ }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetDamageRegion(
+ JNIEnv *env, jobject thiz,
+ jlong surfaceTransaction, jlong surfaceControl,
+ jobject rect) {
+ if (android_get_device_api_level() >= 29) {
+ auto st = reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction);
+ auto sc = reinterpret_cast<ASurfaceControl *>(surfaceControl);
+
+ if(rect == nullptr) {
+ ASurfaceTransaction_setDamageRegion(st, sc, nullptr, 0);
+ return;
+ }
+
+ jclass cls = env->GetObjectClass(rect);
+
+ jfieldID left = env->GetFieldID(cls, "left", "I");
+ jint leftVal = env->GetIntField(rect, left);
+
+ jfieldID top = env->GetFieldID(cls, "top", "I");
+ jint topVal = env->GetIntField(rect, top);
+
+ jfieldID right = env->GetFieldID(cls, "right", "I");
+ jint rightVal = env->GetIntField(rect, right);
+
+ jfieldID bottom = env->GetFieldID(cls, "bottom", "I");
+ jint bottomVal = env->GetIntField(rect, bottom);
+
+ ARect rectArray[1];
+ rectArray[0] = (ARect){ leftVal, topVal, rightVal, bottomVal};
+
+ ASurfaceTransaction_setDamageRegion(st, sc, rectArray, 1);
+ }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetDesiredPresentTime(
+ JNIEnv *env, jobject thiz,
+ jlong surfaceTransaction, int64_t desiredPresentTimeNano) {
+ if (android_get_device_api_level() >= 29) {
+ ASurfaceTransaction_setDesiredPresentTime(
+ reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction),
+ desiredPresentTimeNano);
+ }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetBufferTransparency(
+ JNIEnv *env, jobject thiz,
+ jlong surfaceTransaction, jlong surfaceControl, jbyte transparency) {
+ if (android_get_device_api_level() >= 29) {
+ ASurfaceTransaction_setBufferTransparency(
+ reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction),
+ reinterpret_cast<ASurfaceControl *>(surfaceControl),
+ transparency);
+ }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_graphics_surface_JniBindings_00024Companion_nSetBufferAlpha(
+ JNIEnv *env, jobject thiz,
+ jlong surfaceTransaction, jlong surfaceControl, jfloat alpha) {
+ if (android_get_device_api_level() >= 29) {
+ ASurfaceTransaction_setBufferAlpha(
+ reinterpret_cast<ASurfaceTransaction *>(surfaceTransaction),
+ reinterpret_cast<ASurfaceControl *>(surfaceControl),
+ alpha);
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/cpp/sc_test_utils.cpp b/graphics/graphics-core/src/main/cpp/sc_test_utils.cpp
new file mode 100644
index 0000000..1842825
--- /dev/null
+++ b/graphics/graphics-core/src/main/cpp/sc_test_utils.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <jni.h>
+#include <android/api-level.h>
+#include <android/native_window_jni.h>
+#include <android/hardware_buffer_jni.h>
+
+void colorBufferRegion(void *data, int32_t left, int32_t top, int32_t right, int32_t bottom,
+ uint32_t color, uint32_t stride) {
+ auto *ptr = static_cast<uint32_t *>(data);
+ ptr += stride * top;
+
+ for (uint32_t y = top; y < bottom; y++) {
+ for (uint32_t x = left; x < right; x++) {
+ ptr[x] = color;
+ }
+ ptr += stride;
+ }
+}
+
+bool createSolidBuffer(JNIEnv *env, jobject thiz, int32_t width, int32_t height, uint32_t color,
+ AHardwareBuffer **outBuffer, int *fence) {
+ AHardwareBuffer *buffer = nullptr;
+ AHardwareBuffer_Desc tempDesc = {};
+ tempDesc.width = width;
+ tempDesc.height = height;
+ tempDesc.layers = 1;
+ tempDesc.usage = AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN |
+ AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE;
+ tempDesc.format = AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM;
+
+ AHardwareBuffer_allocate(&tempDesc, &buffer);
+
+ AHardwareBuffer_Desc desc = {};
+ AHardwareBuffer_describe(buffer, &desc);
+
+ if (!buffer) {
+ return true;
+ }
+
+ const ARect rect{0, 0, width, height};
+ void *data = nullptr;
+ AHardwareBuffer_lock(buffer, AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN, -1, &rect, &data);
+
+ if (!data) {
+ AHardwareBuffer_release(buffer);
+ return true;
+ }
+
+ colorBufferRegion(data, 0, 0, width, height, color, desc.stride);
+ AHardwareBuffer_unlock(buffer, fence);
+ *outBuffer = buffer;
+ return false;
+}
+
+extern "C"
+JNIEXPORT jobject JNICALL
+Java_androidx_graphics_surface_SurfaceControlUtils_00024Companion_nGetSolidBuffer(JNIEnv *env,
+ jobject thiz,
+ jint width,
+ jint height,
+ jint color) {
+ AHardwareBuffer *tempBuffer;
+ if (createSolidBuffer(env, thiz, width, height, static_cast<uint32_t>(color), &tempBuffer,
+ nullptr)) {
+ return nullptr;
+ }
+ jobject hardwareBuffer = AHardwareBuffer_toHardwareBuffer(env, tempBuffer);
+ AHardwareBuffer_release(tempBuffer);
+ return hardwareBuffer;
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/cpp/sync_fence.cpp b/graphics/graphics-core/src/main/cpp/sync_fence.cpp
new file mode 100644
index 0000000..af0c44d
--- /dev/null
+++ b/graphics/graphics-core/src/main/cpp/sync_fence.cpp
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <jni.h>
+#include <android/sync.h>
+#include <android/log.h>
+#include <cstdint>
+#include <poll.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <android/file_descriptor_jni.h>
+#include <errno.h>
+
+static constexpr int64_t SIGNAL_TIME_INVALID = -1;
+static constexpr int64_t SIGNAL_TIME_PENDING = INT64_MAX;
+
+#define SYNC_FENCE "SYNC_FENCE"
+#define ALOGE(msg, ...) \
+ __android_log_print(ANDROID_LOG_ERROR, SYNC_FENCE, (msg), __VA_ARGS__)
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_androidx_hardware_SyncFenceCompat_nClose(JNIEnv *env, jobject thiz, jint fd) {
+ close(fd);
+}
+
+extern "C"
+JNIEXPORT jlong JNICALL
+Java_androidx_hardware_SyncFenceCompat_nGetSignalTime(JNIEnv *env, jobject thiz,
+ jint fd) {
+ // Implementation sampled from Fence::getSignalTime in the framework
+ if (fd == -1) {
+ return SIGNAL_TIME_INVALID;
+ }
+
+ struct sync_file_info* finfo = sync_file_info(fd);
+ if (finfo == nullptr) {
+ ALOGE("sync_file_info returned NULL for fd %d", fd);
+ return SIGNAL_TIME_INVALID;
+ }
+
+ if (finfo->status != 1) {
+ const auto status = finfo->status;
+ if (status < 0) {
+ ALOGE("nGetSignalTime: sync_file_info contains an error: <%d> for fd: <%d>", status,
+ fd);
+ }
+ sync_file_info_free(finfo);
+ return status < 0 ? SIGNAL_TIME_INVALID : SIGNAL_TIME_PENDING;
+ }
+
+ uint64_t timestamp = 0;
+ struct sync_fence_info* pinfo = sync_get_fence_info(finfo);
+ for (size_t i = 0; i < finfo->num_fences; i++) {
+ if (pinfo[i].timestamp_ns > timestamp) {
+ timestamp = pinfo[i].timestamp_ns;
+ }
+ }
+
+ sync_file_info_free(finfo);
+ return static_cast<int64_t>(timestamp);
+}
+
+// Implementation of sync_wait obtained from libsync/sync.c in the framework
+static int sync_wait(int fd, int timeout)
+{
+ struct pollfd fds{};
+ int ret;
+
+ if (fd < 0) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ fds.fd = fd;
+ fds.events = POLLIN;
+
+ do {
+ ret = poll(&fds, 1, timeout);
+ if (ret > 0) {
+ if (fds.revents & (POLLERR | POLLNVAL)) {
+ errno = EINVAL;
+ return -1;
+ }
+ return 0;
+ } else if (ret == 0) {
+ errno = ETIME;
+ return -1;
+ }
+ } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+
+ return ret;
+}
+
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_androidx_hardware_SyncFenceCompat_nWait(JNIEnv *env, jobject thiz, jint fd,
+ jint timeout_millis) {
+ if (fd == -1) {
+ return static_cast<jboolean>(true);
+ }
+
+ // SyncFence#wait takes a timeout as a long in nanoseconds, however, the poll
+ // API appears to consume an int. Also the documentation in Fence.cpp seems to indicate
+ // that the timeout is consumed as an int in milliseconds
+ int err = sync_wait(fd, timeout_millis);
+ return static_cast<jboolean>(err == JNI_OK);
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt
new file mode 100644
index 0000000..61571b6
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/GLFrontBufferedRenderer.kt
@@ -0,0 +1,589 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.lowlatency
+
+import android.hardware.HardwareBuffer
+import android.os.Build
+import android.util.Log
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import androidx.annotation.WorkerThread
+import androidx.graphics.opengl.GLRenderer
+import androidx.graphics.opengl.egl.EglManager
+import androidx.graphics.opengl.egl.EglSpec
+import androidx.graphics.surface.SurfaceControlCompat
+import java.util.Collections
+import java.util.concurrent.ConcurrentLinkedQueue
+
+/**
+ * Class responsible for supporting a "front buffered" rendering system. This allows for lower
+ * latency graphics by leveraging a combination of front buffered and double buffered content
+ * layers.
+ * Active content is rendered first into the front buffered layer which is simultaneously being
+ * presented to the display. Periodically content is rendered into the double buffered layer which
+ * will have more traditional latency guarantees, however, minimize the impact of visual artifacts
+ * due to graphical tearing.
+ *
+ * @param surfaceView Target SurfaceView to act as the parent rendering layer for double buffered
+ * content
+ * @param callback Callbacks used to render into front and double buffered layers as well as
+ * configuring [SurfaceControlCompat.Transaction]s for controlling these layers in addition to
+ * other [SurfaceControlCompat] instances that must be updated atomically within the user
+ * interface. These callbacks are invoked on the backing GL Thread.
+ * @param glRenderer Optional [GLRenderer] instance that this [GLFrontBufferedRenderer] should use
+ * for coordinating requests to render content. If this parameter is specified, the caller
+ * of this API is responsible for releasing resources on [GLRenderer] by calling
+ * [GLRenderer.stop]. Otherwise [GLFrontBufferedRenderer] will create and manage its own
+ * [GLRenderer] internally and will automatically release its resources within
+ * [GLFrontBufferedRenderer.release]
+ */
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+@Suppress("AcronymName")
+class GLFrontBufferedRenderer<T> @JvmOverloads constructor(
+ surfaceView: SurfaceView,
+ callback: Callback<T>,
+ @Suppress("ListenerLast")
+ glRenderer: GLRenderer? = null,
+) {
+ /**
+ * [ParentRenderLayer] used to contain both the front and double buffered layers
+ */
+ private val mParentRenderLayer: ParentRenderLayer<T> = SurfaceViewRenderLayer(surfaceView)
+
+ /**
+ * Callbacks invoked to render into the front and double buffered layers in addition to
+ * providing consumers an opportunity to specify any potential additional interactions that must
+ * be synchronized with the [SurfaceControlCompat.Transaction] to show/hide visibility of the
+ * front buffered layer as well as updating double buffered layers
+ */
+ private val mCallback = callback
+
+ /**
+ * [GLRenderer.EglContextCallback]s used to release the corresponding [RenderBufferPool]
+ * if the [GLRenderer] is torn down.
+ * This is especially helpful if a [GLRenderer] is being provided and shared across other
+ * [GLRenderer.RenderTarget] instances in which case it can be released externally from
+ * [GLFrontBufferedRenderer]
+ */
+ private val mContextCallbacks = object : GLRenderer.EglContextCallback {
+ override fun onEglContextCreated(eglManager: EglManager) {
+ // no-op
+ }
+
+ override fun onEglContextDestroyed(eglManager: EglManager) {
+ mBufferPool?.let { releaseBuffers(it) }
+ }
+ }
+
+ /**
+ * [ParentRenderLayer] callbacks used to be alerted of changes to the size of the parent
+ * render layer which acts as a signal to teardown some internal resources and recreate them
+ * with the updated dimensions
+ */
+ private val mParentLayerCallback = object :
+ ParentRenderLayer.Callback<T> {
+ override fun onSizeChanged(width: Int, height: Int) {
+ update(width, height)
+ }
+
+ override fun onLayerDestroyed() {
+ release(true)
+ }
+
+ override fun obtainDoubleBufferedLayerParams(): MutableCollection<T> =
+ mParentBufferParamQueue
+
+ override fun getFrontBufferedLayerSurfaceControl(): SurfaceControlCompat? =
+ mFrontBufferedLayerSurfaceControl
+
+ override fun getRenderBufferPool(): RenderBufferPool? =
+ mBufferPool
+ }
+
+ /**
+ * Queue of parameters to be consumed in [Callback.onDrawFrontBufferedLayer] with the parameter
+ * provided in [renderFrontBufferedLayer]
+ */
+ private val mFrontBufferQueueParams = ConcurrentLinkedQueue<T>()
+
+ /**
+ * Collection of parameters to be consumed in [Callback.onDoubleBufferedLayerRenderComplete]
+ * with the parameters defined in consecutive calls to [renderFrontBufferedLayer].
+ * Once the corresponding [Callback.onDoubleBufferedLayerRenderComplete] callback is invoked,
+ * this collection is cleared and new parameters are added to it with consecutive calls to
+ * [renderFrontBufferedLayer].
+ */
+ private val mParentBufferParamQueue = Collections.synchronizedList(ArrayList<T>())
+
+ /**
+ * [RenderBuffer] used for rendering into the front buffered layer. This buffer is persisted
+ * across frames as part of front buffered rendering and is not expected to be released again
+ * after the corresponding [SurfaceControlCompat.Transaction] that submits this buffer is
+ * applied as per the implementation of "scan line racing" that is done for front buffered
+ * rendering
+ */
+ private var mFrontLayerBuffer: RenderBuffer? = null
+
+ /**
+ * [RenderBufferPool] used to cycle through [RenderBuffer] instances that are released when
+ * the [HardwareBuffer] within the [RenderBuffer] is already displayed by the hardware
+ * compositor
+ */
+ private var mBufferPool: RenderBufferPool? = null
+
+ /**
+ * [GLRenderer.RenderCallback] used for drawing into the front buffered layer
+ */
+ private var mFrontBufferedLayerRenderer: HardwareBufferRenderer? = null
+
+ /**
+ * [SurfaceControlCompat] used to configure buffers and visibility of the front buffered layer
+ */
+ private var mFrontBufferedLayerSurfaceControl: SurfaceControlCompat? = null
+
+ /**
+ * Width of the layers to render. Only if the size changes to we re-initialize the internal
+ * state of the [GLFrontBufferedRenderer]
+ */
+ private var mWidth = -1
+
+ /**
+ * Height of the layers to render. Only if the size changes do we re-initialize the internal
+ * state of the [GLFrontBufferedRenderer]
+ */
+ private var mHeight = -1
+
+ /**
+ * [GLRenderer] used to issue requests to render into front/double buffered layers
+ */
+ private val mGLRenderer: GLRenderer
+
+ /**
+ * Flag indicating if the [GLRenderer] being used was created internally within
+ * [GLFrontBufferedRenderer] as opposed to being provided by the consumer.
+ * If the former, then the [GLFrontBufferedRenderer] is responsible for stopping/releasing this
+ * [GLRenderer] in the [release] method. If this is being provided, then we should not be
+ * releasing this [GLRenderer] as it maybe used by other consumers.
+ * In this case, only the front/double buffered [GLRenderer.RenderTarget]s are detached.
+ */
+ private val mIsManagingGLRenderer: Boolean
+
+ /**
+ * [GLRenderer.RenderTarget] used to issue requests to render into the front buffered layer
+ */
+ private var mFrontBufferedRenderTarget: GLRenderer.RenderTarget? = null
+
+ /**
+ * [GLRenderer.RenderTarget] used to issue requests to render into the double buffered layer
+ */
+ private var mDoubleBufferedLayerRenderTarget: GLRenderer.RenderTarget? = null
+
+ /**
+ * Flag to determine if the [GLFrontBufferedRenderer] has previously been released. If this flag
+ * is true, then subsequent requests to [renderFrontBufferedLayer], [commit], and [release] are
+ * ignored.
+ */
+ private var mIsReleased = false
+
+ init {
+ mParentRenderLayer.setParentLayerCallbacks(mParentLayerCallback)
+ val renderer = if (glRenderer == null) {
+ // If we have not been provided a [GLRenderer] then we should create/start one ourselves
+ mIsManagingGLRenderer = true
+ GLRenderer().apply { start() }
+ } else {
+ // ... otherwise use the [GLRenderer] that is being provided for us
+ mIsManagingGLRenderer = false
+ glRenderer
+ }
+ renderer.registerEglContextCallback(mContextCallbacks)
+
+ mDoubleBufferedLayerRenderTarget =
+ mParentRenderLayer.createRenderTarget(renderer, mCallback)
+ mGLRenderer = renderer
+ }
+
+ internal fun update(width: Int, height: Int) {
+ if (mWidth != width || mHeight != height) {
+ mFrontBufferedLayerSurfaceControl?.release()
+
+ val frontBufferedSurfaceControl = SurfaceControlCompat.Builder()
+ .setName("FrontBufferedSurfaceControl")
+ .build()
+
+ val bufferPool = RenderBufferPool(
+ width,
+ height,
+ format = HardwareBuffer.RGBA_8888,
+ usage = obtainHardwareBufferUsageFlags(),
+ maxPoolSize = 5
+ )
+
+ val previousBufferPool = mBufferPool
+ mFrontBufferedRenderTarget?.detach(true) {
+ if (previousBufferPool != null) {
+ releaseBuffers(previousBufferPool)
+ }
+ }
+
+ val frontBufferedLayerRenderer =
+ createFrontBufferedLayerRenderer(frontBufferedSurfaceControl)
+ mFrontBufferedRenderTarget = mGLRenderer.createRenderTarget(
+ width,
+ height,
+ frontBufferedLayerRenderer
+ )
+
+ mFrontBufferedLayerRenderer = frontBufferedLayerRenderer
+ mFrontBufferedLayerSurfaceControl = frontBufferedSurfaceControl
+ mBufferPool = bufferPool
+ mWidth = width
+ mHeight = height
+ }
+ }
+
+ /**
+ * Determines whether or not the [GLFrontBufferedRenderer] is in a valid state. That is the
+ * [release] method has not been called.
+ * If this returns false, then subsequent calls to [renderFrontBufferedLayer], [commit], and
+ * [release] are ignored
+ *
+ * @return `true` if this [GLFrontBufferedRenderer] has been released, `false` otherwise
+ */
+ fun isValid(): Boolean = !mIsReleased
+
+ /**
+ * Render content to the front buffered layer providing optional parameters to be consumed in
+ * [Callback.onDrawFrontBufferedLayer].
+ * Additionally the parameter provided here will also be consumed in
+ * [Callback.onDrawDoubleBufferedLayer]
+ * when the corresponding [commit] method is invoked, which will include all [param]s in each
+ * call made to this method up to the corresponding [commit] call.
+ *
+ * If this [GLFrontBufferedRenderer] has been released, that is [isValid] returns `false`, this
+ * call is ignored.
+ *
+ * @param param Optional parameter to be consumed when rendering content into the commit layer
+ */
+ fun renderFrontBufferedLayer(param: T) {
+ if (isValid()) {
+ mFrontBufferQueueParams.add(param)
+ mParentBufferParamQueue.add(param)
+ mFrontBufferedRenderTarget?.requestRender()
+ } else {
+ Log.w(TAG, "Attempt to render to front buffered layer when " +
+ "GLFrontBufferedRenderer has been released")
+ }
+ }
+
+ /**
+ * Clears the contents of both the front and double buffered layers. This triggers a call to
+ * [Callback.onDoubleBufferedLayerRenderComplete] and hides the front buffered layer.
+ */
+ fun clear() {
+ clearParamQueues()
+ mFrontBufferedLayerRenderer?.clear()
+ mParentRenderLayer.clear()
+ }
+
+ /**
+ * Requests to render the entire scene to the double buffered layer and schedules a call to
+ * [Callback.onDoubleBufferedLayerRenderComplete]. The parameters provided to
+ * [Callback.onDoubleBufferedLayerRenderComplete] will include each argument provided to every
+ * [renderFrontBufferedLayer] call since the last call to [commit] has been made.
+ *
+ * If this [GLFrontBufferedRenderer] has been released, that is [isValid] returns `false`,
+ * this call is ignored.
+ */
+ fun commit() {
+ if (isValid()) {
+ mDoubleBufferedLayerRenderTarget?.requestRender()
+ mFrontBufferedLayerRenderer?.clear()
+ } else {
+ Log.w(TAG, "Attempt to render to the double buffered layer when " +
+ "GLFrontBufferedRenderer has been released")
+ }
+ }
+
+ /**
+ * Releases the [GLFrontBufferedRenderer] and provides an optional callback that is invoked when
+ * the [GLFrontBufferedRenderer] is fully torn down. If the [cancelPending] flag is true, all
+ * pending requests to render into the front or double buffered layers will be processed before
+ * the [GLFrontBufferedRenderer] is torn down. Otherwise all in process requests are ignored.
+ * If the [GLFrontBufferedRenderer] is already released, that is [isValid] returns `false`, this
+ * method does nothing.
+ *
+ * @param cancelPending Flag indicating that requests to render should be processed before
+ * the [GLFrontBufferedRenderer] is released
+ * @param onReleaseComplete Optional callback invoked when the [GLFrontBufferedRenderer] has
+ * been released. This callback is invoked on the backing GLThread
+ */
+ @JvmOverloads
+ fun release(cancelPending: Boolean, onReleaseComplete: (() -> Unit)? = null) {
+ if (!isValid()) {
+ Log.w(TAG, "Attempt to release GLFrontbufferedRenderer that is already released")
+ return
+ }
+ // Wrap the callback into a separate lambda to ensure it is invoked only after
+ // both the front and double buffered layer target renderers are detached
+ var callbackCount = 0
+ var expectedCount = 0
+ if (mFrontBufferedRenderTarget?.isAttached() == true) {
+ expectedCount++
+ }
+
+ if (mDoubleBufferedLayerRenderTarget?.isAttached() == true) {
+ expectedCount++
+ }
+ val frontBufferedLayerSurfaceControl = mFrontBufferedLayerSurfaceControl
+ val wrappedCallback: (GLRenderer.RenderTarget) -> Unit = {
+ callbackCount++
+ if (callbackCount >= expectedCount) {
+ mBufferPool?.let { releaseBuffers(it) }
+ clearParamQueues()
+
+ frontBufferedLayerSurfaceControl?.let {
+ val transaction = SurfaceControlCompat.Transaction()
+ .reparent(it, null)
+ mParentRenderLayer.release(transaction)
+ transaction.commit()
+ it.release()
+ }
+
+ onReleaseComplete?.invoke()
+ }
+ }
+ mFrontBufferedRenderTarget?.detach(cancelPending, wrappedCallback)
+ mDoubleBufferedLayerRenderTarget?.detach(cancelPending, wrappedCallback)
+ mFrontBufferedRenderTarget = null
+ mDoubleBufferedLayerRenderTarget = null
+
+ mGLRenderer.unregisterEglContextCallback(mContextCallbacks)
+ if (mIsManagingGLRenderer) {
+ // If we are managing the GLRenderer that we created ourselves
+ // do not cancel pending operations as we will miss callbacks that we are
+ // expecting above to properly teardown resources
+ // Instead rely on the cancel pending flags for detaching the front/double buffered
+ // render targets instead
+ mGLRenderer.stop(false)
+ }
+
+ mFrontBufferedLayerSurfaceControl = null
+ mParentRenderLayer.setParentLayerCallbacks(null)
+ mIsReleased = true
+ }
+
+ private fun createFrontBufferedLayerRenderer(
+ frontBufferedLayerSurfaceControl: SurfaceControlCompat
+ ) = HardwareBufferRenderer(
+ object : HardwareBufferRenderer.RenderCallbacks {
+
+ @WorkerThread
+ override fun obtainRenderBuffer(egl: EglSpec): RenderBuffer {
+ var buffer = mFrontLayerBuffer
+ if (buffer == null) {
+ // Allocate and persist a RenderBuffer instance across frames
+ buffer = mBufferPool?.obtain(egl).also { mFrontLayerBuffer = it }
+ ?: throw IllegalArgumentException("Unable to obtain RenderBuffer")
+ }
+ return buffer
+ }
+
+ @WorkerThread
+ override fun onDraw(eglManager: EglManager) {
+ try {
+ // Explicitly call remove in order to delineate between scenarios where
+ // no parameters are provided and the consumer explicitly supports nullable
+ // parameters.
+ // If poll was used instead, we would not be able to determine if the nullable
+ // parameter was because there were no items in the queue or the consumer
+ // explicitly provided null as a placeholder
+ mCallback.onDrawFrontBufferedLayer(eglManager, mFrontBufferQueueParams.remove())
+ } catch (_: NoSuchElementException) {
+ // Skip rendering if we have been told to render but we do not have parameters
+ // Because the call to render to the front buffer takes in a parameter we should
+ // not run into this scenario.
+ }
+ }
+
+ @WorkerThread
+ override fun onDrawComplete(renderBuffer: RenderBuffer) {
+ val transaction = SurfaceControlCompat.Transaction()
+ // Make this layer the top most layer
+ .setLayer(frontBufferedLayerSurfaceControl, Integer.MAX_VALUE)
+ .setBuffer(
+ frontBufferedLayerSurfaceControl,
+ renderBuffer.hardwareBuffer,
+ null
+ )
+ .setVisibility(frontBufferedLayerSurfaceControl, true)
+ mParentRenderLayer.buildReparentTransaction(
+ frontBufferedLayerSurfaceControl, transaction)
+ mCallback.onFrontBufferedLayerRenderComplete(
+ frontBufferedLayerSurfaceControl,
+ transaction
+ )
+ transaction.commit()
+ }
+ }
+ )
+
+ private fun clearParamQueues() {
+ mFrontBufferQueueParams.clear()
+ mParentBufferParamQueue.clear()
+ }
+
+ /**
+ * Release the buffers associated with the front buffered layer as well as the
+ * [RenderBufferPool]
+ */
+ internal fun releaseBuffers(pool: RenderBufferPool) {
+ mFrontLayerBuffer?.let {
+ pool.release(it)
+ mFrontLayerBuffer = null
+ }
+ pool.close()
+ }
+
+ companion object {
+
+ internal const val TAG = "GLFrontBufferedRenderer"
+
+ /**
+ * Flags that are expected to be supported on all [HardwareBuffer] instances
+ */
+ private const val BaseFlags = HardwareBuffer.USAGE_COMPOSER_OVERLAY or
+ HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE or
+ HardwareBuffer.USAGE_GPU_COLOR_OUTPUT
+
+ internal fun supportsFrontBufferUsage(): Boolean =
+ // Query to determine if the USAGE_FRONT_BUFFER flag is supported
+ // Even though it is introduced in Android T, not all devices may support
+ // this flag so we query a sample HardwareBuffer of 1 x 1 pixels with
+ // the RGBA_8888 format along with the USAGE_FRONT_BUFFER flag to see if it is
+ // compatible
+ HardwareBuffer.isSupported(
+ 1, // width
+ 1, // height
+ HardwareBuffer.RGBA_8888, // format
+ 1, // layers,
+ BaseFlags or
+ HardwareBuffer.USAGE_FRONT_BUFFER
+ )
+
+ internal fun obtainHardwareBufferUsageFlags(): Long =
+ BaseFlags or
+ // Conditionally introduce the front buffer usage flag if it is supported
+ if (supportsFrontBufferUsage()) HardwareBuffer.USAGE_FRONT_BUFFER else 0
+ }
+
+ /**
+ * Provides callbacks for consumers to draw into the front and double buffered layers as well as
+ * provide opportunities to synchronize [SurfaceControlCompat.Transaction]s to submit the layers
+ * to the hardware compositor.
+ */
+ interface Callback<T> {
+
+ /**
+ * Callback invoked to render content into the front buffered layer with the specified
+ * parameters.
+ * @param eglManager [EglManager] useful in configuring EGL objects to be used when issuing
+ * OpenGL commands to render into the front buffered layer
+ * @param param optional parameter provided the corresponding
+ * [GLFrontBufferedRenderer.renderFrontBufferedLayer] method that triggered this request to render
+ * into the front buffered layer
+ */
+ @WorkerThread
+ fun onDrawFrontBufferedLayer(eglManager: EglManager, param: T)
+
+ /**
+ * Callback invoked to render content into the doubled buffered layer with the specified
+ * parameters.
+ * @param eglManager [EglManager] useful in configuring EGL objects to be used when issuing
+ * OpenGL commands to render into the double buffered layer
+ * @param params optional parameter provided to render the entire scene into the double
+ * buffered layer.
+ * This is a collection of all parameters provided in consecutive invocations to
+ * [GLFrontBufferedRenderer.renderFrontBufferedLayer] since the last call to
+ * [GLFrontBufferedRenderer.commit] has been made. After [GLFrontBufferedRenderer.commit]
+ * is invoked, this collection is cleared and new
+ * parameters are added on each subsequent call to
+ * [GLFrontBufferedRenderer.renderFrontBufferedLayer].
+ *
+ * Consider the following example:
+ *
+ * myFrontBufferedRenderer.renderFrontBufferedLayer(1)
+ * myFrontBufferedRenderer.renderFrontBufferedLayer(2)
+ * myFrontBufferedRenderer.renderFrontBufferedLayer(3)
+ * myFrontBufferedRenderer.commit()
+ *
+ * This will generate a callback to this method with the params collection containing values
+ * [1, 2, 3]
+ *
+ * myFrontBufferedRenderer.renderFrontBufferedLayer(4)
+ * myFrontBufferedRenderer.renderFrontBufferedLayer(5)
+ * myFrontBufferedRenderer.commit()
+ *
+ * This will generate a callback to this method with the params collection containing values
+ * [4, 5]
+ */
+ @WorkerThread
+ fun onDrawDoubleBufferedLayer(eglManager: EglManager, params: Collection<T>)
+
+ /**
+ * Optional callback invoked when rendering to the front buffered layer is complete but
+ * before the buffers are submitted to the hardware compositor.
+ * This provides consumers a mechanism for synchronizing the transaction with other
+ * [SurfaceControlCompat] objects that maybe rendered within the scene.
+ *
+ * @param frontBufferedLayerSurfaceControl Handle to the [SurfaceControlCompat] where the
+ * front buffered layer content is drawn. This can be used to configure various properties
+ * of the [SurfaceControlCompat] like z-ordering or visibility with the corresponding
+ * [SurfaceControlCompat.Transaction].
+ * @param transaction Current [SurfaceControlCompat.Transaction] to apply updated buffered
+ * content to the front buffered layer.
+ */
+ @WorkerThread
+ fun onFrontBufferedLayerRenderComplete(
+ frontBufferedLayerSurfaceControl: SurfaceControlCompat,
+ transaction: SurfaceControlCompat.Transaction
+ ) {
+ // Default implementation is a no-op
+ }
+
+ /**
+ * Optional callback invoked when rendering to the double buffered layer is complete but
+ * before the buffers are submitted to the hardware compositor.
+ * This provides consumers a mechanism for synchronizing the transaction with other
+ * [SurfaceControlCompat] objects that maybe rendered within the scene.
+ *
+ * @param frontBufferedLayerSurfaceControl Handle to the [SurfaceControlCompat] where the
+ * front buffered layer content is drawn. This can be used to configure various properties
+ * of the [SurfaceControlCompat] like z-ordering or visibility with the corresponding
+ * [SurfaceControlCompat.Transaction].
+ * @param transaction Current [SurfaceControlCompat.Transaction] to apply updated buffered
+ * content to the double buffered layer.
+ */
+ @WorkerThread
+ fun onDoubleBufferedLayerRenderComplete(
+ frontBufferedLayerSurfaceControl: SurfaceControlCompat,
+ transaction: SurfaceControlCompat.Transaction
+ ) {
+ // Default implementation is a no-op
+ }
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/HardwareBufferRenderer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/HardwareBufferRenderer.kt
new file mode 100644
index 0000000..7b0b078
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/HardwareBufferRenderer.kt
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.lowlatency
+
+import android.hardware.HardwareBuffer
+import android.opengl.EGLConfig
+import android.opengl.EGLSurface
+import android.opengl.GLES20
+import android.os.Build
+import android.view.Surface
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.GLRenderer
+import androidx.graphics.opengl.egl.EglManager
+import androidx.graphics.opengl.egl.EglSpec
+import java.util.concurrent.atomic.AtomicBoolean
+
+/**
+ * [GLRenderer.RenderCallback] implementation that renders content into a frame buffer object
+ * backed by a [HardwareBuffer] object
+ */
+@RequiresApi(Build.VERSION_CODES.O)
+internal class HardwareBufferRenderer(
+ private val hardwareBufferRendererCallbacks: RenderCallbacks
+) : GLRenderer.RenderCallback {
+
+ private val mClear = AtomicBoolean(false)
+
+ override fun onSurfaceCreated(
+ spec: EglSpec,
+ config: EGLConfig,
+ surface: Surface,
+ width: Int,
+ height: Int
+ ): EGLSurface? = null
+
+ fun clear() {
+ mClear.set(true)
+ }
+
+ override fun onDrawFrame(eglManager: EglManager) {
+ val egl = eglManager.eglSpec
+ val buffer = hardwareBufferRendererCallbacks.obtainRenderBuffer(egl)
+ var renderFence: RenderFence? = null
+ try {
+ buffer.makeCurrent()
+ if (mClear.getAndSet(false)) {
+ GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ } else {
+ hardwareBufferRendererCallbacks.onDraw(eglManager)
+ }
+ GLES20.glFlush()
+ renderFence = RenderFence(egl)
+ renderFence.awaitForever()
+ // At this point the HardwareBuffer has the contents of the GL rendering
+ // Create a surface Control transaction to dispatch this request
+ hardwareBufferRendererCallbacks.onDrawComplete(buffer)
+ } finally {
+ renderFence?.close()
+ }
+ }
+
+ /**
+ * Callbacks invoked to render content leveraging a [HardwareBufferRenderer]
+ */
+ interface RenderCallbacks {
+
+ /**
+ * Obtain a [RenderBuffer] to render content into. The [RenderBuffer] obtained here
+ * is expected to be managed by the consumer of [HardwareBufferRenderer]. That is
+ * callers of this API are expected to be maintaining a reference to the returned
+ * [RenderBuffer] here and calling [RenderBuffer.close] where appropriate as this will
+ * these instances will not be released by [HardwareBufferRenderer]
+ */
+ fun obtainRenderBuffer(egl: EglSpec): RenderBuffer
+
+ /**
+ * Draw contents into the [HardwareBuffer]
+ */
+ fun onDraw(eglManager: EglManager)
+
+ /**
+ * Callback when [onDraw] is complete and the contents of the draw
+ * are reflected in the corresponding [HardwareBuffer]
+ */
+ fun onDrawComplete(renderBuffer: RenderBuffer)
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/ParentRenderLayer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/ParentRenderLayer.kt
new file mode 100644
index 0000000..4a5ee23
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/ParentRenderLayer.kt
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.lowlatency
+
+import androidx.graphics.opengl.GLRenderer
+import androidx.graphics.surface.SurfaceControlCompat
+
+/**
+ * Interface used to define a parent for rendering front and double buffered layers.
+ * This provides the following facilities:
+ *
+ * 1) Specifying a parent [SurfaceControlCompat] for a front buffered layer
+ * 2) Creating a [GLRenderer.RenderTarget] for rendering double buffered layer
+ * 3) Providing callbacks for consumers to know when to recreate dependencies based on
+ * the size/state of the parent, as well as allowing consumers to provide parameters
+ * to implementations of front/double buffered layers
+ */
+internal interface ParentRenderLayer<T> {
+ /**
+ * Modify the provided [SurfaceControlCompat.Transaction] to reparent the provided
+ * child [SurfaceControlCompat] to a [SurfaceControlCompat] provided by the parent rendering
+ * layer
+ */
+ fun buildReparentTransaction(
+ child: SurfaceControlCompat,
+ transaction: SurfaceControlCompat.Transaction,
+ )
+
+ /**
+ * Create a [GLRenderer.RenderTarget] instance for the parent rendering layer given
+ * a [GLRenderer] and corresponding [GLRenderer.RenderCallback]
+ */
+ fun createRenderTarget(
+ renderer: GLRenderer,
+ renderLayerCallback: GLFrontBufferedRenderer.Callback<T>
+ ): GLRenderer.RenderTarget
+
+ /**
+ * Configure the callbacks on this [ParentRenderLayer] instance
+ * @param callback [Callback] specified on [ParentRenderLayer]. This can be null to remove
+ * the previously set [Callback]
+ */
+ fun setParentLayerCallbacks(callback: Callback<T>?)
+
+ /**
+ * Clear the contents of the parent buffer. This triggers a call to
+ * [GLFrontBufferedRenderer.Callback.onDoubleBufferedLayerRenderComplete] to update the
+ * buffer shown for the dry layer as well as hides the front buffered layer.
+ */
+ fun clear()
+
+ /**
+ * Release all resources associated with this [ParentRenderLayer] instance
+ */
+ fun release(transaction: SurfaceControlCompat.Transaction)
+
+ /**
+ * Callbacks to be implemented by the consumer of [ParentRenderLayer] to be alerted
+ * of size changes or if the [ParentRenderLayer] is destroyed as well as providing a mechanism
+ * to expose parameters for rendering front/double buffered layers
+ */
+ interface Callback<T> {
+ /**
+ * Callback invoked whenever the size of the [ParentRenderLayer] changes.
+ * Consumers can leverage this to initialize appropriate buffer sizes and
+ * [SurfaceControlCompat] instances
+ */
+ fun onSizeChanged(width: Int, height: Int)
+
+ /**
+ * Callback invoked when the [ParentRenderLayer] is destroyed. This can be in response
+ * to the corresponding View backing the [ParentRenderLayer] is being detached/removed
+ * from the View hierarchy
+ */
+ fun onLayerDestroyed()
+
+ /**
+ * Callback invoked by the [ParentRenderLayer] to query the parameters since the last
+ * render to the dry layer. This includes all parameters to each request to render content
+ * to the front buffered layer since the last time the dry layer was re-rendered.
+ * This is useful for recreating the entire scene when front buffered layer contents are to
+ * be committed, that is the entire scene is re-rendered into the double buffered layer.
+ */
+ fun obtainDoubleBufferedLayerParams(): MutableCollection<T>
+
+ /**
+ * Obtain a handle to the front buffered layer [SurfaceControlCompat] to be used in
+ * transactions to atomically update double buffered layer content as well as hiding the
+ * visibility of the front buffered layer
+ */
+ fun getFrontBufferedLayerSurfaceControl(): SurfaceControlCompat?
+
+ /**
+ * Obtain a handle to the [RenderBufferPool] to get [RenderBuffer] instances for
+ * rendering to front and double buffered layers
+ */
+ fun getRenderBufferPool(): RenderBufferPool?
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderBuffer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderBuffer.kt
new file mode 100644
index 0000000..0f0b589
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderBuffer.kt
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.lowlatency
+
+import android.hardware.HardwareBuffer
+import android.opengl.GLES20
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.egl.EglSpec
+import androidx.opengl.EGLExt
+import androidx.opengl.EGLImageKHR
+
+/**
+ * Object that enables rendering into a [HardwareBuffer] by
+ * creating a frame buffer object from it by leveraging Android
+ * specific EGL extensions to create an [EGLImageKHR] object
+ * that is loaded as a texture.
+ */
+@RequiresApi(Build.VERSION_CODES.O)
+internal class RenderBuffer(
+ private val egl: EglSpec,
+ val hardwareBuffer: HardwareBuffer,
+) {
+
+ private var eglImage: EGLImageKHR?
+ private var texture: Int = -1
+ private var frameBuffer: Int = -1
+ var isClosed = false
+ private set
+
+ // Int array used for creation of fbos/textures
+ private val buffer = IntArray(1)
+
+ init {
+ val image: EGLImageKHR = egl.eglCreateImageFromHardwareBuffer(hardwareBuffer)
+ ?: throw IllegalArgumentException("Unable to create EGLImage from HardwareBuffer")
+ eglImage = image
+
+ GLES20.glGenTextures(1, buffer, 0)
+ texture = buffer[0]
+
+ GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture)
+ EGLExt.glEGLImageTargetTexture2DOES(GLES20.GL_TEXTURE_2D, image)
+
+ GLES20.glGenFramebuffers(1, buffer, 0)
+ frameBuffer = buffer[0]
+ }
+
+ fun makeCurrent() {
+ if (!isClosed) {
+ GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, frameBuffer)
+ GLES20.glFramebufferTexture2D(
+ GLES20.GL_FRAMEBUFFER,
+ GLES20.GL_COLOR_ATTACHMENT0,
+ GLES20.GL_TEXTURE_2D,
+ texture,
+ 0
+ )
+ }
+ }
+
+ fun close() {
+ buffer[0] = frameBuffer
+ GLES20.glDeleteBuffers(1, buffer, 0)
+ frameBuffer = -1
+
+ buffer[0] = texture
+ GLES20.glDeleteTextures(1, buffer, 0)
+ texture = -1
+
+ eglImage?.let { egl.eglDestroyImageKHR(it) }
+ eglImage = null
+ hardwareBuffer.close()
+ isClosed = true
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderBufferPool.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderBufferPool.kt
new file mode 100644
index 0000000..f8f08ce
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderBufferPool.kt
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.lowlatency
+
+import android.hardware.HardwareBuffer
+import android.os.Build
+import android.util.Log
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.egl.EglSpec
+import java.util.concurrent.locks.ReentrantLock
+import kotlin.concurrent.withLock
+
+/**
+ * Allocation pool used for the creation and reuse of [RenderBuffer] instances.
+ * This class is thread safe.
+ */
+@RequiresApi(Build.VERSION_CODES.Q)
+internal class RenderBufferPool(
+ /**
+ * Width of the [HardwareBuffer] objects to allocate if none are available in the pool
+ */
+ private val width: Int,
+
+ /**
+ * Height of the [HardwareBuffer] objects to allocate if none are available in the pool
+ */
+ private val height: Int,
+
+ /**
+ * Format of the [HardwareBuffer] objects to allocate if none are available in the pool
+ */
+ private val format: Int,
+
+ /**
+ * Usage hint flag of the [HardwareBuffer] objects to allocate if none are available in the pool
+ */
+ private val usage: Long,
+
+ /**
+ * Maximum size that the pool before additional requests to allocate buffers blocks until
+ * another [RenderBuffer] is released. Must be greater than 0.
+ */
+ private val maxPoolSize: Int
+) {
+
+ private val mPool = ArrayList<RenderBuffer>()
+ private var mNumAllocated = 0
+ private val mLock = ReentrantLock()
+ private val mCondition = mLock.newCondition()
+
+ init {
+ if (maxPoolSize <= 0) {
+ throw IllegalArgumentException("Pool size must be at least 1")
+ }
+ }
+
+ /**
+ * Obtains a [RenderBuffer] instance. This will either return a [RenderBuffer] if one is
+ * available within the pool, or creates a new [RenderBuffer] instance if the number of
+ * outstanding [RenderBuffer] instances is less than [maxPoolSize]
+ */
+ fun obtain(eglSpec: EglSpec): RenderBuffer {
+ mLock.withLock {
+ while (mPool.isEmpty() && mNumAllocated >= maxPoolSize) {
+ Log.w(
+ TAG,
+ "Waiting for RenderBuffer to become available, current allocation " +
+ "count: $mNumAllocated"
+ )
+ mCondition.await()
+ }
+ return if (mPool.isNotEmpty()) {
+ val renderBuffer = mPool[mPool.size - 1]
+ mPool.removeAt(mPool.size - 1)
+ renderBuffer
+ } else {
+ mNumAllocated++
+ RenderBuffer(
+ eglSpec,
+ HardwareBuffer.create(
+ width,
+ height,
+ format,
+ 1,
+ usage
+ )
+ )
+ }
+ }
+ }
+
+ /**
+ * Releases the given [RenderBuffer] back to the pool and signals all
+ * consumers that are currently waiting for a buffer to become available
+ * via [RenderBufferPool.obtain]
+ * This method is thread safe.
+ */
+ fun release(renderBuffer: RenderBuffer) {
+ mLock.withLock {
+ mPool.add(renderBuffer)
+ mCondition.signal()
+ }
+ }
+
+ /**
+ * Invokes [RenderBuffer.close] on all [RenderBuffer] instances currently available within
+ * the pool and clears the pool.
+ * This method is thread safe.
+ */
+ fun close() {
+ mLock.withLock {
+ for (renderBuffer in mPool) {
+ renderBuffer.close()
+ }
+ mPool.clear()
+ mNumAllocated = 0
+ }
+ }
+
+ private companion object {
+ private const val TAG = "RenderBufferPool"
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderFence.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderFence.kt
new file mode 100644
index 0000000..c111ddd8
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/RenderFence.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.lowlatency
+
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.egl.EglSpec
+import androidx.hardware.SyncFenceCompat
+import androidx.opengl.EGLExt
+import androidx.opengl.EGLSyncKHR
+
+/**
+ * Synchronization mechanism for inserting an [EGLSyncKHR] sync object
+ * within the list of GL Commands and associating it with a native
+ * Android fence represented by [SyncFenceCompat]
+ */
+@RequiresApi(Build.VERSION_CODES.KITKAT)
+internal class RenderFence(private val egl: EglSpec) : AutoCloseable {
+
+ private val eglSync: EGLSyncKHR =
+ egl.eglCreateSyncKHR(EGLExt.EGL_SYNC_NATIVE_FENCE_ANDROID, null)
+ ?: throw IllegalArgumentException("Unable to create sync object")
+
+ private val syncFence: SyncFenceCompat = egl.eglDupNativeFenceFDANDROID(eglSync)
+
+ fun await(timeoutNanos: Long): Boolean =
+ syncFence.await(timeoutNanos)
+
+ fun awaitForever(): Boolean =
+ syncFence.awaitForever()
+
+ override fun close() {
+ egl.eglDestroySyncKHR(eglSync)
+ syncFence.close()
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SurfaceViewRenderLayer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SurfaceViewRenderLayer.kt
new file mode 100644
index 0000000..3d2f862
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/lowlatency/SurfaceViewRenderLayer.kt
@@ -0,0 +1,164 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.lowlatency
+
+import android.opengl.GLES20
+import android.os.Build
+import android.util.Log
+import android.view.SurfaceHolder
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.GLRenderer
+import androidx.graphics.opengl.egl.EglManager
+import androidx.graphics.opengl.egl.EglSpec
+import androidx.graphics.surface.SurfaceControlCompat
+import java.util.Collections
+
+/**
+ * [ParentRenderLayer] instance that leverages a [SurfaceView]'s [SurfaceControlCompat] as the
+ * parent [SurfaceControlCompat] for the front and double buffered layers
+ */
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+internal class SurfaceViewRenderLayer<T>(
+ private val surfaceView: SurfaceView
+) : ParentRenderLayer<T> {
+
+ private var mLayerCallback: ParentRenderLayer.Callback<T>? = null
+ private var mHardwareBufferRenderer: HardwareBufferRenderer? = null
+ private var mRenderTarget: GLRenderer.RenderTarget? = null
+ private var mParentSurfaceControl: SurfaceControlCompat? = null
+
+ override fun buildReparentTransaction(
+ child: SurfaceControlCompat,
+ transaction: SurfaceControlCompat.Transaction
+ ) {
+ transaction.reparent(child, surfaceView)
+ }
+
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ override fun createRenderTarget(
+ renderer: GLRenderer,
+ renderLayerCallback: GLFrontBufferedRenderer.Callback<T>
+ ): GLRenderer.RenderTarget {
+ val hardwareBufferRenderer = HardwareBufferRenderer(
+ object : HardwareBufferRenderer.RenderCallbacks {
+
+ override fun obtainRenderBuffer(egl: EglSpec): RenderBuffer =
+ mLayerCallback?.getRenderBufferPool()?.obtain(egl)
+ ?: throw IllegalArgumentException("No RenderBufferPool available")
+
+ override fun onDraw(eglManager: EglManager) {
+ GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f)
+ GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
+ val params = mLayerCallback?.obtainDoubleBufferedLayerParams()
+ if (params != null) {
+ renderLayerCallback.onDrawDoubleBufferedLayer(eglManager, params)
+ params.clear()
+ } else {
+ renderLayerCallback.onDrawDoubleBufferedLayer(
+ eglManager,
+ Collections.emptyList()
+ )
+ }
+ }
+
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ override fun onDrawComplete(renderBuffer: RenderBuffer) {
+ val frontBufferedLayerSurfaceControl = mLayerCallback
+ ?.getFrontBufferedLayerSurfaceControl()
+ val sc = mParentSurfaceControl
+ // At this point the parentSurfaceControl should already be created
+ // in the surfaceChanged callback, however, if for whatever reason this
+ // was not the case, create the double buffered SurfaceControl now and cache
+ // it
+ ?: createDoubleBufferedSurfaceControl().also {
+ mParentSurfaceControl = it
+ }
+ if (frontBufferedLayerSurfaceControl != null) {
+ val transaction = SurfaceControlCompat.Transaction()
+ .setVisibility(frontBufferedLayerSurfaceControl, false)
+ .setVisibility(sc, true)
+ .setBuffer(sc, renderBuffer.hardwareBuffer) {
+ mLayerCallback?.getRenderBufferPool()?.release(renderBuffer)
+ }
+
+ renderLayerCallback.onDoubleBufferedLayerRenderComplete(
+ frontBufferedLayerSurfaceControl,
+ transaction
+ )
+ transaction.commit()
+ } else {
+ Log.e(TAG, "Error, no front buffered SurfaceControl available to " +
+ "synchronize transaction with")
+ }
+ }
+ })
+ surfaceView.holder.addCallback(object : SurfaceHolder.Callback {
+
+ override fun surfaceCreated(holder: SurfaceHolder) {
+ // NO-OP wait on surfaceChanged callback
+ }
+
+ override fun surfaceChanged(
+ holder: SurfaceHolder,
+ format: Int,
+ width: Int,
+ height: Int
+ ) {
+ mParentSurfaceControl?.release()
+ mLayerCallback?.onSizeChanged(width, height)
+ mParentSurfaceControl = createDoubleBufferedSurfaceControl()
+ }
+
+ override fun surfaceDestroyed(p0: SurfaceHolder) {
+ mLayerCallback?.onLayerDestroyed()
+ }
+ })
+ val renderTarget = renderer.attach(surfaceView, hardwareBufferRenderer)
+ mRenderTarget = renderTarget
+ mHardwareBufferRenderer = hardwareBufferRenderer
+ return renderTarget
+ }
+
+ internal fun createDoubleBufferedSurfaceControl(): SurfaceControlCompat =
+ SurfaceControlCompat.Builder()
+ .setParent(surfaceView)
+ .setName("DoubleBufferedLayer")
+ .build()
+
+ override fun setParentLayerCallbacks(callback: ParentRenderLayer.Callback<T>?) {
+ mLayerCallback = callback
+ }
+
+ override fun clear() {
+ mHardwareBufferRenderer?.clear()
+ mRenderTarget?.requestRender()
+ }
+
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ override fun release(transaction: SurfaceControlCompat.Transaction) {
+ mParentSurfaceControl?.let {
+ transaction.reparent(it, null)
+ it.release()
+ }
+ mParentSurfaceControl = null
+ }
+
+ internal companion object {
+ internal const val TAG = "SurfaceViewRenderLayer"
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLRenderer.kt b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLRenderer.kt
new file mode 100644
index 0000000..2154a0b
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLRenderer.kt
@@ -0,0 +1,734 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.opengl
+
+import android.graphics.SurfaceTexture
+import android.opengl.EGL14
+import android.opengl.EGLConfig
+import android.opengl.EGLSurface
+import android.view.Surface
+import android.view.SurfaceHolder
+import android.view.SurfaceView
+import android.view.TextureView
+import androidx.annotation.WorkerThread
+import androidx.graphics.opengl.egl.EglConfigAttributes8888
+import androidx.graphics.opengl.egl.EglManager
+import androidx.graphics.opengl.egl.EglSpec
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.atomic.AtomicInteger
+
+/**
+ * Class responsible for coordination of requests to render into surfaces using OpenGL.
+ * This creates a backing thread to handle EGL dependencies and draw leveraging OpenGL across
+ * multiple [android.view.Surface] instances that can be attached and detached throughout
+ * the lifecycle of an application. Usage of this class is recommended to be done on the UI thread.
+ *
+ * @param eglSpecFactory Callback invoked to determine the EGL spec version to use
+ * for EGL management. This is invoked on the GL Thread
+ * @param eglConfigFactory Callback invoked to determine the appropriate EGLConfig used
+ * to create the EGL context. This is invoked on the GL Thread
+ */
+// GL is the industry standard for referencing OpenGL vs Gl (lowercase l)
+@Suppress("AcronymName")
+class GLRenderer(
+ eglSpecFactory: () -> EglSpec = { EglSpec.Egl14 },
+ eglConfigFactory: EglManager.() -> EGLConfig = {
+ // 8 bit channels should always be supported
+ loadConfig(EglConfigAttributes8888)
+ ?: throw IllegalStateException("Unable to obtain config for 8 bit EGL " +
+ "configuration")
+ }
+) {
+
+ /**
+ * Factory method to determine which EglSpec the underlying EglManager implementation uses
+ */
+ private val mEglSpecFactory: () -> EglSpec = eglSpecFactory
+
+ /**
+ * Factory method used to create the corresponding EGLConfig used to create the EGLRenderer used
+ * by EglManager
+ */
+ private val mEglConfigFactory: EglManager.() -> EGLConfig = eglConfigFactory
+
+ /**
+ * GLThread used to manage EGL dependencies, create EGLSurfaces and draw content
+ */
+ private var mGLThread: GLThread? = null
+
+ /**
+ * Collection of [RenderTarget] instances that are managed by the GLRenderer
+ */
+ private val mRenderTargets = ArrayList<RenderTarget>()
+
+ /**
+ * Collection of callbacks to be invoked when the EGL dependencies are initialized
+ * or torn down
+ */
+ private val mEglContextCallback = HashSet<EglContextCallback>()
+
+ /**
+ * Removes the corresponding [RenderTarget] from management of the GLThread.
+ * This destroys the EGLSurface associated with this surface and subsequent requests
+ * to render into the surface with the provided token are ignored.
+ *
+ * If the [cancelPending] flag is set to true, any queued request
+ * to render that has not started yet is cancelled. However, if this is invoked in the
+ * middle of the frame being rendered, it will continue to process the current frame.
+ *
+ * Additionally if this flag is false, all pending requests to render will be processed
+ * before the [RenderTarget] is detached.
+ *
+ * Note the detach operation will only occur if the GLRenderer is started, that is if
+ * [isRunning] returns true. Otherwise this is a no-op. GLRenderer will automatically detach all
+ * [RenderTarget] instances as part of its teardown process.
+ */
+ @JvmOverloads
+ fun detach(
+ target: RenderTarget,
+ cancelPending: Boolean,
+ @WorkerThread onDetachComplete: ((RenderTarget) -> Unit)? = null
+ ) {
+ if (mRenderTargets.contains(target)) {
+ mGLThread?.detachSurface(target.token, cancelPending) {
+ // WorkerThread
+ target.release()
+ target.onDetach.invoke()
+ onDetachComplete?.invoke(target)
+ }
+ mRenderTargets.remove(target)
+ }
+ }
+
+ /**
+ * Determines if the GLThread has been started. That is [start] has been invoked
+ * on this GLRenderer instance without a corresponding call to [stop].
+ */
+ fun isRunning(): Boolean = mGLThread != null
+
+ /**
+ * Starts the GLThread. After this method is called, consumers can attempt
+ * to attach [android.view.Surface] instances through [attach] as well as
+ * schedule content to be drawn through [requestRender]
+ *
+ * @param name Optional name to provide to the GLThread
+ *
+ * @throws IllegalStateException if EGLConfig with desired attributes cannot be created
+ */
+ @JvmOverloads
+ fun start(
+ name: String = "GLThread",
+ ) {
+ if (mGLThread == null) {
+ GLThread.log("starting thread...")
+ mGLThread = GLThread(
+ name,
+ mEglSpecFactory,
+ mEglConfigFactory
+ ).apply {
+ start()
+ if (!mEglContextCallback.isEmpty()) {
+ // Add a copy of the current collection as new entries to mEglContextCallback
+ // could be mistakenly added multiple times.
+ this.addEglCallbacks(ArrayList<EglContextCallback>(mEglContextCallback))
+ }
+ }
+ }
+ }
+
+ /**
+ * Mark the corresponding surface session with the given token as dirty
+ * to schedule a call to [RenderCallback#onDrawFrame].
+ * If there is already a queued request to render into the provided surface with
+ * the specified token, this request is ignored.
+ *
+ * Note the render operation will only occur if the GLRenderer is started, that is if
+ * [isRunning] returns true. Otherwise this is a no-op.
+ *
+ * @param target RenderTarget to be re-rendered
+ * @param onRenderComplete Optional callback invoked on the backing thread after the frame has
+ * been rendered.
+ */
+ @JvmOverloads
+ fun requestRender(target: RenderTarget, onRenderComplete: ((RenderTarget) -> Unit)? = null) {
+ val token = target.token
+ val callbackRunnable = if (onRenderComplete != null) {
+ Runnable {
+ onRenderComplete.invoke(target)
+ }
+ } else {
+ null
+ }
+ mGLThread?.requestRender(token, callbackRunnable)
+ }
+
+ /**
+ * Resize the corresponding surface associated with the RenderTarget to the specified
+ * width and height and re-render. This will destroy the EGLSurface created by
+ * [RenderCallback.onSurfaceCreated] and invoke it again with the updated dimensions.
+ * An optional callback is invoked on the backing thread after the resize operation
+ * is complete.
+ *
+ * Note the resize operation will only occur if the GLRenderer is started, that is if
+ * [isRunning] returns true. Otherwise this is a no-op.
+ *
+ * @param target RenderTarget to be resized
+ * @param width Updated width of the corresponding surface
+ * @param height Updated height of the corresponding surface
+ * @param onResizeComplete Optional callback invoked on the backing thread when the resize
+ * operation is complete
+ */
+ @JvmOverloads
+ fun resize(
+ target: RenderTarget,
+ width: Int,
+ height: Int,
+ onResizeComplete: ((RenderTarget) -> Unit)? = null
+ ) {
+ val token = target.token
+ val callbackRunnable = if (onResizeComplete != null) {
+ Runnable {
+ onResizeComplete.invoke(target)
+ }
+ } else {
+ null
+ }
+ mGLThread?.resizeSurface(token, width, height, callbackRunnable)
+ }
+
+ /**
+ * Stop the corresponding GL thread. This destroys all EGLSurfaces as well
+ * as any other EGL dependencies. All queued requests that have not been processed
+ * yet are cancelled.
+ *
+ * Note the stop operation will only occur if the GLRenderer was previously started, that is
+ * [isRunning] returns true. Otherwise this is a no-op.
+ *
+ * @param cancelPending If true all pending requests and cancelled and the backing thread is
+ * torn down immediately. If false, all pending requests are processed first before tearing
+ * down the backing thread. Subsequent requests made after this call are ignored.
+ * @param onStop Optional callback invoked on the backing thread after it is torn down.
+ */
+ @JvmOverloads
+ fun stop(cancelPending: Boolean, onStop: ((GLRenderer) -> Unit)? = null) {
+ GLThread.log("stopping thread...")
+ // Make a copy of the render targets to call cleanup operations on to avoid potential
+ // concurrency issues.
+ // This method will clear the existing collection and we do not want to potentially tear
+ // down a target that was attached after a subsequent call to start if the tear down
+ // callback execution is delayed if previously pending requests have not been cancelled
+ // (i.e. cancelPending is false)
+ val renderTargets = ArrayList(mRenderTargets)
+ mGLThread?.tearDown(cancelPending) {
+ // No need to call target.detach as this callback is invoked after
+ // the dependencies are cleaned up
+ for (target in renderTargets) {
+ target.release()
+ target.onDetach.invoke()
+ }
+ onStop?.invoke(this@GLRenderer)
+ }
+ mGLThread = null
+ mRenderTargets.clear()
+ }
+
+ /**
+ * Add an [EglContextCallback] to receive callbacks for construction and
+ * destruction of EGL dependencies.
+ *
+ * These callbacks are invoked on the backing thread.
+ */
+ fun registerEglContextCallback(callback: EglContextCallback) {
+ mEglContextCallback.add(callback)
+ mGLThread?.addEglCallback(callback)
+ }
+
+ /**
+ * Remove [EglContextCallback] to no longer receive callbacks for construction and
+ * destruction of EGL dependencies.
+ *
+ * These callbacks are invoked on the backing thread
+ */
+ fun unregisterEglContextCallback(callback: EglContextCallback) {
+ mEglContextCallback.remove(callback)
+ mGLThread?.removeEglCallback(callback)
+ }
+
+ /**
+ * Callbacks invoked when the GL dependencies are created and destroyed.
+ * These are logical places to setup and tear down any dependencies that are used
+ * for drawing content within a frame (ex. compiling shaders)
+ */
+ interface EglContextCallback {
+
+ /**
+ * Callback invoked on the backing thread after EGL dependencies are initialized.
+ * This is guaranteed to be invoked before any instance of
+ * [RenderCallback.onSurfaceCreated] is called.
+ * This will be invoked lazily before the first request to [GLRenderer.requestRender]
+ */
+ @WorkerThread
+ fun onEglContextCreated(eglManager: EglManager)
+
+ /**
+ * Callback invoked on the backing thread before EGL dependencies are about to be torn down.
+ * This is invoked after [GLRenderer.stop] is processed.
+ */
+ @WorkerThread
+ fun onEglContextDestroyed(eglManager: EglManager)
+ }
+
+ /**
+ * Interface used for creating an [EGLSurface] with a user defined configuration
+ * from the provided surface as well as a callback used to render content into the surface
+ * for a given frame
+ */
+ interface RenderCallback {
+ /**
+ * Used to create a corresponding [EGLSurface] from the provided
+ * [android.view.Surface] instance. This enables consumers to configure
+ * the corresponding [EGLSurface] they wish to render into.
+ * The [EGLSurface] created here is guaranteed to be the current surface
+ * before [onDrawFrame] is called. That is, implementations of onDrawFrame
+ * do not need to call eglMakeCurrent on this [EGLSurface].
+ *
+ * This method is invoked on the GL thread.
+ *
+ * The default implementation will create a window surface with EGL_WIDTH and EGL_HEIGHT
+ * set to [width] and [height] respectively.
+ * Implementations can override this method to provide additional EglConfigAttributes
+ * for this surface (ex. [EGL14.EGL_SINGLE_BUFFER].
+ *
+ * Implementations can return null to indicate the default surface should be used.
+ * This is helpful in situations where content is to be rendered within a frame buffer
+ * object instead of to an [EGLSurface]
+ *
+ * @param spec EGLSpec used to create the corresponding EGLSurface
+ * @param config EGLConfig used to create the corresponding EGLSurface
+ * @param surface [android.view.Surface] used to create an EGLSurface from
+ * @param width Desired width of the surface to create
+ * @param height Desired height of the surface to create
+ */
+ @WorkerThread
+ fun onSurfaceCreated(
+ spec: EglSpec,
+ config: EGLConfig,
+ surface: Surface,
+ width: Int,
+ height: Int
+ ): EGLSurface? =
+ // Always default to creating an EGL window surface
+ // Despite having access to the width and height here, do not explicitly
+ // pass in EGLConfigAttributes specifying the EGL_WIDTH and EGL_HEIGHT parameters
+ // as those are not accepted parameters for eglCreateWindowSurface but they are
+ // for other EGL Surface factory methods such as eglCreatePBufferSurface
+ // See accepted parameters here:
+ // https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglCreateWindowSurface.xhtml
+ // and here
+ // https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglCreatePbufferSurface.xhtml
+ spec.eglCreateWindowSurface(config, surface, null)
+
+ /**
+ * Callback used to issue OpenGL drawing commands into the [EGLSurface]
+ * created in [onSurfaceCreated]. This [EGLSurface] is guaranteed to
+ * be current before this callback is invoked and [EglManager.swapAndFlushBuffers]
+ * will be invoked afterwards. If additional scratch [EGLSurface]s are used
+ * here it is up to the implementation of this method to ensure that the proper
+ * surfaces are made current and the appropriate swap buffers call is made
+ *
+ * This method is invoked on the backing thread
+ *
+ * @param eglManager Handle to EGL dependencies
+ */
+ @WorkerThread
+ fun onDrawFrame(eglManager: EglManager)
+ }
+
+ /**
+ * Adds the [android.view.Surface] to be managed by the GLThread.
+ * A corresponding [EGLSurface] is created on the GLThread as well as a callback
+ * for rendering into the surface through [RenderCallback].
+ * Unlike the other [attach] methods that consume a [SurfaceView] or [TextureView],
+ * this method does not handle any lifecycle callbacks associated with the target surface.
+ * Therefore it is up to the consumer to properly setup/teardown resources associated with
+ * this surface.
+ *
+ * @param surface Target surface to be managed by the backing thread
+ * @param width Desired width of the [surface]
+ * @param height Desired height of the [surface]
+ * @param renderer Callbacks used to create a corresponding [EGLSurface] from the
+ * given surface as well as render content into the created [EGLSurface]
+ * @return [RenderTarget] used for subsequent requests to communicate
+ * with the provided Surface (ex. [requestRender] or [detach]).
+ *
+ * @throws IllegalStateException If this method was called when the GLThread has not started
+ * (i.e. start has not been called)
+ */
+ fun attach(surface: Surface, width: Int, height: Int, renderer: RenderCallback): RenderTarget {
+ val thread = mGLThread
+ if (thread != null) {
+ val token = sToken.getAndIncrement()
+ thread.attachSurface(token, surface, width, height, renderer)
+ return RenderTarget(token, this).also { mRenderTargets.add(it) }
+ } else {
+ throw IllegalStateException("GLThread not started, did you forget to call start?")
+ }
+ }
+
+ /**
+ * Creates a new [RenderTarget] without a corresponding [android.view.Surface].
+ * This avoids creation of an [EGLSurface] which is useful in scenarios where only
+ * rendering to a frame buffer object is required.
+ *
+ * @param width Desired width of the [RenderTarget]
+ * @param height Desired height of the [RenderTarget]
+ * @param renderer Callbacks used to issue OpenGL commands to the [RenderTarget]
+ * @return [RenderTarget] used for subsequent requests to render through
+ * [RenderTarget.requestRender] or to remove itself from the [GLRenderer] through
+ * [RenderTarget.detach]
+ *
+ * @throws IllegalStateException If this method was called when the GLThread has not started
+ * (i.e. start has not been called)
+ */
+ fun createRenderTarget(width: Int, height: Int, renderer: RenderCallback): RenderTarget {
+ val thread = mGLThread
+ if (thread != null) {
+ val token = sToken.getAndIncrement()
+ thread.attachSurface(
+ token,
+ null,
+ width,
+ height,
+ renderer
+ )
+ return RenderTarget(token, this).also { mRenderTargets.add(it) }
+ } else {
+ throw IllegalStateException("GLThread not started, did you forget to call start?")
+ }
+ }
+
+ /**
+ * Adds the [android.view.Surface] provided by the given [SurfaceView] to be managed by the
+ * backing thread.
+ *
+ * A corresponding [EGLSurface] is created on the GLThread as well as a callback
+ * for rendering into the surface through [RenderCallback].
+ *
+ * This method automatically configures a [SurfaceHolder.Callback] used to attach the
+ * [android.view.Surface] when the underlying [SurfaceHolder] that contains the surface is
+ * available. Similarly this surface will be detached from [GLRenderer] when the surface provided
+ * by the [SurfaceView] is destroyed (i.e. [SurfaceHolder.Callback.surfaceDestroyed] is called.
+ *
+ * If the [android.view.Surface] is already available by the time this method is invoked,
+ * it is attached synchronously.
+ *
+ * @param surfaceView SurfaceView that provides the surface to be rendered by the backing thread
+ * @param renderer callbacks used to create a corresponding [EGLSurface] from the
+ * given surface as well as render content into the created [EGLSurface]
+ * @return [RenderTarget] used for subsequent requests to communicate
+ * with the provided Surface (ex. [requestRender] or [detach]).
+ *
+ * @throws IllegalStateException If this method was called when the GLThread has not started
+ * (i.e. start has not been called)
+ */
+ fun attach(surfaceView: SurfaceView, renderer: RenderCallback): RenderTarget {
+ val thread = mGLThread
+ if (thread != null) {
+ val token = sToken.getAndIncrement()
+ val holder = surfaceView.holder
+ val callback = object : SurfaceHolder.Callback2 {
+
+ var isAttached = false
+
+ /**
+ * Optional condition that maybe used if we are issuing a blocking call to render
+ * in [SurfaceHolder.Callback2.surfaceRedrawNeeded]
+ * In this case we need to signal the condition of either the request to render
+ * has completed, or if the RenderTarget has been detached and the pending
+ * render request is cancelled.
+ */
+ @Volatile var renderLatch: CountDownLatch? = null
+
+ /**
+ * [CountDownLatch] used when issuing a blocking call to
+ * [SurfaceHolder.Callback.surfaceDestroyed]
+ * In this case we need to signal the condition of either the request to detach
+ * has completed in case the GLRenderer has been forcefully stopped via
+ * [GLRenderer.stop] with the cancel pending flag set to true.
+ */
+ val detachLatch: CountDownLatch = CountDownLatch(1)
+
+ val renderTarget = RenderTarget(token, this@GLRenderer) @WorkerThread {
+ isAttached = false
+ // SurfaceHolder.add/remove callback is thread safe
+ holder.removeCallback(this)
+ // Countdown in case we have been detached while waiting for a render
+ // to be completed
+ renderLatch?.countDown()
+ detachLatch.countDown()
+ }
+
+ override fun surfaceRedrawNeeded(p0: SurfaceHolder) {
+ // If the [RenderTarget] has already been detached then skip rendering
+ if (detachLatch.count > 0) {
+ val latch = CountDownLatch(1).also { renderLatch = it }
+ // Request a render and block until the rendering is complete
+ // surfaceRedrawNeeded is invoked on older API levels and is replaced with
+ // surfaceRedrawNeededAsync for newer API levels which is non-blocking
+ renderTarget.requestRender @WorkerThread {
+ latch.countDown()
+ }
+ latch.await()
+ renderLatch = null
+ }
+ }
+
+ override fun surfaceRedrawNeededAsync(
+ holder: SurfaceHolder,
+ drawingFinished: Runnable
+ ) {
+ renderTarget.requestRender {
+ drawingFinished.run()
+ }
+ }
+
+ override fun surfaceCreated(holder: SurfaceHolder) {
+ // NO-OP wait until surfaceChanged which is guaranteed to be called and also
+ // provides the appropriate width height of the surface
+ }
+
+ override fun surfaceChanged(
+ holder: SurfaceHolder,
+ format: Int,
+ width: Int,
+ height: Int
+ ) {
+ if (!isAttached) {
+ thread.attachSurface(token, holder.surface, width, height, renderer)
+ isAttached = true
+ } else {
+ renderTarget.resize(width, height)
+ }
+ renderTarget.requestRender()
+ }
+
+ override fun surfaceDestroyed(holder: SurfaceHolder) {
+ // Issue a request to detech the [RenderTarget]. Even if it was
+ // previously detached this request is a no-op and the corresponding
+ // [CountDownLatch] will signal when the [RenderTarget] detachment is complete
+ // or instantaneously if it was already detached
+ renderTarget.detach(true)
+ detachLatch.await()
+ }
+ }
+ holder.addCallback(callback)
+ if (holder.surface != null && holder.surface.isValid) {
+ thread.attachSurface(
+ token,
+ holder.surface,
+ surfaceView.width,
+ surfaceView.height,
+ renderer
+ )
+ }
+ mRenderTargets.add(callback.renderTarget)
+ return callback.renderTarget
+ } else {
+ throw IllegalStateException("GLThread not started, did you forget to call start?")
+ }
+ }
+
+ /**
+ * Adds the [android.view.Surface] provided by the given [TextureView] to be managed by the
+ * backing thread.
+ *
+ * A corresponding [EGLSurface] is created on the GLThread as well as a callback
+ * for rendering into the surface through [RenderCallback].
+ *
+ * This method automatically configures a [TextureView.SurfaceTextureListener] used to create a
+ * [android.view.Surface] when the underlying [SurfaceTexture] is available.
+ * Similarly this surface will be detached from [GLRenderer] if the underlying [SurfaceTexture]
+ * is destroyed (i.e. [TextureView.SurfaceTextureListener.onSurfaceTextureDestroyed] is called.
+ *
+ * If the [SurfaceTexture] is already available by the time this method is called, then it is
+ * attached synchronously.
+ *
+ * @param textureView TextureView that provides the surface to be rendered into on the GLThread
+ * @param renderer callbacks used to create a corresponding [EGLSurface] from the
+ * given surface as well as render content into the created [EGLSurface]
+ * @return [RenderTarget] used for subsequent requests to communicate
+ * with the provided Surface (ex. [requestRender] or [detach]).
+ *
+ * @throws IllegalStateException If this method was called when the GLThread has not started
+ * (i.e. start has not been called)
+ */
+ fun attach(textureView: TextureView, renderer: RenderCallback): RenderTarget {
+ val thread = mGLThread
+ if (thread != null) {
+ val token = sToken.getAndIncrement()
+ val detachLatch = CountDownLatch(1)
+ val renderTarget = RenderTarget(token, this) @WorkerThread {
+ textureView.handler?.post {
+ textureView.surfaceTextureListener = null
+ }
+ detachLatch.countDown()
+ }
+ textureView.surfaceTextureListener = object : TextureView.SurfaceTextureListener {
+ override fun onSurfaceTextureAvailable(
+ surfaceTexture: SurfaceTexture,
+ width: Int,
+ height: Int
+ ) {
+ thread.attachSurface(token, Surface(surfaceTexture), width, height, renderer)
+ }
+
+ override fun onSurfaceTextureSizeChanged(
+ texture: SurfaceTexture,
+ width: Int,
+ height: Int
+ ) {
+ renderTarget.resize(width, height)
+ renderTarget.requestRender()
+ }
+
+ override fun onSurfaceTextureDestroyed(p0: SurfaceTexture): Boolean {
+ // Issue a request to detech the [RenderTarget]. Even if it was
+ // previously detached this request is a no-op and the corresponding
+ // [CountDownLatch] will signal when the [RenderTarget] detachment is complete
+ // or instantaneously if it was already detached
+ renderTarget.detach(true)
+ detachLatch.await()
+ return true
+ }
+
+ override fun onSurfaceTextureUpdated(p0: SurfaceTexture) {
+ // NO-OP
+ }
+ }
+ if (textureView.isAvailable) {
+ thread.attachSurface(
+ token,
+ Surface(textureView.surfaceTexture),
+ textureView.width,
+ textureView.height,
+ renderer
+ )
+ }
+ mRenderTargets.add(renderTarget)
+ return renderTarget
+ } else {
+ throw IllegalStateException("GLThread not started, did you forget to call start?")
+ }
+ }
+
+ /**
+ * Handle to a [android.view.Surface] that is given to [GLRenderer] to handle
+ * rendering.
+ */
+ class RenderTarget internal constructor(
+ internal val token: Int,
+ glManager: GLRenderer,
+ @WorkerThread internal val onDetach: () -> Unit = {}
+ ) {
+
+ @Volatile
+ private var mManager: GLRenderer? = glManager
+
+ internal fun release() {
+ mManager = null
+ }
+
+ /**
+ * Request that this [RenderTarget] should have its contents redrawn.
+ * This consumes an optional callback that is invoked on the backing thread when
+ * the rendering is completed.
+ *
+ * Note the render operation will only occur if the RenderTarget is attached, that is
+ * [isAttached] returns true. If the [RenderTarget] is detached or the [GLRenderer] that
+ * created this RenderTarget is stopped, this is a no-op.
+ *
+ * @param onRenderComplete Optional callback called on the backing thread when
+ * rendering is finished
+ */
+ @JvmOverloads
+ fun requestRender(@WorkerThread onRenderComplete: ((RenderTarget) -> Unit)? = null) {
+ mManager?.requestRender(this@RenderTarget, onRenderComplete)
+ }
+
+ /**
+ * Determines if the current RenderTarget is attached to GLRenderer.
+ * This is true until [detach] has been called. If the RenderTarget is no longer
+ * in an attached state (i.e. this returns false). Subsequent calls to [requestRender]
+ * will be ignored.
+ */
+ fun isAttached(): Boolean = mManager != null
+
+ /**
+ * Resize the RenderTarget to the specified width and height.
+ * This will destroy the EGLSurface created by [RenderCallback.onSurfaceCreated]
+ * and invoke it again with the updated dimensions.
+ * An optional callback is invoked on the backing thread after the resize operation
+ * is complete
+ *
+ * Note the resize operation will only occur if the RenderTarget is attached, that is
+ * [isAttached] returns true. If the [RenderTarget] is detached or the [GLRenderer] that
+ * created this RenderTarget is stopped, this is a no-op.
+ *
+ * @param width New target width to resize the RenderTarget
+ * @param height New target height to resize the RenderTarget
+ * @param onResizeComplete Optional callback invoked after the resize is complete
+ */
+ @JvmOverloads
+ fun resize(
+ width: Int,
+ height: Int,
+ @WorkerThread onResizeComplete: ((RenderTarget) -> Unit)? = null
+ ) {
+ mManager?.resize(this, width, height, onResizeComplete)
+ }
+
+ /**
+ * Removes the corresponding [RenderTarget] from management of the GLThread.
+ * This destroys the EGLSurface associated with this surface and subsequent requests
+ * to render into the surface with the provided token are ignored.
+ *
+ * If the [cancelPending] flag is set to true, any queued request
+ * to render that has not started yet is cancelled. However, if this is invoked in the
+ * middle of the frame being rendered, it will continue to process the current frame.
+ *
+ * Additionally if this flag is false, all pending requests to render will be processed
+ * before the [RenderTarget] is detached.
+ *
+ * This is a convenience method around [GLRenderer.detach]
+ *
+ * Note the detach operation will only occur if the RenderTarget is attached, that is
+ * [isAttached] returns true. If the [RenderTarget] is detached or the [GLRenderer] that
+ * created this RenderTarget is stopped, this is a no-op.
+ */
+ @JvmOverloads
+ fun detach(cancelPending: Boolean, onDetachComplete: ((RenderTarget) -> Unit)? = null) {
+ mManager?.detach(this, cancelPending, onDetachComplete)
+ }
+ }
+
+ companion object {
+ /**
+ * Counter used to issue unique identifiers for surfaces that are managed by GLRenderer
+ */
+ private val sToken = AtomicInteger()
+ }
+}
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLThread.kt b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLThread.kt
new file mode 100644
index 0000000..738312b
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/GLThread.kt
@@ -0,0 +1,411 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.opengl
+
+import android.opengl.EGL14
+import android.opengl.EGLConfig
+import android.opengl.EGLSurface
+import android.os.Handler
+import android.os.HandlerThread
+import android.os.SystemClock
+import android.util.Log
+import android.view.Surface
+import androidx.annotation.AnyThread
+import androidx.annotation.WorkerThread
+import androidx.graphics.opengl.GLRenderer.EglContextCallback
+import androidx.graphics.opengl.GLRenderer.RenderCallback
+import androidx.graphics.opengl.egl.EglManager
+import androidx.graphics.opengl.egl.EglSpec
+import java.util.concurrent.atomic.AtomicBoolean
+
+/**
+ * Thread responsible for management of EGL dependencies, setup and teardown
+ * of EGLSurface instances as well as delivering callbacks to draw a frame
+ */
+internal class GLThread(
+ name: String = "GLThread",
+ private val mEglSpecFactory: () -> EglSpec,
+ private val mEglConfigFactory: EglManager.() -> EGLConfig,
+) : HandlerThread(name) {
+
+ // Accessed on internal HandlerThread
+ private val mIsTearingDown = AtomicBoolean(false)
+ private var mEglManager: EglManager? = null
+ private val mSurfaceSessions = HashMap<Int, SurfaceSession>()
+ private var mHandler: Handler? = null
+ private val mEglContextCallback = HashSet<EglContextCallback>()
+
+ override fun start() {
+ super.start()
+ mHandler = Handler(looper)
+ }
+
+ /**
+ * Adds the given [android.view.Surface] to be managed by the GLThread.
+ * A corresponding [EGLSurface] is created on the GLThread as well as a callback
+ * for rendering into the surface through [RenderCallback].
+ * @param surface intended to be be rendered into on the GLThread
+ * @param width Desired width of the [surface]
+ * @param height Desired height of the [surface]
+ * @param renderer callbacks used to create a corresponding [EGLSurface] from the
+ * given surface as well as render content into the created [EGLSurface]
+ * @return Identifier used for subsequent requests to communicate
+ * with the provided Surface (ex. [requestRender] or [detachSurface]
+ */
+ @AnyThread
+ fun attachSurface(
+ token: Int,
+ surface: Surface?,
+ width: Int,
+ height: Int,
+ renderer: RenderCallback
+ ) {
+ withHandler {
+ post(token) {
+ attachSurfaceSessionInternal(
+ SurfaceSession(token, surface, renderer).apply {
+ this.width = width
+ this.height = height
+ }
+ )
+ }
+ }
+ }
+
+ @AnyThread
+ fun resizeSurface(token: Int, width: Int, height: Int, callback: Runnable? = null) {
+ withHandler {
+ post(token) {
+ resizeSurfaceSessionInternal(token, width, height)
+ requestRenderInternal(token)
+ callback?.run()
+ }
+ }
+ }
+
+ @AnyThread
+ fun addEglCallbacks(callbacks: ArrayList<EglContextCallback>) {
+ withHandler {
+ post {
+ mEglContextCallback.addAll(callbacks)
+ mEglManager?.let {
+ for (callback in callbacks) {
+ callback.onEglContextCreated(it)
+ }
+ }
+ }
+ }
+ }
+
+ @AnyThread
+ fun addEglCallback(callbacks: EglContextCallback) {
+ withHandler {
+ post {
+ mEglContextCallback.add(callbacks)
+ // If EGL dependencies are already initialized, immediately invoke
+ // the added callback
+ mEglManager?.let {
+ callbacks.onEglContextCreated(it)
+ }
+ }
+ }
+ }
+
+ @AnyThread
+ fun removeEglCallback(callbacks: EglContextCallback) {
+ withHandler {
+ post {
+ mEglContextCallback.remove(callbacks)
+ }
+ }
+ }
+
+ /**
+ * Removes the corresponding [android.view.Surface] from management of the GLThread.
+ * This destroys the EGLSurface associated with this surface and subsequent requests
+ * to render into the surface with the provided token are ignored. Any queued request
+ * to render to the corresponding [SurfaceSession] that has not started yet is cancelled.
+ * However, if this is invoked in the middle of the frame being rendered, it will continue to
+ * process the current frame.
+ */
+ @AnyThread
+ fun detachSurface(
+ token: Int,
+ cancelPending: Boolean,
+ callback: Runnable?
+ ) {
+ log("dispatching request to detach surface w/ token: $token")
+ withHandler {
+ if (cancelPending) {
+ removeCallbacksAndMessages(token)
+ }
+ post(token) {
+ detachSurfaceSessionInternal(token, callback)
+ }
+ }
+ }
+
+ /**
+ * Cancel all pending requests to all currently managed [SurfaceSession] instances,
+ * destroy all EGLSurfaces, teardown EGLManager and quit this thread
+ */
+ @AnyThread
+ fun tearDown(cancelPending: Boolean, callback: Runnable?) {
+ withHandler {
+ if (cancelPending) {
+ removeCallbacksAndMessages(null)
+ }
+ post {
+ releaseResourcesInternalAndQuit(callback)
+ }
+ mIsTearingDown.set(true)
+ }
+ }
+
+ /**
+ * Mark the corresponding surface session with the given token as dirty
+ * to schedule a call to [RenderCallback#onDrawFrame].
+ * If there is already a queued request to render into the provided surface with
+ * the specified token, this request is ignored.
+ */
+ @AnyThread
+ fun requestRender(token: Int, callback: Runnable? = null) {
+ log("dispatching request to render for token: $token")
+ withHandler {
+ post(token) {
+ requestRenderInternal(token)
+ callback?.run()
+ }
+ }
+ }
+
+ /**
+ * Lazily creates an [EglManager] instance from the given [mEglSpecFactory]
+ * used to determine the configuration. This result is cached across calls
+ * unless [tearDown] has been called.
+ */
+ @WorkerThread
+ fun obtainEglManager(): EglManager =
+ mEglManager ?: EglManager(mEglSpecFactory.invoke()).also {
+ it.initialize()
+ val config = mEglConfigFactory.invoke(it)
+ it.createContext(config)
+ for (callback in mEglContextCallback) {
+ callback.onEglContextCreated(it)
+ }
+ mEglManager = it
+ }
+
+ @WorkerThread
+ private fun disposeSurfaceSession(session: SurfaceSession) {
+ val eglSurface = session.eglSurface
+ if (eglSurface != null && eglSurface != EGL14.EGL_NO_SURFACE) {
+ obtainEglManager().eglSpec.eglDestroySurface(eglSurface)
+ session.eglSurface = null
+ }
+ }
+
+ /**
+ * Helper method to obtain the cached EGLSurface for the given [SurfaceSession],
+ * creating one if it does not previously exist
+ */
+ @WorkerThread
+ private fun obtainEglSurfaceForSession(session: SurfaceSession): EGLSurface? {
+ return if (session.eglSurface != null) {
+ session.eglSurface
+ } else {
+ createEglSurfaceForSession(
+ session.surface,
+ session.width,
+ session.height,
+ session.surfaceRenderer
+ ).also {
+ session.eglSurface = it
+ }
+ }
+ }
+
+ /**
+ * Helper method to create the corresponding EGLSurface from the [SurfaceSession] instance
+ * Consumers are expected to teardown the previously existing EGLSurface instance if it exists
+ */
+ @WorkerThread
+ private fun createEglSurfaceForSession(
+ surface: Surface?,
+ width: Int,
+ height: Int,
+ surfaceRenderer: RenderCallback
+ ): EGLSurface? {
+ with(obtainEglManager()) {
+ return if (surface != null) {
+ surfaceRenderer.onSurfaceCreated(
+ eglSpec,
+ // Successful creation of EglManager ensures non null EGLConfig
+ eglConfig!!,
+ surface,
+ width,
+ height
+ )
+ } else {
+ null
+ }
+ }
+ }
+
+ @WorkerThread
+ private fun releaseResourcesInternalAndQuit(callback: Runnable?) {
+ val eglManager = obtainEglManager()
+ for (session in mSurfaceSessions) {
+ disposeSurfaceSession(session.value)
+ }
+ callback?.run()
+ mSurfaceSessions.clear()
+ for (eglCallback in mEglContextCallback) {
+ eglCallback.onEglContextDestroyed(eglManager)
+ }
+ mEglContextCallback.clear()
+ eglManager.release()
+ mEglManager = null
+ quit()
+ }
+
+ @WorkerThread
+ private fun requestRenderInternal(token: Int) {
+ log("requesting render for token: $token")
+ mSurfaceSessions[token]?.let { surfaceSession ->
+ val eglManager = obtainEglManager()
+ val eglSurface = obtainEglSurfaceForSession(surfaceSession)
+ if (eglSurface != null) {
+ eglManager.makeCurrent(eglSurface)
+ } else {
+ eglManager.makeCurrent(eglManager.defaultSurface)
+ }
+
+ val width = surfaceSession.width
+ val height = surfaceSession.height
+ if (width > 0 && height > 0) {
+ surfaceSession.surfaceRenderer.onDrawFrame(eglManager)
+ }
+
+ if (eglSurface != null) {
+ eglManager.swapAndFlushBuffers()
+ }
+ }
+ }
+
+ @WorkerThread
+ private fun attachSurfaceSessionInternal(surfaceSession: SurfaceSession) {
+ mSurfaceSessions[surfaceSession.surfaceToken] = surfaceSession
+ }
+
+ @WorkerThread
+ private fun resizeSurfaceSessionInternal(
+ token: Int,
+ width: Int,
+ height: Int
+ ) {
+ mSurfaceSessions[token]?.let { surfaceSession ->
+ surfaceSession.apply {
+ this.width = width
+ this.height = height
+ }
+ disposeSurfaceSession(surfaceSession)
+ obtainEglSurfaceForSession(surfaceSession)
+ }
+ }
+
+ @WorkerThread
+ private fun detachSurfaceSessionInternal(token: Int, callback: Runnable?) {
+ val session = mSurfaceSessions.remove(token)
+ if (session != null) {
+ disposeSurfaceSession(session)
+ }
+ callback?.run()
+ }
+
+ /**
+ * Helper method that issues a callback on the handler instance for this thread
+ * ensuring proper nullability checks are handled.
+ * This assumes that that [GLRenderer.start] has been called before attempts
+ * to interact with the corresponding Handler are made with this method
+ */
+ private inline fun withHandler(block: Handler.() -> Unit) {
+ val handler = mHandler
+ ?: throw IllegalStateException("Did you forget to call GLThread.start()?")
+ if (!mIsTearingDown.get()) {
+ block(handler)
+ }
+ }
+
+ companion object {
+
+ private const val DEBUG = true
+ private const val TAG = "GLThread"
+ internal fun log(msg: String) {
+ if (DEBUG) {
+ Log.v(TAG, msg)
+ }
+ }
+ }
+
+ private class SurfaceSession(
+ /**
+ * Identifier used to lookup the mapping of this surface session.
+ * Consumers are expected to provide this identifier to operate on the corresponding
+ * surface to either request a frame be rendered or to remove this Surface
+ */
+ val surfaceToken: Int,
+
+ /**
+ * Target surface to render into. Can be null for situations where GL is used to render
+ * into a frame buffer object provided from an AHardwareBuffer instance.
+ * In these cases the actual surface is never used.
+ */
+ val surface: Surface?,
+
+ /**
+ * Callback used to create an EGLSurface from the provided surface as well as
+ * render content to the surface
+ */
+ val surfaceRenderer: RenderCallback
+ ) {
+ /**
+ * Lazily created + cached [EGLSurface] after [RenderCallback.onSurfaceCreated]
+ * is invoked. This is only modified on the backing thread
+ */
+ var eglSurface: EGLSurface? = null
+
+ /**
+ * Target width of the [surface]. This is only modified on the backing thread
+ */
+ var width: Int = 0
+
+ /**
+ * Target height of the [surface]. This is only modified on the backing thread
+ */
+ var height: Int = 0
+ }
+
+ /**
+ * Handler does not expose a post method that takes a token and a runnable.
+ * We need the token to be able to cancel pending requests so just call
+ * postAtTime with the default of SystemClock.uptimeMillis
+ */
+ private fun Handler.post(token: Any?, runnable: Runnable) {
+ postAtTime(runnable, token, SystemClock.uptimeMillis())
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EglConfigAttributes.kt b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EglConfigAttributes.kt
new file mode 100644
index 0000000..883b2e8
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EglConfigAttributes.kt
@@ -0,0 +1,176 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.opengl.egl
+
+import android.opengl.EGL14
+
+/**
+ * EGL configuration attribute used to expose EGLConfigs that support formats with floating point
+ * RGBA components. This attribute is exposed through the EGL_EXT_pixel_format_float EGL extension
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_pixel_format_float.txt
+ */
+const val EglColorComponentTypeExt = 0x3339
+
+/**
+ * EGL configuration attribute value that represents fixed point RGBA components
+ */
+const val EglColorComponentTypeFixedExt = 0x333A
+
+/**
+ * EGL configuration attribute value that represents floating point RGBA components
+ */
+const val EglColorComponentTypeFloatExt = 0x333B
+
+/**
+ * EGL Attributes to create an 8 bit EGL config for red, green, blue, and alpha channels as well
+ * as an 8 bit stencil size
+ */
+val EglConfigAttributes8888 = EglConfigAttributes {
+ EGL14.EGL_RENDERABLE_TYPE to EGL14.EGL_OPENGL_ES2_BIT
+ EGL14.EGL_RED_SIZE to 8
+ EGL14.EGL_GREEN_SIZE to 8
+ EGL14.EGL_BLUE_SIZE to 8
+ EGL14.EGL_ALPHA_SIZE to 8
+ EGL14.EGL_DEPTH_SIZE to 0
+ EGL14.EGL_CONFIG_CAVEAT to EGL14.EGL_NONE
+ EGL14.EGL_STENCIL_SIZE to 0
+ EGL14.EGL_SURFACE_TYPE to EGL14.EGL_WINDOW_BIT
+}
+
+/**
+ * EGL Attributes to create a 10 bit EGL config for red, green, blue, channels and a
+ * 2 bit alpha channels as well as an 8 bit stencil size
+ */
+val EglConfigAttributes1010102 = EglConfigAttributes {
+ EGL14.EGL_RENDERABLE_TYPE to EGL14.EGL_OPENGL_ES2_BIT
+ EGL14.EGL_RED_SIZE to 10
+ EGL14.EGL_GREEN_SIZE to 10
+ EGL14.EGL_BLUE_SIZE to 10
+ EGL14.EGL_ALPHA_SIZE to 2
+ EGL14.EGL_DEPTH_SIZE to 0
+ EGL14.EGL_STENCIL_SIZE to 0
+ EGL14.EGL_SURFACE_TYPE to EGL14.EGL_WINDOW_BIT
+}
+
+/**
+ * EGL Attributes to create a 16 bit floating point EGL config for red, green and blue channels
+ * along with a
+ */
+val EglConfigAttributesF16 = EglConfigAttributes {
+ EGL14.EGL_RENDERABLE_TYPE to EGL14.EGL_OPENGL_ES2_BIT
+ EglColorComponentTypeExt to EglColorComponentTypeFloatExt
+ EGL14.EGL_RED_SIZE to 16
+ EGL14.EGL_GREEN_SIZE to 16
+ EGL14.EGL_BLUE_SIZE to 16
+ EGL14.EGL_ALPHA_SIZE to 16
+ EGL14.EGL_DEPTH_SIZE to 0
+ EGL14.EGL_STENCIL_SIZE to 0
+ EGL14.EGL_SURFACE_TYPE to EGL14.EGL_WINDOW_BIT
+}
+
+/**
+ * Construct an instance of [EglConfigAttributes] that includes a mapping of EGL attributes
+ * to their corresponding value. The full set of attributes can be found here:
+ * https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglChooseConfig.xhtml
+ *
+ * The resultant array of attributes automatically is terminated with EGL_NONE.
+ *
+ * For example to create an 8888 configuration, this can be done with the following:
+ *
+ * EglConfigAttributes {
+ * EGL14.EGL_RENDERABLE_TYPE to EGL14.EGL_OPENGL_ES2_BIT
+ * EGL14.EGL_RED_SIZE to 8
+ * EGL14.EGL_GREEN_SIZE to 8
+ * EGL14.EGL_BLUE_SIZE to 8
+ * EGL14.EGL_ALPHA_SIZE to 8
+ * EGL14.EGL_DEPTH_SIZE to 0
+ * EGL14.EGL_CONFIG_CAVEAT to EGL14.EGL_NONE
+ * EGL14.EGL_STENCIL_SIZE to 8
+ * EGL14.EGL_SURFACE_TYPE to EGL14.EGL_WINDOW_BIT
+ * }
+ *
+ * @see EglConfigAttributes8888
+ */
+inline fun EglConfigAttributes(block: EglConfigAttributes.Builder.() -> Unit): EglConfigAttributes =
+ EglConfigAttributes.Builder().apply { block() }.build()
+
+// klint does not support value classes yet, see b/197692691
+@Suppress("INLINE_CLASS_DEPRECATED")
+inline class EglConfigAttributes internal constructor(
+ @PublishedApi internal val attrs: IntArray
+) {
+
+ /**
+ * Builder used to create an instance of [EglConfigAttributes]
+ * Allows for a mapping of EGL configuration attributes to their corresponding
+ * values as well as including a previously generated [EglConfigAttributes]
+ * instance to be used as a template and conditionally update individual mapped values
+ */
+ // Suppressing build method as EglConfigAttributes is created using Kotlin DSL syntax
+ // via the function constructor defined above
+ @SuppressWarnings("MissingBuildMethod")
+ class Builder @PublishedApi internal constructor() {
+ private val attrs = HashMap<Int, Int>()
+
+ /**
+ * Map a given EGL configuration attribute key to the given EGL configuration value
+ */
+ @SuppressWarnings("BuilderSetStyle")
+ infix fun Int.to(that: Int) {
+ attrs[this] = that
+ }
+
+ /**
+ * Include all the attributes of the given EglConfigAttributes instance.
+ * This is useful for creating a new EglConfigAttributes instance with all the same
+ * attributes as another, allowing for modification of attributes after the fact.
+ * For example, the following code snippet can be used to create an EglConfigAttributes
+ * instance that has all the same configuration as [EglConfigAttributes8888] but with a
+ * 16 bit stencil buffer size:
+ *
+ * EglConfigAttributes {
+ * include(EglConfigAttributes8888)
+ * EGL14.EGL_STENCIL_SIZE to 16
+ * }
+ *
+ *
+ * That is all attributes configured after the include will overwrite the attributes
+ * configured previously.
+ */
+ @SuppressWarnings("BuilderSetStyle")
+ fun include(attributes: EglConfigAttributes) {
+ val attrsArray = attributes.attrs
+ for (i in 0 until attrsArray.size - 1 step 2) {
+ attrs[attrsArray[i]] = attrsArray[i + 1]
+ }
+ }
+
+ @PublishedApi internal fun build(): EglConfigAttributes {
+ val entries = attrs.entries
+ val attrArray = IntArray(entries.size * 2 + 1) // Array must end with EGL_NONE
+ var index = 0
+ for (entry in entries) {
+ attrArray[index] = entry.key
+ attrArray[index + 1] = entry.value
+ index += 2
+ }
+ attrArray[index] = EGL14.EGL_NONE
+ return EglConfigAttributes(attrArray)
+ }
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EglManager.kt b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EglManager.kt
new file mode 100644
index 0000000..9b8b0c9
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EglManager.kt
@@ -0,0 +1,233 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.opengl.egl
+
+import android.opengl.EGL14
+import android.opengl.EGLConfig
+import android.opengl.EGLContext
+import android.opengl.EGLSurface
+import android.opengl.GLES20
+import androidx.opengl.EGLExt
+import androidx.opengl.EGLExt.Companion.EGL_KHR_SURFACELESS_CONTEXT
+
+/**
+ * Class responsible for configuration of EGL related resources. This includes
+ * initialization of the corresponding EGL Display as well as EGL Context, among
+ * other EGL related facilities.
+ */
+class EglManager(val eglSpec: EglSpec = EglSpec.Egl14) {
+
+ private var mEglConfig: EGLConfig? = null
+
+ /**
+ * Offscreen pixel buffer surface
+ */
+ private var mPBufferSurface: EGLSurface = EGL14.EGL_NO_SURFACE
+ private var mEglContext: EGLContext = EGL14.EGL_NO_CONTEXT
+ private var mWideColorGamutSupport = false
+ private var mEglVersion = EglVersion.Unknown
+ private var mEglExtensions: Set<String>? = null
+ private var mIsSingleBuffered: Boolean = false
+ private var mQueryResult: IntArray? = null
+
+ /**
+ * Initialize the EGLManager. This initializes the default display as well
+ * as queries the supported extensions
+ */
+ fun initialize() {
+ mEglContext.let {
+ if (it === EGL14.EGL_NO_CONTEXT) {
+ mEglVersion = eglSpec.eglInitialize()
+ mEglExtensions =
+ EGLExt.parseExtensions(eglSpec.eglQueryString(EGL14.EGL_EXTENSIONS))
+ }
+ }
+ }
+
+ /**
+ * Attempt to load an [EGLConfig] instance from the given
+ * [EglConfigAttributes]. If the [EGLConfig] could not be loaded
+ * this returns null
+ */
+ fun loadConfig(configAttributes: EglConfigAttributes): EGLConfig? =
+ eglSpec.loadConfig(configAttributes)
+
+ /**
+ * Creates an [EGLContext] from the given [EGLConfig] returning
+ * null if the context could not be created
+ *
+ * @throws EglException if the default surface could not be made current after context creation
+ */
+ fun createContext(config: EGLConfig): EGLContext {
+ val eglContext = eglSpec.eglCreateContext(config)
+ if (eglContext !== EGL14.EGL_NO_CONTEXT) {
+ val pbBufferSurface: EGLSurface =
+ if (isExtensionSupported(EGL_KHR_SURFACELESS_CONTEXT)) {
+ EGL14.EGL_NO_SURFACE
+ } else {
+ val configAttrs = EglConfigAttributes {
+ EGL14.EGL_WIDTH to 1
+ EGL14.EGL_HEIGHT to 1
+ }
+ eglSpec.eglCreatePBufferSurface(config, configAttrs)
+ }
+ if (!eglSpec.eglMakeCurrent(eglContext, pbBufferSurface, pbBufferSurface)) {
+ throw EglException(eglSpec.eglGetError(), "Unable to make default surface current")
+ }
+ mPBufferSurface = pbBufferSurface
+ mEglContext = eglContext
+ mEglConfig = config
+ } else {
+ mPBufferSurface = EGL14.EGL_NO_SURFACE
+ mEglContext = EGL14.EGL_NO_CONTEXT
+ mEglConfig = null
+ }
+ return eglContext
+ }
+
+ /**
+ * Release the resources allocated by EGLManager. This will destroy the corresponding
+ * EGLContext instance if it was previously initialized.
+ * The configured EGLVersion as well as EGLExtensions
+ */
+ fun release() {
+ mEglContext.let {
+ if (it != EGL14.EGL_NO_CONTEXT) {
+ eglSpec.eglDestroyContext(it)
+ mPBufferSurface.let { pbBufferSurface ->
+ if (pbBufferSurface != EGL14.EGL_NO_SURFACE) {
+ eglSpec.eglDestroySurface(pbBufferSurface)
+ }
+ }
+ mPBufferSurface = EGL14.EGL_NO_SURFACE
+ eglSpec.eglMakeCurrent(
+ EGL14.EGL_NO_CONTEXT,
+ EGL14.EGL_NO_SURFACE,
+ EGL14.EGL_NO_SURFACE
+ )
+ mEglVersion = EglVersion.Unknown
+ mEglContext = EGL14.EGL_NO_CONTEXT
+ mEglConfig = null
+ mEglExtensions = null
+ }
+ }
+ }
+
+ /**
+ * Returns the EGL version that is supported. This parameter is configured
+ * after [initialize] is invoked.
+ */
+ val eglVersion: EglVersion
+ get() = mEglVersion
+
+ /**
+ * Returns the current EGLContext. This parameter is configured after [initialize] is invoked
+ */
+ val eglContext: EGLContext?
+ get() = mEglContext
+
+ /**
+ * Returns the [EGLConfig] used to load the current [EGLContext].
+ * This is configured after [createContext] is invoked.
+ */
+ val eglConfig: EGLConfig?
+ get() = mEglConfig
+
+ /**
+ * Determines whether the extension with the provided name is supported. The string
+ * provided is expected to be one of the named extensions defined within the OpenGL
+ * extension documentation.
+ *
+ * See [EGLExt] for additional documentation for given extension name constants
+ * and descriptions.
+ *
+ * The set of supported extensions is configured after [initialize] is invoked.
+ * Attempts to query support for any extension beforehand will return false.
+ */
+ fun isExtensionSupported(extensionName: String): Boolean =
+ mEglExtensions?.contains(extensionName) ?: false
+
+ /**
+ * Binds the current context to the given draw and read surfaces.
+ * The draw surface is used for all operations except for any pixel data read back or
+ * copy operations which are taken from the read surface.
+ *
+ * The same EGLSurface may be specified for both draw and read surfaces.
+ *
+ * If the context is not previously configured, the only valid parameters for the
+ * draw and read surfaces is [EGL14.EGL_NO_SURFACE]. This is useful to make sure there is
+ * always a surface specified and to release the current context without assigning a new one.
+ *
+ * See https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglMakeCurrent.xhtml
+ *
+ * @param drawSurface Surface used for all operations that involve writing pixel information
+ * @param readSurface Surface used for pixel data read back or copy operations. By default this
+ * is the same as [drawSurface]
+ */
+ @JvmOverloads
+ fun makeCurrent(drawSurface: EGLSurface, readSurface: EGLSurface = drawSurface): Boolean {
+ val result = eglSpec.eglMakeCurrent(mEglContext, drawSurface, readSurface)
+ if (result) {
+ querySurface(drawSurface)
+ }
+ return result
+ }
+
+ /**
+ * Post EGL surface color buffer to a native window. If the current drawing surface
+ * is single buffered this will flush the buffer
+ */
+ fun swapAndFlushBuffers() {
+ if (mIsSingleBuffered) {
+ GLES20.glFlush()
+ }
+ eglSpec.eglSwapBuffers(currentDrawSurface)
+ }
+
+ /**
+ * Returns the default surface. This can be an offscreen pixel buffer surface or
+ * [EGL14.EGL_NO_SURFACE] if the surfaceless context extension is supported.
+ */
+ val defaultSurface: EGLSurface
+ get() = mPBufferSurface
+
+ /**
+ * Returns the current surface used for drawing pixel content
+ */
+ val currentDrawSurface: EGLSurface
+ get() = eglSpec.eglGetCurrentDrawSurface()
+
+ /**
+ * Returns the current surface used for reading back or copying pixels
+ */
+ val currentReadSurface: EGLSurface
+ get() = eglSpec.eglGetCurrentReadSurface()
+
+ /**
+ * Helper method to query properties of the given surface
+ */
+ private fun querySurface(surface: EGLSurface) {
+ val resultArray = mQueryResult ?: IntArray(1).also { mQueryResult = it }
+ if (eglSpec.eglQuerySurface(surface, EGL14.EGL_RENDER_BUFFER, resultArray, 0)) {
+ mIsSingleBuffered = resultArray[0] == EGL14.EGL_SINGLE_BUFFER
+ }
+ }
+
+ companion object {
+ private const val TAG = "EglManager"
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EglSpec.kt b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EglSpec.kt
new file mode 100644
index 0000000..459bc76
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/opengl/egl/EglSpec.kt
@@ -0,0 +1,627 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.opengl.egl
+
+import android.hardware.HardwareBuffer
+import android.opengl.EGL14
+import android.opengl.EGLConfig
+import android.opengl.EGLContext
+import android.opengl.EGLSurface
+import android.os.Build
+import android.view.Surface
+import androidx.annotation.RequiresApi
+import androidx.hardware.SyncFenceCompat
+import androidx.opengl.EGLExt
+import androidx.opengl.EGLExt.Companion.EGLClientWaitResult
+import androidx.opengl.EGLExt.Companion.EGLSyncAttribute
+import androidx.opengl.EGLExt.Companion.EGL_CONDITION_SATISFIED_KHR
+import androidx.opengl.EGLExt.Companion.EGL_FALSE
+import androidx.opengl.EGLExt.Companion.EGL_FOREVER_KHR
+import androidx.opengl.EGLExt.Companion.EGL_SYNC_FLUSH_COMMANDS_BIT_KHR
+import androidx.opengl.EGLExt.Companion.EGL_TIMEOUT_EXPIRED_KHR
+import androidx.opengl.EGLExt.Companion.eglClientWaitSyncKHR
+import androidx.opengl.EGLExt.Companion.eglDestroyImageKHR
+import androidx.opengl.EGLExt.Companion.eglDestroySyncKHR
+import androidx.opengl.EGLImageKHR
+import androidx.opengl.EGLSyncKHR
+
+/**
+ * Interface for accessing various EGL facilities independent of EGL versions.
+ * That is each EGL version implements this specification.
+ *
+ * EglSpec is not thread safe and is up to the caller of these methods to guarantee thread safety.
+ */
+interface EglSpec {
+
+ /**
+ * Query for the capabilities associated with the given eglDisplay.
+ * The result contains a space separated list of the capabilities.
+ *
+ * @param nameId identifier for the EGL string to query
+ */
+ fun eglQueryString(nameId: Int): String
+
+ /**
+ * Create a Pixel Buffer surface with the corresponding [EglConfigAttributes].
+ * Accepted attributes are defined as part of the OpenGL specification here:
+ * https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglCreatePbufferSurface.xhtml
+ *
+ * If a pixel buffer surface could not be created, [EGL14.EGL_NO_SURFACE] is returned.
+ *
+ * @param config Specifies the EGL Frame buffer configuration that defines the frame buffer
+ * resource available to the surface
+ * @param configAttributes Optional list of attributes for the pixel buffer surface
+ */
+ fun eglCreatePBufferSurface(
+ config: EGLConfig,
+ configAttributes: EglConfigAttributes?
+ ): EGLSurface
+
+ /**
+ * Creates an on screen EGL window surface from the given [Surface] and returns a handle to it.
+ *
+ * See https://khronos.org/registry/EGL/sdk/docs/man/html/eglCreateWindowSurface.xhtml
+ *
+ * @param config Specifies the EGL frame buffer configuration that defines the frame buffer
+ * resource available to the surface
+ * @param surface Android surface to consume rendered content
+ * @param configAttributes Optional list of attributes for the specified surface
+ */
+ fun eglCreateWindowSurface(
+ config: EGLConfig,
+ surface: Surface,
+ configAttributes: EglConfigAttributes?
+ ): EGLSurface
+
+ /**
+ * Destroys an EGL surface.
+ *
+ * If the EGL surface is not current to any thread, eglDestroySurface destroys
+ * it immediately. Otherwise, surface is destroyed when it becomes not current to any thread.
+ * Furthermore, resources associated with a pbuffer surface are not released until all color
+ * buffers of that pbuffer bound to a texture object have been released. Deferral of
+ * surface destruction would still return true as deferral does not indicate a failure condition
+ *
+ * @return `true` if destruction of the EGLSurface was successful, false otherwise
+ */
+ fun eglDestroySurface(surface: EGLSurface): Boolean
+
+ /**
+ * Binds the current context to the given draw and read surfaces.
+ * The draw surface is used for all operations except for any pixel data read back or copy
+ * operations which are taken from the read surface.
+ *
+ * The same EGLSurface may be specified for both draw and read surfaces.
+ *
+ * See https://www.khronos.org/registry/EGL/sdk/docs/man/html/eglMakeCurrent.xhtml for more
+ * information
+ *
+ * @param drawSurface EGLSurface to draw pixels into.
+ * @param readSurface EGLSurface used for read/copy operations.
+ */
+ fun eglMakeCurrent(
+ context: EGLContext,
+ drawSurface: EGLSurface,
+ readSurface: EGLSurface
+ ): Boolean
+
+ /**
+ * Return the current surface used for reading or copying pixels.
+ * If no context is current, [EGL14.EGL_NO_SURFACE] is returned
+ */
+ fun eglGetCurrentReadSurface(): EGLSurface
+
+ /**
+ * Return the current surface used for drawing pixels.
+ * If no context is current, [EGL14.EGL_NO_SURFACE] is returned.
+ */
+ fun eglGetCurrentDrawSurface(): EGLSurface
+
+ /**
+ * Initialize the EGL implementation and return the major and minor version of the EGL
+ * implementation through [EglVersion]. If initialization fails, this returns
+ * [EglVersion.Unknown]
+ */
+ fun eglInitialize(): EglVersion
+
+ /**
+ * Load a corresponding EGLConfig from the provided [EglConfigAttributes]
+ * If the EGLConfig could not be loaded, null is returned
+ * @param configAttributes Desired [EglConfigAttributes] to create an [EGLConfig]
+ *
+ * @return the [EGLConfig] with the provided [EglConfigAttributes] or null if
+ * an [EGLConfig] could not be created with the specified attributes
+ */
+ fun loadConfig(configAttributes: EglConfigAttributes): EGLConfig?
+
+ /**
+ * Create an EGLContext with the default display. If createContext fails to create a
+ * rendering context, EGL_NO_CONTEXT is returned
+ *
+ * @param config [EGLConfig] used to create the [EGLContext]
+ */
+ fun eglCreateContext(config: EGLConfig): EGLContext
+
+ /**
+ * Destroy the given EGLContext generated in [eglCreateContext]
+ *
+ * See https://khronos.org/registry/EGL/sdk/docs/man/html/eglDestroyContext.xhtml
+ *
+ * @param eglContext EGL rendering context to be destroyed
+ */
+ fun eglDestroyContext(eglContext: EGLContext)
+
+ /**
+ * Post EGL surface color buffer to a native window
+ *
+ * See https://khronos.org/registry/EGL/sdk/docs/man/html/eglSwapBuffers.xhtml
+ *
+ * @param surface Specifies the EGL drawing surface whose buffers are to be swapped
+ *
+ * @return `true` if swapping of buffers succeeds, false otherwise
+ */
+ fun eglSwapBuffers(surface: EGLSurface): Boolean
+
+ /**
+ * Query the EGL attributes of the provided surface
+ *
+ * @param surface EGLSurface to be queried
+ * @param attribute EGL attribute to query on the given EGL Surface
+ * @param result Int array to store the result of the query
+ * @param offset Index within [result] to store the value of the queried attribute
+ *
+ * @return `true` if the query was completed successfully, false otherwise. If the query
+ * fails, [result] is unmodified
+ */
+ fun eglQuerySurface(surface: EGLSurface, attribute: Int, result: IntArray, offset: Int): Boolean
+
+ /**
+ * Returns the error of the last called EGL function in the current thread. Initially,
+ * the error is set to EGL_SUCCESS. When an EGL function could potentially generate several
+ * different errors (for example, when passed both a bad attribute name, and a bad attribute
+ * value for a legal attribute name), the implementation may choose to generate any one of the
+ * applicable errors.
+ *
+ * See https://khronos.org/registry/EGL/sdk/docs/man/html/eglGetError.xhtml for more information
+ * and error codes that could potentially be returned
+ */
+ fun eglGetError(): Int
+
+ /**
+ * Convenience method to obtain the corresponding error string from the
+ * error code obtained from [EglSpec.eglGetError]
+ */
+ fun getErrorMessage(): String = getStatusString(eglGetError())
+
+ /**
+ * Creates an EGLImage from the provided [HardwareBuffer]. This handles
+ * internally creating an EGLClientBuffer and an [EGLImageKHR] from the client buffer.
+ *
+ * When this [EGLImageKHR] instance is no longer necessary, consumers should be sure to
+ * call the corresponding method [eglDestroyImageKHR] to deallocate the resource.
+ *
+ * @param hardwareBuffer Backing [HardwareBuffer] for the generated EGLImage instance
+ *
+ * @return an [EGLImageKHR] instance representing the [EGLImageKHR] created from the
+ * HardwareBuffer. Because this is created internally through EGL's eglCreateImageKR method,
+ * this has the KHR suffix.
+ *
+ * This can return null if the EGL_ANDROID_image_native_buffer and EGL_KHR_image_base
+ * extensions are not supported or if allocation of the buffer fails.
+ *
+ * See
+ * www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_get_native_client_buffer.txt
+ */
+ @Suppress("AcronymName")
+ @RequiresApi(Build.VERSION_CODES.O)
+ fun eglCreateImageFromHardwareBuffer(hardwareBuffer: HardwareBuffer): EGLImageKHR?
+
+ /**
+ * Destroy the given [EGLImageKHR] instance. Once destroyed, the image may not be used to
+ * create any additional [EGLImageKHR] target resources within any client API contexts,
+ * although existing [EGLImageKHR] siblings may continue to be used. `true` is returned
+ * if DestroyImageKHR succeeds, `false` indicates failure. This can return `false` if the
+ * corresponding [EGLContext] is not valid.
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_image_base.txt
+ *
+ * @param image EGLImageKHR to be destroyed
+ *
+ * @return `true` if the destruction of the EGLImageKHR object was successful, `false` otherwise
+ */
+ @Suppress("AcronymName")
+ fun eglDestroyImageKHR(image: EGLImageKHR): Boolean
+
+ /**
+ * Creates a sync object of the specified type associated with the
+ * specified display, and returns a handle to the new object.
+ * The configuration of the returned [EGLSyncKHR] object is specified by the provided
+ * attributes.
+ *
+ * Consumers should ensure that the EGL_KHR_fence_sync EGL extension is supported before
+ * invoking this method otherwise a null EGLSyncFenceKHR object is returned.
+ *
+ * When the [EGLSyncKHR] instance is no longer necessary, consumers are encouraged to call
+ * [eglDestroySyncKHR] to deallocate this resource.
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+ *
+ * @param type Indicates the type of sync object that is returned
+ * @param attributes Specifies the configuration of the sync object returned
+ *
+ * @return the [EGLSyncKHR] object to be used as a fence or null if this extension
+ * is not supported
+ */
+ @Suppress("AcronymName")
+ fun eglCreateSyncKHR(type: Int, attributes: EglConfigAttributes?): EGLSyncKHR?
+
+ /**
+ * Query attributes of the provided sync object. Accepted attributes to query depend
+ * on the type of sync object. If no errors are generated, this returns true and the
+ * value of the queried attribute is stored in the value array at the offset position.
+ * If this method returns false, the provided value array is unmodified.
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+ *
+ * @param sync EGLSyncKHR object to query attributes
+ * @param attribute Corresponding EGLSyncKHR attribute to query on [sync]
+ * @param value Integer array used to store the result of the query
+ * @param offset Index within the value array to store the result of the attribute query
+ *
+ * @return `true` if the attribute was queried successfully, false otherwise. Failure cases
+ * include attempting to call this method on an invalid sync object, or the display provided
+ * not matching the display that was used to create this sync object. Additionally if the
+ * queried attribute is not supported for the sync object, false is returned.
+ */
+ @Suppress("AcronymName")
+ fun eglGetSyncAttribKHR(
+ sync: EGLSyncKHR,
+ @EGLSyncAttribute attribute: Int,
+ value: IntArray,
+ offset: Int
+ ): Boolean
+
+ /**
+ * Destroys the given sync object associated with the specified display
+ *
+ * Consumers should ensure that the EGL_KHR_fence_sync EGL extension is supported before
+ * invoking this method otherwise a null EGLSyncFenceKHR object is returned.
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+ *
+ * @param sync Fence object to be destroyed
+ *
+ * @return `true` if the [EGLSyncKHR] object was destroyed successfully `false` otherwise. This
+ * can return `false` if the sync object is not a valid sync object for the provided display
+ * or if the display provided in this method does not match the display used to create this
+ * sync in [eglCreateSyncKHR].
+ */
+ @Suppress("AcronymName")
+ fun eglDestroySyncKHR(sync: EGLSyncKHR): Boolean
+
+ /**
+ * Creates a native synchronization fence referenced through a file descriptor
+ * that is associated with an EGL fence sync object.
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_native_fence_sync.txt
+ *
+ * @param sync The [EGLSyncKHR] to fetch the [SyncFenceCompat] from
+ * @return A [SyncFenceCompat] representing the native fence.
+ * If [sync] is not a valid sync object for display, an invalid [SyncFenceCompat]
+ * instance is returned and an EGL_BAD_PARAMETER error is generated.
+ * If the EGL_SYNC_NATIVE_FENCE_FD_ANDROID attribute of [sync] is
+ * EGL_NO_NATIVE_FENCE_FD_ANDROID, an invalid [SyncFenceCompat] is
+ * returned and an EGL_BAD_PARAMETER error is generated.
+ * If the display does not match the display passed to [eglCreateSyncKHR]
+ * when [sync] was created, the behavior is undefined.
+ */
+ @Suppress("AcronymName")
+ @RequiresApi(Build.VERSION_CODES.KITKAT)
+ fun eglDupNativeFenceFDANDROID(sync: EGLSyncKHR): SyncFenceCompat
+
+ /**
+ * Blocks the calling thread until the specified sync object is signalled or until
+ * [timeoutNanos] nanoseconds have passed.
+ * More than one [eglClientWaitSyncKHR] may be outstanding on the same [sync] at any given
+ * time. When there are multiple threads blocked on the same [sync] and the [sync] object
+ * has signalled, all such threads are released, but the order in which they are released is
+ * not defined.
+ *
+ * If the value of [timeoutNanos] is zero, then [eglClientWaitSyncKHR] simply tests the
+ * current status of sync. If the value of [timeoutNanos] is the special value
+ * [EGL_FOREVER_KHR], then [eglClientWaitSyncKHR] does not time out. For all other values,
+ * [timeoutNanos] is adjusted to the closest value allowed by the implementation-dependent
+ * timeout accuracy, which may be substantially longer than one nanosecond.
+ *
+ * [eglClientWaitSyncKHR] returns one of three status values describing the reason for
+ * returning. A return value of [EGL_TIMEOUT_EXPIRED_KHR] indicates that the specified
+ * timeout period expired before [sync] was signalled, or if [timeoutNanos] is zero,
+ * indicates that [sync] is not signaled. A return value of [EGL_CONDITION_SATISFIED_KHR]
+ * indicates that [sync] was signaled before the timeout expired, which includes the case
+ * when [sync] was already signaled when [eglClientWaitSyncKHR] was called. If an error
+ * occurs then an error is generated and [EGL_FALSE] is returned.
+ *
+ * If the sync object being blocked upon will not be signaled in finite time (for example
+ * by an associated fence command issued previously, but not yet flushed to the graphics
+ * pipeline), then [eglClientWaitSyncKHR] may wait forever. To help prevent this behavior,
+ * if the [EGL_SYNC_FLUSH_COMMANDS_BIT_KHR] is set on the flags parameter and the [sync] is
+ * unsignaled when [eglClientWaitSyncKHR] is called, then the equivalent flush will be
+ * performed for the current EGL context before blocking on sync. If no context is
+ * current bound for the API, the [EGL_SYNC_FLUSH_COMMANDS_BIT_KHR] bit is ignored.
+ *
+ * @param sync EGLSyncKHR object to wait on
+ * @param flags Optional flags to provide to handle flushing of pending commands
+ * @param timeoutNanos Optional timeout value to wait before this method returns, measured
+ * in nanoseconds. This value is always consumed as an unsigned long value so even negative
+ * values will be converted to their unsigned equivalent.
+ *
+ * @return Result code indicating the status of the wait request. Either
+ * [EGL_CONDITION_SATISFIED_KHR], if the sync did signal within the specified timeout,
+ * [EGL_TIMEOUT_EXPIRED_KHR] if the sync did not signal within the specified timeout,
+ * or [EGL_FALSE] if an error occurs.
+ */
+ @Suppress("AcronymName")
+ fun eglClientWaitSyncKHR(
+ sync: EGLSyncKHR,
+ flags: Int,
+ timeoutNanos: Long
+ ): @EGLClientWaitResult Int
+
+ companion object {
+
+ @JvmField
+ val Egl14 = object : EglSpec {
+
+ // Tuples of attribute identifiers along with their corresponding values.
+ // EGL_NONE is used as a termination value similar to a null terminated string
+ private val contextAttributes = intArrayOf(
+ EGL14.EGL_CONTEXT_CLIENT_VERSION, 2, // GLES VERSION 2
+ // HWUI provides the ability to configure a context priority as well but that only
+ // seems to be configured on SystemUIApplication. This might be useful for
+ // front buffer rendering situations for performance.
+ EGL14.EGL_NONE
+ )
+
+ override fun eglInitialize(): EglVersion {
+ // eglInitialize is destructive so create 2 separate arrays to store the major and
+ // minor version
+ val major = intArrayOf(1)
+ val minor = intArrayOf(1)
+ val initializeResult =
+ EGL14.eglInitialize(getDefaultDisplay(), major, 0, minor, 0)
+ if (initializeResult) {
+ return EglVersion(major[0], minor[0])
+ } else {
+ throw EglException(EGL14.eglGetError(), "Unable to initialize default display")
+ }
+ }
+
+ override fun eglGetCurrentReadSurface(): EGLSurface =
+ EGL14.eglGetCurrentSurface(EGL14.EGL_READ)
+
+ override fun eglGetCurrentDrawSurface(): EGLSurface =
+ EGL14.eglGetCurrentSurface(EGL14.EGL_DRAW)
+
+ override fun eglQueryString(nameId: Int): String =
+ EGL14.eglQueryString(getDefaultDisplay(), nameId)
+
+ override fun eglCreatePBufferSurface(
+ config: EGLConfig,
+ configAttributes: EglConfigAttributes?
+ ): EGLSurface =
+ EGL14.eglCreatePbufferSurface(
+ getDefaultDisplay(),
+ config,
+ configAttributes?.attrs,
+ 0
+ )
+
+ override fun eglCreateWindowSurface(
+ config: EGLConfig,
+ surface: Surface,
+ configAttributes: EglConfigAttributes?,
+ ): EGLSurface =
+ EGL14.eglCreateWindowSurface(
+ getDefaultDisplay(),
+ config,
+ surface,
+ configAttributes?.attrs ?: DefaultWindowSurfaceConfig.attrs,
+ 0
+ )
+
+ override fun eglSwapBuffers(surface: EGLSurface): Boolean =
+ EGL14.eglSwapBuffers(getDefaultDisplay(), surface)
+
+ override fun eglQuerySurface(
+ surface: EGLSurface,
+ attribute: Int,
+ result: IntArray,
+ offset: Int
+ ): Boolean =
+ EGL14.eglQuerySurface(getDefaultDisplay(), surface, attribute, result, offset)
+
+ override fun eglDestroySurface(surface: EGLSurface) =
+ EGL14.eglDestroySurface(getDefaultDisplay(), surface)
+
+ override fun eglMakeCurrent(
+ context: EGLContext,
+ drawSurface: EGLSurface,
+ readSurface: EGLSurface
+ ): Boolean =
+ EGL14.eglMakeCurrent(
+ getDefaultDisplay(),
+ drawSurface,
+ readSurface,
+ context
+ )
+
+ override fun loadConfig(configAttributes: EglConfigAttributes): EGLConfig? {
+ val configs = arrayOfNulls<EGLConfig?>(1)
+ return if (EGL14.eglChooseConfig(
+ getDefaultDisplay(),
+ configAttributes.attrs,
+ 0,
+ configs,
+ 0,
+ 1,
+ intArrayOf(1),
+ 0
+ )) {
+ configs[0]
+ } else {
+ null
+ }
+ }
+
+ override fun eglCreateContext(config: EGLConfig): EGLContext {
+ return EGL14.eglCreateContext(
+ getDefaultDisplay(),
+ config,
+ EGL14.EGL_NO_CONTEXT, // not creating from a shared context
+ contextAttributes,
+ 0
+ )
+ }
+
+ override fun eglDestroyContext(eglContext: EGLContext) {
+ if (!EGL14.eglDestroyContext(getDefaultDisplay(), eglContext)) {
+ throw EglException(EGL14.eglGetError(), "Unable to destroy EGLContext")
+ }
+ }
+
+ @RequiresApi(Build.VERSION_CODES.Q)
+ override fun eglCreateImageFromHardwareBuffer(
+ hardwareBuffer: HardwareBuffer
+ ): EGLImageKHR? =
+ EGLExt.eglCreateImageFromHardwareBuffer(getDefaultDisplay(), hardwareBuffer)
+
+ override fun eglDestroyImageKHR(image: EGLImageKHR): Boolean =
+ EGLExt.eglDestroyImageKHR(getDefaultDisplay(), image)
+
+ override fun eglCreateSyncKHR(
+ type: Int,
+ attributes: EglConfigAttributes?
+ ): EGLSyncKHR? =
+ EGLExt.eglCreateSyncKHR(getDefaultDisplay(), type, attributes)
+
+ override fun eglGetSyncAttribKHR(
+ sync: EGLSyncKHR,
+ attribute: Int,
+ value: IntArray,
+ offset: Int
+ ): Boolean =
+ EGLExt.eglGetSyncAttribKHR(getDefaultDisplay(), sync, attribute, value, offset)
+
+ override fun eglDestroySyncKHR(sync: EGLSyncKHR): Boolean =
+ EGLExt.eglDestroySyncKHR(getDefaultDisplay(), sync)
+
+ override fun eglGetError(): Int = EGL14.eglGetError()
+
+ @RequiresApi(Build.VERSION_CODES.KITKAT)
+ override fun eglDupNativeFenceFDANDROID(sync: EGLSyncKHR): SyncFenceCompat =
+ EGLExt.eglDupNativeFenceFDANDROID(getDefaultDisplay(), sync)
+
+ override fun eglClientWaitSyncKHR(
+ sync: EGLSyncKHR,
+ flags: Int,
+ timeoutNanos: Long
+ ): Int =
+ EGLExt.eglClientWaitSyncKHR(getDefaultDisplay(), sync, flags, timeoutNanos)
+
+ private fun getDefaultDisplay() = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY)
+
+ /**
+ * EglConfigAttribute that provides the default attributes for an EGL window surface
+ */
+ private val DefaultWindowSurfaceConfig = EglConfigAttributes {}
+ }
+
+ /**
+ * Return a string representation of the corresponding EGL status code.
+ * If the provided error value is not an EGL status code, the hex representation
+ * is returned instead
+ */
+ @JvmStatic
+ fun getStatusString(error: Int): String =
+ when (error) {
+ EGL14.EGL_SUCCESS -> "EGL_SUCCESS"
+ EGL14.EGL_NOT_INITIALIZED -> "EGL_NOT_INITIALIZED"
+ EGL14.EGL_BAD_ACCESS -> "EGL_BAD_ACCESS"
+ EGL14.EGL_BAD_ALLOC -> "EGL_BAD_ALLOC"
+ EGL14.EGL_BAD_ATTRIBUTE -> "EGL_BAD_ATTRIBUTE"
+ EGL14.EGL_BAD_CONFIG -> "EGL_BAD_CONFIG"
+ EGL14.EGL_BAD_CONTEXT -> "EGL_BAD_CONTEXT"
+ EGL14.EGL_BAD_CURRENT_SURFACE -> "EGL_BAD_CURRENT_SURFACE"
+ EGL14.EGL_BAD_DISPLAY -> "EGL_BAD_DISPLAY"
+ EGL14.EGL_BAD_MATCH -> "EGL_BAD_MATCH"
+ EGL14.EGL_BAD_NATIVE_PIXMAP -> "EGL_BAD_NATIVE_PIXMAP"
+ EGL14.EGL_BAD_NATIVE_WINDOW -> "EGL_BAD_NATIVE_WINDOW"
+ EGL14.EGL_BAD_PARAMETER -> "EGL_BAD_PARAMETER"
+ EGL14.EGL_BAD_SURFACE -> "EGL_BAD_SURFACE"
+ EGL14.EGL_CONTEXT_LOST -> "EGL_CONTEXT_LOST"
+ else -> Integer.toHexString(error)
+ }
+ }
+}
+
+/**
+ * Exception class for reporting errors with EGL
+ *
+ * @param error Error code reported via eglGetError
+ * @param msg Optional message describing the exception being thrown
+ */
+class EglException(val error: Int, val msg: String = "") : RuntimeException() {
+
+ override val message: String
+ get() = "Error: ${EglSpec.getStatusString(error)}, $msg"
+}
+
+/**
+ * Identifier for the current EGL implementation
+ *
+ * @param major Major version of the EGL implementation
+ * @param minor Minor version of the EGL implementation
+ */
+data class EglVersion(
+ val major: Int,
+ val minor: Int
+) {
+
+ override fun toString(): String {
+ return "EGL version $major.$minor"
+ }
+
+ companion object {
+ /**
+ * Constant that represents version 1.4 of the EGL spec
+ */
+ @JvmField
+ val V14 = EglVersion(1, 4)
+
+ /**
+ * Constant that represents version 1.5 of the EGL spec
+ */
+ @JvmField
+ val V15 = EglVersion(1, 5)
+
+ /**
+ * Sentinel EglVersion value returned in error situations
+ */
+ @JvmField
+ val Unknown = EglVersion(-1, -1)
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlCompat.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlCompat.kt
new file mode 100644
index 0000000..abceec7
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlCompat.kt
@@ -0,0 +1,393 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.surface
+
+import android.graphics.Region
+import android.hardware.HardwareBuffer
+import android.os.Build
+import android.view.AttachedSurfaceControl
+import android.view.Surface
+import android.view.SurfaceControl
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import java.util.concurrent.Executor
+
+/**
+ * Handle to an on-screen Surface managed by the system compositor. [SurfaceControlCompat] is a
+ * combination of a buffer source, and metadata about how to display the buffers. By constructing a
+ * [Surface] from this [SurfaceControl] you can submit buffers to be composited. Using
+ * [SurfaceControlCompat.Transaction] you can manipulate various properties of how the buffer will
+ * be displayed on-screen. [SurfaceControlCompat]s are arranged into a scene-graph like hierarchy,
+ * and as such any [SurfaceControlCompat] may have a parent. Geometric properties like transform,
+ * crop, and Z-ordering will be inherited from the parent, as if the child were content in the
+ * parents buffer stream.
+ *
+ * This class differs slightly than [SurfaceControl] in that it backports some functionality
+ * to Android R and above by delegating to the related APIs available in the NDK. For newer Android
+ * versions, this leverages the equivalent [SurfaceControl] API available in the SDK
+ */
+@RequiresApi(Build.VERSION_CODES.Q)
+class SurfaceControlCompat internal constructor(
+ internal val scImpl: SurfaceControlImpl
+) {
+
+ /**
+ * Check whether this instance points to a valid layer with the system-compositor.
+ * For example this may be false if construction failed, or the layer was released [release].
+ */
+ fun isValid(): Boolean = scImpl.isValid()
+
+ /**
+ * Release the local reference to the server-side surface. The [Surface] may continue to exist
+ * on-screen as long as its parent continues to exist. To explicitly remove a [Surface] from the
+ * screen use [Transaction.reparent] with a null-parent. After release, [isValid] will return
+ * false and other methods will throw an exception. Always call [release] when you are done with
+ * a [SurfaceControlCompat] instance.
+ */
+ fun release() {
+ scImpl.release()
+ }
+
+ /**
+ * Builder class for [SurfaceControlCompat] objects. By default the [Surface] will be hidden,
+ * and have "unset" bounds, meaning it can be as large as the bounds of its parent if a buffer
+ * or child so requires. It is necessary to set at least a name via [Builder.setName]
+ */
+ class Builder {
+
+ private val mBuilderImpl = createImpl()
+
+ /**
+ * Set a parent [Surface] from the provided [SurfaceView] for our new
+ * [SurfaceControlCompat]. Child surfaces are constrained to the onscreen region of their
+ * parent. Furthermore they stack relatively in Z order, and inherit the transformation of
+ * the parent.
+ * @param surfaceView Target [SurfaceView] used to provide the [Surface] this
+ * [SurfaceControlCompat] is associated with.
+ */
+ @Suppress("MissingGetterMatchingBuilder")
+ fun setParent(surfaceView: SurfaceView): Builder {
+ mBuilderImpl.setParent(surfaceView)
+ return this
+ }
+
+ /**
+ * Set a debugging-name for the [SurfaceControlCompat].
+ * @param name Debugging name configured on the [SurfaceControlCompat] instance.
+ */
+ @Suppress("MissingGetterMatchingBuilder")
+ fun setName(name: String): Builder {
+ mBuilderImpl.setName(name)
+ return this
+ }
+
+ /**
+ * Construct a new [SurfaceControlCompat] with the set parameters.
+ * The builder remains valid after the [SurfaceControlCompat] instance is created.
+ */
+ fun build(): SurfaceControlCompat = SurfaceControlCompat(mBuilderImpl.build())
+
+ internal companion object {
+ @RequiresApi(Build.VERSION_CODES.Q)
+ fun createImpl(): SurfaceControlImpl.Builder =
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ SurfaceControlVerificationHelper.createBuilderV33()
+ } else {
+ SurfaceControlVerificationHelper.createBuilderV29()
+ }
+ }
+ }
+
+ /**
+ * Interface to handle request to
+ * [SurfaceControlV29.Transaction.addTransactionCompletedListener]
+ */
+ internal interface TransactionCompletedListener {
+ /**
+ * Invoked when a frame including the updates in a transaction was presented.
+ *
+ * Buffers which are replaced or removed from the scene in the transaction invoking
+ * this callback may be reused after this point.
+ */
+ fun onTransactionCompleted()
+ }
+
+ /**
+ * Interface to handle request to
+ * [SurfaceControlCompat.Transaction.addTransactionCommittedListener]
+ */
+ interface TransactionCommittedListener {
+ /**
+ * Invoked when the transaction has been committed in SurfaceFlinger
+ */
+ fun onTransactionCommitted()
+ }
+
+ /**
+ * An atomic set of changes to a set of [SurfaceControlCompat].
+ */
+ class Transaction {
+
+ private val mImpl = createImpl()
+
+ /**
+ * Indicates whether the surface must be considered opaque, even if its pixel format is
+ * set to translucent. This can be useful if an application needs full RGBA 8888 support for
+ * instance but will still draw every pixel opaque.
+ * This flag only determines whether opacity will be sampled from the alpha channel.
+ * Plane-alpha from calls to setAlpha() can still result in blended composition regardless
+ * of the opaque setting. Combined effects are (assuming a buffer format with an alpha
+ * channel):
+ *
+ * OPAQUE + alpha(1.0) == opaque composition
+ * OPAQUE + alpha(0.x) == blended composition
+ * OPAQUE + alpha(0.0) == no composition
+ * !OPAQUE + alpha(1.0) == blended composition
+ * !OPAQUE + alpha(0.x) == blended composition
+ * !OPAQUE + alpha(0.0) == no composition
+ * If the underlying buffer lacks an alpha channel, it is as if setOpaque(true) were set
+ * automatically.
+ *
+ * @param surfaceControl Target [SurfaceControlCompat] to change the opaque flag for
+ * @param isOpaque Flag indicating if the [SurfaceControlCompat] should be fully opaque or
+ * transparent
+ */
+ fun setOpaque(surfaceControl: SurfaceControlCompat, isOpaque: Boolean): Transaction {
+ mImpl.setOpaque(surfaceControl.scImpl, isOpaque)
+ return this
+ }
+
+ /**
+ * Toggle the visibility of a given Layer and it's sub-tree.
+ * @param surfaceControl Target [SurfaceControlCompat] to change the visibility
+ * @param visible `true` to indicate the [SurfaceControlCompat] should be visible, `false`
+ * otherwise
+ */
+ fun setVisibility(surfaceControl: SurfaceControlCompat, visible: Boolean): Transaction {
+ mImpl.setVisibility(surfaceControl.scImpl, visible)
+ return this
+ }
+
+ /**
+ * Re-parents a given [SurfaceControlCompat] to a new parent. Children inherit transform
+ * (position, scaling) crop, visibility, and Z-ordering from their parents, as if the
+ * children were pixels within the parent [Surface].
+ * @param surfaceControl Target [SurfaceControlCompat] instance to reparent
+ * @param newParent Parent [SurfaceControlCompat] that the target [SurfaceControlCompat]
+ * instance is added to. This can be null indicating that the target [SurfaceControlCompat]
+ * should be removed from the scene.
+ */
+ fun reparent(
+ surfaceControl: SurfaceControlCompat,
+ newParent: SurfaceControlCompat?
+ ): Transaction {
+ mImpl.reparent(surfaceControl.scImpl, newParent?.scImpl)
+ return this
+ }
+
+ /**
+ * Re-parents a given [SurfaceControlCompat] to be a child of the [Surface] associated with
+ * the provided [SurfaceView]. Children inherit transform
+ * (position, scaling) crop, visibility, and Z-ordering from their parents, as if the
+ * children were pixels within the parent [Surface].
+ * @param surfaceControl Target [SurfaceControlCompat] instance to reparent
+ * @param surfaceView [SurfaceView] instance that acts as the new parent of the provided
+ * [SurfaceControlCompat] instance.
+ */
+ fun reparent(surfaceControl: SurfaceControlCompat, surfaceView: SurfaceView): Transaction {
+ mImpl.reparent(surfaceControl.scImpl, surfaceView)
+ return this
+ }
+
+ /**
+ * Re-parents a given [SurfaceControlCompat] to be a child of the [AttachedSurfaceControl].
+ * Children inherit transform (position, scaling) crop, visibility, and Z-ordering from
+ * their parents, as if the children were pixels within the parent [Surface].
+ * @param surfaceControl Target [SurfaceControlCompat] instance to reparent
+ * @param attachedSurfaceControl [AttachedSurfaceControl] instance that acts as the new
+ * parent of the provided [SurfaceControlCompat] instance.
+ */
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ fun reparent(
+ surfaceControl: SurfaceControlCompat,
+ attachedSurfaceControl: AttachedSurfaceControl
+ ): Transaction {
+ mImpl.reparent(surfaceControl.scImpl, attachedSurfaceControl)
+ return this
+ }
+
+ /**
+ * Updates the [HardwareBuffer] displayed for the [SurfaceControlCompat]. Note that the
+ * buffer must be allocated with [HardwareBuffer.USAGE_COMPOSER_OVERLAY] as well as
+ * [HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE] as the surface control might be composited using
+ * either an overlay or using the GPU. A presentation fence may be passed to improve
+ * performance by allowing the buffer to complete rendering while it is waiting for the
+ * transaction to be applied. For example, if the buffer is being produced by rendering with
+ * OpenGL ES then a fence created with the eglDupNativeFenceFDANDROID EGL extension API
+ * can be used to allow the GPU rendering to be concurrent with the transaction.
+ * The compositor will wait for the fence to be signaled before the buffer is displayed.
+ * If multiple buffers are set as part of the same transaction, the presentation fences of
+ * all of them must signal before any buffer is displayed. That is, the entire transaction
+ * is delayed until all presentation fences have signaled, ensuring the transaction remains
+ * consistent.
+ *
+ * @param surfaceControl Target [SurfaceControlCompat] to configure the provided buffer.
+ * @param buffer [HardwareBuffer] instance to be rendered by the [SurfaceControlCompat]
+ * instance.
+ * @param releaseCallback Optional callback invoked when the buffer is ready for re-use
+ * after being presented to the display.
+ */
+ @JvmOverloads
+ fun setBuffer(
+ surfaceControl: SurfaceControlCompat,
+ buffer: HardwareBuffer,
+ releaseCallback: (() -> Unit)? = null
+ ): Transaction {
+ mImpl.setBuffer(surfaceControl.scImpl, buffer, releaseCallback)
+ return this
+ }
+
+ /**
+ * Set the Z-order for a given [SurfaceControlCompat], relative to it's siblings.
+ * If two siblings share the same Z order the ordering is undefined.
+ * [Surface]s with a negative Z will be placed below the parent [Surface].
+ */
+ fun setLayer(
+ surfaceControl: SurfaceControlCompat,
+ z: Int
+ ): Transaction {
+ mImpl.setLayer(surfaceControl.scImpl, z)
+ return this
+ }
+
+ /**
+ * Request to add a [SurfaceControlCompat.TransactionCommittedListener]. The callback is
+ * invoked when transaction is applied and the updates are ready to be presented.
+ * This callback does not mean buffers have been released! It simply means that any new
+ * transactions applied will not overwrite the transaction for which we are receiving a
+ * callback and instead will be included in the next frame.
+ * If you are trying to avoid dropping frames (overwriting transactions), and unable to
+ * use timestamps (Which provide a more efficient solution), then this method provides a
+ * method to pace your transaction application.
+ * @param executor [Executor] to provide the thread the callback is invoked on.
+ * @param listener [TransactionCommittedListener] instance that is invoked when the
+ * transaction has been committed.
+ */
+ @Suppress("PairedRegistration")
+ fun addTransactionCommittedListener(
+ executor: Executor,
+ listener: TransactionCommittedListener
+ ): Transaction {
+ mImpl.addTransactionCommittedListener(executor, listener)
+ return this
+ }
+
+ /**
+ * Updates the region for the content on this surface updated in this transaction. The
+ * damage region is the area of the buffer that has changed since the previously
+ * sent buffer. This can be used to reduce the amount of recomposition that needs to
+ * happen when only a small region of the buffer is being updated, such as for a small
+ * blinking cursor or a loading indicator.
+ * @param surfaceControl Target [SurfaceControlImpl] to set damage region of.
+ * @param region The region to be set. If null, the entire buffer is assumed dirty. This is
+ * equivalent to not setting a damage region at all.
+ */
+ fun setDamageRegion(
+ surfaceControl: SurfaceControlCompat,
+ region: Region?
+ ): Transaction {
+ mImpl.setDamageRegion(surfaceControl.scImpl, region)
+ return this
+ }
+
+ /**
+ * Set the alpha for a given surface. If the alpha is non-zero the SurfaceControl will
+ * be blended with the Surfaces under it according to the specified ratio.
+ * @param surfaceControl Target [SurfaceControlImpl] to set the alpha of.
+ * @param alpha The alpha to set. Value is between 0.0 and 1.0 inclusive.
+ */
+ fun setAlpha(
+ surfaceControl: SurfaceControlCompat,
+ alpha: Float
+ ): Transaction {
+ mImpl.setAlpha(surfaceControl.scImpl, alpha)
+ return this
+ }
+
+ /**
+ * Commit the transaction, clearing it's state, and making it usable as a new transaction.
+ */
+ fun commit() {
+ mImpl.commit()
+ }
+
+ /**
+ * Release the native transaction object, without applying it.
+ */
+ fun close() {
+ mImpl.close()
+ }
+
+ /**
+ * Consume the passed in transaction, and request the View hierarchy to apply it atomically
+ * with the next draw. This transaction will be merged with the buffer transaction from the
+ * ViewRoot and they will show up on-screen atomically synced. This will not cause a draw to
+ * be scheduled, and if there are no other changes to the View hierarchy you may need to
+ * call View.invalidate()
+ * @param attachedSurfaceControl [AttachedSurfaceControl] associated with the ViewRoot that
+ * will apply the provided transaction on the next draw pass
+ */
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ fun commitTransactionOnDraw(attachedSurfaceControl: AttachedSurfaceControl) {
+ mImpl.commitTransactionOnDraw(attachedSurfaceControl)
+ }
+
+ internal companion object {
+ @RequiresApi(Build.VERSION_CODES.Q)
+ fun createImpl(): SurfaceControlImpl.Transaction =
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ SurfaceControlVerificationHelper.createTransactionV33()
+ } else {
+ SurfaceControlVerificationHelper.createTransactionV29()
+ }
+ }
+ }
+}
+
+/**
+ * Helper class to avoid class verification failures
+ */
+internal class SurfaceControlVerificationHelper private constructor() {
+
+ companion object {
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ @androidx.annotation.DoNotInline
+ fun createBuilderV33(): SurfaceControlImpl.Builder = SurfaceControlV33.Builder()
+
+ @RequiresApi(Build.VERSION_CODES.Q)
+ @androidx.annotation.DoNotInline
+ fun createBuilderV29(): SurfaceControlImpl.Builder = SurfaceControlV29.Builder()
+
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ @androidx.annotation.DoNotInline
+ fun createTransactionV33(): SurfaceControlImpl.Transaction = SurfaceControlV33.Transaction()
+
+ @RequiresApi(Build.VERSION_CODES.Q)
+ @androidx.annotation.DoNotInline
+ fun createTransactionV29(): SurfaceControlImpl.Transaction = SurfaceControlV29.Transaction()
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt
new file mode 100644
index 0000000..82ac890
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlImpl.kt
@@ -0,0 +1,253 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.surface
+
+import android.graphics.Region
+import android.hardware.HardwareBuffer
+import android.os.Build
+import android.view.AttachedSurfaceControl
+import android.view.Surface
+import android.view.SurfaceControl
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import androidx.graphics.surface.SurfaceControlCompat.TransactionCommittedListener
+import java.util.concurrent.Executor
+
+/**
+ * Interface that abstracts the implementation of the [SurfaceControl] APIs depending on API level
+ */
+internal interface SurfaceControlImpl {
+
+ /**
+ * Check whether this instance points to a valid layer with the system-compositor.
+ * For example this may be false if construction failed, or the layer was released [release].
+ */
+ fun isValid(): Boolean
+
+ /**
+ * Release the local reference to the server-side surface. The [Surface] may continue to exist
+ * on-screen as long as its parent continues to exist. To explicitly remove a [Surface] from the
+ * screen use [Transaction.reparent] with a null-parent. After release, [isValid] will return
+ * false and other methods will throw an exception. Always call [release] when you are done with
+ * a [SurfaceControlCompat] instance.
+ */
+ fun release()
+
+ /**
+ * Interface that abstracts the implementation of [SurfaceControl.Builder] APIs depending on
+ * API level
+ */
+ interface Builder {
+
+ /**
+ * Set a parent [Surface] from the provided [SurfaceView] for our new
+ * [SurfaceControlImpl]. Child surfaces are constrained to the onscreen region of their
+ * parent. Furthermore they stack relatively in Z order, and inherit the transformation of
+ * the parent.
+ * @param surfaceView Target [SurfaceView] used to provide the [Surface] this
+ * [SurfaceControlImpl] is associated with.
+ */
+ fun setParent(surfaceView: SurfaceView): Builder
+
+ /**
+ * Set a debugging-name for the [SurfaceControlImpl].
+ * @param name Debugging name configured on the [SurfaceControlCompat] instance.
+ */
+ fun setName(name: String): Builder
+
+ /**
+ * Construct a new [SurfaceControlImpl] with the set parameters.
+ * The builder remains valid after the [SurfaceControlImpl] instance is created.
+ */
+ fun build(): SurfaceControlImpl
+ }
+
+ interface Transaction {
+
+ /**
+ * Indicates whether the surface must be considered opaque, even if its pixel format is
+ * set to translucent. This can be useful if an application needs full RGBA 8888 support for
+ * instance but will still draw every pixel opaque.
+ * This flag only determines whether opacity will be sampled from the alpha channel.
+ * Plane-alpha from calls to setAlpha() can still result in blended composition regardless
+ * of the opaque setting. Combined effects are (assuming a buffer format with an alpha
+ * channel):
+ *
+ * OPAQUE + alpha(1.0) == opaque composition
+ * OPAQUE + alpha(0.x) == blended composition
+ * OPAQUE + alpha(0.0) == no composition
+ * !OPAQUE + alpha(1.0) == blended composition
+ * !OPAQUE + alpha(0.x) == blended composition
+ * !OPAQUE + alpha(0.0) == no composition
+ * If the underlying buffer lacks an alpha channel, it is as if setOpaque(true) were set
+ * automatically.
+ *
+ * @param surfaceControl Target [SurfaceControlCompat] to change the opaque flag for
+ * @param isOpaque Flag indicating if the [SurfaceControlCompat] should be fully opaque or
+ * transparent
+ */
+ fun setOpaque(surfaceControl: SurfaceControlImpl, isOpaque: Boolean): Transaction
+
+ /**
+ * Toggle the visibility of a given Layer and it's sub-tree.
+ * @param surfaceControl Target [SurfaceControlImpl]
+ */
+ fun setVisibility(surfaceControl: SurfaceControlImpl, visible: Boolean): Transaction
+
+ /**
+ * Re-parents a given [SurfaceControlImpl] to a new parent. Children inherit transform
+ * (position, scaling) crop, visibility, and Z-ordering from their parents, as if the
+ * children were pixels within the parent [Surface].
+ * @param surfaceControl Target [SurfaceControlImpl] instance to reparent
+ * @param newParent Parent [SurfaceControlImpl] that the target [SurfaceControlCompat]
+ * instance is added to. This can be null indicating that the target [SurfaceControlCompat]
+ * should be removed from the scene.
+ */
+ fun reparent(
+ surfaceControl: SurfaceControlImpl,
+ newParent: SurfaceControlImpl?
+ ): Transaction
+
+ /**
+ * Re-parents a given [SurfaceControlImpl] to be a child of the [Surface] associated with
+ * the provided [SurfaceView]. Children inherit transform
+ * (position, scaling) crop, visibility, and Z-ordering from their parents, as if the
+ * children were pixels within the parent [Surface].
+ * @param surfaceControl Target [SurfaceControlImpl] instance to reparent
+ * @param surfaceView [SurfaceView] instance that acts as the new parent of the provided
+ * [SurfaceControlImpl] instance.
+ */
+ fun reparent(surfaceControl: SurfaceControlImpl, surfaceView: SurfaceView): Transaction
+
+ /**
+ * Re-parents a given [SurfaceControlImpl] to be a child of the [AttachedSurfaceControl].
+ * Children inherit transform (position, scaling) crop, visibility, and Z-ordering from
+ * their parents, as if the children were pixels within the parent [Surface].
+ * @param surfaceControl Target [SurfaceControlImpl] instance to reparent
+ * @param attachedSurfaceControl [AttachedSurfaceControl] instance that acts as the new
+ * parent of the provided [SurfaceControlImpl] instance.
+ */
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ fun reparent(
+ surfaceControl: SurfaceControlImpl,
+ attachedSurfaceControl: AttachedSurfaceControl
+ ): Transaction
+
+ /**
+ * Updates the [HardwareBuffer] displayed for the [SurfaceControlImpl]. Note that the
+ * buffer must be allocated with [HardwareBuffer.USAGE_COMPOSER_OVERLAY] as well as
+ * [HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE] as the surface control might be composited using
+ * either an overlay or using the GPU. A presentation fence may be passed to improve
+ * performance by allowing the buffer to complete rendering while it is waiting for the
+ * transaction to be applied. For example, if the buffer is being produced by rendering with
+ * OpenGL ES then a fence created with the eglDupNativeFenceFDANDROID EGL extension API
+ * can be used to allow the GPU rendering to be concurrent with the transaction.
+ * The compositor will wait for the fence to be signaled before the buffer is displayed.
+ * If multiple buffers are set as part of the same transaction, the presentation fences of
+ * all of them must signal before any buffer is displayed. That is, the entire transaction
+ * is delayed until all presentation fences have signaled, ensuring the transaction remains
+ * consistent.
+ *
+ * @param surfaceControl Target [SurfaceControlImpl] to configure the provided buffer.
+ * @param buffer [HardwareBuffer] instance to be rendered by the [SurfaceControlImpl]
+ * instance.
+ * @param releaseCallback Optional callback invoked when the buffer is ready for re-use
+ * after being presented to the display.
+ */
+ fun setBuffer(
+ surfaceControl: SurfaceControlImpl,
+ buffer: HardwareBuffer,
+ releaseCallback: (() -> Unit)? = null
+ ): Transaction
+
+ /**
+ * Set the Z-order for a given [SurfaceControlImpl], relative to it's siblings.
+ * If two siblings share the same Z order the ordering is undefined.
+ * [Surface]s with a negative Z will be placed below the parent [Surface].
+ */
+ fun setLayer(
+ surfaceControl: SurfaceControlImpl,
+ z: Int
+ ): Transaction
+
+ /**
+ * Request to add a [SurfaceControlCompat.TransactionCommittedListener]. The callback is
+ * invoked when transaction is applied and the updates are ready to be presented.
+ * This callback does not mean buffers have been released! It simply means that any new
+ * transactions applied will not overwrite the transaction for which we are receiving a
+ * callback and instead will be included in the next frame.
+ * If you are trying to avoid dropping frames (overwriting transactions), and unable to
+ * use timestamps (Which provide a more efficient solution), then this method provides a
+ * method to pace your transaction application.
+ * @param executor [Executor] to provide the thread the callback is invoked on.
+ * @param listener [TransactionCommittedListener] instance that is invoked when the
+ * transaction has been committed.
+ */
+ fun addTransactionCommittedListener(
+ executor: Executor,
+ listener: TransactionCommittedListener
+ ): Transaction
+
+ /**
+ * Updates the region for the content on this surface updated in this transaction. The
+ * damage region is the area of the buffer that has changed since the previously
+ * sent buffer. This can be used to reduce the amount of recomposition that needs to
+ * happen when only a small region of the buffer is being updated, such as for a small
+ * blinking cursor or a loading indicator.
+ * @param surfaceControl Target [SurfaceControlImpl] to set damage region of.
+ * @param region The region to be set. If null, the entire buffer is assumed dirty. This is
+ * equivalent to not setting a damage region at all.
+ */
+ fun setDamageRegion(
+ surfaceControl: SurfaceControlImpl,
+ region: Region?
+ ): Transaction
+
+ /**
+ * Set the alpha for a given surface. If the alpha is non-zero the SurfaceControl will
+ * be blended with the Surfaces under it according to the specified ratio.
+ * @param surfaceControl Target [SurfaceControlImpl] to set the alpha of.
+ * @param alpha The alpha to set. Value is between 0.0 and 1.0 inclusive.
+ */
+ fun setAlpha(
+ surfaceControl: SurfaceControlImpl,
+ alpha: Float
+ ): Transaction
+
+ /**
+ * Commit the transaction, clearing it's state, and making it usable as a new transaction.
+ */
+ fun commit()
+
+ /**
+ * Release the native transaction object, without applying it.
+ */
+ fun close()
+
+ /**
+ * Consume the passed in transaction, and request the View hierarchy to apply it atomically
+ * with the next draw. This transaction will be merged with the buffer transaction from the
+ * ViewRoot and they will show up on-screen atomically synced. This will not cause a draw to
+ * be scheduled, and if there are no other changes to the View hierarchy you may need to
+ * call View.invalidate()
+ * @param attachedSurfaceControl [AttachedSurfaceControl] associated with the ViewRoot that
+ * will apply the provided transaction on the next draw pass
+ */
+ @RequiresApi(Build.VERSION_CODES.TIRAMISU)
+ fun commitTransactionOnDraw(attachedSurfaceControl: AttachedSurfaceControl)
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt
new file mode 100644
index 0000000..8972f94
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV29.kt
@@ -0,0 +1,254 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.surface
+
+import android.graphics.Region
+import android.hardware.HardwareBuffer
+import android.os.Build
+import android.view.AttachedSurfaceControl
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import java.util.concurrent.Executor
+import java.util.concurrent.Executors
+
+/**
+ * Implementation of [SurfaceControlImpl] that wraps the [SurfaceControlWrapper] API.
+ */
+@RequiresApi(Build.VERSION_CODES.Q)
+internal class SurfaceControlV29 internal constructor(
+ internal val surfaceControl: SurfaceControlWrapper
+) : SurfaceControlImpl {
+
+ /**
+ * See [SurfaceControlWrapper.isValid]
+ */
+ override fun isValid(): Boolean = surfaceControl.isValid()
+
+ /**
+ * See [SurfaceControlWrapper.release]
+ */
+ override fun release() {
+ surfaceControl.release()
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Builder]
+ */
+ class Builder : SurfaceControlImpl.Builder {
+ private var builder = SurfaceControlWrapper.Builder()
+
+ /**
+ * See [SurfaceControlWrapper.Builder.setParent]
+ */
+ override fun setParent(surfaceView: SurfaceView): SurfaceControlImpl.Builder {
+ builder.setParent(surfaceView.holder.surface)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Builder.setDebugName]
+ */
+ override fun setName(name: String): SurfaceControlImpl.Builder {
+ builder.setDebugName(name)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Builder.build]
+ */
+ override fun build(): SurfaceControlImpl = SurfaceControlV29(builder.build())
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Transaction]
+ */
+ class Transaction : SurfaceControlImpl.Transaction {
+ private val transaction = SurfaceControlWrapper.Transaction()
+
+ /**
+ * See [SurfaceControlWrapper.Transaction.commit]
+ */
+ override fun commit() {
+ transaction.commit()
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Transaction.setVisibility]
+ */
+ override fun setVisibility(
+ surfaceControl: SurfaceControlImpl,
+ visible: Boolean
+ ): SurfaceControlImpl.Transaction {
+ transaction.setVisibility(surfaceControl.asWrapperSurfaceControl(), visible)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Transaction.reparent]
+ */
+ override fun reparent(
+ surfaceControl: SurfaceControlImpl,
+ newParent: SurfaceControlImpl?
+ ): SurfaceControlImpl.Transaction {
+ transaction.reparent(
+ surfaceControl.asWrapperSurfaceControl(),
+ newParent?.asWrapperSurfaceControl()
+ )
+ return this
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Transaction.reparent]
+ */
+ override fun reparent(
+ surfaceControl: SurfaceControlImpl,
+ surfaceView: SurfaceView
+ ): SurfaceControlImpl.Transaction {
+ transaction.reparent(
+ surfaceControl.asWrapperSurfaceControl(),
+ SurfaceControlWrapper.Builder()
+ .setParent(surfaceView.holder.surface)
+ .setDebugName(surfaceView.toString())
+ .build()
+ )
+ return this
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Transaction.setBuffer]
+ */
+ override fun setBuffer(
+ surfaceControl: SurfaceControlImpl,
+ buffer: HardwareBuffer,
+ releaseCallback: (() -> Unit)?
+ ): SurfaceControlImpl.Transaction {
+ if (releaseCallback != null) {
+ val listener = object : SurfaceControlCompat.TransactionCompletedListener {
+ override fun onTransactionCompleted() {
+ releaseCallback()
+ }
+ }
+
+ transaction.addTransactionCompletedListener(
+ Executors.newSingleThreadExecutor(
+ Executors.defaultThreadFactory()
+ ),
+ listener
+ )
+ }
+ transaction.setBuffer(surfaceControl.asWrapperSurfaceControl(), buffer)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Transaction.setLayer]
+ */
+ override fun setLayer(
+ surfaceControl: SurfaceControlImpl,
+ z: Int
+ ): SurfaceControlImpl.Transaction {
+ transaction.setLayer(surfaceControl.asWrapperSurfaceControl(), z)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Transaction.addTransactionCommittedListener]
+ */
+ @RequiresApi(Build.VERSION_CODES.S)
+ override fun addTransactionCommittedListener(
+ executor: Executor,
+ listener: SurfaceControlCompat.TransactionCommittedListener
+ ): SurfaceControlImpl.Transaction {
+ transaction.addTransactionCommittedListener(executor, listener)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Transaction.addTransactionCompletedListener]
+ */
+ fun addTransactionCompletedListener(
+ executor: Executor,
+ listener: SurfaceControlCompat.TransactionCompletedListener
+ ): SurfaceControlImpl.Transaction {
+ transaction.addTransactionCompletedListener(executor, listener)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Transaction.setDamageRegion]
+ */
+ override fun setDamageRegion(
+ surfaceControl: SurfaceControlImpl,
+ region: Region?
+ ): SurfaceControlImpl.Transaction {
+ transaction.setDamageRegion(surfaceControl.asWrapperSurfaceControl(), region)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Transaction.setOpaque]
+ */
+ override fun setOpaque(
+ surfaceControl: SurfaceControlImpl,
+ isOpaque: Boolean
+ ): SurfaceControlImpl.Transaction {
+ transaction.setOpaque(surfaceControl.asWrapperSurfaceControl(), isOpaque)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Transaction.setAlpha]
+ */
+ override fun setAlpha(
+ surfaceControl: SurfaceControlImpl,
+ alpha: Float
+ ): SurfaceControlImpl.Transaction {
+ transaction.setAlpha(surfaceControl.asWrapperSurfaceControl(), alpha)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlWrapper.Transaction.close]
+ */
+ override fun close() {
+ transaction.close()
+ }
+
+ override fun reparent(
+ surfaceControl: SurfaceControlImpl,
+ attachedSurfaceControl: AttachedSurfaceControl
+ ): SurfaceControlImpl.Transaction {
+ throw UnsupportedOperationException(
+ "Reparenting to an AttachedSurfaceControl is only available on Android T+."
+ )
+ }
+
+ override fun commitTransactionOnDraw(attachedSurfaceControl: AttachedSurfaceControl) {
+ throw UnsupportedOperationException(
+ "Committing transactions synchronously with the draw pass of an " +
+ "AttachedSurfaceControl is only available on Android T+."
+ )
+ }
+
+ private fun SurfaceControlImpl.asWrapperSurfaceControl(): SurfaceControlWrapper =
+ if (this is SurfaceControlV29) {
+ surfaceControl
+ } else {
+ throw IllegalArgumentException("Parent implementation is only for Android T+.")
+ }
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV33.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV33.kt
new file mode 100644
index 0000000..fedbe9e
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlV33.kt
@@ -0,0 +1,237 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.surface
+
+import android.graphics.Region
+import android.hardware.HardwareBuffer
+import android.os.Build
+import android.view.AttachedSurfaceControl
+import android.view.SurfaceControl
+import android.view.SurfaceView
+import androidx.annotation.RequiresApi
+import java.util.concurrent.Executor
+
+/**
+ * Implementation of [SurfaceControlImpl] that wraps the SDK's [SurfaceControl] API.
+ */
+@RequiresApi(Build.VERSION_CODES.TIRAMISU)
+internal class SurfaceControlV33 internal constructor(
+ internal val surfaceControl: SurfaceControl
+) : SurfaceControlImpl {
+
+ /**
+ * See [SurfaceControlImpl.isValid]
+ */
+ override fun isValid(): Boolean = surfaceControl.isValid
+
+ /**
+ * See [SurfaceControlImpl.release]
+ */
+ override fun release() {
+ surfaceControl.release()
+ }
+
+ /**
+ * See [SurfaceControlImpl.Builder]
+ */
+ class Builder : SurfaceControlImpl.Builder {
+
+ private val builder = SurfaceControl.Builder()
+
+ /**
+ * See [SurfaceControlImpl.Builder.setParent]
+ */
+ override fun setParent(surfaceView: SurfaceView): SurfaceControlImpl.Builder {
+ builder.setParent(surfaceView.surfaceControl)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlImpl.Builder.setName]
+ */
+ override fun setName(name: String): Builder {
+ builder.setName(name)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlImpl.Builder.build]
+ */
+ override fun build(): SurfaceControlImpl = SurfaceControlV33(builder.build())
+ }
+
+ /**
+ * See [SurfaceControlImpl.Transaction]
+ */
+ class Transaction : SurfaceControlImpl.Transaction {
+
+ private val mTransaction = SurfaceControl.Transaction()
+
+ /**
+ * See [SurfaceControlImpl.Transaction.setOpaque]
+ */
+ override fun setOpaque(
+ surfaceControl: SurfaceControlImpl,
+ isOpaque: Boolean
+ ): SurfaceControlImpl.Transaction {
+ mTransaction.setOpaque(surfaceControl.asFrameworkSurfaceControl(), isOpaque)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlImpl.Transaction.setVisibility]
+ */
+ override fun setVisibility(
+ surfaceControl: SurfaceControlImpl,
+ visible: Boolean
+ ): SurfaceControlImpl.Transaction {
+ mTransaction.setVisibility(surfaceControl.asFrameworkSurfaceControl(), visible)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlImpl.Transaction.setBuffer]
+ */
+ override fun setBuffer(
+ surfaceControl: SurfaceControlImpl,
+ buffer: HardwareBuffer,
+ releaseCallback: (() -> Unit)?
+ ): Transaction {
+ mTransaction.setBuffer(surfaceControl.asFrameworkSurfaceControl(), buffer, null) {
+ releaseCallback?.invoke()
+ }
+ return this
+ }
+
+ /**
+ * See [SurfaceControlImpl.Transaction.setLayer]
+ */
+ override fun setLayer(
+ surfaceControl: SurfaceControlImpl,
+ z: Int
+ ): SurfaceControlImpl.Transaction {
+ mTransaction.setLayer(surfaceControl.asFrameworkSurfaceControl(), z)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlImpl.Transaction.reparent]
+ */
+ override fun reparent(
+ surfaceControl: SurfaceControlImpl,
+ newParent: SurfaceControlImpl?
+ ): Transaction {
+ mTransaction.reparent(
+ surfaceControl.asFrameworkSurfaceControl(),
+ newParent?.asFrameworkSurfaceControl()
+ )
+ return this
+ }
+
+ /**
+ * See [SurfaceControlImpl.Transaction.reparent]
+ */
+ override fun reparent(
+ surfaceControl: SurfaceControlImpl,
+ surfaceView: SurfaceView
+ ): SurfaceControlImpl.Transaction {
+ mTransaction.reparent(
+ surfaceControl.asFrameworkSurfaceControl(),
+ surfaceView.surfaceControl
+ )
+ return this
+ }
+
+ /**
+ * See [SurfaceControlImpl.Transaction.reparent]
+ */
+ override fun reparent(
+ surfaceControl: SurfaceControlImpl,
+ attachedSurfaceControl: AttachedSurfaceControl
+ ): SurfaceControlImpl.Transaction {
+ val reparentTransaction = attachedSurfaceControl
+ .buildReparentTransaction(surfaceControl.asFrameworkSurfaceControl())
+ if (reparentTransaction != null) {
+ mTransaction.merge(reparentTransaction)
+ }
+ return this
+ }
+
+ /**
+ * See [SurfaceControlImpl.Transaction.addTransactionCommittedListener]
+ */
+ override fun addTransactionCommittedListener(
+ executor: Executor,
+ listener: SurfaceControlCompat.TransactionCommittedListener
+ ): SurfaceControlImpl.Transaction {
+ mTransaction.addTransactionCommittedListener(executor) {
+ listener.onTransactionCommitted()
+ }
+ return this
+ }
+
+ /**
+ * See [SurfaceControlImpl.Transaction.setDamageRegion]
+ */
+ override fun setDamageRegion(
+ surfaceControl: SurfaceControlImpl,
+ region: Region?
+ ): SurfaceControlImpl.Transaction {
+ mTransaction.setDamageRegion(surfaceControl.asFrameworkSurfaceControl(), region)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlImpl.Transaction.setAlpha]
+ */
+ override fun setAlpha(
+ surfaceControl: SurfaceControlImpl,
+ alpha: Float
+ ): SurfaceControlImpl.Transaction {
+ mTransaction.setAlpha(surfaceControl.asFrameworkSurfaceControl(), alpha)
+ return this
+ }
+
+ /**
+ * See [SurfaceControlImpl.Transaction.commit]
+ */
+ override fun commit() {
+ mTransaction.apply()
+ }
+
+ /**
+ * See [SurfaceControlImpl.Transaction.close]
+ */
+ override fun close() {
+ mTransaction.close()
+ }
+
+ /**
+ * See [SurfaceControlImpl.Transaction.commitTransactionOnDraw]
+ */
+ override fun commitTransactionOnDraw(attachedSurfaceControl: AttachedSurfaceControl) {
+ attachedSurfaceControl.applyTransactionOnDraw(mTransaction)
+ }
+
+ private fun SurfaceControlImpl.asFrameworkSurfaceControl(): SurfaceControl =
+ if (this is SurfaceControlV33) {
+ surfaceControl
+ } else {
+ throw IllegalArgumentException("Parent implementation is not for Android T")
+ }
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlWrapper.kt b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlWrapper.kt
new file mode 100644
index 0000000..de074a4
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/graphics/surface/SurfaceControlWrapper.kt
@@ -0,0 +1,499 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.graphics.surface
+
+import android.graphics.Rect
+import android.graphics.Region
+import android.hardware.HardwareBuffer
+import android.os.Build
+import android.view.Surface
+import android.view.SurfaceControl
+import androidx.annotation.RequiresApi
+import androidx.hardware.SyncFenceCompat
+import java.util.concurrent.Executor
+
+internal class JniBindings {
+ companion object {
+ external fun nCreate(surfaceControl: Long, debugName: String): Long
+ external fun nCreateFromSurface(surface: Surface, debugName: String): Long
+ external fun nRelease(surfaceControl: Long)
+
+ external fun nTransactionCreate(): Long
+ external fun nTransactionDelete(surfaceTransaction: Long)
+ external fun nTransactionApply(surfaceTransaction: Long)
+ external fun nTransactionReparent(
+ surfaceTransaction: Long,
+ surfaceControl: Long,
+ newParent: Long
+ )
+
+ external fun nTransactionSetOnComplete(
+ surfaceTransaction: Long,
+ listener: SurfaceControlCompat.TransactionCompletedListener
+ )
+
+ external fun nTransactionSetOnCommit(
+ surfaceTransaction: Long,
+ listener: SurfaceControlCompat.TransactionCommittedListener
+ )
+
+ external fun nExtractFenceFd(
+ syncFence: SyncFenceCompat
+ ): Int
+
+ external fun nSetBuffer(
+ surfaceTransaction: Long,
+ surfaceControl: Long,
+ hardwareBuffer: HardwareBuffer,
+ acquireFieldFd: SyncFenceCompat
+ )
+
+ external fun nSetVisibility(
+ surfaceTransaction: Long,
+ surfaceControl: Long,
+ visibility: Byte
+ )
+
+ external fun nSetZOrder(surfaceTransaction: Long, surfaceControl: Long, zOrder: Int)
+ external fun nSetDamageRegion(
+ surfaceTransaction: Long,
+ surfaceControl: Long,
+ rect: Rect?
+ )
+
+ external fun nSetDesiredPresentTime(
+ surfaceTransaction: Long,
+ desiredPresentTime: Long
+ )
+
+ external fun nSetBufferTransparency(
+ surfaceTransaction: Long,
+ surfaceControl: Long,
+ transparency: Byte,
+ )
+
+ external fun nSetBufferAlpha(
+ surfaceTransaction: Long,
+ surfaceControl: Long,
+ alpha: Float
+ )
+
+ init {
+ System.loadLibrary("graphics-core")
+ }
+ }
+}
+
+/**
+ * Handle to an on-screen Surface managed by the system compositor. By constructing
+ * a [Surface] from this [SurfaceControlWrapper] you can submit buffers to be composited. Using
+ * [SurfaceControlWrapper.Transaction] you can manipulate various properties of how the buffer will be
+ * displayed on-screen. SurfaceControls are arranged into a scene-graph like hierarchy, and
+ * as such any SurfaceControl may have a parent. Geometric properties like transform, crop, and
+ * Z-ordering will be inherited from the parent, as if the child were content in the parents
+ * buffer stream.
+ *
+ * Compatibility class for [SurfaceControl]. This differs by being built upon the equivalent API
+ * within the Android NDK. It introduces some APIs into earlier platform releases than what was
+ * initially exposed for SurfaceControl.
+ */
+@RequiresApi(Build.VERSION_CODES.Q)
+internal class SurfaceControlWrapper internal constructor(
+ surface: Surface,
+ debugName: String
+) {
+ private var mNativeSurfaceControl: Long = 0
+
+ init {
+ mNativeSurfaceControl = JniBindings.nCreateFromSurface(surface, debugName)
+
+ if (mNativeSurfaceControl == 0L) {
+ throw IllegalArgumentException()
+ }
+ }
+
+ /**
+ * Compatibility class for ASurfaceTransaction.
+ */
+ class Transaction() {
+ private var mNativeSurfaceTransaction: Long
+
+ init {
+ mNativeSurfaceTransaction = JniBindings.nTransactionCreate()
+ if (mNativeSurfaceTransaction == 0L) {
+ throw java.lang.IllegalArgumentException()
+ }
+ }
+
+ /**
+ * Commits the updates accumulated in this transaction.
+ *
+ * This is the equivalent of ASurfaceTransaction_apply.
+ *
+ * Note that the transaction is guaranteed to be applied atomically. The
+ * transactions which are applied on the same thread are als guaranteed to be applied
+ * in order.
+ */
+ fun commit() {
+ JniBindings.nTransactionApply(mNativeSurfaceTransaction)
+ }
+
+ // Suppression of PairedRegistration below is in order to match existing
+ // framework implementation of no remove method for listeners
+
+ /**
+ * Sets the callback that is invoked once the updates from this transaction are
+ * presented.
+ *
+ * @param executor The executor that the callback should be invoked on.
+ * This value cannot be null. Callback and listener events are dispatched
+ * through this Executor, providing an easy way to control which thread is used.
+ *
+ * @param listener The callback that will be invoked when the transaction has
+ * been completed. This value cannot be null.
+ */
+ @Suppress("PairedRegistration")
+ internal fun addTransactionCompletedListener(
+ executor: Executor,
+ listener: SurfaceControlCompat.TransactionCompletedListener
+ ): Transaction {
+ val listenerWrapper = object : SurfaceControlCompat.TransactionCompletedListener {
+ override fun onTransactionCompleted() {
+ executor.execute { (listener::onTransactionCompleted)() }
+ }
+ }
+
+ JniBindings.nTransactionSetOnComplete(mNativeSurfaceTransaction, listenerWrapper)
+ return this
+ }
+
+ /**
+ * Sets the callback that is invoked once the updates from this transaction are
+ * applied and ready to be presented. This callback is invoked before the
+ * setOnCompleteListener callback.
+ *
+ * @param executor The executor that the callback should be invoked on.
+ * This value can be null, where it will run on the default thread. Callback and
+ * listener events are dispatched through this Executor, providing an easy way
+ * to control which thread is used.
+ *
+ * @param listener The callback that will be invoked when the transaction has
+ * been completed. This value cannot be null.
+ */
+ @RequiresApi(Build.VERSION_CODES.S)
+ @Suppress("PairedRegistration")
+ fun addTransactionCommittedListener(
+ executor: Executor?,
+ listener: SurfaceControlCompat.TransactionCommittedListener
+ ): Transaction {
+ var listenerWrapper = listener
+ if (executor != null) {
+ listenerWrapper = object : SurfaceControlCompat.TransactionCommittedListener {
+ override fun onTransactionCommitted() {
+ executor.execute { (listener::onTransactionCommitted)() }
+ }
+ }
+ }
+ JniBindings.nTransactionSetOnCommit(mNativeSurfaceTransaction, listenerWrapper)
+ return this
+ }
+
+ /**
+ * Updates the [HardwareBuffer] displayed for the provided surfaceControl. Takes an
+ * optional [SyncFenceCompat] that is signalled when all pending work for the buffer
+ * is complete and the buffer can be safely read.
+ *
+ * The frameworks takes ownership of the syncFence passed and is responsible for closing
+ * it.
+ *
+ * Note that the buffer must be allocated with [HardwareBuffer.USAGE_COMPOSER_OVERLAY] and
+ * [HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE] as the surface control might be
+ * composited using an overlay or the GPU.
+ *
+ * @param surfaceControl The surfaceControl to update. Can not be null.
+ *
+ * @param hardwareBuffer The buffer to be displayed. This can not be null.
+ *
+ * @param syncFence The presentation fence. If null or invalid, this is equivalent to not
+ * including it.
+ */
+ @JvmOverloads
+ fun setBuffer(
+ surfaceControl: SurfaceControlWrapper,
+ hardwareBuffer: HardwareBuffer,
+ syncFence: SyncFenceCompat = SyncFenceCompat(-1)
+ ): Transaction {
+ JniBindings.nSetBuffer(
+ mNativeSurfaceTransaction,
+ surfaceControl.mNativeSurfaceControl,
+ hardwareBuffer,
+ syncFence
+ )
+ return this
+ }
+
+ /**
+ * Updates the visibility of the given [SurfaceControlWrapper]. If visibility is set to
+ * false, the [SurfaceControlWrapper] and all surfaces in the subtree will be hidden.
+ * By default SurfaceControls are visible.
+ *
+ * @param surfaceControl The SurfaceControl for which to set the visibility
+ * This value cannot be null.
+ *
+ * @param visibility the new visibility. A value of true means the surface and its children
+ * will be visible.
+ */
+ fun setVisibility(
+ surfaceControl: SurfaceControlWrapper,
+ visibility: Boolean
+ ): Transaction {
+ JniBindings.nSetVisibility(
+ mNativeSurfaceTransaction,
+ surfaceControl.mNativeSurfaceControl,
+ if (visibility) 1 else 0
+ )
+ return this
+ }
+
+ /**
+ * Updates z order index for [SurfaceControlWrapper]. Note that the z order for a
+ * surface is relative to other surfaces that are siblings of this surface.
+ * Behavior of siblings with the same z order is undefined.
+ *
+ * Z orders can range from Integer.MIN_VALUE to Integer.MAX_VALUE. Default z order
+ * index is 0. [SurfaceControlWrapper] instances are positioned back-to-front. That is
+ * lower z order values are rendered below other [SurfaceControlWrapper] instances with
+ * higher z order values.
+ *
+ * @param surfaceControl surface control to set the z order of.
+ *
+ * @param zOrder desired layer z order to set the surfaceControl.
+ */
+ fun setLayer(surfaceControl: SurfaceControlWrapper, zOrder: Int): Transaction {
+ JniBindings.nSetZOrder(
+ mNativeSurfaceTransaction,
+ surfaceControl.mNativeSurfaceControl,
+ zOrder
+ )
+ return this
+ }
+
+ /**
+ * Updates the region for content on this surface updated in this transaction. If
+ * unspecified, the complete surface will be assumed to be damaged. The damage region is
+ * the area of the buffer that has changed since the previously sent buffer. This can be
+ * used to reduce the amount of recomposition that needs to happen when only a small
+ * region of the buffer is being updated, such as for a small blinking cursor or
+ * a loading indicator.
+ *
+ * @param surfaceControl The surface control for which we want to set the damage region of.
+ *
+ * @param region The region to set. If null, the entire buffer is assumed dirty. This
+ * is equivalent to not setting a damage region at all.
+ */
+ fun setDamageRegion(
+ surfaceControl: SurfaceControlWrapper,
+ region: Region?
+ ): Transaction {
+ JniBindings.nSetDamageRegion(
+ mNativeSurfaceTransaction,
+ surfaceControl.mNativeSurfaceControl,
+ region?.bounds
+ )
+ return this
+ }
+
+ /**
+ * Re-parents a given layer to a new parent. Children inherit transform
+ * (position, scaling) crop, visibility, and Z-ordering from their parents, as
+ * if the children were pixels within the parent Surface.
+ *
+ * Any children of the reparented surfaceControl will remain children of
+ * the surfaceControl.
+ *
+ * The newParent can be null. Surface controls with a null parent do not
+ * appear on the display.
+ *
+ * @param surfaceControl The surface control to reparent
+ *
+ * @param newParent the new parent we want to set the surface control to. Can be null.
+ */
+ fun reparent(
+ surfaceControl: SurfaceControlWrapper,
+ newParent: SurfaceControlWrapper?
+ ): Transaction {
+ JniBindings.nTransactionReparent(
+ mNativeSurfaceTransaction,
+ surfaceControl.mNativeSurfaceControl,
+ newParent?.mNativeSurfaceControl ?: 0L
+ )
+ return this
+ }
+
+ /**
+ * Specifies a desiredPresentTime for the transaction. The framework will try to present
+ * the transaction at or after the time specified.
+ *
+ * Transactions will not be presented until all acquire fences have signaled even if the
+ * app requests an earlier present time.
+ *
+ * If an earlier transaction has a desired present time of x, and a later transaction
+ * has a desired present time that is before x, the later transaction will not preempt the
+ * earlier transaction.
+ *
+ * @param desiredPresentTimeNano The present time in nanoseconds to try to present the
+ * Transaction at.
+ */
+ fun setDesiredPresentTime(desiredPresentTimeNano: Long): Transaction {
+ JniBindings.nSetDesiredPresentTime(mNativeSurfaceTransaction, desiredPresentTimeNano)
+ return this
+ }
+
+ /**
+ * Update whether the content in the buffer associated with this surface is completely
+ * opaque. If true, every pixel of content in the buffer must be opaque or visual errors
+ * can occur.
+ *
+ * @param surfaceControl surface control to set the transparency of.
+ *
+ * @param isOpaque true if buffers alpha should be ignored
+ */
+ fun setOpaque(
+ surfaceControl: SurfaceControlWrapper,
+ isOpaque: Boolean
+ ): Transaction {
+ JniBindings.nSetBufferTransparency(
+ mNativeSurfaceTransaction,
+ surfaceControl.mNativeSurfaceControl,
+ if (isOpaque) 2 else 0
+ )
+ return this
+ }
+
+ /**
+ * Sets the alpha for the buffer. It uses a premultiplied blending.
+ *
+ * The passsed in alpha must be inclusively between 0.0 and 1.0.
+ *
+ * @paaram surfaceControl The surface control that we want to set the alpha of.
+ *
+ * @param alpha alpha value within the range [0, 1].
+ *
+ * @throws IllegalArgumentException if alpha is out of range.
+ */
+ fun setAlpha(
+ surfaceControl: SurfaceControlWrapper,
+ alpha: Float
+ ): Transaction {
+ if (alpha < 0.0f || alpha > 1.0f) {
+ throw IllegalArgumentException("Alpha value must be between 0.0 and 1.0.")
+ } else {
+ JniBindings.nSetBufferAlpha(
+ mNativeSurfaceTransaction,
+ surfaceControl.mNativeSurfaceControl,
+ alpha
+ )
+ }
+ return this
+ }
+
+ /**
+ * Destroys the transaction object.
+ */
+ fun close() {
+ if (mNativeSurfaceTransaction != 0L) {
+ JniBindings.nTransactionDelete(mNativeSurfaceTransaction)
+ }
+ mNativeSurfaceTransaction = 0L
+ }
+
+ fun finalize() {
+ close()
+ }
+ }
+
+ /**
+ * Check whether this instance points to a valid layer with the system-compositor.
+ */
+ fun isValid(): Boolean = mNativeSurfaceControl != 0L
+
+ override fun equals(other: Any?): Boolean {
+ if (other == this) {
+ return true
+ }
+ if ((other == null) or
+ (other?.javaClass != SurfaceControlWrapper::class.java)
+ ) {
+ return false
+ }
+
+ other as SurfaceControlWrapper
+ if (other.mNativeSurfaceControl == this.mNativeSurfaceControl) {
+ return true
+ }
+
+ return false
+ }
+
+ override fun hashCode(): Int {
+ return mNativeSurfaceControl.hashCode()
+ }
+
+ /**
+ * Release the local reference to the server-side surface. The surface may continue to exist
+ * on-screen as long as its parent continues to exist. To explicitly remove a surface from the
+ * screen use [Transaction.reparent] with a null-parent. After release, [isValid] will return
+ * false and other methods will throw an exception. Always call release() when you're done with
+ * a SurfaceControl.
+ */
+ fun release() {
+ JniBindings.nRelease(mNativeSurfaceControl)
+ mNativeSurfaceControl = 0
+ }
+
+ protected fun finalize() {
+ release()
+ }
+
+ /**
+ * Builder class for [SurfaceControlWrapper].
+ *
+ * Requires a debug name.
+ */
+ class Builder {
+ private lateinit var mSurface: Surface
+ private lateinit var mDebugName: String
+
+ fun setParent(surface: Surface): Builder {
+ mSurface = surface
+ return this
+ }
+
+ @Suppress("MissingGetterMatchingBuilder")
+ fun setDebugName(debugName: String): Builder {
+ mDebugName = debugName
+ return this
+ }
+
+ /**
+ * Builds the [SurfaceControlWrapper] object
+ */
+ fun build(): SurfaceControlWrapper {
+ return SurfaceControlWrapper(mSurface, mDebugName)
+ }
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/hardware/SyncFenceCompat.kt b/graphics/graphics-core/src/main/java/androidx/hardware/SyncFenceCompat.kt
new file mode 100644
index 0000000..a9f5a89
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/hardware/SyncFenceCompat.kt
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.hardware
+
+import android.os.Build
+import androidx.annotation.RequiresApi
+import java.util.concurrent.TimeUnit
+
+/**
+ * A SyncFence represents a synchronization primitive which signals when hardware buffers have
+ * completed work on a particular resource.
+ *
+ * For example, GPU rendering to a frame buffer may generate a synchronization fence which signals
+ * when rendering has completed.
+ *
+ * When the fence signals, then the backing storage for the framebuffer may be safely read from,
+ * such as for display or media encoding.
+ */
+@RequiresApi(Build.VERSION_CODES.KITKAT)
+class SyncFenceCompat(private var fd: Int) : AutoCloseable {
+
+ /**
+ * Checks if the SyncFence object is valid.
+ * @return `true` if it is valid, `false` otherwise
+ */
+ fun isValid(): Boolean = fd != -1
+
+ /**
+ * Returns the time that the fence signaled in the [CLOCK_MONOTONIC] time domain.
+ * This returns [SyncFenceCompat.SIGNAL_TIME_INVALID] if the SyncFence is invalid.
+ */
+ fun getSignalTime(): Long =
+ if (isValid()) {
+ nGetSignalTime(fd)
+ } else {
+ SIGNAL_TIME_INVALID
+ }
+
+ /**
+ * Waits for a SyncFence to signal for up to the [timeoutNanos] duration. An invalid SyncFence,
+ * that is if [isValid] is `false`, is treated equivalently to a SyncFence that has already
+ * signaled. That is, wait() will immediately return `true`.
+ *
+ * @param timeoutNanos Timeout duration in nanoseconds. Providing a negative value will wait
+ * indefinitely until the fence is signaled
+ * @return `true` if the fence signaled or is not valid, `false` otherwise
+ */
+ fun await(timeoutNanos: Long): Boolean {
+ if (isValid()) {
+ val timeout: Int
+ if (timeoutNanos < 0) {
+ timeout = -1
+ } else {
+ timeout = TimeUnit.NANOSECONDS.toMillis(timeoutNanos).toInt()
+ }
+ return nWait(fd, timeout)
+ } else {
+ // invalid file descriptors will always return true
+ return true
+ }
+ }
+
+ /**
+ * Waits forever for a SyncFence to signal. An invalid SyncFence is treated equivalently to a
+ * SyncFence that has already signaled. That is, wait() will immediately return `true`.
+ *
+ * @return `true` if the fence signaled or isn't valid, `false` otherwise
+ */
+ fun awaitForever(): Boolean = await(-1)
+
+ /**
+ * Close the SyncFenceCompat instance. After this method is invoked the fence is invalid. That
+ * is subsequent calls to [isValid] will return `false`
+ */
+ override fun close() {
+ nClose(fd)
+ fd = -1
+ }
+
+ // SyncFence in the framework implements timeoutNanos as a long but
+ // it is casted down to an int within native code and eventually calls into
+ // the poll API which consumes a timeout in nanoseconds as an int.
+ private external fun nWait(fd: Int, timeoutMillis: Int): Boolean
+ private external fun nGetSignalTime(fd: Int): Long
+ private external fun nClose(fd: Int)
+
+ companion object {
+
+ /**
+ * An invalid signal time. Represents either the signal time for a SyncFence that isn't
+ * valid (that is, [isValid] is `false`), or if an error occurred while attempting to
+ * retrieve the signal time.
+ */
+ const val SIGNAL_TIME_INVALID: Long = -1L
+
+ /**
+ * A pending signal time. This is equivalent to the max value of a long, representing an
+ * infinitely far point in the future.
+ */
+ const val SIGNAL_TIME_PENDING: Long = Long.MAX_VALUE
+
+ init {
+ System.loadLibrary("sync-fence")
+ }
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/opengl/EGLExt.kt b/graphics/graphics-core/src/main/java/androidx/opengl/EGLExt.kt
new file mode 100644
index 0000000..8e5d7e0
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/opengl/EGLExt.kt
@@ -0,0 +1,692 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package androidx.opengl
+
+import android.hardware.HardwareBuffer
+import android.opengl.EGLDisplay
+import android.os.Build
+import androidx.annotation.IntDef
+import androidx.annotation.RequiresApi
+import androidx.graphics.opengl.egl.EglConfigAttributes
+import androidx.hardware.SyncFenceCompat
+import androidx.opengl.EGLExt.Companion.eglCreateSyncKHR
+
+/**
+ * Utility class that provides some helper methods for interacting EGL Extension APIs
+ */
+@Suppress("AcronymName")
+class EGLExt private constructor() {
+
+ companion object {
+
+ /**
+ * Determines if applications can query the age of the back buffer contents for an
+ * EGL surface as the number of frames elapsed since the contents were recently defined
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_buffer_age.txt
+ */
+ const val EGL_EXT_BUFFER_AGE = "EGL_EXT_buffer_age"
+
+ /**
+ * Allows for efficient partial updates to an area of a **buffer** that has changed since
+ * the last time the buffer was used
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_partial_update.txt
+ */
+ const val EGL_KHR_PARTIAL_UPDATE = "EGL_KHR_partial_update"
+
+ /**
+ * Allows for efficient partial updates to an area of a **surface** that changes between
+ * frames for the surface. This relates to the differences between two buffers, the current
+ * back buffer and the current front buffer.
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_swap_buffers_with_damage.txt
+ */
+ const val EGL_KHR_SWAP_BUFFERS_WITH_DAMAGE = "EGL_KHR_swap_buffers_with_damage"
+
+ /**
+ * Determines whether to use sRGB format default framebuffers to render sRGB
+ * content to display devices. Supports creation of EGLSurfaces which will be rendered to in
+ * sRGB by OpenGL contexts supporting that capability.
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_gl_colorspace.txt
+ */
+ const val EGL_KHR_GL_COLORSPACE = "EGL_KHR_gl_colorspace"
+
+ /**
+ * Determines whether creation of GL and ES contexts without an EGLConfig is allowed
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_no_config_context.txt
+ */
+ const val EGL_KHR_NO_CONFIG_CONTEXT = "EGL_KHR_no_config_context"
+
+ /**
+ * Determines whether floating point RGBA components are supported
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_pixel_format_float.txt
+ */
+ const val EGL_EXT_PIXEL_FORMAT_FLOAT = "EGL_EXT_pixel_format_float"
+
+ /**
+ * Determines whether extended sRGB color spaces are supported options for EGL Surfaces
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_gl_colorspace_scrgb.txt
+ */
+ const val EGL_EXT_GL_COLORSPACE_SCRGB = "EGL_EXT_gl_colorspace_scrgb"
+
+ /**
+ * Determines whether the underlying platform can support rendering framebuffers in the
+ * non-linear Display-P3 color space
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_gl_colorspace_display_p3_passthrough.txt
+ */
+ const val EGL_EXT_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH =
+ "EGL_EXT_gl_colorspace_display_p3_passthrough"
+
+ /**
+ * Determines whether the platform framebuffers support rendering in a larger color gamut
+ * specified in the BT.2020 color space
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_gl_colorspace_bt2020_linear.txt
+ */
+ const val EGL_EXT_GL_COLORSPACE_BT2020_PQ = "EGL_EXT_gl_colorspace_bt2020_pq"
+
+ /**
+ * Determines whether an EGLContext can be created with a priority hint. Not all
+ * implementations are guaranteed to honor the hint.
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/IMG/EGL_IMG_context_priority.txt
+ */
+ const val EGL_IMG_CONTEXT_PRIORITY = "EGL_IMG_context_priority"
+
+ /**
+ * Determines whether creation of an EGL Context without a surface is supported.
+ * This is useful for applications that only want to render to client API targets (such as
+ * OpenGL framebuffer objects) and avoid the need to a throw-away EGL surface just to get
+ * a current context.
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_surfaceless_context.txt
+ */
+ const val EGL_KHR_SURFACELESS_CONTEXT = "EGL_KHR_surfaceless_context"
+
+ /**
+ * Determines whether sync objects are supported. Sync objects are synchronization
+ * primitives that represent events whose completion can be tested or waited upon.
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+ */
+ const val EGL_KHR_FENCE_SYNC = "EGL_KHR_fence_sync"
+
+ /**
+ * Determines whether waiting for signaling of sync objects is supported. This form of wait
+ * does not necessarily block the application thread which issued the wait. Therefore
+ * applications may continue to issue commands to the client API or perform other work
+ * in parallel leading to increased performance.
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_wait_sync.txt
+ */
+ const val EGL_KHR_WAIT_SYNC = "EGL_KHR_wait_sync"
+
+ /**
+ * Determines whether creation of platform specific sync objects are supported. These
+ * objects that are associated with a native synchronization fence object using a file
+ * descriptor.
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_native_fence_sync.txt
+ */
+ const val EGL_ANDROID_NATIVE_FENCE_SYNC = "EGL_ANDROID_native_fence_sync"
+
+ /**
+ * Enables using an Android window buffer (struct ANativeWindowBuffer) as an EGLImage source
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_image_native_buffer.txt
+ */
+ const val EGL_ANDROID_IMAGE_NATIVE_BUFFER = "EGL_ANDROID_image_native_buffer"
+
+ /**
+ * Extension for supporting a new EGL resource type that is suitable for
+ * sharing 2D arrays of image data between client APIs, the EGLImage.
+ * Although the intended purpose is sharing 2D image data, the
+ * underlying interface makes no assumptions about the format or
+ * purpose of the resource being shared, leaving those decisions to
+ * the application and associated client APIs.
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_image_base.txt
+ */
+ const val EGL_KHR_IMAGE_BASE = "EGL_KHR_image_base"
+
+ /**
+ * Extension that defines a new EGL resource type that is suitable for
+ * sharing 2D arrays of image data between client APIs, the EGLImage,
+ * and allows creating EGLImages from EGL native pixmaps.
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_image.txt
+ */
+ const val EGL_KHR_IMAGE = "EGL_KHR_image"
+
+ /**
+ * Specifies the types of attributes that can be queried in [eglGetSyncAttribKHR]
+ *
+ * @hide
+ */
+ @Suppress("AcronymName")
+ @IntDef(value = [EGL_SYNC_TYPE_KHR, EGL_SYNC_STATUS_KHR, EGL_SYNC_CONDITION_KHR])
+ annotation class EGLSyncAttribute
+
+ /**
+ * Attribute that can be queried in [eglGetSyncAttribKHR].
+ * The results can be either [EGL_SYNC_FENCE_KHR] or [EGL_SYNC_NATIVE_FENCE_ANDROID].
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+ */
+ const val EGL_SYNC_TYPE_KHR = 0x30F7
+
+ /**
+ * Attribute that can be queried in [eglGetSyncAttribKHR].
+ * The results can be either [EGL_SIGNALED_KHR] or [EGL_UNSIGNALED_KHR] representing
+ * whether or not the sync object has been signalled or not.
+ * This can be queried on all sync object types.
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+ */
+ const val EGL_SYNC_STATUS_KHR = 0x30F1
+
+ /**
+ * Attribute that can be queried in [eglGetSyncAttribKHR].
+ * This attribute can only be queried on sync objects of the type [EGL_SYNC_FENCE_KHR].
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+ */
+ const val EGL_SYNC_CONDITION_KHR = 0x30F8
+
+ /**
+ * Return value when [eglGetSyncAttribKHR] is called with [EGL_SYNC_STATUS_KHR] indicating
+ * that the sync object has already been signalled.
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+ */
+ const val EGL_SIGNALED_KHR = 0x30F2
+
+ /**
+ * Return value when [eglGetSyncAttribKHR] is called with [EGL_SYNC_STATUS_KHR] indicating
+ * that the sync object has not yet been signalled.
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+ */
+ const val EGL_UNSIGNALED_KHR = 0x30F3
+
+ /**
+ * Return value when [eglGetSyncAttribKHR] is called with [EGL_SYNC_CONDITION_KHR].
+ * This indicates that the sync object will signal on the condition of the completion
+ * of the fence command on the corresponding sync object and all preceding commands
+ * in th EGL client API's command stream.
+ */
+ const val EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR = 0x30F0
+
+ /**
+ * Specifies the type of fence to create in [eglCreateSyncKHR]
+ *
+ * @hide
+ */
+ @Suppress("AcronymName")
+ @IntDef(value = [EGL_SYNC_FENCE_KHR, EGL_SYNC_NATIVE_FENCE_ANDROID])
+ annotation class EGLFenceType
+
+ /**
+ * Create an EGL fence sync object for signalling one time events. The fence object
+ * created is not associated with the Android Sync fence object and is not recommended
+ * for waiting for events in a portable manner across Android/EGL boundaries but rather
+ * other EGL primitives.
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+ */
+ const val EGL_SYNC_FENCE_KHR = 0x30F9
+
+ /**
+ * This extension enables the creation of EGL fence sync objects that are
+ * associated with a native synchronization fence object that is referenced
+ * using a file descriptor. These EGL fence sync objects have nearly
+ * identical semantics to those defined by the KHR_fence_sync extension,
+ * except that they have an additional attribute storing the file descriptor
+ * referring to the native fence object. This differs from EGL_SYNC_FENCE_KHR
+ * as the fence sync object is associated with an Android Sync HAL fence object.
+ *
+ * This extension assumes the existence of a native fence synchronization
+ * object that behaves similarly to an EGL fence sync object. These native
+ * objects must have a signal status like that of an EGLSyncKHR object that
+ * indicates whether the fence has ever been signaled. Once signaled the
+ * native object's signal status may not change again.
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_native_fence_sync.txt
+ */
+ const val EGL_SYNC_NATIVE_FENCE_ANDROID = 0x3144
+
+ /**
+ * Value that can be sent as the timeoutNanos parameter of [eglClientWaitSyncKHR]
+ * indicating that waiting on the sync object to signal will never time out.
+ */
+ // Note EGL has EGL_FOREVER_KHR defined as 0xFFFFFFFFFFFFFFFFuL. However, Java does not
+ // support unsigned long types. So use -1 as the constant value here as it will be casted
+ // as an EGLTimeKHR type which is uint64 in the corresponding JNI method
+ const val EGL_FOREVER_KHR = -1L
+
+ /**
+ * Specifies various return values for the [eglClientWaitSyncKHR] method
+ *
+ * @hide
+ */
+ @Target(AnnotationTarget.TYPE)
+ @Suppress("AcronymName")
+ @IntDef(value = [EGL_CONDITION_SATISFIED_KHR, EGL_TIMEOUT_EXPIRED_KHR, EGL_FALSE])
+ annotation class EGLClientWaitResult
+
+ /**
+ * Return value used in [eglClientWaitSyncKHR] to indicate that the specified timeout period
+ * had expired before a sync object was signalled.
+ */
+ const val EGL_TIMEOUT_EXPIRED_KHR = 0x30F5
+
+ /**
+ * Return value used in [eglClientWaitSyncKHR] to indicate that the sync object had
+ * signalled before the timeout expired. This includes the case where the sync object had
+ * already signalled before [eglClientWaitSyncKHR] was called.
+ */
+ const val EGL_CONDITION_SATISFIED_KHR = 0x30F6
+
+ /**
+ * Accepted in the flags parameter of [eglClientWaitSyncKHR]. This will implicitly ensure
+ * pending commands are flushed to prevent [eglClientWaitSyncKHR] from potentially blocking
+ * forever. See [eglClientWaitSyncKHR] for details.
+ */
+ const val EGL_SYNC_FLUSH_COMMANDS_BIT_KHR = 0x0001
+
+ /**
+ * Constant indicating true within EGL. This is often returned in success cases.
+ */
+ const val EGL_TRUE = 1
+
+ /**
+ * Constant indicating false within EGL. This is often returned in failure cases.
+ */
+ const val EGL_FALSE = 0
+
+ /**
+ * Creates an EGLImage from the provided [HardwareBuffer]. This handles
+ * internally creating an EGLClientBuffer and an [EGLImageKHR] from the client buffer.
+ *
+ * When this [EGLImageKHR] instance is no longer necessary, consumers should be sure to
+ * call the corresponding method [eglDestroyImageKHR] to deallocate the resource.
+ *
+ * @param eglDisplay EGLDisplay connection associated with the EGLImage to create
+ * @param hardwareBuffer Backing [HardwareBuffer] for the generated EGLImage instance
+ *
+ * @return an [EGLImageKHR] instance representing the [EGLImageKHR] created from the
+ * HardwareBuffer. Because this is created internally through EGL's eglCreateImageKR method,
+ * this has the KHR suffix.
+ *
+ * This can return null if the EGL_ANDROID_image_native_buffer and EGL_KHR_image_base
+ * extensions are not supported or if allocation of the buffer fails.
+ *
+ * See
+ * www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_get_native_client_buffer.txt
+ */
+ @JvmStatic
+ @RequiresApi(Build.VERSION_CODES.O)
+ fun eglCreateImageFromHardwareBuffer(
+ eglDisplay: EGLDisplay,
+ hardwareBuffer: HardwareBuffer
+ ): EGLImageKHR? {
+ val handle = EGLBindings.nCreateImageFromHardwareBuffer(
+ eglDisplay.obtainNativeHandle(), hardwareBuffer
+ )
+ return if (handle == 0L) {
+ null
+ } else {
+ EGLImageKHR(handle)
+ }
+ }
+
+ /**
+ * Destroy the given [EGLImageKHR] instance. Once destroyed, the image may not be used to
+ * create any additional [EGLImageKHR] target resources within any client API contexts,
+ * although existing [EGLImageKHR] siblings may continue to be used. `True` is returned
+ * if DestroyImageKHR succeeds, `false` indicates failure. This can return `false` if
+ * the [EGLImageKHR] is not associated with the default display.
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_image_base.txt
+ *
+ * @param eglDisplay EGLDisplay that this EGLImage is connected to
+ * @param image EGLImageKHR to be destroyed
+ *
+ * @return True if the destruction of the EGLImageKHR object was successful, false otherwise
+ */
+ @JvmStatic
+ @Suppress("AcronymName")
+ fun eglDestroyImageKHR(
+ eglDisplay: EGLDisplay,
+ image: EGLImageKHR
+ ): Boolean = EGLBindings.nDestroyImageKHR(
+ eglDisplay.obtainNativeHandle(),
+ image.nativeHandle
+ )
+
+ /**
+ * Upload a given EGLImage to the currently bound GLTexture
+ *
+ * This method requires either of the following EGL extensions to be supported:
+ * EGL_KHR_image_base or EGL_KHR_image
+ *
+ * See: https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt
+ */
+ @JvmStatic
+ @Suppress("AcronymName")
+ fun glEGLImageTargetTexture2DOES(target: Int, image: EGLImageKHR) {
+ EGLBindings.nImageTargetTexture2DOES(target, image.nativeHandle)
+ }
+
+ /**
+ * Creates a sync object of the specified type associated with the
+ * specified display, and returns a handle to the new object.
+ * The configuration of the returned [EGLSyncKHR] object is specified by the provided
+ * attributes.
+ *
+ * Consumers should ensure that the EGL_KHR_fence_sync EGL extension is supported before
+ * invoking this method otherwise a null EGLSyncFenceKHR object is returned.
+ *
+ * Additionally when the [EGLSyncKHR] instance is no longer necessary, consumers are
+ * encouraged to call [eglDestroySyncKHR] to deallocate this resource.
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+ *
+ * @param eglDisplay EGLDisplay to associate the sync object with
+ * @param type Indicates the type of sync object that is returned
+ * @param attributes Specifies the configuration of the sync object returned
+ *
+ * @return the EGLSyncKHR object to be used as a fence or null if this extension
+ * is not supported
+ */
+ @JvmStatic
+ @Suppress("AcronymName")
+ fun eglCreateSyncKHR(
+ eglDisplay: EGLDisplay,
+ @EGLFenceType type: Int,
+ attributes: EglConfigAttributes?
+ ): EGLSyncKHR? {
+ val handle = EGLBindings.nCreateSyncKHR(
+ eglDisplay.obtainNativeHandle(), type, attributes?.attrs
+ )
+ return if (handle == 0L) {
+ null
+ } else {
+ EGLSyncKHR(handle)
+ }
+ }
+
+ /**
+ * Query attributes of the provided sync object. Accepted attributes to query depend
+ * on the type of sync object. If no errors are generated, this returns true and the
+ * value of the queried attribute is stored in the value array at the offset position.
+ * If this method returns false, the provided value array is unmodified.
+ *
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+ *
+ * @param eglDisplay EGLDisplay to associate the sync object with
+ * @param sync EGLSyncKHR object to query attributes
+ * @param attribute Corresponding EGLSyncKHR attribute to query on [sync]
+ * @param value Integer array used to store the result of the query
+ * @param offset Index within the value array to store the result of the attribute query
+ *
+ * @return True if the attribute was queried successfully, false otherwise. Failure cases
+ * include attempting to call this method on an invalid sync object, or the display provided
+ * not matching the display that was used to create this sync object. Additionally if the
+ * queried attribute is not supported for the sync object, false is returned.
+ */
+ @JvmStatic
+ @Suppress("AcronymName")
+ fun eglGetSyncAttribKHR(
+ eglDisplay: EGLDisplay,
+ sync: EGLSyncKHR,
+ @EGLSyncAttribute attribute: Int,
+ value: IntArray,
+ offset: Int
+ ): Boolean =
+ EGLBindings.nGetSyncAttribKHR(
+ eglDisplay.obtainNativeHandle(),
+ sync.nativeHandle,
+ attribute,
+ value,
+ offset
+ )
+
+ /**
+ * Blocks the calling thread until the specified sync object is signalled or until
+ * [timeoutNanos] nanoseconds have passed.
+ * More than one [eglClientWaitSyncKHR] may be outstanding on the same [sync] at any given
+ * time. When there are multiple threads blocked on the same [sync] and the [sync] object
+ * has signalled, all such threads are released, but the order in which they are released is
+ * not defined.
+ *
+ * If the value of [timeoutNanos] is zero, then [eglClientWaitSyncKHR] simply tests the
+ * current status of sync. If the value of [timeoutNanos] is the special value
+ * [EGL_FOREVER_KHR], then [eglClientWaitSyncKHR] does not time out. For all other values,
+ * [timeoutNanos] is adjusted to the closest value allowed by the implementation-dependent
+ * timeout accuracy, which may be substantially longer than one nanosecond.
+ *
+ * [eglClientWaitSyncKHR] returns one of three status values describing the reason for
+ * returning. A return value of [EGL_TIMEOUT_EXPIRED_KHR] indicates that the specified
+ * timeout period expired before [sync] was signalled, or if [timeoutNanos] is zero,
+ * indicates that [sync] is not signaled. A return value of [EGL_CONDITION_SATISFIED_KHR]
+ * indicates that [sync] was signaled before the timeout expired, which includes the case
+ * when [sync] was already signaled when [eglClientWaitSyncKHR] was called. If an error
+ * occurs then an error is generated and [EGL_FALSE] is returned.
+ *
+ * If the sync object being blocked upon will not be signaled in finite time (for example
+ * by an associated fence command issued previously, but not yet flushed to the graphics
+ * pipeline), then [eglClientWaitSyncKHR] may wait forever. To help prevent this behavior,
+ * if the [EGL_SYNC_FLUSH_COMMANDS_BIT_KHR] is set on the flags parameter and the [sync] is
+ * unsignaled when [eglClientWaitSyncKHR] is called, then the equivalent flush will be
+ * performed for the current EGL context before blocking on sync. If no context is
+ * current bound for the API, the [EGL_SYNC_FLUSH_COMMANDS_BIT_KHR] bit is ignored.
+ *
+ * @param eglDisplay EGLDisplay to associate the sync object with
+ * @param sync EGLSyncKHR object to wait on
+ * @param flags Optional flags to provide to handle flushing of pending commands
+ * @param timeoutNanos Optional timeout value to wait before this method returns, measured
+ * in nanoseconds. This value is always consumed as an unsigned long value so even negative
+ * values will be converted to their unsigned equivalent.
+ *
+ * @return Result code indicating the status of the wait request. Either
+ * [EGL_CONDITION_SATISFIED_KHR], if the sync did signal within the specified timeout,
+ * [EGL_TIMEOUT_EXPIRED_KHR] if the sync did not signal within the specified timeout,
+ * or [EGL_FALSE] if an error occurs.
+ */
+ @JvmStatic
+ @Suppress("AcronymName")
+ fun eglClientWaitSyncKHR(
+ eglDisplay: EGLDisplay,
+ sync: EGLSyncKHR,
+ flags: Int,
+ timeoutNanos: Long
+ ): @EGLClientWaitResult Int =
+ EGLBindings.nClientWaitSyncKHR(
+ eglDisplay.obtainNativeHandle(),
+ sync.nativeHandle,
+ flags,
+ timeoutNanos
+ )
+
+ /**
+ * Creates a native synchronization fence referenced through a file descriptor
+ * that is associated with an EGL fence sync object.
+ *
+ * See:
+ * https://www.khronos.org/registry/EGL/extensions/ANDROID/EGL_ANDROID_native_fence_sync.txt
+ *
+ * @param display The EGLDisplay connection
+ * @param sync The EGLSyncKHR to fetch the [SyncFenceCompat] from
+ * @return A [SyncFenceCompat] representing the native fence.
+ * If [sync] is not a valid sync object for [display], an invalid [SyncFenceCompat]
+ * instance is returned and an EGL_BAD_PARAMETER error is generated.
+ * If the EGL_SYNC_NATIVE_FENCE_FD_ANDROID attribute of [sync] is
+ * EGL_NO_NATIVE_FENCE_FD_ANDROID, an invalid [SyncFenceCompat] is
+ * returned and an EGL_BAD_PARAMETER error is generated.
+ * If [display] does not match the display passed to [eglCreateSyncKHR]
+ * when [sync] was created, the behavior is undefined.
+ */
+ @JvmStatic
+ @Suppress("AcronymName")
+ @RequiresApi(Build.VERSION_CODES.KITKAT)
+ fun eglDupNativeFenceFDANDROID(display: EGLDisplay, sync: EGLSyncKHR): SyncFenceCompat {
+ val fd = EGLBindings.nDupNativeFenceFDANDROID(
+ display.obtainNativeHandle(),
+ sync.nativeHandle
+ )
+ return if (fd >= 0) {
+ SyncFenceCompat(fd)
+ } else {
+ SyncFenceCompat(-1)
+ }
+ }
+
+ /**
+ * Destroys the given sync object associated with the specified display
+ *
+ * Consumers should ensure that the EGL_KHR_fence_sync EGL extension is supported before
+ * invoking this method otherwise a null EGLSyncFenceKHR object is returned.
+ * See: https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_fence_sync.txt
+ *
+ * @param eglDisplay EGLDisplay instance associated with the fence
+ * @param eglSync Fence object to be destroyed
+ *
+ * @return true if the EGLSyncKHR object was destroyed successfully false otherwise. This
+ * can return false if the sync object is not a valid sync object for the provided display
+ * or if the display provided in this method does not match the display used to create this
+ * sync in eglCreateSyncKHR.
+ */
+ @JvmStatic
+ @Suppress("AcronymName")
+ fun eglDestroySyncKHR(
+ eglDisplay: EGLDisplay,
+ eglSync: EGLSyncKHR
+ ): Boolean = EGLBindings.nDestroySyncKHR(
+ eglDisplay.obtainNativeHandle(),
+ eglSync.nativeHandle
+ )
+
+ /**
+ * Returns a set of supported supported extensions from a space separated string
+ * that represents the set of OpenGL extensions supported
+ */
+ @JvmStatic
+ fun parseExtensions(queryString: String): Set<String> =
+ HashSet<String>().apply { addAll(queryString.split(' ')) }
+
+ /**
+ * Helper method to obtain the corresponding native handle. Newer versions of Android
+ * represent the native pointer as a long instead of an integer to support 64 bits.
+ * For OS levels that support the wider bit format, invoke it otherwise cast the int
+ * to a long.
+ *
+ * This is internal to avoid synthetic accessors
+ */
+ internal fun EGLDisplay.obtainNativeHandle(): Long =
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ EGLDisplayVerificationHelper.getNativeHandle(this)
+ } else {
+ @Suppress("DEPRECATION")
+ handle.toLong()
+ }
+ }
+}
+
+/**
+ * Helper class to configure JNI bindings to be invoked within the EGLUtils
+ * public API. This class is provided to separate responsibilities of jni method registration
+ * and helps to avoid synthetic accessor warnings
+ */
+internal class EGLBindings {
+ companion object {
+ external fun nCreateImageFromHardwareBuffer(
+ eglDisplayPtr: Long,
+ hardwareBuffer: HardwareBuffer
+ ): Long
+
+ // Note this API is explicitly a GL API and not an EGL API which is the reason
+ // why this has the GL prefix vs EGL
+ external fun nImageTargetTexture2DOES(target: Int, eglImagePtr: Long)
+ external fun nDupNativeFenceFDANDROID(eglDisplayPtr: Long, syncPtr: Long): Int
+ external fun nCreateSyncKHR(eglDisplayPtr: Long, type: Int, attrs: IntArray?): Long
+ external fun nGetSyncAttribKHR(
+ eglDisplayPtr: Long,
+ syncPtr: Long,
+ attrib: Int,
+ result: IntArray,
+ offset: Int
+ ): Boolean
+ external fun nClientWaitSyncKHR(
+ eglDisplayPtr: Long,
+ syncPtr: Long,
+ flags: Int,
+ timeout: Long
+ ): Int
+ external fun nDestroySyncKHR(eglDisplayPtr: Long, syncPtr: Long): Boolean
+ external fun nDestroyImageKHR(eglDisplayPtr: Long, eglImagePtr: Long): Boolean
+ external fun nSupportsEglGetNativeClientBufferAndroid(): Boolean
+ external fun nSupportsDupNativeFenceFDANDROID(): Boolean
+ external fun nSupportsEglCreateImageKHR(): Boolean
+ external fun nSupportsEglDestroyImageKHR(): Boolean
+ external fun nSupportsGlImageTargetTexture2DOES(): Boolean
+ external fun nSupportsEglCreateSyncKHR(): Boolean
+ external fun nSupportsEglGetSyncAttribKHR(): Boolean
+ external fun nSupportsEglClientWaitSyncKHR(): Boolean
+ external fun nSupportsEglDestroySyncKHR(): Boolean
+ external fun nEqualToNativeForeverTimeout(timeoutNanos: Long): Boolean
+
+ init {
+ System.loadLibrary("graphics-core")
+ }
+ }
+}
+
+/**
+ * Helper class to avoid class verification failures
+ */
+@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
+private class EGLDisplayVerificationHelper private constructor() {
+
+ companion object {
+ @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
+ @androidx.annotation.DoNotInline
+ fun getNativeHandle(eglDisplay: EGLDisplay): Long = eglDisplay.nativeHandle
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/opengl/EGLHandle.kt b/graphics/graphics-core/src/main/java/androidx/opengl/EGLHandle.kt
new file mode 100644
index 0000000..e799fb7
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/opengl/EGLHandle.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.opengl
+
+/**
+ * Interface used to wrap native EGL objects to create type safe objects
+ */
+@Suppress("AcronymName")
+interface EGLHandle {
+ /**
+ * Returns the native handle of the wrapped EGL object. This handle can be
+ * cast to the corresponding native type on the native side.
+ *
+ * For example, EGLDisplay dpy = (EGLDisplay)handle;
+ *
+ * @return the native handle of the wrapped EGL object.
+ */
+ val nativeHandle: Long
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/opengl/EGLImageKHR.kt b/graphics/graphics-core/src/main/java/androidx/opengl/EGLImageKHR.kt
new file mode 100644
index 0000000..3a27e89
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/opengl/EGLImageKHR.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.opengl
+
+/**
+ * EGLImageKHR is an object which can be used to create EGLImage
+ * target resources (inside client APIs).
+ * This is similar to EGL's EGLImage API except the KHR suffix indicates it is generated
+ * as part of the extension APIs namely through [EGLExt.eglCreateImageFromHardwareBuffer]
+ */
+@Suppress("AcronymName")
+class EGLImageKHR(override val nativeHandle: Long) : EGLHandle {
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (other !is EGLImageKHR) return false
+
+ if (nativeHandle != other.nativeHandle) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ return nativeHandle.hashCode()
+ }
+
+ override fun toString(): String {
+ return "EGLImageKHR(nativeHandle=$nativeHandle)"
+ }
+}
\ No newline at end of file
diff --git a/graphics/graphics-core/src/main/java/androidx/opengl/EGLSyncKHR.kt b/graphics/graphics-core/src/main/java/androidx/opengl/EGLSyncKHR.kt
new file mode 100644
index 0000000..262dfbc
--- /dev/null
+++ b/graphics/graphics-core/src/main/java/androidx/opengl/EGLSyncKHR.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.opengl
+
+/**
+ * EGLHandle to wrap native EGLSync objects.
+ * This is similar to EGL's EGLSync API except the KHR suffix indicates it is generated
+ * as part of the extension APIs namely through [EGLExt.eglCreateSyncKHR].
+ */
+@Suppress("AcronymName")
+class EGLSyncKHR(override val nativeHandle: Long) : EGLHandle {
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (other !is EGLSyncKHR) return false
+
+ if (nativeHandle != other.nativeHandle) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ return nativeHandle.hashCode()
+ }
+
+ override fun toString(): String {
+ return "EGLSyncKHR(nativeHandle=$nativeHandle)"
+ }
+}
\ No newline at end of file
diff --git a/gridlayout/gridlayout/lint-baseline.xml b/gridlayout/gridlayout/lint-baseline.xml
index d089f4c..6930c1c5 100644
--- a/gridlayout/gridlayout/lint-baseline.xml
+++ b/gridlayout/gridlayout/lint-baseline.xml
@@ -232,7 +232,9 @@
errorLine1=" public static Spec spec(int start, Alignment alignment) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/gridlayout/widget/GridLayout.java"/>
+ file="src/main/java/androidx/gridlayout/widget/GridLayout.java"
+ line="2557"
+ column="19"/>
</issue>
<issue
@@ -241,7 +243,9 @@
errorLine1=" public static Spec spec(int start, Alignment alignment) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/gridlayout/widget/GridLayout.java"/>
+ file="src/main/java/androidx/gridlayout/widget/GridLayout.java"
+ line="2557"
+ column="40"/>
</issue>
<issue
@@ -250,7 +254,9 @@
errorLine1=" public static Spec spec(int start, int size) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/gridlayout/widget/GridLayout.java"/>
+ file="src/main/java/androidx/gridlayout/widget/GridLayout.java"
+ line="2574"
+ column="19"/>
</issue>
<issue
@@ -259,7 +265,9 @@
errorLine1=" public static Spec spec(int start) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/gridlayout/widget/GridLayout.java"/>
+ file="src/main/java/androidx/gridlayout/widget/GridLayout.java"
+ line="2590"
+ column="19"/>
</issue>
</issues>
diff --git a/health/health-connect-client/src/main/java/androidx/health/connect/client/permission/HealthDataRequestPermissions.kt b/health/health-connect-client/src/main/java/androidx/health/connect/client/permission/HealthDataRequestPermissions.kt
index 16bade1..c697b09 100644
--- a/health/health-connect-client/src/main/java/androidx/health/connect/client/permission/HealthDataRequestPermissions.kt
+++ b/health/health-connect-client/src/main/java/androidx/health/connect/client/permission/HealthDataRequestPermissions.kt
@@ -58,6 +58,7 @@
}
}
+ @Suppress("DEPRECATION")
override fun parseResult(resultCode: Int, intent: Intent?): Set<Permission> {
return intent
?.getParcelableArrayListExtra<ProtoPermission>(KEY_GRANTED_PERMISSIONS_JETPACK)
diff --git a/heifwriter/heifwriter/lint-baseline.xml b/heifwriter/heifwriter/lint-baseline.xml
index 90fe3a3..41978fe 100644
--- a/heifwriter/heifwriter/lint-baseline.xml
+++ b/heifwriter/heifwriter/lint-baseline.xml
@@ -250,7 +250,9 @@
errorLine1=" public static int loadShader(int shaderType, String source) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/heifwriter/Texture2dProgram.java"/>
+ file="src/main/java/androidx/heifwriter/Texture2dProgram.java"
+ line="316"
+ column="50"/>
</issue>
<issue
@@ -259,7 +261,9 @@
errorLine1=" public static void checkLocation(int location, String label) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/heifwriter/Texture2dProgram.java"/>
+ file="src/main/java/androidx/heifwriter/Texture2dProgram.java"
+ line="338"
+ column="52"/>
</issue>
<issue
@@ -268,7 +272,9 @@
errorLine1=" public static void checkGlError(String op) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/heifwriter/Texture2dProgram.java"/>
+ file="src/main/java/androidx/heifwriter/Texture2dProgram.java"
+ line="347"
+ column="37"/>
</issue>
</issues>
diff --git a/heifwriter/heifwriter/src/androidTest/java/androidx/heifwriter/HeifWriterTest.java b/heifwriter/heifwriter/src/androidTest/java/androidx/heifwriter/HeifWriterTest.java
index fd65713..af40a5a 100644
--- a/heifwriter/heifwriter/src/androidTest/java/androidx/heifwriter/HeifWriterTest.java
+++ b/heifwriter/heifwriter/src/androidTest/java/androidx/heifwriter/HeifWriterTest.java
@@ -459,7 +459,11 @@
}
mWidth = mBitmaps[0].getWidth();
mHeight = mBitmaps[0].getHeight();
- retriever.release();
+ try {
+ retriever.release();
+ } catch (IOException e) {
+ // Nothing we can do about it.
+ }
}
private void cleanupStaleOutputs() {
@@ -702,7 +706,11 @@
assertEquals("Wrong primary index", primary,
Integer.parseInt(retriever.extractMetadata(
MediaMetadataRetriever.METADATA_KEY_IMAGE_PRIMARY)));
- retriever.release();
+ try {
+ retriever.release();
+ } catch (IOException e) {
+ // Nothing we can do about it.
+ }
if (useGrid) {
MediaExtractor extractor = new MediaExtractor();
diff --git a/leanback/leanback-preference/lint-baseline.xml b/leanback/leanback-preference/lint-baseline.xml
index 549e0a5..7ce750e2 100644
--- a/leanback/leanback-preference/lint-baseline.xml
+++ b/leanback/leanback-preference/lint-baseline.xml
@@ -250,7 +250,9 @@
errorLine1=" public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"
+ line="49"
+ column="12"/>
</issue>
<issue
@@ -259,7 +261,9 @@
errorLine1=" public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"
+ line="49"
+ column="64"/>
</issue>
<issue
@@ -268,7 +272,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"
+ line="50"
+ column="13"/>
</issue>
<issue
@@ -277,7 +283,9 @@
errorLine1=" public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"
+ line="64"
+ column="51"/>
</issue>
<issue
@@ -286,7 +294,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackPreferenceFragmentCompat.java"
+ line="74"
+ column="26"/>
</issue>
<issue
@@ -295,7 +305,9 @@
errorLine1=" public static void addTransitions(Fragment f) {"
errorLine2=" ~~~~~~~~">
<location
- file="api21/androidx/leanback/preference/LeanbackPreferenceFragmentTransitionHelperApi21.java"/>
+ file="api21/androidx/leanback/preference/LeanbackPreferenceFragmentTransitionHelperApi21.java"
+ line="36"
+ column="39"/>
</issue>
<issue
@@ -304,7 +316,9 @@
errorLine1=" public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"
+ line="64"
+ column="12"/>
</issue>
<issue
@@ -313,7 +327,9 @@
errorLine1=" public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"
+ line="64"
+ column="64"/>
</issue>
<issue
@@ -322,7 +338,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"
+ line="65"
+ column="13"/>
</issue>
<issue
@@ -331,7 +349,9 @@
errorLine1=" public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"
+ line="72"
+ column="51"/>
</issue>
<issue
@@ -340,7 +360,9 @@
errorLine1=" Preference pref) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackSettingsFragmentCompat.java"
+ line="100"
+ column="13"/>
</issue>
<issue
@@ -349,7 +371,9 @@
errorLine1=" public LeanbackSettingsRootView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"
+ line="37"
+ column="37"/>
</issue>
<issue
@@ -358,7 +382,9 @@
errorLine1=" public LeanbackSettingsRootView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"
+ line="41"
+ column="37"/>
</issue>
<issue
@@ -367,7 +393,9 @@
errorLine1=" public LeanbackSettingsRootView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"
+ line="41"
+ column="54"/>
</issue>
<issue
@@ -376,7 +404,9 @@
errorLine1=" public LeanbackSettingsRootView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"
+ line="45"
+ column="37"/>
</issue>
<issue
@@ -385,7 +415,9 @@
errorLine1=" public LeanbackSettingsRootView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"
+ line="45"
+ column="54"/>
</issue>
<issue
@@ -394,7 +426,9 @@
errorLine1=" public void setOnBackKeyListener(OnKeyListener backKeyListener) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"/>
+ file="src/main/java/androidx/leanback/preference/LeanbackSettingsRootView.java"
+ line="49"
+ column="38"/>
</issue>
<issue
@@ -403,7 +437,9 @@
errorLine1=" public OutlineOnlyWithChildrenFrameLayout(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+ file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+ line="42"
+ column="47"/>
</issue>
<issue
@@ -412,7 +448,9 @@
errorLine1=" public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+ file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+ line="46"
+ column="47"/>
</issue>
<issue
@@ -421,7 +459,9 @@
errorLine1=" public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+ file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+ line="46"
+ column="64"/>
</issue>
<issue
@@ -430,7 +470,9 @@
errorLine1=" public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs,"
errorLine2=" ~~~~~~~">
<location
- file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+ file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+ line="50"
+ column="47"/>
</issue>
<issue
@@ -439,7 +481,9 @@
errorLine1=" public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+ file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+ line="50"
+ column="64"/>
</issue>
<issue
@@ -448,7 +492,9 @@
errorLine1=" public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs,"
errorLine2=" ~~~~~~~">
<location
- file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+ file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+ line="55"
+ column="47"/>
</issue>
<issue
@@ -457,7 +503,9 @@
errorLine1=" public OutlineOnlyWithChildrenFrameLayout(Context context, AttributeSet attrs,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"/>
+ file="api21/androidx/leanback/preference/internal/OutlineOnlyWithChildrenFrameLayout.java"
+ line="55"
+ column="64"/>
</issue>
</issues>
diff --git a/leanback/leanback/lint-baseline.xml b/leanback/leanback/lint-baseline.xml
index 6dab066..d652e60 100644
--- a/leanback/leanback/lint-baseline.xml
+++ b/leanback/leanback/lint-baseline.xml
@@ -178,7 +178,9 @@
errorLine1=" vh.mTitleView.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="725"
+ column="31"/>
</issue>
<issue
@@ -187,7 +189,9 @@
errorLine1=" ft.addSharedElement(subView, transitionName);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="569"
+ column="20"/>
</issue>
<issue
@@ -196,7 +200,9 @@
errorLine1=" setEnterTransition((android.transition.Transition) enterTransition);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="910"
+ column="17"/>
</issue>
<issue
@@ -205,7 +211,9 @@
errorLine1=" setSharedElementEnterTransition((android.transition.Transition) sharedElementTransition);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="919"
+ column="17"/>
</issue>
<issue
@@ -214,7 +222,9 @@
errorLine1=" setEnterTransition((android.transition.Transition) enterTransition);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="932"
+ column="21"/>
</issue>
<issue
@@ -223,7 +233,9 @@
errorLine1=" setEnterTransition((android.transition.Transition) enterTransition);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="939"
+ column="21"/>
</issue>
<issue
@@ -232,7 +244,9 @@
errorLine1=" setSharedElementEnterTransition(null);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="942"
+ column="17"/>
</issue>
<issue
@@ -241,7 +255,9 @@
errorLine1=" setEnterTransition(null);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="945"
+ column="17"/>
</issue>
<issue
@@ -250,7 +266,9 @@
errorLine1=" setSharedElementEnterTransition(null);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="947"
+ column="17"/>
</issue>
<issue
@@ -259,7 +277,9 @@
errorLine1=" setExitTransition((android.transition.Transition) exitTransition);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="954"
+ column="13"/>
</issue>
<issue
@@ -268,7 +288,9 @@
errorLine1=" slide.setInterpolator(AnimationUtils.loadInterpolator(context,"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+ line="40"
+ column="15"/>
</issue>
<issue
@@ -277,7 +299,9 @@
errorLine1=" slide.addTarget(R.id.browse_title_group);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+ line="42"
+ column="15"/>
</issue>
<issue
@@ -286,7 +310,9 @@
errorLine1=" slide.setInterpolator(AnimationUtils.loadInterpolator(context,"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+ line="53"
+ column="15"/>
</issue>
<issue
@@ -295,7 +321,9 @@
errorLine1=" slide.addTarget(R.id.browse_title_group);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+ line="55"
+ column="15"/>
</issue>
<issue
@@ -304,7 +332,9 @@
errorLine1=" fragment.requestPermissions(permissions, requestCode);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PermissionHelper.java"/>
+ file="src/main/java/androidx/leanback/app/PermissionHelper.java"
+ line="33"
+ column="22"/>
</issue>
<issue
@@ -313,7 +343,9 @@
errorLine1=" ? !mProgressBar.isAccessibilityFocused() : true);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="320"
+ column="57"/>
</issue>
<issue
@@ -322,7 +354,9 @@
errorLine1=" mOutlineClippingDisabled = activityManager.isLowRamDevice();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/system/Settings.java"/>
+ file="src/main/java/androidx/leanback/system/Settings.java"
+ line="132"
+ column="56"/>
</issue>
<issue
@@ -331,7 +365,9 @@
errorLine1=" parent.setLayoutMode(ViewGroup.LAYOUT_MODE_OPTICAL_BOUNDS);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/StaticShadowHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/StaticShadowHelper.java"
+ line="38"
+ column="20"/>
</issue>
<issue
@@ -340,7 +376,9 @@
errorLine1=" shadowContainer.setLayoutMode(ViewGroup.LAYOUT_MODE_OPTICAL_BOUNDS);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/StaticShadowHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/StaticShadowHelper.java"
+ line="44"
+ column="29"/>
</issue>
<issue
@@ -349,7 +387,9 @@
errorLine1=" hourPattern = DateFormat.getBestDateTimePattern(mConstant.locale, mIs24hFormat ? "Hma""
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"
+ line="159"
+ column="38"/>
</issue>
<issue
@@ -358,7 +398,9 @@
errorLine1=" return window.getSharedElementEnterTransition();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="66"
+ column="27"/>
</issue>
<issue
@@ -367,7 +409,9 @@
errorLine1=" window.setSharedElementEnterTransition((Transition) transition);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="73"
+ column="20"/>
</issue>
<issue
@@ -376,7 +420,9 @@
errorLine1=" return window.getSharedElementReturnTransition();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="79"
+ column="27"/>
</issue>
<issue
@@ -385,7 +431,9 @@
errorLine1=" window.setSharedElementReturnTransition((Transition) transition);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="86"
+ column="20"/>
</issue>
<issue
@@ -394,7 +442,9 @@
errorLine1=" return window.getSharedElementExitTransition();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="92"
+ column="27"/>
</issue>
<issue
@@ -403,7 +453,9 @@
errorLine1=" return window.getSharedElementReenterTransition();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="99"
+ column="27"/>
</issue>
<issue
@@ -412,7 +464,9 @@
errorLine1=" return window.getEnterTransition();"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="106"
+ column="27"/>
</issue>
<issue
@@ -421,7 +475,9 @@
errorLine1=" window.setEnterTransition((Transition) transition);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="113"
+ column="20"/>
</issue>
<issue
@@ -430,7 +486,9 @@
errorLine1=" return window.getReturnTransition();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="119"
+ column="27"/>
</issue>
<issue
@@ -439,7 +497,9 @@
errorLine1=" window.setReturnTransition((Transition) transition);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="126"
+ column="20"/>
</issue>
<issue
@@ -448,7 +508,9 @@
errorLine1=" return window.getExitTransition();"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="132"
+ column="27"/>
</issue>
<issue
@@ -457,7 +519,9 @@
errorLine1=" return window.getReenterTransition();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="139"
+ column="27"/>
</issue>
<issue
@@ -466,7 +530,9 @@
errorLine1=" Scene scene = new Scene(sceneRoot);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="146"
+ column="27"/>
</issue>
<issue
@@ -475,7 +541,9 @@
errorLine1=" scene.setEnterAction(r);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="147"
+ column="19"/>
</issue>
<issue
@@ -484,7 +552,9 @@
errorLine1=" changeBounds.setReparent(reparent);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="156"
+ column="26"/>
</issue>
<issue
@@ -493,7 +563,9 @@
errorLine1=" return new ChangeTransform();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="164"
+ column="20"/>
</issue>
<issue
@@ -502,7 +574,9 @@
errorLine1=" TransitionSet set = new TransitionSet();"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="196"
+ column="33"/>
</issue>
<issue
@@ -511,7 +585,9 @@
errorLine1=" set.setOrdering(sequential ? TransitionSet.ORDERING_SEQUENTIAL"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="197"
+ column="17"/>
</issue>
<issue
@@ -520,7 +596,9 @@
errorLine1=" return new ChangeTransform();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="215"
+ column="20"/>
</issue>
<issue
@@ -529,7 +607,9 @@
errorLine1=" ((TransitionSet) transitionSet).addTransition((Transition) transition);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="225"
+ column="45"/>
</issue>
<issue
@@ -538,7 +618,9 @@
errorLine1=" ((Transition) transition).excludeTarget(targetId, exclude);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="231"
+ column="39"/>
</issue>
<issue
@@ -547,7 +629,9 @@
errorLine1=" ((Transition) transition).excludeTarget(targetView, exclude);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="237"
+ column="39"/>
</issue>
<issue
@@ -556,7 +640,9 @@
errorLine1=" ((Transition) transition).excludeChildren(targetId, exclude);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="243"
+ column="39"/>
</issue>
<issue
@@ -565,7 +651,9 @@
errorLine1=" ((Transition) transition).excludeChildren(targetView, exclude);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="249"
+ column="39"/>
</issue>
<issue
@@ -574,7 +662,9 @@
errorLine1=" ((Transition) transition).addTarget(targetId);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="255"
+ column="39"/>
</issue>
<issue
@@ -583,7 +673,9 @@
errorLine1=" ((Transition) transition).addTarget(targetView);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="261"
+ column="39"/>
</issue>
<issue
@@ -592,7 +684,9 @@
errorLine1=" ((Transition) transition).setStartDelay(startDelay);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="267"
+ column="39"/>
</issue>
<issue
@@ -601,7 +695,9 @@
errorLine1=" ((Transition) transition).setDuration(duration);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="273"
+ column="39"/>
</issue>
<issue
@@ -610,7 +706,9 @@
errorLine1=" return new AutoTransition();"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="279"
+ column="20"/>
</issue>
<issue
@@ -619,7 +717,9 @@
errorLine1=" return new Fade(fadeMode);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="286"
+ column="20"/>
</issue>
<issue
@@ -628,7 +728,9 @@
errorLine1=" t.addListener((Transition.TransitionListener) listener.mImpl);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="323"
+ column="15"/>
</issue>
<issue
@@ -637,7 +739,9 @@
errorLine1=" t.removeListener((Transition.TransitionListener) listener.mImpl);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="339"
+ column="15"/>
</issue>
<issue
@@ -646,7 +750,9 @@
errorLine1=" TransitionManager.go((Scene) scene, (Transition) transition);"
errorLine2=" ~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="351"
+ column="31"/>
</issue>
<issue
@@ -655,7 +761,9 @@
errorLine1=" ((Transition) transition).setInterpolator((TimeInterpolator) timeInterpolator);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="373"
+ column="39"/>
</issue>
<issue
@@ -664,7 +772,9 @@
errorLine1=" ((Transition) transition).addTarget(view);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="379"
+ column="39"/>
</issue>
<issue
@@ -673,7 +783,9 @@
errorLine1=" return TransitionInflater.from(context).inflateTransition(resId);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="393"
+ column="39"/>
</issue>
<issue
@@ -682,7 +794,9 @@
errorLine1=" return TransitionInflater.from(context).inflateTransition(resId);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="393"
+ column="53"/>
</issue>
<issue
@@ -691,7 +805,9 @@
errorLine1=" fragment.setEnterTransition((Transition) transition);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="401"
+ column="22"/>
</issue>
<issue
@@ -700,7 +816,9 @@
errorLine1=" fragment.setExitTransition((Transition) transition);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="408"
+ column="22"/>
</issue>
<issue
@@ -709,7 +827,9 @@
errorLine1=" fragment.setSharedElementEnterTransition((Transition) transition);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="416"
+ column="22"/>
</issue>
<issue
@@ -718,7 +838,9 @@
errorLine1=" ft.addSharedElement(view, transitionName);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="424"
+ column="16"/>
</issue>
<issue
@@ -727,7 +849,9 @@
errorLine1=" TransitionManager.beginDelayedTransition(sceneRoot, transition);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="447"
+ column="31"/>
</issue>
<issue
@@ -736,7 +860,9 @@
errorLine1=" viewGroup.setTransitionGroup(transitionGroup);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="453"
+ column="23"/>
</issue>
<issue
@@ -745,7 +871,9 @@
errorLine1=" ((Transition) transition).setEpicenterCallback(null);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="461"
+ column="43"/>
</issue>
<issue
@@ -754,7 +882,9 @@
errorLine1=" ((Transition) transition).setEpicenterCallback(new Transition.EpicenterCallback() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/TransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/TransitionHelper.java"
+ line="463"
+ column="43"/>
</issue>
<issue
@@ -763,7 +893,9 @@
errorLine1="public class FocusHighlightHelper {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"
+ line="39"
+ column="14"/>
</issue>
<issue
@@ -772,7 +904,9 @@
errorLine1=" public boolean hasMediaRowSeparator() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="495"
+ column="20"/>
</issue>
<issue
@@ -781,7 +915,9 @@
errorLine1=" public final boolean hasStableIds() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+ line="295"
+ column="26"/>
</issue>
<issue
@@ -790,7 +926,9 @@
errorLine1=" int getPageCount() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+ file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+ line="345"
+ column="9"/>
</issue>
<issue
@@ -799,9 +937,13 @@
errorLine1=" public final List<Parallax.PropertyMarkerValue> getPropertyRanges() {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="64"
+ column="53"/>
<location
file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="87"
+ column="23"
message="Setter here"/>
</issue>
@@ -811,9 +953,13 @@
errorLine1=" public final List<Float> getWeights() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="76"
+ column="30"/>
<location
file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="103"
+ column="23"
message="Setter here"/>
</issue>
@@ -823,7 +969,9 @@
errorLine1=" public boolean areSecondaryActionsHidden() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="288"
+ column="20"/>
</issue>
<issue
@@ -832,7 +980,9 @@
errorLine1=" public boolean is24Hour() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/TimePicker.java"
+ line="436"
+ column="20"/>
</issue>
<issue
@@ -841,7 +991,9 @@
errorLine1=" public void scheduleDrawable(Drawable who, Runnable what, long when) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="220"
+ column="63"/>
</issue>
<issue
@@ -850,7 +1002,9 @@
errorLine1=" FocusListener focusListener, GuidedActionsStylist presenter, boolean isSubAdapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="145"
+ column="74"/>
</issue>
<issue
@@ -859,7 +1013,9 @@
errorLine1=" public ViewHolder(final View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+ line="57"
+ column="33"/>
</issue>
<issue
@@ -868,7 +1024,9 @@
errorLine1=" public TextView getTitle() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+ line="132"
+ column="16"/>
</issue>
<issue
@@ -877,7 +1035,9 @@
errorLine1=" public TextView getSubtitle() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+ line="136"
+ column="16"/>
</issue>
<issue
@@ -886,7 +1046,9 @@
errorLine1=" public TextView getBody() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+ line="140"
+ column="16"/>
</issue>
<issue
@@ -895,7 +1057,9 @@
errorLine1=" public final ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+ line="153"
+ column="18"/>
</issue>
<issue
@@ -904,7 +1068,9 @@
errorLine1=" public final ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+ line="153"
+ column="48"/>
</issue>
<issue
@@ -913,7 +1079,9 @@
errorLine1=" public final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+ line="160"
+ column="40"/>
</issue>
<issue
@@ -922,7 +1090,9 @@
errorLine1=" public final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+ line="160"
+ column="73"/>
</issue>
<issue
@@ -931,7 +1101,9 @@
errorLine1=" protected abstract void onBindDescription(ViewHolder vh, Object item);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+ line="216"
+ column="47"/>
</issue>
<issue
@@ -940,7 +1112,9 @@
errorLine1=" protected abstract void onBindDescription(ViewHolder vh, Object item);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+ line="216"
+ column="62"/>
</issue>
<issue
@@ -949,7 +1123,9 @@
errorLine1=" public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {}"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+ line="219"
+ column="36"/>
</issue>
<issue
@@ -958,7 +1134,9 @@
errorLine1=" public void onViewAttachedToWindow(Presenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+ line="222"
+ column="40"/>
</issue>
<issue
@@ -967,7 +1145,9 @@
errorLine1=" public void onViewDetachedFromWindow(Presenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractDetailsDescriptionPresenter.java"
+ line="231"
+ column="42"/>
</issue>
<issue
@@ -976,7 +1156,9 @@
errorLine1=" public void setActionPresenter(Presenter actionPresenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="137"
+ column="36"/>
</issue>
<issue
@@ -985,7 +1167,9 @@
errorLine1=" public Presenter getActionPresenter() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="146"
+ column="12"/>
</issue>
<issue
@@ -994,7 +1178,9 @@
errorLine1=" public ViewHolder(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="174"
+ column="27"/>
</issue>
<issue
@@ -1003,7 +1189,9 @@
errorLine1=" public void notifyActionChanged(MultiActionsProvider.MultiAction action) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="297"
+ column="41"/>
</issue>
<issue
@@ -1012,7 +1200,9 @@
errorLine1=" public View getSelectorView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="336"
+ column="16"/>
</issue>
<issue
@@ -1021,7 +1211,9 @@
errorLine1=" public ViewFlipper getMediaItemNumberViewFlipper() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="344"
+ column="16"/>
</issue>
<issue
@@ -1030,7 +1222,9 @@
errorLine1=" public TextView getMediaItemNumberView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="352"
+ column="16"/>
</issue>
<issue
@@ -1039,7 +1233,9 @@
errorLine1=" public View getMediaItemPausedView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="359"
+ column="16"/>
</issue>
<issue
@@ -1048,7 +1244,9 @@
errorLine1=" public View getMediaItemPlayingView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="366"
+ column="16"/>
</issue>
<issue
@@ -1057,7 +1255,9 @@
errorLine1=" public TextView getMediaItemNameView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="387"
+ column="16"/>
</issue>
<issue
@@ -1066,7 +1266,9 @@
errorLine1=" public TextView getMediaItemDurationView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="394"
+ column="16"/>
</issue>
<issue
@@ -1075,7 +1277,9 @@
errorLine1=" public View getMediaItemDetailsView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="401"
+ column="16"/>
</issue>
<issue
@@ -1084,7 +1288,9 @@
errorLine1=" public View getMediaItemRowSeparator() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="408"
+ column="16"/>
</issue>
<issue
@@ -1093,7 +1299,9 @@
errorLine1=" public ViewGroup getMediaItemActionsContainer() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="415"
+ column="16"/>
</issue>
<issue
@@ -1102,7 +1310,9 @@
errorLine1=" public MultiActionsProvider.MultiAction[] getMediaItemRowActions() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="422"
+ column="16"/>
</issue>
<issue
@@ -1111,7 +1321,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="428"
+ column="15"/>
</issue>
<issue
@@ -1120,7 +1332,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="428"
+ column="59"/>
</issue>
<issue
@@ -1129,7 +1343,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="454"
+ column="40"/>
</issue>
<issue
@@ -1138,7 +1354,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="454"
+ column="68"/>
</issue>
<issue
@@ -1147,7 +1365,9 @@
errorLine1=" protected void onBindRowActions(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="472"
+ column="37"/>
</issue>
<issue
@@ -1156,7 +1376,9 @@
errorLine1=" protected abstract void onBindMediaDetails(ViewHolder vh, Object item);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="511"
+ column="48"/>
</issue>
<issue
@@ -1165,7 +1387,9 @@
errorLine1=" protected abstract void onBindMediaDetails(ViewHolder vh, Object item);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="511"
+ column="63"/>
</issue>
<issue
@@ -1174,7 +1398,9 @@
errorLine1=" protected void onUnbindMediaDetails(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="519"
+ column="41"/>
</issue>
<issue
@@ -1183,7 +1409,9 @@
errorLine1=" public void onBindMediaPlayState(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="531"
+ column="38"/>
</issue>
<issue
@@ -1192,7 +1420,9 @@
errorLine1=" public void onUnbindMediaPlayState(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="561"
+ column="40"/>
</issue>
<issue
@@ -1201,7 +1431,9 @@
errorLine1=" protected int getMediaPlayState(Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java"
+ line="573"
+ column="37"/>
</issue>
<issue
@@ -1210,7 +1442,9 @@
errorLine1=" public ViewHolder(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+ line="53"
+ column="27"/>
</issue>
<issue
@@ -1219,7 +1453,9 @@
errorLine1=" public TextView getHeaderView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+ line="62"
+ column="16"/>
</issue>
<issue
@@ -1228,7 +1464,9 @@
errorLine1=" public AbstractMediaListHeaderPresenter(Context context, int mThemeResId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+ line="72"
+ column="45"/>
</issue>
<issue
@@ -1237,7 +1475,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+ line="93"
+ column="15"/>
</issue>
<issue
@@ -1246,7 +1486,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+ line="93"
+ column="59"/>
</issue>
<issue
@@ -1255,7 +1497,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+ line="107"
+ column="40"/>
</issue>
<issue
@@ -1264,7 +1508,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder vh, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+ line="107"
+ column="68"/>
</issue>
<issue
@@ -1273,7 +1519,9 @@
errorLine1=" protected abstract void onBindMediaListHeaderViewHolder(ViewHolder vh, Object item);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+ line="133"
+ column="61"/>
</issue>
<issue
@@ -1282,7 +1530,9 @@
errorLine1=" protected abstract void onBindMediaListHeaderViewHolder(ViewHolder vh, Object item);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/AbstractMediaListHeaderPresenter.java"
+ line="133"
+ column="76"/>
</issue>
<issue
@@ -1291,7 +1541,9 @@
errorLine1=" public Action(long id, CharSequence label) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Action.java"/>
+ file="src/main/java/androidx/leanback/widget/Action.java"
+ line="51"
+ column="28"/>
</issue>
<issue
@@ -1300,7 +1552,9 @@
errorLine1=" public Action(long id, CharSequence label1, CharSequence label2) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Action.java"/>
+ file="src/main/java/androidx/leanback/widget/Action.java"
+ line="62"
+ column="28"/>
</issue>
<issue
@@ -1309,7 +1563,9 @@
errorLine1=" public Action(long id, CharSequence label1, CharSequence label2) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Action.java"/>
+ file="src/main/java/androidx/leanback/widget/Action.java"
+ line="62"
+ column="49"/>
</issue>
<issue
@@ -1318,7 +1574,9 @@
errorLine1=" public Action(long id, CharSequence label1, CharSequence label2, Drawable icon) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Action.java"/>
+ file="src/main/java/androidx/leanback/widget/Action.java"
+ line="74"
+ column="28"/>
</issue>
<issue
@@ -1327,7 +1585,9 @@
errorLine1=" public Action(long id, CharSequence label1, CharSequence label2, Drawable icon) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Action.java"/>
+ file="src/main/java/androidx/leanback/widget/Action.java"
+ line="74"
+ column="49"/>
</issue>
<issue
@@ -1336,7 +1596,9 @@
errorLine1=" public Action(long id, CharSequence label1, CharSequence label2, Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Action.java"/>
+ file="src/main/java/androidx/leanback/widget/Action.java"
+ line="74"
+ column="70"/>
</issue>
<issue
@@ -1345,7 +1607,9 @@
errorLine1=" public final void setLabel1(CharSequence label) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Action.java"/>
+ file="src/main/java/androidx/leanback/widget/Action.java"
+ line="98"
+ column="33"/>
</issue>
<issue
@@ -1354,7 +1618,9 @@
errorLine1=" public final CharSequence getLabel1() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Action.java"/>
+ file="src/main/java/androidx/leanback/widget/Action.java"
+ line="105"
+ column="18"/>
</issue>
<issue
@@ -1363,7 +1629,9 @@
errorLine1=" public final void setLabel2(CharSequence label) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Action.java"/>
+ file="src/main/java/androidx/leanback/widget/Action.java"
+ line="112"
+ column="33"/>
</issue>
<issue
@@ -1372,7 +1640,9 @@
errorLine1=" public final CharSequence getLabel2() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Action.java"/>
+ file="src/main/java/androidx/leanback/widget/Action.java"
+ line="119"
+ column="18"/>
</issue>
<issue
@@ -1381,7 +1651,9 @@
errorLine1=" public final void setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Action.java"/>
+ file="src/main/java/androidx/leanback/widget/Action.java"
+ line="126"
+ column="31"/>
</issue>
<issue
@@ -1390,7 +1662,9 @@
errorLine1=" public final Drawable getIcon() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Action.java"/>
+ file="src/main/java/androidx/leanback/widget/Action.java"
+ line="133"
+ column="18"/>
</issue>
<issue
@@ -1399,7 +1673,9 @@
errorLine1=" public ArrayObjectAdapter(PresenterSelector presenterSelector) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+ line="47"
+ column="31"/>
</issue>
<issue
@@ -1408,7 +1684,9 @@
errorLine1=" public ArrayObjectAdapter(Presenter presenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+ line="54"
+ column="31"/>
</issue>
<issue
@@ -1417,7 +1695,9 @@
errorLine1=" public Object get(int index) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+ line="71"
+ column="12"/>
</issue>
<issue
@@ -1426,7 +1706,9 @@
errorLine1=" public int indexOf(Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+ line="83"
+ column="24"/>
</issue>
<issue
@@ -1435,7 +1717,9 @@
errorLine1=" public void add(Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+ line="103"
+ column="21"/>
</issue>
<issue
@@ -1444,7 +1728,9 @@
errorLine1=" public void add(int index, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+ line="114"
+ column="32"/>
</issue>
<issue
@@ -1453,7 +1739,9 @@
errorLine1=" public void addAll(int index, Collection items) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+ line="127"
+ column="35"/>
</issue>
<issue
@@ -1462,7 +1750,9 @@
errorLine1=" public boolean remove(Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+ line="142"
+ column="27"/>
</issue>
<issue
@@ -1471,7 +1761,9 @@
errorLine1=" public void replace(int position, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+ line="175"
+ column="39"/>
</issue>
<issue
@@ -1480,7 +1772,9 @@
errorLine1=" public <E> List<E> unmodifiableList() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+ line="217"
+ column="16"/>
</issue>
<issue
@@ -1489,7 +1783,9 @@
errorLine1=" public void setItems(final List itemList, final DiffCallback callback) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+ line="243"
+ column="32"/>
</issue>
<issue
@@ -1498,7 +1794,9 @@
errorLine1=" public void setItems(final List itemList, final DiffCallback callback) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ArrayObjectAdapter.java"
+ line="243"
+ column="53"/>
</issue>
<issue
@@ -1507,7 +1805,9 @@
errorLine1=" public static void setBackgroundPreservingAlpha(View view, Drawable drawable) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BackgroundHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/BackgroundHelper.java"
+ line="32"
+ column="53"/>
</issue>
<issue
@@ -1516,7 +1816,9 @@
errorLine1=" public static void setBackgroundPreservingAlpha(View view, Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BackgroundHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/BackgroundHelper.java"
+ line="32"
+ column="64"/>
</issue>
<issue
@@ -1525,7 +1827,9 @@
errorLine1=" public static BackgroundManager getInstance(Activity activity) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+ file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+ line="548"
+ column="19"/>
</issue>
<issue
@@ -1534,7 +1838,9 @@
errorLine1=" public static BackgroundManager getInstance(Activity activity) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+ file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+ line="548"
+ column="49"/>
</issue>
<issue
@@ -1543,7 +1849,9 @@
errorLine1=" public void attach(Window window) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+ file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+ line="651"
+ column="24"/>
</issue>
<issue
@@ -1552,7 +1860,9 @@
errorLine1=" public void attachToView(View sceneRoot) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+ file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+ line="667"
+ column="30"/>
</issue>
<issue
@@ -1561,7 +1871,9 @@
errorLine1=" public void setDimLayer(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+ file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+ line="738"
+ column="29"/>
</issue>
<issue
@@ -1570,7 +1882,9 @@
errorLine1=" public Drawable getDimLayer() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+ file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+ line="746"
+ column="12"/>
</issue>
<issue
@@ -1579,7 +1893,9 @@
errorLine1=" public Drawable getDefaultDimLayer() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+ file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+ line="755"
+ column="12"/>
</issue>
<issue
@@ -1588,7 +1904,9 @@
errorLine1=" public void setDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+ file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+ line="835"
+ column="29"/>
</issue>
<issue
@@ -1597,7 +1915,9 @@
errorLine1=" public void setBitmap(Bitmap bitmap) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+ file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+ line="889"
+ column="27"/>
</issue>
<issue
@@ -1606,7 +1926,9 @@
errorLine1=" public Drawable getDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BackgroundManager.java"/>
+ file="src/main/java/androidx/leanback/app/BackgroundManager.java"
+ line="964"
+ column="12"/>
</issue>
<issue
@@ -1615,7 +1937,9 @@
errorLine1=" public BaseCardView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="149"
+ column="25"/>
</issue>
<issue
@@ -1624,7 +1948,9 @@
errorLine1=" public BaseCardView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="153"
+ column="25"/>
</issue>
<issue
@@ -1633,7 +1959,9 @@
errorLine1=" public BaseCardView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="153"
+ column="42"/>
</issue>
<issue
@@ -1642,7 +1970,9 @@
errorLine1=" public BaseCardView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="158"
+ column="25"/>
</issue>
<issue
@@ -1651,7 +1981,9 @@
errorLine1=" public BaseCardView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="158"
+ column="42"/>
</issue>
<issue
@@ -1660,7 +1992,9 @@
errorLine1=" protected int[] onCreateDrawableState(int extraSpace) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="600"
+ column="15"/>
</issue>
<issue
@@ -1669,7 +2003,9 @@
errorLine1=" public LayoutParams generateLayoutParams(AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="821"
+ column="12"/>
</issue>
<issue
@@ -1678,7 +2014,9 @@
errorLine1=" public LayoutParams generateLayoutParams(AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="821"
+ column="46"/>
</issue>
<issue
@@ -1687,7 +2025,9 @@
errorLine1=" protected LayoutParams generateDefaultLayoutParams() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="826"
+ column="15"/>
</issue>
<issue
@@ -1696,7 +2036,9 @@
errorLine1=" protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="832"
+ column="15"/>
</issue>
<issue
@@ -1705,7 +2047,9 @@
errorLine1=" protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="832"
+ column="49"/>
</issue>
<issue
@@ -1714,7 +2058,9 @@
errorLine1=" protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="841"
+ column="41"/>
</issue>
<issue
@@ -1723,7 +2069,9 @@
errorLine1=" public LayoutParams(Context c, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="867"
+ column="29"/>
</issue>
<issue
@@ -1732,7 +2080,9 @@
errorLine1=" public LayoutParams(Context c, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="867"
+ column="40"/>
</issue>
<issue
@@ -1741,7 +2091,9 @@
errorLine1=" public LayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="887"
+ column="29"/>
</issue>
<issue
@@ -1750,7 +2102,9 @@
errorLine1=" public LayoutParams(LayoutParams source) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseCardView.java"
+ line="897"
+ column="29"/>
</issue>
<issue
@@ -1759,7 +2113,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BaseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BaseFragment.java"
+ line="147"
+ column="26"/>
</issue>
<issue
@@ -1768,7 +2124,9 @@
errorLine1=" protected Object createEntranceTransition() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BaseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BaseFragment.java"
+ line="237"
+ column="15"/>
</issue>
<issue
@@ -1777,7 +2135,9 @@
errorLine1=" protected void runEntranceTransition(Object entranceTransition) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BaseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BaseFragment.java"
+ line="246"
+ column="42"/>
</issue>
<issue
@@ -1786,7 +2146,9 @@
errorLine1=" public final ProgressBarManager getProgressBarManager() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BaseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BaseFragment.java"
+ line="332"
+ column="18"/>
</issue>
<issue
@@ -1795,7 +2157,9 @@
errorLine1=" void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseOnItemViewClickedListener.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseOnItemViewClickedListener.java"
+ line="28"
+ column="24"/>
</issue>
<issue
@@ -1804,7 +2168,9 @@
errorLine1=" void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseOnItemViewClickedListener.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseOnItemViewClickedListener.java"
+ line="28"
+ column="61"/>
</issue>
<issue
@@ -1813,7 +2179,9 @@
errorLine1=" RowPresenter.ViewHolder rowViewHolder, T row);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseOnItemViewClickedListener.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseOnItemViewClickedListener.java"
+ line="29"
+ column="31"/>
</issue>
<issue
@@ -1822,7 +2190,9 @@
errorLine1=" public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseOnItemViewSelectedListener.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseOnItemViewSelectedListener.java"
+ line="49"
+ column="32"/>
</issue>
<issue
@@ -1831,7 +2201,9 @@
errorLine1=" public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseOnItemViewSelectedListener.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseOnItemViewSelectedListener.java"
+ line="49"
+ column="69"/>
</issue>
<issue
@@ -1840,7 +2212,9 @@
errorLine1=" RowPresenter.ViewHolder rowViewHolder, T row);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BaseOnItemViewSelectedListener.java"/>
+ file="src/main/java/androidx/leanback/widget/BaseOnItemViewSelectedListener.java"
+ line="50"
+ column="32"/>
</issue>
<issue
@@ -1849,7 +2223,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"
+ line="142"
+ column="26"/>
</issue>
<issue
@@ -1858,7 +2234,9 @@
errorLine1=" protected Object createEntranceTransition() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"
+ line="232"
+ column="15"/>
</issue>
<issue
@@ -1867,7 +2245,9 @@
errorLine1=" protected void runEntranceTransition(Object entranceTransition) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"
+ line="241"
+ column="42"/>
</issue>
<issue
@@ -1876,7 +2256,9 @@
errorLine1=" public final ProgressBarManager getProgressBarManager() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BaseSupportFragment.java"
+ line="327"
+ column="18"/>
</issue>
<issue
@@ -1885,7 +2267,9 @@
errorLine1=" public static ValueRule inheritFromParent(float fraction) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+ file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+ line="40"
+ column="23"/>
</issue>
<issue
@@ -1894,7 +2278,9 @@
errorLine1=" public static ValueRule absoluteValue(int absoluteValue) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+ file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+ line="50"
+ column="23"/>
</issue>
<issue
@@ -1903,7 +2289,9 @@
errorLine1=" public static ValueRule inheritFromParentWithOffset(float fraction, int value) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+ file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+ line="61"
+ column="23"/>
</issue>
<issue
@@ -1912,7 +2300,9 @@
errorLine1=" public void calculateBounds(Rect rect, Rect result) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+ file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+ line="116"
+ column="33"/>
</issue>
<issue
@@ -1921,7 +2311,9 @@
errorLine1=" public void calculateBounds(Rect rect, Rect result) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+ file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+ line="116"
+ column="44"/>
</issue>
<issue
@@ -1930,7 +2322,9 @@
errorLine1=" public BoundsRule(BoundsRule boundsRule) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+ file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+ line="144"
+ column="23"/>
</issue>
<issue
@@ -1939,7 +2333,9 @@
errorLine1=" public ValueRule left;"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+ file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+ line="156"
+ column="12"/>
</issue>
<issue
@@ -1948,7 +2344,9 @@
errorLine1=" public ValueRule top;"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+ file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+ line="159"
+ column="12"/>
</issue>
<issue
@@ -1957,7 +2355,9 @@
errorLine1=" public ValueRule right;"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+ file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+ line="162"
+ column="12"/>
</issue>
<issue
@@ -1966,7 +2366,9 @@
errorLine1=" public ValueRule bottom;"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/BoundsRule.java"/>
+ file="src/main/java/androidx/leanback/graphics/BoundsRule.java"
+ line="165"
+ column="12"/>
</issue>
<issue
@@ -1975,7 +2377,9 @@
errorLine1=" public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="70"
+ column="12"/>
</issue>
<issue
@@ -1984,7 +2388,9 @@
errorLine1=" public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="70"
+ column="36"/>
</issue>
<issue
@@ -1993,7 +2399,9 @@
errorLine1=" public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="70"
+ column="61"/>
</issue>
<issue
@@ -2002,7 +2410,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="71"
+ column="33"/>
</issue>
<issue
@@ -2011,7 +2421,9 @@
errorLine1=" public void installTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="88"
+ column="34"/>
</issue>
<issue
@@ -2020,7 +2432,9 @@
errorLine1=" public void installTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="88"
+ column="59"/>
</issue>
<issue
@@ -2029,7 +2443,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="89"
+ column="29"/>
</issue>
<issue
@@ -2038,7 +2454,9 @@
errorLine1=" public void setTitleView(View titleView) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="103"
+ column="30"/>
</issue>
<issue
@@ -2047,7 +2465,9 @@
errorLine1=" public View getTitleView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="128"
+ column="12"/>
</issue>
<issue
@@ -2056,7 +2476,9 @@
errorLine1=" public TitleViewAdapter getTitleViewAdapter() {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="136"
+ column="12"/>
</issue>
<issue
@@ -2065,7 +2487,9 @@
errorLine1=" public void onSaveInstanceState(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="148"
+ column="37"/>
</issue>
<issue
@@ -2074,7 +2498,9 @@
errorLine1=" public void setBadgeDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="208"
+ column="34"/>
</issue>
<issue
@@ -2083,7 +2509,9 @@
errorLine1=" public Drawable getBadgeDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="221"
+ column="12"/>
</issue>
<issue
@@ -2092,7 +2520,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="230"
+ column="26"/>
</issue>
<issue
@@ -2101,7 +2531,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="241"
+ column="12"/>
</issue>
<issue
@@ -2110,7 +2542,9 @@
errorLine1=" public void setOnSearchClickedListener(View.OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="257"
+ column="44"/>
</issue>
<issue
@@ -2119,7 +2553,9 @@
errorLine1=" public void setSearchAffordanceColors(SearchOrbView.Colors colors) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="270"
+ column="43"/>
</issue>
<issue
@@ -2128,7 +2564,9 @@
errorLine1=" public SearchOrbView.Colors getSearchAffordanceColors() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedFragment.java"
+ line="282"
+ column="12"/>
</issue>
<issue
@@ -2137,7 +2575,9 @@
errorLine1=" public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="65"
+ column="12"/>
</issue>
<issue
@@ -2146,7 +2586,9 @@
errorLine1=" public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="65"
+ column="36"/>
</issue>
<issue
@@ -2155,7 +2597,9 @@
errorLine1=" public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="65"
+ column="61"/>
</issue>
<issue
@@ -2164,7 +2608,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="66"
+ column="33"/>
</issue>
<issue
@@ -2173,7 +2619,9 @@
errorLine1=" public void installTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="83"
+ column="34"/>
</issue>
<issue
@@ -2182,7 +2630,9 @@
errorLine1=" public void installTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="83"
+ column="59"/>
</issue>
<issue
@@ -2191,7 +2641,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="84"
+ column="29"/>
</issue>
<issue
@@ -2200,7 +2652,9 @@
errorLine1=" public void setTitleView(View titleView) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="98"
+ column="30"/>
</issue>
<issue
@@ -2209,7 +2663,9 @@
errorLine1=" public View getTitleView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="123"
+ column="12"/>
</issue>
<issue
@@ -2218,7 +2674,9 @@
errorLine1=" public TitleViewAdapter getTitleViewAdapter() {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="131"
+ column="12"/>
</issue>
<issue
@@ -2227,7 +2685,9 @@
errorLine1=" public void onSaveInstanceState(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="143"
+ column="37"/>
</issue>
<issue
@@ -2236,7 +2696,9 @@
errorLine1=" public void setBadgeDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="203"
+ column="34"/>
</issue>
<issue
@@ -2245,7 +2707,9 @@
errorLine1=" public Drawable getBadgeDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="216"
+ column="12"/>
</issue>
<issue
@@ -2254,7 +2718,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="225"
+ column="26"/>
</issue>
<issue
@@ -2263,7 +2729,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="236"
+ column="12"/>
</issue>
<issue
@@ -2272,7 +2740,9 @@
errorLine1=" public void setOnSearchClickedListener(View.OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="252"
+ column="44"/>
</issue>
<issue
@@ -2281,7 +2751,9 @@
errorLine1=" public void setSearchAffordanceColors(SearchOrbView.Colors colors) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="265"
+ column="43"/>
</issue>
<issue
@@ -2290,7 +2762,9 @@
errorLine1=" public SearchOrbView.Colors getSearchAffordanceColors() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrandedSupportFragment.java"
+ line="277"
+ column="12"/>
</issue>
<issue
@@ -2299,7 +2773,9 @@
errorLine1=" void notifyViewCreated(MainFragmentAdapter fragmentAdapter);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="301"
+ column="32"/>
</issue>
<issue
@@ -2308,7 +2784,9 @@
errorLine1=" void notifyDataReady(MainFragmentAdapter fragmentAdapter);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="310"
+ column="30"/>
</issue>
<issue
@@ -2317,7 +2795,9 @@
errorLine1=" public final FragmentHost getFragmentHost() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="479"
+ column="22"/>
</issue>
<issue
@@ -2326,7 +2806,9 @@
errorLine1=" MainFragmentAdapter getMainFragmentAdapter();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="500"
+ column="9"/>
</issue>
<issue
@@ -2335,7 +2817,9 @@
errorLine1=" MainFragmentRowsAdapter getMainFragmentRowsAdapter();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="514"
+ column="9"/>
</issue>
<issue
@@ -2344,7 +2828,9 @@
errorLine1=" public void setAdapter(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="540"
+ column="32"/>
</issue>
<issue
@@ -2353,7 +2839,9 @@
errorLine1=" public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="546"
+ column="50"/>
</issue>
<issue
@@ -2362,7 +2850,9 @@
errorLine1=" public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="552"
+ column="51"/>
</issue>
<issue
@@ -2371,7 +2861,9 @@
errorLine1=" final Presenter.ViewHolderTask rowHolderTask) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="560"
+ column="47"/>
</issue>
<issue
@@ -2380,7 +2872,9 @@
errorLine1=" public RowPresenter.ViewHolder findRowViewHolderByPosition(int position) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="580"
+ column="16"/>
</issue>
<issue
@@ -2389,7 +2883,9 @@
errorLine1=" public abstract T createFragment(Object row);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="666"
+ column="42"/>
</issue>
<issue
@@ -2398,7 +2894,9 @@
errorLine1=" public RowsFragment createFragment(Object row) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="676"
+ column="16"/>
</issue>
<issue
@@ -2407,7 +2905,9 @@
errorLine1=" public RowsFragment createFragment(Object row) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="676"
+ column="44"/>
</issue>
<issue
@@ -2416,7 +2916,9 @@
errorLine1=" public void registerFragment(Class<?> rowClass, FragmentFactory factory) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="699"
+ column="38"/>
</issue>
<issue
@@ -2425,7 +2927,9 @@
errorLine1=" public void registerFragment(Class<?> rowClass, FragmentFactory factory) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="699"
+ column="57"/>
</issue>
<issue
@@ -2434,7 +2938,9 @@
errorLine1=" public Fragment createFragment(Object item) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="703"
+ column="16"/>
</issue>
<issue
@@ -2443,7 +2949,9 @@
errorLine1=" public Fragment createFragment(Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="703"
+ column="40"/>
</issue>
<issue
@@ -2452,7 +2960,9 @@
errorLine1=" public static Bundle createArgs(Bundle args, String title, int headersState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="787"
+ column="19"/>
</issue>
<issue
@@ -2461,7 +2971,9 @@
errorLine1=" public static Bundle createArgs(Bundle args, String title, int headersState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="787"
+ column="37"/>
</issue>
<issue
@@ -2470,7 +2982,9 @@
errorLine1=" public static Bundle createArgs(Bundle args, String title, int headersState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="787"
+ column="50"/>
</issue>
<issue
@@ -2479,7 +2993,9 @@
errorLine1=" public void setAdapter(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="872"
+ column="28"/>
</issue>
<issue
@@ -2488,7 +3004,9 @@
errorLine1=" public final MainFragmentAdapterRegistry getMainFragmentRegistry() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="920"
+ column="18"/>
</issue>
<issue
@@ -2497,7 +3015,9 @@
errorLine1=" public ObjectAdapter getAdapter() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="927"
+ column="12"/>
</issue>
<issue
@@ -2506,7 +3026,9 @@
errorLine1=" public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="934"
+ column="47"/>
</issue>
<issue
@@ -2515,7 +3037,9 @@
errorLine1=" public OnItemViewSelectedListener getOnItemViewSelectedListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="941"
+ column="12"/>
</issue>
<issue
@@ -2524,7 +3048,9 @@
errorLine1=" public RowsFragment getRowsFragment() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="951"
+ column="12"/>
</issue>
<issue
@@ -2533,7 +3059,9 @@
errorLine1=" public Fragment getMainFragment() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="962"
+ column="12"/>
</issue>
<issue
@@ -2542,7 +3070,9 @@
errorLine1=" public HeadersFragment getHeadersFragment() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="970"
+ column="12"/>
</issue>
<issue
@@ -2551,7 +3081,9 @@
errorLine1=" public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="980"
+ column="46"/>
</issue>
<issue
@@ -2560,7 +3092,9 @@
errorLine1=" public OnItemViewClickedListener getOnItemViewClickedListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="990"
+ column="12"/>
</issue>
<issue
@@ -2569,7 +3103,9 @@
errorLine1=" public void setBrowseTransitionListener(BrowseTransitionListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="1034"
+ column="45"/>
</issue>
<issue
@@ -2578,7 +3114,9 @@
errorLine1=" public void onSaveInstanceState(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="1192"
+ column="37"/>
</issue>
<issue
@@ -2587,7 +3125,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="1205"
+ column="26"/>
</issue>
<issue
@@ -2596,7 +3136,9 @@
errorLine1=" public HeadersFragment onCreateHeadersFragment() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="1265"
+ column="12"/>
</issue>
<issue
@@ -2605,7 +3147,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="1270"
+ column="12"/>
</issue>
<issue
@@ -2614,7 +3158,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="1270"
+ column="30"/>
</issue>
<issue
@@ -2623,7 +3169,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="1270"
+ column="55"/>
</issue>
<issue
@@ -2632,7 +3180,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="1271"
+ column="13"/>
</issue>
<issue
@@ -2641,7 +3191,9 @@
errorLine1=" public void setHeaderPresenterSelector(PresenterSelector headerPresenterSelector) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="1467"
+ column="44"/>
</issue>
<issue
@@ -2650,7 +3202,9 @@
errorLine1=" public RowPresenter.ViewHolder getSelectedRowViewHolder() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="1652"
+ column="12"/>
</issue>
<issue
@@ -2659,7 +3213,9 @@
errorLine1=" final Presenter.ViewHolderTask rowHolderTask) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="1681"
+ column="19"/>
</issue>
<issue
@@ -2668,7 +3224,9 @@
errorLine1=" protected Object createEntranceTransition() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="1826"
+ column="15"/>
</issue>
<issue
@@ -2677,7 +3235,9 @@
errorLine1=" protected void runEntranceTransition(Object entranceTransition) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseFragment.java"
+ line="1832"
+ column="42"/>
</issue>
<issue
@@ -2686,7 +3246,9 @@
errorLine1=" View onFocusSearch(View focused, int direction);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="37"
+ column="9"/>
</issue>
<issue
@@ -2695,7 +3257,9 @@
errorLine1=" View onFocusSearch(View focused, int direction);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="37"
+ column="28"/>
</issue>
<issue
@@ -2704,7 +3268,9 @@
errorLine1=" Rect previouslyFocusedRect);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="51"
+ column="17"/>
</issue>
<issue
@@ -2713,7 +3279,9 @@
errorLine1=" void onRequestChildFocus(View child, View focused);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="56"
+ column="34"/>
</issue>
<issue
@@ -2722,7 +3290,9 @@
errorLine1=" void onRequestChildFocus(View child, View focused);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="56"
+ column="46"/>
</issue>
<issue
@@ -2731,7 +3301,9 @@
errorLine1=" public BrowseFrameLayout(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="59"
+ column="30"/>
</issue>
<issue
@@ -2740,7 +3312,9 @@
errorLine1=" public BrowseFrameLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="63"
+ column="30"/>
</issue>
<issue
@@ -2749,7 +3323,9 @@
errorLine1=" public BrowseFrameLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="63"
+ column="47"/>
</issue>
<issue
@@ -2758,7 +3334,9 @@
errorLine1=" public BrowseFrameLayout(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="67"
+ column="30"/>
</issue>
<issue
@@ -2767,7 +3345,9 @@
errorLine1=" public BrowseFrameLayout(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="67"
+ column="47"/>
</issue>
<issue
@@ -2776,7 +3356,9 @@
errorLine1=" public void setOnFocusSearchListener(OnFocusSearchListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="78"
+ column="42"/>
</issue>
<issue
@@ -2785,7 +3367,9 @@
errorLine1=" public OnFocusSearchListener getOnFocusSearchListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="85"
+ column="12"/>
</issue>
<issue
@@ -2794,7 +3378,9 @@
errorLine1=" public void setOnChildFocusListener(OnChildFocusListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="92"
+ column="41"/>
</issue>
<issue
@@ -2803,7 +3389,9 @@
errorLine1=" public OnChildFocusListener getOnChildFocusListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="99"
+ column="12"/>
</issue>
<issue
@@ -2812,7 +3400,9 @@
errorLine1=" Rect previouslyFocusedRect) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="105"
+ column="13"/>
</issue>
<issue
@@ -2821,7 +3411,9 @@
errorLine1=" public View focusSearch(View focused, int direction) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="116"
+ column="12"/>
</issue>
<issue
@@ -2830,7 +3422,9 @@
errorLine1=" public View focusSearch(View focused, int direction) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="116"
+ column="29"/>
</issue>
<issue
@@ -2839,7 +3433,9 @@
errorLine1=" public void requestChildFocus(View child, View focused) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="127"
+ column="35"/>
</issue>
<issue
@@ -2848,7 +3444,9 @@
errorLine1=" public void requestChildFocus(View child, View focused) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="127"
+ column="47"/>
</issue>
<issue
@@ -2857,7 +3455,9 @@
errorLine1=" public boolean dispatchKeyEvent(KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="135"
+ column="37"/>
</issue>
<issue
@@ -2866,7 +3466,9 @@
errorLine1=" public void setOnDispatchKeyListener(OnKeyListener listener) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseFrameLayout.java"
+ line="151"
+ column="42"/>
</issue>
<issue
@@ -2875,7 +3477,9 @@
errorLine1=" public BrowseRowsFrameLayout(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"
+ line="34"
+ column="34"/>
</issue>
<issue
@@ -2884,7 +3488,9 @@
errorLine1=" public BrowseRowsFrameLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"
+ line="38"
+ column="34"/>
</issue>
<issue
@@ -2893,7 +3499,9 @@
errorLine1=" public BrowseRowsFrameLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"
+ line="38"
+ column="51"/>
</issue>
<issue
@@ -2902,7 +3510,9 @@
errorLine1=" public BrowseRowsFrameLayout(Context context, AttributeSet attrs,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"
+ line="42"
+ column="34"/>
</issue>
<issue
@@ -2911,7 +3521,9 @@
errorLine1=" public BrowseRowsFrameLayout(Context context, AttributeSet attrs,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"
+ line="42"
+ column="51"/>
</issue>
<issue
@@ -2920,7 +3532,9 @@
errorLine1=" protected void measureChildWithMargins(View child,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/BrowseRowsFrameLayout.java"
+ line="48"
+ column="44"/>
</issue>
<issue
@@ -2929,7 +3543,9 @@
errorLine1=" void notifyViewCreated(MainFragmentAdapter fragmentAdapter);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="292"
+ column="32"/>
</issue>
<issue
@@ -2938,7 +3554,9 @@
errorLine1=" void notifyDataReady(MainFragmentAdapter fragmentAdapter);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="301"
+ column="30"/>
</issue>
<issue
@@ -2947,7 +3565,9 @@
errorLine1=" public final FragmentHost getFragmentHost() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="468"
+ column="22"/>
</issue>
<issue
@@ -2956,7 +3576,9 @@
errorLine1=" MainFragmentAdapter getMainFragmentAdapter();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="487"
+ column="9"/>
</issue>
<issue
@@ -2965,7 +3587,9 @@
errorLine1=" MainFragmentRowsAdapter getMainFragmentRowsAdapter();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="499"
+ column="9"/>
</issue>
<issue
@@ -2974,7 +3598,9 @@
errorLine1=" public void setAdapter(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="523"
+ column="32"/>
</issue>
<issue
@@ -2983,7 +3609,9 @@
errorLine1=" public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="529"
+ column="50"/>
</issue>
<issue
@@ -2992,7 +3620,9 @@
errorLine1=" public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="535"
+ column="51"/>
</issue>
<issue
@@ -3001,7 +3631,9 @@
errorLine1=" final Presenter.ViewHolderTask rowHolderTask) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="543"
+ column="47"/>
</issue>
<issue
@@ -3010,7 +3642,9 @@
errorLine1=" public RowPresenter.ViewHolder findRowViewHolderByPosition(int position) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="563"
+ column="16"/>
</issue>
<issue
@@ -3019,7 +3653,9 @@
errorLine1=" public abstract T createFragment(Object row);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="647"
+ column="42"/>
</issue>
<issue
@@ -3028,7 +3664,9 @@
errorLine1=" public RowsSupportFragment createFragment(Object row) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="655"
+ column="16"/>
</issue>
<issue
@@ -3037,7 +3675,9 @@
errorLine1=" public RowsSupportFragment createFragment(Object row) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="655"
+ column="51"/>
</issue>
<issue
@@ -3046,7 +3686,9 @@
errorLine1=" public void registerFragment(Class<?> rowClass, FragmentFactory factory) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="676"
+ column="38"/>
</issue>
<issue
@@ -3055,7 +3697,9 @@
errorLine1=" public void registerFragment(Class<?> rowClass, FragmentFactory factory) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="676"
+ column="57"/>
</issue>
<issue
@@ -3064,7 +3708,9 @@
errorLine1=" public Fragment createFragment(Object item) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="680"
+ column="16"/>
</issue>
<issue
@@ -3073,7 +3719,9 @@
errorLine1=" public Fragment createFragment(Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="680"
+ column="40"/>
</issue>
<issue
@@ -3082,7 +3730,9 @@
errorLine1=" public static Bundle createArgs(Bundle args, String title, int headersState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="764"
+ column="19"/>
</issue>
<issue
@@ -3091,7 +3741,9 @@
errorLine1=" public static Bundle createArgs(Bundle args, String title, int headersState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="764"
+ column="37"/>
</issue>
<issue
@@ -3100,7 +3752,9 @@
errorLine1=" public static Bundle createArgs(Bundle args, String title, int headersState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="764"
+ column="50"/>
</issue>
<issue
@@ -3109,7 +3763,9 @@
errorLine1=" public void setAdapter(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="849"
+ column="28"/>
</issue>
<issue
@@ -3118,7 +3774,9 @@
errorLine1=" public final MainFragmentAdapterRegistry getMainFragmentRegistry() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="897"
+ column="18"/>
</issue>
<issue
@@ -3127,7 +3785,9 @@
errorLine1=" public ObjectAdapter getAdapter() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="904"
+ column="12"/>
</issue>
<issue
@@ -3136,7 +3796,9 @@
errorLine1=" public void setOnItemViewSelectedListener(OnItemViewSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="911"
+ column="47"/>
</issue>
<issue
@@ -3145,7 +3807,9 @@
errorLine1=" public OnItemViewSelectedListener getOnItemViewSelectedListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="918"
+ column="12"/>
</issue>
<issue
@@ -3154,7 +3818,9 @@
errorLine1=" public RowsSupportFragment getRowsSupportFragment() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="928"
+ column="12"/>
</issue>
<issue
@@ -3163,7 +3829,9 @@
errorLine1=" public Fragment getMainFragment() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="939"
+ column="12"/>
</issue>
<issue
@@ -3172,7 +3840,9 @@
errorLine1=" public HeadersSupportFragment getHeadersSupportFragment() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="947"
+ column="12"/>
</issue>
<issue
@@ -3181,7 +3851,9 @@
errorLine1=" public void setOnItemViewClickedListener(OnItemViewClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="957"
+ column="46"/>
</issue>
<issue
@@ -3190,7 +3862,9 @@
errorLine1=" public OnItemViewClickedListener getOnItemViewClickedListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="967"
+ column="12"/>
</issue>
<issue
@@ -3199,7 +3873,9 @@
errorLine1=" public void setBrowseTransitionListener(BrowseTransitionListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="1011"
+ column="45"/>
</issue>
<issue
@@ -3208,7 +3884,9 @@
errorLine1=" public void onSaveInstanceState(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="1169"
+ column="37"/>
</issue>
<issue
@@ -3217,7 +3895,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="1182"
+ column="26"/>
</issue>
<issue
@@ -3226,7 +3906,9 @@
errorLine1=" public HeadersSupportFragment onCreateHeadersSupportFragment() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="1242"
+ column="12"/>
</issue>
<issue
@@ -3235,7 +3917,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="1247"
+ column="12"/>
</issue>
<issue
@@ -3244,7 +3928,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="1247"
+ column="30"/>
</issue>
<issue
@@ -3253,7 +3939,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="1247"
+ column="55"/>
</issue>
<issue
@@ -3262,7 +3950,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="1248"
+ column="13"/>
</issue>
<issue
@@ -3271,7 +3961,9 @@
errorLine1=" public void setHeaderPresenterSelector(PresenterSelector headerPresenterSelector) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="1444"
+ column="44"/>
</issue>
<issue
@@ -3280,7 +3972,9 @@
errorLine1=" public RowPresenter.ViewHolder getSelectedRowViewHolder() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="1629"
+ column="12"/>
</issue>
<issue
@@ -3289,7 +3983,9 @@
errorLine1=" final Presenter.ViewHolderTask rowHolderTask) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="1658"
+ column="19"/>
</issue>
<issue
@@ -3298,7 +3994,9 @@
errorLine1=" protected Object createEntranceTransition() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="1803"
+ column="15"/>
</issue>
<issue
@@ -3307,7 +4005,9 @@
errorLine1=" protected void runEntranceTransition(Object entranceTransition) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/BrowseSupportFragment.java"
+ line="1809"
+ column="42"/>
</issue>
<issue
@@ -3316,7 +4016,9 @@
errorLine1=" public ClassPresenterSelector addClassPresenter(Class<?> cls, Presenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+ line="35"
+ column="12"/>
</issue>
<issue
@@ -3325,7 +4027,9 @@
errorLine1=" public ClassPresenterSelector addClassPresenter(Class<?> cls, Presenter presenter) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+ line="35"
+ column="53"/>
</issue>
<issue
@@ -3334,7 +4038,9 @@
errorLine1=" public ClassPresenterSelector addClassPresenter(Class<?> cls, Presenter presenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+ line="35"
+ column="67"/>
</issue>
<issue
@@ -3343,7 +4049,9 @@
errorLine1=" public ClassPresenterSelector addClassPresenterSelector(Class<?> cls,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+ line="50"
+ column="12"/>
</issue>
<issue
@@ -3352,7 +4060,9 @@
errorLine1=" public ClassPresenterSelector addClassPresenterSelector(Class<?> cls,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+ line="50"
+ column="61"/>
</issue>
<issue
@@ -3361,7 +4071,9 @@
errorLine1=" PresenterSelector presenterSelector) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+ line="51"
+ column="13"/>
</issue>
<issue
@@ -3370,7 +4082,9 @@
errorLine1=" public Presenter getPresenter(Object item) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+ line="62"
+ column="12"/>
</issue>
<issue
@@ -3379,7 +4093,9 @@
errorLine1=" public Presenter getPresenter(Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+ line="62"
+ column="35"/>
</issue>
<issue
@@ -3388,7 +4104,9 @@
errorLine1=" public Presenter[] getPresenters() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ClassPresenterSelector.java"
+ line="81"
+ column="12"/>
</issue>
<issue
@@ -3397,7 +4115,9 @@
errorLine1=" public static ColorFilterCache getColorFilterCache(int color) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorFilterCache.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorFilterCache.java"
+ line="40"
+ column="19"/>
</issue>
<issue
@@ -3406,7 +4126,9 @@
errorLine1=" public ColorFilter getFilterForLevel(float level) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorFilterCache.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorFilterCache.java"
+ line="68"
+ column="12"/>
</issue>
<issue
@@ -3415,7 +4137,9 @@
errorLine1=" public static ColorFilterDimmer createDefault(Context context) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+ line="46"
+ column="19"/>
</issue>
<issue
@@ -3424,7 +4148,9 @@
errorLine1=" public static ColorFilterDimmer createDefault(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+ line="46"
+ column="51"/>
</issue>
<issue
@@ -3433,7 +4159,9 @@
errorLine1=" public static ColorFilterDimmer create(ColorFilterCache dimmer,"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+ line="69"
+ column="19"/>
</issue>
<issue
@@ -3442,7 +4170,9 @@
errorLine1=" public static ColorFilterDimmer create(ColorFilterCache dimmer,"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+ line="69"
+ column="44"/>
</issue>
<issue
@@ -3451,7 +4181,9 @@
errorLine1=" public void applyFilterToView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+ line="92"
+ column="35"/>
</issue>
<issue
@@ -3460,7 +4192,9 @@
errorLine1=" public ColorFilter getColorFilter() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+ line="123"
+ column="12"/>
</issue>
<issue
@@ -3469,7 +4203,9 @@
errorLine1=" public Paint getPaint() {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorFilterDimmer.java"
+ line="132"
+ column="12"/>
</issue>
<issue
@@ -3478,7 +4214,9 @@
errorLine1=" public static ColorOverlayDimmer createDefault(Context context) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"
+ line="42"
+ column="19"/>
</issue>
<issue
@@ -3487,7 +4225,9 @@
errorLine1=" public static ColorOverlayDimmer createDefault(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"
+ line="42"
+ column="52"/>
</issue>
<issue
@@ -3496,7 +4236,9 @@
errorLine1=" public static ColorOverlayDimmer createColorOverlayDimmer(int dimColor, float activeLevel,"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"
+ line="65"
+ column="19"/>
</issue>
<issue
@@ -3505,7 +4247,9 @@
errorLine1=" public Paint getPaint() {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"
+ line="120"
+ column="12"/>
</issue>
<issue
@@ -3514,7 +4258,9 @@
errorLine1=" public void drawColorOverlay(Canvas c, View v, boolean includePadding) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"
+ line="149"
+ column="34"/>
</issue>
<issue
@@ -3523,7 +4269,9 @@
errorLine1=" public void drawColorOverlay(Canvas c, View v, boolean includePadding) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"/>
+ file="src/main/java/androidx/leanback/graphics/ColorOverlayDimmer.java"
+ line="149"
+ column="44"/>
</issue>
<issue
@@ -3532,7 +4280,9 @@
errorLine1=" public ConstantState getConstantState() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="79"
+ column="12"/>
</issue>
<issue
@@ -3541,7 +4291,9 @@
errorLine1=" public Drawable mutate() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="84"
+ column="12"/>
</issue>
<issue
@@ -3550,7 +4302,9 @@
errorLine1=" public void addChildDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="102"
+ column="34"/>
</issue>
<issue
@@ -3559,7 +4313,9 @@
errorLine1=" public void setChildDrawableAt(int index, Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="109"
+ column="47"/>
</issue>
<issue
@@ -3568,7 +4324,9 @@
errorLine1=" public Drawable getDrawable(int index) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="116"
+ column="12"/>
</issue>
<issue
@@ -3577,7 +4335,9 @@
errorLine1=" public ChildDrawable getChildAt(int index) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="123"
+ column="12"/>
</issue>
<issue
@@ -3586,7 +4346,9 @@
errorLine1=" public void removeDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="137"
+ column="32"/>
</issue>
<issue
@@ -3595,7 +4357,9 @@
errorLine1=" public void draw(Canvas canvas) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="156"
+ column="22"/>
</issue>
<issue
@@ -3604,7 +4368,9 @@
errorLine1=" protected void onBoundsChange(Rect bounds) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="164"
+ column="35"/>
</issue>
<issue
@@ -3613,7 +4379,9 @@
errorLine1=" public void setColorFilter(ColorFilter colorFilter) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="170"
+ column="32"/>
</issue>
<issue
@@ -3622,7 +4390,9 @@
errorLine1=" public void invalidateDrawable(Drawable who) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="215"
+ column="36"/>
</issue>
<issue
@@ -3631,7 +4401,9 @@
errorLine1=" public void scheduleDrawable(Drawable who, Runnable what, long when) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="220"
+ column="34"/>
</issue>
<issue
@@ -3640,7 +4412,9 @@
errorLine1=" public void scheduleDrawable(Drawable who, Runnable what, long when) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="220"
+ column="48"/>
</issue>
<issue
@@ -3649,7 +4423,9 @@
errorLine1=" public void unscheduleDrawable(Drawable who, Runnable what) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="225"
+ column="36"/>
</issue>
<issue
@@ -3658,7 +4434,9 @@
errorLine1=" public void unscheduleDrawable(Drawable who, Runnable what) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="225"
+ column="50"/>
</issue>
<issue
@@ -3667,7 +4445,9 @@
errorLine1=" public ChildDrawable(Drawable drawable, CompositeDrawable parent) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="250"
+ column="30"/>
</issue>
<issue
@@ -3676,7 +4456,9 @@
errorLine1=" public ChildDrawable(Drawable drawable, CompositeDrawable parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="250"
+ column="49"/>
</issue>
<issue
@@ -3685,7 +4467,9 @@
errorLine1=" public BoundsRule getBoundsRule() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="286"
+ column="16"/>
</issue>
<issue
@@ -3694,7 +4478,9 @@
errorLine1=" public Drawable getDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/CompositeDrawable.java"
+ line="293"
+ column="16"/>
</issue>
<issue
@@ -3703,7 +4489,9 @@
errorLine1=" public void onChildFocusedListener(View child, View focused);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ControlBar.java"/>
+ file="src/main/java/androidx/leanback/widget/ControlBar.java"
+ line="28"
+ column="44"/>
</issue>
<issue
@@ -3712,7 +4500,9 @@
errorLine1=" public void onChildFocusedListener(View child, View focused);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ControlBar.java"/>
+ file="src/main/java/androidx/leanback/widget/ControlBar.java"
+ line="28"
+ column="56"/>
</issue>
<issue
@@ -3721,7 +4511,9 @@
errorLine1=" public Presenter getPrimaryPresenter() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"
+ line="42"
+ column="12"/>
</issue>
<issue
@@ -3730,7 +4522,9 @@
errorLine1=" public Presenter getSecondaryPresenter() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"
+ line="49"
+ column="12"/>
</issue>
<issue
@@ -3739,7 +4533,9 @@
errorLine1=" public Presenter getPresenter(Object item) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"
+ line="57"
+ column="12"/>
</issue>
<issue
@@ -3748,7 +4544,9 @@
errorLine1=" public Presenter getPresenter(Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"
+ line="57"
+ column="35"/>
</issue>
<issue
@@ -3757,7 +4555,9 @@
errorLine1=" public Presenter[] getPresenters() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/ControlButtonPresenterSelector.java"
+ line="62"
+ column="12"/>
</issue>
<issue
@@ -3766,7 +4566,9 @@
errorLine1=" protected abstract void bindColumns(Cursor cursor);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/database/CursorMapper.java"/>
+ file="src/main/java/androidx/leanback/database/CursorMapper.java"
+ line="31"
+ column="41"/>
</issue>
<issue
@@ -3775,7 +4577,9 @@
errorLine1=" protected abstract Object bind(Cursor cursor);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/database/CursorMapper.java"/>
+ file="src/main/java/androidx/leanback/database/CursorMapper.java"
+ line="38"
+ column="24"/>
</issue>
<issue
@@ -3784,7 +4588,9 @@
errorLine1=" protected abstract Object bind(Cursor cursor);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/database/CursorMapper.java"/>
+ file="src/main/java/androidx/leanback/database/CursorMapper.java"
+ line="38"
+ column="36"/>
</issue>
<issue
@@ -3793,7 +4599,9 @@
errorLine1=" public Object convert(Cursor cursor) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/database/CursorMapper.java"/>
+ file="src/main/java/androidx/leanback/database/CursorMapper.java"
+ line="43"
+ column="12"/>
</issue>
<issue
@@ -3802,7 +4610,9 @@
errorLine1=" public Object convert(Cursor cursor) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/database/CursorMapper.java"/>
+ file="src/main/java/androidx/leanback/database/CursorMapper.java"
+ line="43"
+ column="27"/>
</issue>
<issue
@@ -3811,7 +4621,9 @@
errorLine1=" public CursorObjectAdapter(PresenterSelector presenterSelector) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+ line="33"
+ column="32"/>
</issue>
<issue
@@ -3820,7 +4632,9 @@
errorLine1=" public CursorObjectAdapter(Presenter presenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+ line="40"
+ column="32"/>
</issue>
<issue
@@ -3829,7 +4643,9 @@
errorLine1=" public void changeCursor(Cursor cursor) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+ line="58"
+ column="30"/>
</issue>
<issue
@@ -3838,7 +4654,9 @@
errorLine1=" public Cursor swapCursor(Cursor cursor) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+ line="76"
+ column="12"/>
</issue>
<issue
@@ -3847,7 +4665,9 @@
errorLine1=" public Cursor swapCursor(Cursor cursor) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+ line="76"
+ column="30"/>
</issue>
<issue
@@ -3856,7 +4676,9 @@
errorLine1=" public final Cursor getCursor() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+ line="97"
+ column="19"/>
</issue>
<issue
@@ -3865,7 +4687,9 @@
errorLine1=" public final void setMapper(CursorMapper mapper) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+ line="105"
+ column="33"/>
</issue>
<issue
@@ -3874,7 +4698,9 @@
errorLine1=" public final CursorMapper getMapper() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+ line="125"
+ column="18"/>
</issue>
<issue
@@ -3883,7 +4709,9 @@
errorLine1=" public Object get(int index) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/CursorObjectAdapter.java"
+ line="138"
+ column="12"/>
</issue>
<issue
@@ -3892,7 +4720,9 @@
errorLine1=" public DatePicker(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"
+ line="69"
+ column="23"/>
</issue>
<issue
@@ -3901,7 +4731,9 @@
errorLine1=" public DatePicker(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"
+ line="69"
+ column="40"/>
</issue>
<issue
@@ -3910,7 +4742,9 @@
errorLine1=" public DatePicker(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"
+ line="74"
+ column="23"/>
</issue>
<issue
@@ -3919,7 +4753,9 @@
errorLine1=" public DatePicker(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"
+ line="74"
+ column="40"/>
</issue>
<issue
@@ -3928,7 +4764,9 @@
errorLine1=" public void setDatePickerFormat(String datePickerFormat) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"
+ line="229"
+ column="37"/>
</issue>
<issue
@@ -3937,7 +4775,9 @@
errorLine1=" public String getDatePickerFormat() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/DatePicker.java"
+ line="287"
+ column="12"/>
</issue>
<issue
@@ -3946,7 +4786,9 @@
errorLine1=" public void setAdapter(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="410"
+ column="28"/>
</issue>
<issue
@@ -3955,7 +4797,9 @@
errorLine1=" public ObjectAdapter getAdapter() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="428"
+ column="12"/>
</issue>
<issue
@@ -3964,7 +4808,9 @@
errorLine1=" public void setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="435"
+ column="47"/>
</issue>
<issue
@@ -3973,7 +4819,9 @@
errorLine1=" public void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="442"
+ column="46"/>
</issue>
<issue
@@ -3982,7 +4830,9 @@
errorLine1=" public BaseOnItemViewClickedListener getOnItemViewClickedListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="454"
+ column="12"/>
</issue>
<issue
@@ -3991,7 +4841,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="459"
+ column="26"/>
</issue>
<issue
@@ -4000,7 +4852,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="480"
+ column="12"/>
</issue>
<issue
@@ -4009,7 +4863,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="480"
+ column="30"/>
</issue>
<issue
@@ -4018,7 +4874,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="480"
+ column="55"/>
</issue>
<issue
@@ -4027,7 +4885,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="481"
+ column="13"/>
</issue>
<issue
@@ -4036,7 +4896,9 @@
errorLine1=" protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="545"
+ column="15"/>
</issue>
<issue
@@ -4045,7 +4907,9 @@
errorLine1=" protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="545"
+ column="33"/>
</issue>
<issue
@@ -4054,7 +4918,9 @@
errorLine1=" protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="545"
+ column="58"/>
</issue>
<issue
@@ -4063,7 +4929,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="546"
+ column="13"/>
</issue>
<issue
@@ -4072,7 +4940,9 @@
errorLine1=" public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="551"
+ column="12"/>
</issue>
<issue
@@ -4081,7 +4951,9 @@
errorLine1=" public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="551"
+ column="36"/>
</issue>
<issue
@@ -4090,7 +4962,9 @@
errorLine1=" public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="551"
+ column="61"/>
</issue>
<issue
@@ -4099,7 +4973,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="552"
+ column="36"/>
</issue>
<issue
@@ -4108,7 +4984,9 @@
errorLine1=" protected void setupPresenter(Presenter rowPresenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="572"
+ column="35"/>
</issue>
<issue
@@ -4117,7 +4995,9 @@
errorLine1=" protected void setupDetailsOverviewRowPresenter(FullWidthDetailsOverviewRowPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="583"
+ column="53"/>
</issue>
<issue
@@ -4126,7 +5006,9 @@
errorLine1=" public RowsFragment getRowsFragment() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="613"
+ column="12"/>
</issue>
<issue
@@ -4135,7 +5017,9 @@
errorLine1=" protected void onSetRowStatus(RowPresenter presenter, RowPresenter.ViewHolder viewHolder, int"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="775"
+ column="35"/>
</issue>
<issue
@@ -4144,7 +5028,9 @@
errorLine1=" protected void onSetRowStatus(RowPresenter presenter, RowPresenter.ViewHolder viewHolder, int"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="775"
+ column="59"/>
</issue>
<issue
@@ -4153,7 +5039,9 @@
errorLine1=" protected void onSetDetailsOverviewRowStatus(FullWidthDetailsOverviewRowPresenter presenter,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="800"
+ column="50"/>
</issue>
<issue
@@ -4162,7 +5050,9 @@
errorLine1=" FullWidthDetailsOverviewRowPresenter.ViewHolder viewHolder, int adapterPosition,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="801"
+ column="13"/>
</issue>
<issue
@@ -4171,7 +5061,9 @@
errorLine1=" protected Object createEntranceTransition() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="832"
+ column="15"/>
</issue>
<issue
@@ -4180,7 +5072,9 @@
errorLine1=" protected void runEntranceTransition(Object entranceTransition) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="838"
+ column="42"/>
</issue>
<issue
@@ -4189,7 +5083,9 @@
errorLine1=" public DetailsParallax getParallax() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragment.java"
+ line="865"
+ column="12"/>
</issue>
<issue
@@ -4198,7 +5094,9 @@
errorLine1=" public DetailsFragmentBackgroundController(DetailsFragment fragment) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+ line="135"
+ column="48"/>
</issue>
<issue
@@ -4207,7 +5105,9 @@
errorLine1=" public final PlaybackGlue getPlaybackGlue() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+ line="265"
+ column="18"/>
</issue>
<issue
@@ -4216,7 +5116,9 @@
errorLine1=" public final Drawable getCoverDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+ line="355"
+ column="18"/>
</issue>
<issue
@@ -4225,7 +5127,9 @@
errorLine1=" public final Drawable getBottomDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+ line="368"
+ column="18"/>
</issue>
<issue
@@ -4234,7 +5138,9 @@
errorLine1=" public Fragment onCreateVideoFragment() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+ line="384"
+ column="12"/>
</issue>
<issue
@@ -4243,7 +5149,9 @@
errorLine1=" public PlaybackGlueHost onCreateGlueHost() {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+ line="399"
+ column="12"/>
</issue>
<issue
@@ -4252,7 +5160,9 @@
errorLine1=" public final Fragment findOrCreateVideoFragment() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+ line="421"
+ column="18"/>
</issue>
<issue
@@ -4261,7 +5171,9 @@
errorLine1=" public final void setCoverBitmap(Bitmap bitmap) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+ line="432"
+ column="38"/>
</issue>
<issue
@@ -4270,7 +5182,9 @@
errorLine1=" public final Bitmap getCoverBitmap() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsFragmentBackgroundController.java"
+ line="445"
+ column="18"/>
</issue>
<issue
@@ -4279,7 +5193,9 @@
errorLine1=" protected FullWidthDetailsOverviewRowPresenter mParentPresenter;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="32"
+ column="19"/>
</issue>
<issue
@@ -4288,7 +5204,9 @@
errorLine1=" protected FullWidthDetailsOverviewRowPresenter.ViewHolder mParentViewHolder;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="33"
+ column="19"/>
</issue>
<issue
@@ -4297,7 +5215,9 @@
errorLine1=" public ViewHolder(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="36"
+ column="27"/>
</issue>
<issue
@@ -4306,7 +5226,9 @@
errorLine1=" public FullWidthDetailsOverviewRowPresenter getParentPresenter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="40"
+ column="16"/>
</issue>
<issue
@@ -4315,7 +5237,9 @@
errorLine1=" public FullWidthDetailsOverviewRowPresenter.ViewHolder getParentViewHolder() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="44"
+ column="16"/>
</issue>
<issue
@@ -4324,7 +5248,9 @@
errorLine1=" public View onCreateView(ViewGroup parent) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="87"
+ column="12"/>
</issue>
<issue
@@ -4333,7 +5259,9 @@
errorLine1=" public View onCreateView(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="87"
+ column="30"/>
</issue>
<issue
@@ -4342,7 +5270,9 @@
errorLine1=" public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="93"
+ column="12"/>
</issue>
<issue
@@ -4351,7 +5281,9 @@
errorLine1=" public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="93"
+ column="52"/>
</issue>
<issue
@@ -4360,7 +5292,9 @@
errorLine1=" public void setContext(ViewHolder viewHolder,"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="109"
+ column="28"/>
</issue>
<issue
@@ -4369,7 +5303,9 @@
errorLine1=" FullWidthDetailsOverviewRowPresenter.ViewHolder parentViewHolder,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="110"
+ column="13"/>
</issue>
<issue
@@ -4378,7 +5314,9 @@
errorLine1=" FullWidthDetailsOverviewRowPresenter parentPresenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="111"
+ column="13"/>
</issue>
<issue
@@ -4387,7 +5325,9 @@
errorLine1=" public boolean isBoundToImage(ViewHolder viewHolder, DetailsOverviewRow row) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="124"
+ column="35"/>
</issue>
<issue
@@ -4396,7 +5336,9 @@
errorLine1=" public boolean isBoundToImage(ViewHolder viewHolder, DetailsOverviewRow row) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="124"
+ column="58"/>
</issue>
<issue
@@ -4405,7 +5347,9 @@
errorLine1=" public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="136"
+ column="34"/>
</issue>
<issue
@@ -4414,7 +5358,9 @@
errorLine1=" public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="136"
+ column="67"/>
</issue>
<issue
@@ -4423,7 +5369,9 @@
errorLine1=" public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewLogoPresenter.java"
+ line="170"
+ column="36"/>
</issue>
<issue
@@ -4432,7 +5380,9 @@
errorLine1=" public void onImageDrawableChanged(DetailsOverviewRow row) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="55"
+ column="44"/>
</issue>
<issue
@@ -4441,7 +5391,9 @@
errorLine1=" public void onItemChanged(DetailsOverviewRow row) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="61"
+ column="35"/>
</issue>
<issue
@@ -4450,7 +5402,9 @@
errorLine1=" public void onActionsAdapterChanged(DetailsOverviewRow row) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="67"
+ column="45"/>
</issue>
<issue
@@ -4459,7 +5413,9 @@
errorLine1=" public DetailsOverviewRow(Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="83"
+ column="31"/>
</issue>
<issue
@@ -4468,7 +5424,9 @@
errorLine1=" public final Object getItem() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="185"
+ column="18"/>
</issue>
<issue
@@ -4477,7 +5435,9 @@
errorLine1=" public final void setItem(Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="193"
+ column="31"/>
</issue>
<issue
@@ -4486,7 +5446,9 @@
errorLine1=" public final void setImageDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="206"
+ column="40"/>
</issue>
<issue
@@ -4495,7 +5457,9 @@
errorLine1=" public final void setImageBitmap(Context context, Bitmap bm) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="220"
+ column="38"/>
</issue>
<issue
@@ -4504,7 +5468,9 @@
errorLine1=" public final void setImageBitmap(Context context, Bitmap bm) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="220"
+ column="55"/>
</issue>
<issue
@@ -4513,7 +5479,9 @@
errorLine1=" public final Drawable getImageDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="231"
+ column="18"/>
</issue>
<issue
@@ -4522,7 +5490,9 @@
errorLine1=" public final void addAction(Action action) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="270"
+ column="33"/>
</issue>
<issue
@@ -4531,7 +5501,9 @@
errorLine1=" public final void addAction(int pos, Action action) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="284"
+ column="42"/>
</issue>
<issue
@@ -4540,7 +5512,9 @@
errorLine1=" public final boolean removeAction(Action action) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="297"
+ column="39"/>
</issue>
<issue
@@ -4549,7 +5523,9 @@
errorLine1=" public final List<Action> getActions() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="310"
+ column="18"/>
</issue>
<issue
@@ -4558,7 +5534,9 @@
errorLine1=" public final ObjectAdapter getActionsAdapter() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="317"
+ column="18"/>
</issue>
<issue
@@ -4567,7 +5545,9 @@
errorLine1=" public final void setActionsAdapter(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="327"
+ column="41"/>
</issue>
<issue
@@ -4576,7 +5556,9 @@
errorLine1=" public Action getActionForKeyCode(int keyCode) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRow.java"
+ line="340"
+ column="12"/>
</issue>
<issue
@@ -4585,7 +5567,9 @@
errorLine1=" public ViewHolder(View rootView, Presenter detailsPresenter) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="268"
+ column="27"/>
</issue>
<issue
@@ -4594,7 +5578,9 @@
errorLine1=" public ViewHolder(View rootView, Presenter detailsPresenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="268"
+ column="42"/>
</issue>
<issue
@@ -4603,7 +5589,9 @@
errorLine1=" public DetailsOverviewRowPresenter(Presenter detailsPresenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="308"
+ column="40"/>
</issue>
<issue
@@ -4612,7 +5600,9 @@
errorLine1=" public void setOnActionClickedListener(OnActionClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="317"
+ column="44"/>
</issue>
<issue
@@ -4621,7 +5611,9 @@
errorLine1=" public OnActionClickedListener getOnActionClickedListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="324"
+ column="12"/>
</issue>
<issue
@@ -4630,7 +5622,9 @@
errorLine1=" public final void setSharedElementEnterTransition(Activity activity,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="372"
+ column="55"/>
</issue>
<issue
@@ -4639,7 +5633,9 @@
errorLine1=" String sharedElementName, long timeoutMs) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="373"
+ column="13"/>
</issue>
<issue
@@ -4648,7 +5644,9 @@
errorLine1=" public final void setSharedElementEnterTransition(Activity activity,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="393"
+ column="55"/>
</issue>
<issue
@@ -4657,7 +5655,9 @@
errorLine1=" String sharedElementName) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="394"
+ column="13"/>
</issue>
<issue
@@ -4666,7 +5666,9 @@
errorLine1=" protected void onRowViewSelected(RowPresenter.ViewHolder vh, boolean selected) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="407"
+ column="38"/>
</issue>
<issue
@@ -4675,7 +5677,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="415"
+ column="15"/>
</issue>
<issue
@@ -4684,7 +5688,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="415"
+ column="59"/>
</issue>
<issue
@@ -4693,7 +5699,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="547"
+ column="40"/>
</issue>
<issue
@@ -4702,7 +5710,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="547"
+ column="72"/>
</issue>
<issue
@@ -4711,7 +5721,9 @@
errorLine1=" protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="560"
+ column="42"/>
</issue>
<issue
@@ -4720,7 +5732,9 @@
errorLine1=" protected void onSelectLevelChanged(RowPresenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="577"
+ column="41"/>
</issue>
<issue
@@ -4729,7 +5743,9 @@
errorLine1=" protected void onRowViewAttachedToWindow(RowPresenter.ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="587"
+ column="46"/>
</issue>
<issue
@@ -4738,7 +5754,9 @@
errorLine1=" protected void onRowViewDetachedFromWindow(RowPresenter.ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsOverviewRowPresenter.java"
+ line="596"
+ column="48"/>
</issue>
<issue
@@ -4747,7 +5765,9 @@
errorLine1=" public Parallax.IntProperty getOverviewRowTop() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallax.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallax.java"
+ line="58"
+ column="12"/>
</issue>
<issue
@@ -4756,7 +5776,9 @@
errorLine1=" public Parallax.IntProperty getOverviewRowBottom() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallax.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallax.java"
+ line="66"
+ column="12"/>
</issue>
<issue
@@ -4765,7 +5787,9 @@
errorLine1=" public DetailsParallaxDrawable(Context context, DetailsParallax parallax,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+ line="77"
+ column="36"/>
</issue>
<issue
@@ -4774,7 +5798,9 @@
errorLine1=" public DetailsParallaxDrawable(Context context, DetailsParallax parallax,"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+ line="77"
+ column="53"/>
</issue>
<issue
@@ -4783,7 +5809,9 @@
errorLine1=" Drawable coverDrawable,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+ line="78"
+ column="36"/>
</issue>
<issue
@@ -4792,7 +5820,9 @@
errorLine1=" ParallaxTarget coverDrawableParallaxTarget) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+ line="79"
+ column="36"/>
</issue>
<issue
@@ -4801,7 +5831,9 @@
errorLine1=" public DetailsParallaxDrawable(Context context, DetailsParallax parallax,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+ line="96"
+ column="36"/>
</issue>
<issue
@@ -4810,7 +5842,9 @@
errorLine1=" public DetailsParallaxDrawable(Context context, DetailsParallax parallax,"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+ line="96"
+ column="53"/>
</issue>
<issue
@@ -4819,7 +5853,9 @@
errorLine1=" Drawable coverDrawable, Drawable bottomDrawable,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+ line="97"
+ column="36"/>
</issue>
<issue
@@ -4828,7 +5864,9 @@
errorLine1=" Drawable coverDrawable, Drawable bottomDrawable,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+ line="97"
+ column="60"/>
</issue>
<issue
@@ -4837,7 +5875,9 @@
errorLine1=" ParallaxTarget coverDrawableParallaxTarget) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+ line="98"
+ column="36"/>
</issue>
<issue
@@ -4846,7 +5886,9 @@
errorLine1=" public DetailsParallaxDrawable(Context context, DetailsParallax parallax) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+ line="108"
+ column="36"/>
</issue>
<issue
@@ -4855,7 +5897,9 @@
errorLine1=" public DetailsParallaxDrawable(Context context, DetailsParallax parallax) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+ line="108"
+ column="53"/>
</issue>
<issue
@@ -4864,7 +5908,9 @@
errorLine1=" public Drawable getCoverDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+ line="143"
+ column="12"/>
</issue>
<issue
@@ -4873,7 +5919,9 @@
errorLine1=" public Drawable getBottomDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"/>
+ file="src/main/java/androidx/leanback/widget/DetailsParallaxDrawable.java"
+ line="150"
+ column="12"/>
</issue>
<issue
@@ -4882,7 +5930,9 @@
errorLine1=" public void setAdapter(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="405"
+ column="28"/>
</issue>
<issue
@@ -4891,7 +5941,9 @@
errorLine1=" public ObjectAdapter getAdapter() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="423"
+ column="12"/>
</issue>
<issue
@@ -4900,7 +5952,9 @@
errorLine1=" public void setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="430"
+ column="47"/>
</issue>
<issue
@@ -4909,7 +5963,9 @@
errorLine1=" public void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="437"
+ column="46"/>
</issue>
<issue
@@ -4918,7 +5974,9 @@
errorLine1=" public BaseOnItemViewClickedListener getOnItemViewClickedListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="449"
+ column="12"/>
</issue>
<issue
@@ -4927,7 +5985,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="454"
+ column="26"/>
</issue>
<issue
@@ -4936,7 +5996,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="475"
+ column="12"/>
</issue>
<issue
@@ -4945,7 +6007,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="475"
+ column="30"/>
</issue>
<issue
@@ -4954,7 +6018,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="475"
+ column="55"/>
</issue>
<issue
@@ -4963,7 +6029,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="476"
+ column="13"/>
</issue>
<issue
@@ -4972,7 +6040,9 @@
errorLine1=" protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="540"
+ column="15"/>
</issue>
<issue
@@ -4981,7 +6051,9 @@
errorLine1=" protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="540"
+ column="33"/>
</issue>
<issue
@@ -4990,7 +6062,9 @@
errorLine1=" protected View inflateTitle(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="540"
+ column="58"/>
</issue>
<issue
@@ -4999,7 +6073,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="541"
+ column="13"/>
</issue>
<issue
@@ -5008,7 +6084,9 @@
errorLine1=" public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="546"
+ column="12"/>
</issue>
<issue
@@ -5017,7 +6095,9 @@
errorLine1=" public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="546"
+ column="36"/>
</issue>
<issue
@@ -5026,7 +6106,9 @@
errorLine1=" public View onInflateTitleView(LayoutInflater inflater, ViewGroup parent,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="546"
+ column="61"/>
</issue>
<issue
@@ -5035,7 +6117,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="547"
+ column="36"/>
</issue>
<issue
@@ -5044,7 +6128,9 @@
errorLine1=" protected void setupPresenter(Presenter rowPresenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="567"
+ column="35"/>
</issue>
<issue
@@ -5053,7 +6139,9 @@
errorLine1=" protected void setupDetailsOverviewRowPresenter(FullWidthDetailsOverviewRowPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="578"
+ column="53"/>
</issue>
<issue
@@ -5062,7 +6150,9 @@
errorLine1=" public RowsSupportFragment getRowsSupportFragment() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="608"
+ column="12"/>
</issue>
<issue
@@ -5071,7 +6161,9 @@
errorLine1=" protected void onSetRowStatus(RowPresenter presenter, RowPresenter.ViewHolder viewHolder, int"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="770"
+ column="35"/>
</issue>
<issue
@@ -5080,7 +6172,9 @@
errorLine1=" protected void onSetRowStatus(RowPresenter presenter, RowPresenter.ViewHolder viewHolder, int"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="770"
+ column="59"/>
</issue>
<issue
@@ -5089,7 +6183,9 @@
errorLine1=" protected void onSetDetailsOverviewRowStatus(FullWidthDetailsOverviewRowPresenter presenter,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="795"
+ column="50"/>
</issue>
<issue
@@ -5098,7 +6194,9 @@
errorLine1=" FullWidthDetailsOverviewRowPresenter.ViewHolder viewHolder, int adapterPosition,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="796"
+ column="13"/>
</issue>
<issue
@@ -5107,7 +6205,9 @@
errorLine1=" protected Object createEntranceTransition() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="827"
+ column="15"/>
</issue>
<issue
@@ -5116,7 +6216,9 @@
errorLine1=" protected void runEntranceTransition(Object entranceTransition) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="833"
+ column="42"/>
</issue>
<issue
@@ -5125,7 +6227,9 @@
errorLine1=" public DetailsParallax getParallax() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
+ line="860"
+ column="12"/>
</issue>
<issue
@@ -5134,7 +6238,9 @@
errorLine1=" public DetailsSupportFragmentBackgroundController(DetailsSupportFragment fragment) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+ line="130"
+ column="55"/>
</issue>
<issue
@@ -5143,7 +6249,9 @@
errorLine1=" public final PlaybackGlue getPlaybackGlue() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+ line="260"
+ column="18"/>
</issue>
<issue
@@ -5152,7 +6260,9 @@
errorLine1=" public final Drawable getCoverDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+ line="350"
+ column="18"/>
</issue>
<issue
@@ -5161,7 +6271,9 @@
errorLine1=" public final Drawable getBottomDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+ line="363"
+ column="18"/>
</issue>
<issue
@@ -5170,7 +6282,9 @@
errorLine1=" public Fragment onCreateVideoSupportFragment() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+ line="379"
+ column="12"/>
</issue>
<issue
@@ -5179,7 +6293,9 @@
errorLine1=" public PlaybackGlueHost onCreateGlueHost() {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+ line="394"
+ column="12"/>
</issue>
<issue
@@ -5188,7 +6304,9 @@
errorLine1=" public final Fragment findOrCreateVideoSupportFragment() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+ line="416"
+ column="18"/>
</issue>
<issue
@@ -5197,7 +6315,9 @@
errorLine1=" public final void setCoverBitmap(Bitmap bitmap) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+ line="427"
+ column="38"/>
</issue>
<issue
@@ -5206,7 +6326,9 @@
errorLine1=" public final Bitmap getCoverBitmap() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"/>
+ file="src/main/java/androidx/leanback/app/DetailsSupportFragmentBackgroundController.java"
+ line="440"
+ column="18"/>
</issue>
<issue
@@ -5215,7 +6337,9 @@
errorLine1=" public Object getChangePayload(@NonNull Value oldItem, @NonNull Value newItem) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DiffCallback.java"/>
+ file="src/main/java/androidx/leanback/widget/DiffCallback.java"
+ line="65"
+ column="12"/>
</issue>
<issue
@@ -5224,7 +6348,9 @@
errorLine1=" public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DividerPresenter.java"
+ line="45"
+ column="12"/>
</issue>
<issue
@@ -5233,7 +6359,9 @@
errorLine1=" public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DividerPresenter.java"
+ line="45"
+ column="52"/>
</issue>
<issue
@@ -5242,7 +6370,9 @@
errorLine1=" public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DividerPresenter.java"
+ line="53"
+ column="34"/>
</issue>
<issue
@@ -5251,7 +6381,9 @@
errorLine1=" public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DividerPresenter.java"
+ line="53"
+ column="67"/>
</issue>
<issue
@@ -5260,7 +6392,9 @@
errorLine1=" public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/DividerPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/DividerPresenter.java"
+ line="57"
+ column="36"/>
</issue>
<issue
@@ -5269,7 +6403,9 @@
errorLine1=" public void setBackgroundDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="76"
+ column="39"/>
</issue>
<issue
@@ -5278,7 +6414,9 @@
errorLine1=" public Drawable getBackgroundDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="90"
+ column="12"/>
</issue>
<issue
@@ -5287,7 +6425,9 @@
errorLine1=" public void setImageDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="99"
+ column="34"/>
</issue>
<issue
@@ -5296,7 +6436,9 @@
errorLine1=" public Drawable getImageDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="107"
+ column="12"/>
</issue>
<issue
@@ -5305,7 +6447,9 @@
errorLine1=" public void setMessage(CharSequence message) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="116"
+ column="28"/>
</issue>
<issue
@@ -5314,7 +6458,9 @@
errorLine1=" public CharSequence getMessage() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="124"
+ column="12"/>
</issue>
<issue
@@ -5323,7 +6469,9 @@
errorLine1=" public void setButtonText(String text) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="133"
+ column="31"/>
</issue>
<issue
@@ -5332,7 +6480,9 @@
errorLine1=" public String getButtonText() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="141"
+ column="12"/>
</issue>
<issue
@@ -5341,7 +6491,9 @@
errorLine1=" public void setButtonClickListener(View.OnClickListener clickListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="150"
+ column="40"/>
</issue>
<issue
@@ -5350,7 +6502,9 @@
errorLine1=" public View.OnClickListener getButtonClickListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="158"
+ column="12"/>
</issue>
<issue
@@ -5359,7 +6513,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="163"
+ column="12"/>
</issue>
<issue
@@ -5368,7 +6524,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="163"
+ column="30"/>
</issue>
<issue
@@ -5377,7 +6535,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="163"
+ column="55"/>
</issue>
<issue
@@ -5386,7 +6546,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorFragment.java"
+ line="164"
+ column="13"/>
</issue>
<issue
@@ -5395,7 +6557,9 @@
errorLine1=" public void setBackgroundDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="71"
+ column="39"/>
</issue>
<issue
@@ -5404,7 +6568,9 @@
errorLine1=" public Drawable getBackgroundDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="85"
+ column="12"/>
</issue>
<issue
@@ -5413,7 +6579,9 @@
errorLine1=" public void setImageDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="94"
+ column="34"/>
</issue>
<issue
@@ -5422,7 +6590,9 @@
errorLine1=" public Drawable getImageDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="102"
+ column="12"/>
</issue>
<issue
@@ -5431,7 +6601,9 @@
errorLine1=" public void setMessage(CharSequence message) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="111"
+ column="28"/>
</issue>
<issue
@@ -5440,7 +6612,9 @@
errorLine1=" public CharSequence getMessage() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="119"
+ column="12"/>
</issue>
<issue
@@ -5449,7 +6623,9 @@
errorLine1=" public void setButtonText(String text) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="128"
+ column="31"/>
</issue>
<issue
@@ -5458,7 +6634,9 @@
errorLine1=" public String getButtonText() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="136"
+ column="12"/>
</issue>
<issue
@@ -5467,7 +6645,9 @@
errorLine1=" public void setButtonClickListener(View.OnClickListener clickListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="145"
+ column="40"/>
</issue>
<issue
@@ -5476,7 +6656,9 @@
errorLine1=" public View.OnClickListener getButtonClickListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="153"
+ column="12"/>
</issue>
<issue
@@ -5485,7 +6667,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="158"
+ column="12"/>
</issue>
<issue
@@ -5494,7 +6678,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="158"
+ column="30"/>
</issue>
<issue
@@ -5503,7 +6689,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="158"
+ column="55"/>
</issue>
<issue
@@ -5512,7 +6700,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/ErrorSupportFragment.java"
+ line="159"
+ column="13"/>
</issue>
<issue
@@ -5521,7 +6711,9 @@
errorLine1=" public FadeAndShortSlide(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="163"
+ column="30"/>
</issue>
<issue
@@ -5530,7 +6722,9 @@
errorLine1=" public FadeAndShortSlide(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="163"
+ column="47"/>
</issue>
<issue
@@ -5539,7 +6733,9 @@
errorLine1=" public void setEpicenterCallback(EpicenterCallback epicenterCallback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="172"
+ column="38"/>
</issue>
<issue
@@ -5548,7 +6744,9 @@
errorLine1=" public void captureStartValues(TransitionValues transitionValues) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="185"
+ column="36"/>
</issue>
<issue
@@ -5557,7 +6755,9 @@
errorLine1=" public void captureEndValues(TransitionValues transitionValues) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="192"
+ column="34"/>
</issue>
<issue
@@ -5566,7 +6766,9 @@
errorLine1=" public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
errorLine2=" ~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="224"
+ column="12"/>
</issue>
<issue
@@ -5575,7 +6777,9 @@
errorLine1=" public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
errorLine2=" ~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="224"
+ column="30"/>
</issue>
<issue
@@ -5584,7 +6788,9 @@
errorLine1=" public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
errorLine2=" ~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="224"
+ column="51"/>
</issue>
<issue
@@ -5593,7 +6799,9 @@
errorLine1=" public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="224"
+ column="62"/>
</issue>
<issue
@@ -5602,7 +6810,9 @@
errorLine1=" TransitionValues endValues) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="225"
+ column="13"/>
</issue>
<issue
@@ -5611,7 +6821,9 @@
errorLine1=" public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
errorLine2=" ~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="255"
+ column="12"/>
</issue>
<issue
@@ -5620,7 +6832,9 @@
errorLine1=" public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
errorLine2=" ~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="255"
+ column="33"/>
</issue>
<issue
@@ -5629,7 +6843,9 @@
errorLine1=" public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
errorLine2=" ~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="255"
+ column="54"/>
</issue>
<issue
@@ -5638,7 +6854,9 @@
errorLine1=" public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="255"
+ column="65"/>
</issue>
<issue
@@ -5647,7 +6865,9 @@
errorLine1=" TransitionValues endValues) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="256"
+ column="13"/>
</issue>
<issue
@@ -5656,7 +6876,9 @@
errorLine1=" public Transition addListener(TransitionListener listener) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="287"
+ column="12"/>
</issue>
<issue
@@ -5665,7 +6887,9 @@
errorLine1=" public Transition addListener(TransitionListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="287"
+ column="35"/>
</issue>
<issue
@@ -5674,7 +6898,9 @@
errorLine1=" public Transition removeListener(TransitionListener listener) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="293"
+ column="12"/>
</issue>
<issue
@@ -5683,7 +6909,9 @@
errorLine1=" public Transition removeListener(TransitionListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="293"
+ column="38"/>
</issue>
<issue
@@ -5692,7 +6920,9 @@
errorLine1=" public Transition clone() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="api21/androidx/leanback/transition/FadeAndShortSlide.java"/>
+ file="api21/androidx/leanback/transition/FadeAndShortSlide.java"
+ line="316"
+ column="12"/>
</issue>
<issue
@@ -5701,7 +6931,9 @@
errorLine1=" public ConstantState getConstantState() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+ line="85"
+ column="12"/>
</issue>
<issue
@@ -5710,7 +6942,9 @@
errorLine1=" public Drawable mutate() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+ line="90"
+ column="12"/>
</issue>
<issue
@@ -5719,7 +6953,9 @@
errorLine1=" public void setBitmap(Bitmap bitmap) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+ line="101"
+ column="27"/>
</issue>
<issue
@@ -5728,7 +6964,9 @@
errorLine1=" public Bitmap getBitmap() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+ line="114"
+ column="12"/>
</issue>
<issue
@@ -5737,7 +6975,9 @@
errorLine1=" public void setSource(Rect source) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+ line="121"
+ column="27"/>
</issue>
<issue
@@ -5746,7 +6986,9 @@
errorLine1=" public Rect getSource() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+ line="128"
+ column="12"/>
</issue>
<issue
@@ -5755,7 +6997,9 @@
errorLine1=" public void draw(Canvas canvas) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+ line="151"
+ column="22"/>
</issue>
<issue
@@ -5764,7 +7008,9 @@
errorLine1=" public void setColorFilter(ColorFilter colorFilter) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"/>
+ file="src/main/java/androidx/leanback/graphics/FitWidthBitmapDrawable.java"
+ line="186"
+ column="32"/>
</issue>
<issue
@@ -5773,7 +7019,9 @@
errorLine1=" public static void setupBrowseItemFocusHighlight(ItemBridgeAdapter adapter, int zoomIndex,"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"
+ line="201"
+ column="54"/>
</issue>
<issue
@@ -5782,7 +7030,9 @@
errorLine1=" public static void setupHeaderItemFocusHighlight(VerticalGridView gridView) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"
+ line="220"
+ column="54"/>
</issue>
<issue
@@ -5791,7 +7041,9 @@
errorLine1=" public static void setupHeaderItemFocusHighlight(VerticalGridView gridView,"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"
+ line="234"
+ column="54"/>
</issue>
<issue
@@ -5800,7 +7052,9 @@
errorLine1=" public static void setupHeaderItemFocusHighlight(ItemBridgeAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"
+ line="251"
+ column="54"/>
</issue>
<issue
@@ -5809,7 +7063,9 @@
errorLine1=" public static void setupHeaderItemFocusHighlight(ItemBridgeAdapter adapter,"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/FocusHighlightHelper.java"
+ line="264"
+ column="54"/>
</issue>
<issue
@@ -5818,7 +7074,9 @@
errorLine1=" public void onBindLogo(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="104"
+ column="32"/>
</issue>
<issue
@@ -5827,7 +7085,9 @@
errorLine1=" protected DetailsOverviewRow.Listener createRowListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="164"
+ column="19"/>
</issue>
<issue
@@ -5836,7 +7096,9 @@
errorLine1=" public void onImageDrawableChanged(DetailsOverviewRow row) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="170"
+ column="48"/>
</issue>
<issue
@@ -5845,7 +7107,9 @@
errorLine1=" public void onItemChanged(DetailsOverviewRow row) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="176"
+ column="39"/>
</issue>
<issue
@@ -5854,7 +7118,9 @@
errorLine1=" public void onActionsAdapterChanged(DetailsOverviewRow row) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="184"
+ column="49"/>
</issue>
<issue
@@ -5863,7 +7129,9 @@
errorLine1=" public ViewHolder(View rootView, Presenter detailsPresenter,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="311"
+ column="27"/>
</issue>
<issue
@@ -5872,7 +7140,9 @@
errorLine1=" public ViewHolder(View rootView, Presenter detailsPresenter,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="311"
+ column="42"/>
</issue>
<issue
@@ -5881,7 +7151,9 @@
errorLine1=" DetailsOverviewLogoPresenter logoPresenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="312"
+ column="17"/>
</issue>
<issue
@@ -5890,7 +7162,9 @@
errorLine1=" public final ViewGroup getOverviewView() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="340"
+ column="22"/>
</issue>
<issue
@@ -5899,7 +7173,9 @@
errorLine1=" public final DetailsOverviewLogoPresenter.ViewHolder getLogoViewHolder() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="347"
+ column="22"/>
</issue>
<issue
@@ -5908,7 +7184,9 @@
errorLine1=" public final Presenter.ViewHolder getDetailsDescriptionViewHolder() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="354"
+ column="22"/>
</issue>
<issue
@@ -5917,7 +7195,9 @@
errorLine1=" public final ViewGroup getDetailsDescriptionFrame() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="361"
+ column="22"/>
</issue>
<issue
@@ -5926,7 +7206,9 @@
errorLine1=" public final ViewGroup getActionsRow() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="368"
+ column="22"/>
</issue>
<issue
@@ -5935,7 +7217,9 @@
errorLine1=" public FullWidthDetailsOverviewRowPresenter(Presenter detailsPresenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="403"
+ column="49"/>
</issue>
<issue
@@ -5944,7 +7228,9 @@
errorLine1=" public FullWidthDetailsOverviewRowPresenter(Presenter detailsPresenter,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="414"
+ column="49"/>
</issue>
<issue
@@ -5953,7 +7239,9 @@
errorLine1=" DetailsOverviewLogoPresenter logoPresenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="415"
+ column="13"/>
</issue>
<issue
@@ -5962,7 +7250,9 @@
errorLine1=" public void setOnActionClickedListener(OnActionClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="425"
+ column="44"/>
</issue>
<issue
@@ -5971,7 +7261,9 @@
errorLine1=" public OnActionClickedListener getOnActionClickedListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="432"
+ column="12"/>
</issue>
<issue
@@ -5980,7 +7272,9 @@
errorLine1=" public final void setListener(Listener listener) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="524"
+ column="35"/>
</issue>
<issue
@@ -5989,7 +7283,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="536"
+ column="15"/>
</issue>
<issue
@@ -5998,7 +7294,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="536"
+ column="59"/>
</issue>
<issue
@@ -6007,7 +7305,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="571"
+ column="40"/>
</issue>
<issue
@@ -6016,7 +7316,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="571"
+ column="72"/>
</issue>
<issue
@@ -6025,7 +7327,9 @@
errorLine1=" protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="583"
+ column="42"/>
</issue>
<issue
@@ -6034,7 +7338,9 @@
errorLine1=" protected void onSelectLevelChanged(RowPresenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="597"
+ column="41"/>
</issue>
<issue
@@ -6043,7 +7349,9 @@
errorLine1=" protected void onRowViewAttachedToWindow(RowPresenter.ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="607"
+ column="46"/>
</issue>
<issue
@@ -6052,7 +7360,9 @@
errorLine1=" protected void onRowViewDetachedFromWindow(RowPresenter.ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="615"
+ column="48"/>
</issue>
<issue
@@ -6061,7 +7371,9 @@
errorLine1=" public final void notifyOnBindLogo(ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="627"
+ column="40"/>
</issue>
<issue
@@ -6070,7 +7382,9 @@
errorLine1=" protected void onLayoutLogo(ViewHolder viewHolder, int oldState, boolean logoChanged) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="642"
+ column="33"/>
</issue>
<issue
@@ -6079,7 +7393,9 @@
errorLine1=" protected void onLayoutOverviewFrame(ViewHolder viewHolder, int oldState, boolean logoChanged) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="686"
+ column="42"/>
</issue>
<issue
@@ -6088,7 +7404,9 @@
errorLine1=" public final void setState(ViewHolder viewHolder, int state) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="751"
+ column="32"/>
</issue>
<issue
@@ -6097,7 +7415,9 @@
errorLine1=" protected void onStateChanged(ViewHolder viewHolder, int oldState) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="766"
+ column="35"/>
</issue>
<issue
@@ -6106,7 +7426,9 @@
errorLine1=" public void setEntranceTransitionState(RowPresenter.ViewHolder holder,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewRowPresenter.java"
+ line="772"
+ column="44"/>
</issue>
<issue
@@ -6115,7 +7437,9 @@
errorLine1=" public void setSharedElementEnterTransition(Activity activity, String sharedElementName) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"
+ line="72"
+ column="49"/>
</issue>
<issue
@@ -6124,7 +7448,9 @@
errorLine1=" public void setSharedElementEnterTransition(Activity activity, String sharedElementName) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"
+ line="72"
+ column="68"/>
</issue>
<issue
@@ -6133,7 +7459,9 @@
errorLine1=" public void setSharedElementEnterTransition(Activity activity, String sharedElementName,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"
+ line="76"
+ column="49"/>
</issue>
<issue
@@ -6142,7 +7470,9 @@
errorLine1=" public void setSharedElementEnterTransition(Activity activity, String sharedElementName,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"
+ line="76"
+ column="68"/>
</issue>
<issue
@@ -6151,7 +7481,9 @@
errorLine1=" public void onBindLogo(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"/>
+ file="src/main/java/androidx/leanback/widget/FullWidthDetailsOverviewSharedElementHelper.java"
+ line="120"
+ column="28"/>
</issue>
<issue
@@ -6160,7 +7492,9 @@
errorLine1=" public Guidance(String title, String description, String breadcrumb, Drawable icon) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="92"
+ column="25"/>
</issue>
<issue
@@ -6169,7 +7503,9 @@
errorLine1=" public Guidance(String title, String description, String breadcrumb, Drawable icon) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="92"
+ column="39"/>
</issue>
<issue
@@ -6178,7 +7514,9 @@
errorLine1=" public Guidance(String title, String description, String breadcrumb, Drawable icon) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="92"
+ column="59"/>
</issue>
<issue
@@ -6187,7 +7525,9 @@
errorLine1=" public Guidance(String title, String description, String breadcrumb, Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="92"
+ column="78"/>
</issue>
<issue
@@ -6196,7 +7536,9 @@
errorLine1=" public String getTitle() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="103"
+ column="16"/>
</issue>
<issue
@@ -6205,7 +7547,9 @@
errorLine1=" public String getDescription() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="111"
+ column="16"/>
</issue>
<issue
@@ -6214,7 +7558,9 @@
errorLine1=" public String getBreadcrumb() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="119"
+ column="16"/>
</issue>
<issue
@@ -6223,7 +7569,9 @@
errorLine1=" public Drawable getIconDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="127"
+ column="16"/>
</issue>
<issue
@@ -6232,7 +7580,9 @@
errorLine1=" public View onCreateView("
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="150"
+ column="12"/>
</issue>
<issue
@@ -6241,7 +7591,9 @@
errorLine1=" final LayoutInflater inflater, ViewGroup container, Guidance guidance) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="151"
+ column="19"/>
</issue>
<issue
@@ -6250,7 +7602,9 @@
errorLine1=" final LayoutInflater inflater, ViewGroup container, Guidance guidance) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="151"
+ column="44"/>
</issue>
<issue
@@ -6259,7 +7613,9 @@
errorLine1=" final LayoutInflater inflater, ViewGroup container, Guidance guidance) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="151"
+ column="65"/>
</issue>
<issue
@@ -6268,7 +7624,9 @@
errorLine1=" public TextView getTitleView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="229"
+ column="12"/>
</issue>
<issue
@@ -6277,7 +7635,9 @@
errorLine1=" public TextView getDescriptionView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="237"
+ column="12"/>
</issue>
<issue
@@ -6286,7 +7646,9 @@
errorLine1=" public TextView getBreadcrumbView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="245"
+ column="12"/>
</issue>
<issue
@@ -6295,7 +7657,9 @@
errorLine1=" public ImageView getIconView() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidanceStylist.java"
+ line="253"
+ column="12"/>
</issue>
<issue
@@ -6304,7 +7668,9 @@
errorLine1=" public BuilderBase(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="145"
+ column="28"/>
</issue>
<issue
@@ -6313,7 +7679,9 @@
errorLine1=" public Context getContext() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="154"
+ column="16"/>
</issue>
<issue
@@ -6322,7 +7690,9 @@
errorLine1=" protected final void applyValues(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="166"
+ column="42"/>
</issue>
<issue
@@ -6331,7 +7701,9 @@
errorLine1=" public B title(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="234"
+ column="24"/>
</issue>
<issue
@@ -6340,7 +7712,9 @@
errorLine1=" public B editTitle(CharSequence editTitle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="254"
+ column="28"/>
</issue>
<issue
@@ -6349,7 +7723,9 @@
errorLine1=" public B description(CharSequence description) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="275"
+ column="30"/>
</issue>
<issue
@@ -6358,7 +7734,9 @@
errorLine1=" public B editDescription(CharSequence description) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="295"
+ column="34"/>
</issue>
<issue
@@ -6367,7 +7745,9 @@
errorLine1=" public B intent(Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="316"
+ column="25"/>
</issue>
<issue
@@ -6376,7 +7756,9 @@
errorLine1=" public B icon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="325"
+ column="23"/>
</issue>
<issue
@@ -6385,7 +7767,9 @@
errorLine1=" public B iconResourceId(@DrawableRes int iconResourceId, Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="339"
+ column="66"/>
</issue>
<issue
@@ -6394,7 +7778,9 @@
errorLine1=" public B subActions(List<GuidedAction> subActions) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="533"
+ column="29"/>
</issue>
<issue
@@ -6403,7 +7789,9 @@
errorLine1=" public B autofillHints(String... hints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="555"
+ column="32"/>
</issue>
<issue
@@ -6412,7 +7800,9 @@
errorLine1=" public Builder(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="578"
+ column="24"/>
</issue>
<issue
@@ -6421,7 +7811,9 @@
errorLine1=" public GuidedAction build() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="586"
+ column="16"/>
</issue>
<issue
@@ -6430,7 +7822,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="630"
+ column="12"/>
</issue>
<issue
@@ -6439,7 +7833,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="638"
+ column="26"/>
</issue>
<issue
@@ -6448,7 +7844,9 @@
errorLine1=" public CharSequence getEditTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="647"
+ column="12"/>
</issue>
<issue
@@ -6457,7 +7855,9 @@
errorLine1=" public void setEditTitle(CharSequence editTitle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="655"
+ column="30"/>
</issue>
<issue
@@ -6466,7 +7866,9 @@
errorLine1=" public CharSequence getEditDescription() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="664"
+ column="12"/>
</issue>
<issue
@@ -6475,7 +7877,9 @@
errorLine1=" public void setEditDescription(CharSequence editDescription) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="673"
+ column="36"/>
</issue>
<issue
@@ -6484,7 +7888,9 @@
errorLine1=" public CharSequence getDescription() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="690"
+ column="12"/>
</issue>
<issue
@@ -6493,7 +7899,9 @@
errorLine1=" public void setDescription(CharSequence description) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="698"
+ column="32"/>
</issue>
<issue
@@ -6502,7 +7910,9 @@
errorLine1=" public Intent getIntent() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="706"
+ column="12"/>
</issue>
<issue
@@ -6511,7 +7921,9 @@
errorLine1=" public void setIntent(Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="714"
+ column="27"/>
</issue>
<issue
@@ -6520,7 +7932,9 @@
errorLine1=" public String[] getAutofillHints() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="856"
+ column="12"/>
</issue>
<issue
@@ -6529,7 +7943,9 @@
errorLine1=" public void setSubActions(List<GuidedAction> actions) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="884"
+ column="31"/>
</issue>
<issue
@@ -6538,7 +7954,9 @@
errorLine1=" public List<GuidedAction> getSubActions() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="891"
+ column="12"/>
</issue>
<issue
@@ -6547,7 +7965,9 @@
errorLine1=" public void onSaveInstanceState(Bundle bundle, String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="932"
+ column="37"/>
</issue>
<issue
@@ -6556,7 +7976,9 @@
errorLine1=" public void onSaveInstanceState(Bundle bundle, String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="932"
+ column="52"/>
</issue>
<issue
@@ -6565,7 +7987,9 @@
errorLine1=" public void onRestoreInstanceState(Bundle bundle, String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="954"
+ column="40"/>
</issue>
<issue
@@ -6574,7 +7998,9 @@
errorLine1=" public void onRestoreInstanceState(Bundle bundle, String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedAction.java"
+ line="954"
+ column="55"/>
</issue>
<issue
@@ -6583,7 +8009,9 @@
errorLine1=" void onGuidedActionClicked(GuidedAction action);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="60"
+ column="36"/>
</issue>
<issue
@@ -6592,7 +8020,9 @@
errorLine1=" void onGuidedActionFocused(GuidedAction action);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="72"
+ column="36"/>
</issue>
<issue
@@ -6601,7 +8031,9 @@
errorLine1=" void onGuidedActionEditCanceled(GuidedAction action);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="83"
+ column="41"/>
</issue>
<issue
@@ -6610,7 +8042,9 @@
errorLine1=" long onGuidedActionEditedAndProceed(GuidedAction action);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="88"
+ column="45"/>
</issue>
<issue
@@ -6619,7 +8053,9 @@
errorLine1=" public GuidedActionAdapter(List<GuidedAction> actions, ClickListener clickListener,"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="144"
+ column="32"/>
</issue>
<issue
@@ -6628,7 +8064,9 @@
errorLine1=" public GuidedActionAdapter(List<GuidedAction> actions, ClickListener clickListener,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="144"
+ column="60"/>
</issue>
<issue
@@ -6637,7 +8075,9 @@
errorLine1=" FocusListener focusListener, GuidedActionsStylist presenter, boolean isSubAdapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="145"
+ column="13"/>
</issue>
<issue
@@ -6646,7 +8086,9 @@
errorLine1=" FocusListener focusListener, GuidedActionsStylist presenter, boolean isSubAdapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="145"
+ column="42"/>
</issue>
<issue
@@ -6655,7 +8097,9 @@
errorLine1=" public void setDiffCallback(DiffCallback<GuidedAction> diffCallback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="169"
+ column="33"/>
</issue>
<issue
@@ -6664,7 +8108,9 @@
errorLine1=" public void setActions(final List<GuidedAction> actions) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="178"
+ column="34"/>
</issue>
<issue
@@ -6673,7 +8119,9 @@
errorLine1=" public GuidedAction getItem(int position) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="245"
+ column="12"/>
</issue>
<issue
@@ -6682,7 +8130,9 @@
errorLine1=" public int indexOf(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="254"
+ column="24"/>
</issue>
<issue
@@ -6691,7 +8141,9 @@
errorLine1=" public GuidedActionsStylist getGuidedActionsStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="261"
+ column="12"/>
</issue>
<issue
@@ -6700,7 +8152,9 @@
errorLine1=" public void setClickListener(ClickListener clickListener) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="269"
+ column="34"/>
</issue>
<issue
@@ -6709,7 +8163,9 @@
errorLine1=" public void setFocusListener(FocusListener focusListener) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="277"
+ column="34"/>
</issue>
<issue
@@ -6718,7 +8174,9 @@
errorLine1=" public List<GuidedAction> getActions() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="286"
+ column="12"/>
</issue>
<issue
@@ -6727,7 +8185,9 @@
errorLine1=" public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="302"
+ column="12"/>
</issue>
<issue
@@ -6736,7 +8196,9 @@
errorLine1=" public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="302"
+ column="42"/>
</issue>
<issue
@@ -6745,7 +8207,9 @@
errorLine1=" public void onBindViewHolder(ViewHolder holder, int position) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="333"
+ column="34"/>
</issue>
<issue
@@ -6754,7 +8218,9 @@
errorLine1=" public GuidedActionsStylist.ViewHolder findSubChildViewHolder(View v) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="400"
+ column="12"/>
</issue>
<issue
@@ -6763,7 +8229,9 @@
errorLine1=" public GuidedActionsStylist.ViewHolder findSubChildViewHolder(View v) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="400"
+ column="67"/>
</issue>
<issue
@@ -6772,7 +8240,9 @@
errorLine1=" public void handleCheckedActions(GuidedActionsStylist.ViewHolder avh) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="416"
+ column="38"/>
</issue>
<issue
@@ -6781,7 +8251,9 @@
errorLine1=" public void performOnActionClick(GuidedActionsStylist.ViewHolder avh) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapter.java"
+ line="449"
+ column="38"/>
</issue>
<issue
@@ -6790,7 +8262,9 @@
errorLine1=" public void addAdpter(GuidedActionAdapter adapter1, GuidedActionAdapter adapter2) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+ line="46"
+ column="27"/>
</issue>
<issue
@@ -6799,7 +8273,9 @@
errorLine1=" public void addAdpter(GuidedActionAdapter adapter1, GuidedActionAdapter adapter2) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+ line="46"
+ column="57"/>
</issue>
<issue
@@ -6808,7 +8284,9 @@
errorLine1=" public GuidedActionAdapter getNextAdapter(GuidedActionAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+ line="56"
+ column="12"/>
</issue>
<issue
@@ -6817,7 +8295,9 @@
errorLine1=" public GuidedActionAdapter getNextAdapter(GuidedActionAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+ line="56"
+ column="47"/>
</issue>
<issue
@@ -6826,7 +8306,9 @@
errorLine1=" public void setEditListener(EditListener listener) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+ line="66"
+ column="33"/>
</issue>
<issue
@@ -6835,7 +8317,9 @@
errorLine1=" public void openIme(GuidedActionAdapter adapter, GuidedActionsStylist.ViewHolder avh) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+ line="122"
+ column="25"/>
</issue>
<issue
@@ -6844,7 +8328,9 @@
errorLine1=" public void openIme(GuidedActionAdapter adapter, GuidedActionsStylist.ViewHolder avh) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+ line="122"
+ column="54"/>
</issue>
<issue
@@ -6853,7 +8339,9 @@
errorLine1=" public void closeIme(View v) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+ line="141"
+ column="26"/>
</issue>
<issue
@@ -6862,7 +8350,9 @@
errorLine1=" public void fillAndStay(GuidedActionAdapter adapter, TextView v) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+ line="151"
+ column="29"/>
</issue>
<issue
@@ -6871,7 +8361,9 @@
errorLine1=" public void fillAndStay(GuidedActionAdapter adapter, TextView v) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+ line="151"
+ column="58"/>
</issue>
<issue
@@ -6880,7 +8372,9 @@
errorLine1=" public void fillAndGoNext(GuidedActionAdapter adapter, TextView v) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+ line="160"
+ column="31"/>
</issue>
<issue
@@ -6889,7 +8383,9 @@
errorLine1=" public void fillAndGoNext(GuidedActionAdapter adapter, TextView v) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAdapterGroup.java"
+ line="160"
+ column="60"/>
</issue>
<issue
@@ -6898,7 +8394,9 @@
errorLine1=" void onAutofill(View view);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAutofillSupport.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAutofillSupport.java"
+ line="63"
+ column="25"/>
</issue>
<issue
@@ -6907,7 +8405,9 @@
errorLine1=" void setOnAutofillListener(OnAutofillListener listener);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionAutofillSupport.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionAutofillSupport.java"
+ line="70"
+ column="32"/>
</issue>
<issue
@@ -6916,7 +8416,9 @@
errorLine1=" public static GuidedActionDiffCallback getInstance() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionDiffCallback.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionDiffCallback.java"
+ line="34"
+ column="19"/>
</issue>
<issue
@@ -6925,7 +8427,9 @@
errorLine1=" public GuidedActionEditText(Context ctx) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+ line="77"
+ column="33"/>
</issue>
<issue
@@ -6934,7 +8438,9 @@
errorLine1=" public GuidedActionEditText(Context ctx, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+ line="81"
+ column="33"/>
</issue>
<issue
@@ -6943,7 +8449,9 @@
errorLine1=" public GuidedActionEditText(Context ctx, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+ line="81"
+ column="46"/>
</issue>
<issue
@@ -6952,7 +8460,9 @@
errorLine1=" public GuidedActionEditText(Context ctx, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+ line="85"
+ column="33"/>
</issue>
<issue
@@ -6961,7 +8471,9 @@
errorLine1=" public GuidedActionEditText(Context ctx, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+ line="85"
+ column="46"/>
</issue>
<issue
@@ -6970,7 +8482,9 @@
errorLine1=" public void setImeKeyListener(ImeKeyListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+ line="93"
+ column="35"/>
</issue>
<issue
@@ -6979,7 +8493,9 @@
errorLine1=" public boolean onKeyPreIme(int keyCode, KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+ line="98"
+ column="45"/>
</issue>
<issue
@@ -6988,7 +8504,9 @@
errorLine1=" public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+ line="110"
+ column="51"/>
</issue>
<issue
@@ -6997,7 +8515,9 @@
errorLine1=" protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+ line="116"
+ column="67"/>
</issue>
<issue
@@ -7006,7 +8526,9 @@
errorLine1=" public void setOnAutofillListener(OnAutofillListener autofillListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+ line="139"
+ column="39"/>
</issue>
<issue
@@ -7015,7 +8537,9 @@
errorLine1=" public void autofill(AutofillValue values) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+ line="144"
+ column="26"/>
</issue>
<issue
@@ -7024,7 +8548,9 @@
errorLine1=" public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionEditText.java"
+ line="156"
+ column="54"/>
</issue>
<issue
@@ -7033,7 +8559,9 @@
errorLine1=" public ViewHolder(View v) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="215"
+ column="27"/>
</issue>
<issue
@@ -7042,7 +8570,9 @@
errorLine1=" public ViewHolder(View v, boolean isSubAction) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="222"
+ column="27"/>
</issue>
<issue
@@ -7051,7 +8581,9 @@
errorLine1=" public View getContentView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="241"
+ column="16"/>
</issue>
<issue
@@ -7060,7 +8592,9 @@
errorLine1=" public TextView getTitleView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="248"
+ column="16"/>
</issue>
<issue
@@ -7069,7 +8603,9 @@
errorLine1=" public EditText getEditableTitleView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="256"
+ column="16"/>
</issue>
<issue
@@ -7078,7 +8614,9 @@
errorLine1=" public TextView getDescriptionView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="263"
+ column="16"/>
</issue>
<issue
@@ -7087,7 +8625,9 @@
errorLine1=" public EditText getEditableDescriptionView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="271"
+ column="16"/>
</issue>
<issue
@@ -7096,7 +8636,9 @@
errorLine1=" public ImageView getIconView() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="278"
+ column="16"/>
</issue>
<issue
@@ -7105,7 +8647,9 @@
errorLine1=" public ImageView getCheckmarkView() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="285"
+ column="16"/>
</issue>
<issue
@@ -7114,7 +8658,9 @@
errorLine1=" public ImageView getChevronView() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="292"
+ column="16"/>
</issue>
<issue
@@ -7123,7 +8669,9 @@
errorLine1=" public View getEditingView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="337"
+ column="16"/>
</issue>
<issue
@@ -7132,7 +8680,9 @@
errorLine1=" public GuidedAction getAction() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="362"
+ column="16"/>
</issue>
<issue
@@ -7141,7 +8691,9 @@
errorLine1=" public Object getFacet(Class<?> facetClass) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="374"
+ column="16"/>
</issue>
<issue
@@ -7150,7 +8702,9 @@
errorLine1=" public Object getFacet(Class<?> facetClass) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="374"
+ column="32"/>
</issue>
<issue
@@ -7159,7 +8713,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, final ViewGroup container) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="448"
+ column="12"/>
</issue>
<issue
@@ -7168,7 +8724,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, final ViewGroup container) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="448"
+ column="30"/>
</issue>
<issue
@@ -7177,7 +8735,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, final ViewGroup container) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="448"
+ column="61"/>
</issue>
<issue
@@ -7186,7 +8746,9 @@
errorLine1=" public VerticalGridView getActionsGridView() {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="558"
+ column="12"/>
</issue>
<issue
@@ -7195,7 +8757,9 @@
errorLine1=" public VerticalGridView getSubActionsGridView() {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="566"
+ column="12"/>
</issue>
<issue
@@ -7204,7 +8768,9 @@
errorLine1=" public int getItemViewType(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="592"
+ column="32"/>
</issue>
<issue
@@ -7213,7 +8779,9 @@
errorLine1=" public ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="656"
+ column="12"/>
</issue>
<issue
@@ -7222,7 +8790,9 @@
errorLine1=" public ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="656"
+ column="42"/>
</issue>
<issue
@@ -7231,7 +8801,9 @@
errorLine1=" public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="672"
+ column="12"/>
</issue>
<issue
@@ -7240,7 +8812,9 @@
errorLine1=" public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="672"
+ column="42"/>
</issue>
<issue
@@ -7249,7 +8823,9 @@
errorLine1=" public void onBindViewHolder(ViewHolder vh, GuidedAction action) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="687"
+ column="34"/>
</issue>
<issue
@@ -7258,7 +8834,9 @@
errorLine1=" public void onBindViewHolder(ViewHolder vh, GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="687"
+ column="49"/>
</issue>
<issue
@@ -7267,7 +8845,9 @@
errorLine1=" public void openInEditMode(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="772"
+ column="32"/>
</issue>
<issue
@@ -7276,7 +8856,9 @@
errorLine1=" protected void setupImeOptions(ViewHolder vh, GuidedAction action) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="806"
+ column="36"/>
</issue>
<issue
@@ -7285,7 +8867,9 @@
errorLine1=" protected void setupImeOptions(ViewHolder vh, GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="806"
+ column="51"/>
</issue>
<issue
@@ -7294,7 +8878,9 @@
errorLine1=" public void setEditingMode(ViewHolder vh, GuidedAction action, boolean editing) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="822"
+ column="32"/>
</issue>
<issue
@@ -7303,7 +8889,9 @@
errorLine1=" public void setEditingMode(ViewHolder vh, GuidedAction action, boolean editing) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="822"
+ column="47"/>
</issue>
<issue
@@ -7312,7 +8900,9 @@
errorLine1=" protected void onEditingModeChange(ViewHolder vh, GuidedAction action, boolean editing) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="842"
+ column="40"/>
</issue>
<issue
@@ -7321,7 +8911,9 @@
errorLine1=" protected void onEditingModeChange(ViewHolder vh, GuidedAction action, boolean editing) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="842"
+ column="55"/>
</issue>
<issue
@@ -7330,7 +8922,9 @@
errorLine1=" protected void onEditingModeChange(ViewHolder vh, boolean editing, boolean withTransition) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="854"
+ column="40"/>
</issue>
<issue
@@ -7339,7 +8933,9 @@
errorLine1=" public void onAnimateItemFocused(ViewHolder vh, boolean focused) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="918"
+ column="38"/>
</issue>
<issue
@@ -7348,7 +8944,9 @@
errorLine1=" public void onAnimateItemPressed(ViewHolder vh, boolean pressed) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="929"
+ column="38"/>
</issue>
<issue
@@ -7357,7 +8955,9 @@
errorLine1=" public void onAnimateItemPressedCancelled(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="937"
+ column="47"/>
</issue>
<issue
@@ -7366,7 +8966,9 @@
errorLine1=" public void onAnimateItemChecked(ViewHolder vh, boolean checked) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="950"
+ column="38"/>
</issue>
<issue
@@ -7375,7 +8977,9 @@
errorLine1=" public void onBindCheckMarkView(ViewHolder vh, GuidedAction action) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="971"
+ column="37"/>
</issue>
<issue
@@ -7384,7 +8988,9 @@
errorLine1=" public void onBindCheckMarkView(ViewHolder vh, GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="971"
+ column="52"/>
</issue>
<issue
@@ -7393,7 +8999,9 @@
errorLine1=" public void onBindActivatorView(ViewHolder vh, GuidedAction action) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="998"
+ column="37"/>
</issue>
<issue
@@ -7402,7 +9010,9 @@
errorLine1=" public void onBindActivatorView(ViewHolder vh, GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="998"
+ column="52"/>
</issue>
<issue
@@ -7411,7 +9021,9 @@
errorLine1=" public boolean onUpdateActivatorView(ViewHolder vh, GuidedAction action) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="1023"
+ column="42"/>
</issue>
<issue
@@ -7420,7 +9032,9 @@
errorLine1=" public boolean onUpdateActivatorView(ViewHolder vh, GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="1023"
+ column="57"/>
</issue>
<issue
@@ -7429,7 +9043,9 @@
errorLine1=" public void setEditListener(EditListener listener) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="1040"
+ column="33"/>
</issue>
<issue
@@ -7438,7 +9054,9 @@
errorLine1=" public void onBindChevronView(ViewHolder vh, GuidedAction action) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="1079"
+ column="35"/>
</issue>
<issue
@@ -7447,7 +9065,9 @@
errorLine1=" public void onBindChevronView(ViewHolder vh, GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="1079"
+ column="50"/>
</issue>
<issue
@@ -7456,7 +9076,9 @@
errorLine1=" public void setExpandedViewHolder(ViewHolder avh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="1109"
+ column="39"/>
</issue>
<issue
@@ -7465,7 +9087,9 @@
errorLine1=" public void startExpandedTransition(ViewHolder avh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="1139"
+ column="41"/>
</issue>
<issue
@@ -7474,7 +9098,9 @@
errorLine1=" public void expandAction(GuidedAction action, final boolean withTransition) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="1194"
+ column="30"/>
</issue>
<issue
@@ -7483,7 +9109,9 @@
errorLine1=" public GuidedAction getExpandedAction() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="1391"
+ column="12"/>
</issue>
<issue
@@ -7492,7 +9120,9 @@
errorLine1=" public void onUpdateExpandedViewHolder(ViewHolder avh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedActionsStylist.java"
+ line="1400"
+ column="44"/>
</issue>
<issue
@@ -7501,7 +9131,9 @@
errorLine1=" public BuilderBase(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+ line="45"
+ column="28"/>
</issue>
<issue
@@ -7510,7 +9142,9 @@
errorLine1=" public B datePickerFormat(String format) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+ line="59"
+ column="35"/>
</issue>
<issue
@@ -7519,7 +9153,9 @@
errorLine1=" protected final void applyDatePickerValues(GuidedDatePickerAction action) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+ line="98"
+ column="52"/>
</issue>
<issue
@@ -7528,7 +9164,9 @@
errorLine1=" public Builder(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+ line="115"
+ column="24"/>
</issue>
<issue
@@ -7537,7 +9175,9 @@
errorLine1=" public GuidedDatePickerAction build() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+ line="123"
+ column="16"/>
</issue>
<issue
@@ -7546,7 +9186,9 @@
errorLine1=" public String getDatePickerFormat() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+ line="142"
+ column="12"/>
</issue>
<issue
@@ -7555,7 +9197,9 @@
errorLine1=" public void onSaveInstanceState(Bundle bundle, String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+ line="183"
+ column="37"/>
</issue>
<issue
@@ -7564,7 +9208,9 @@
errorLine1=" public void onSaveInstanceState(Bundle bundle, String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+ line="183"
+ column="52"/>
</issue>
<issue
@@ -7573,7 +9219,9 @@
errorLine1=" public void onRestoreInstanceState(Bundle bundle, String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+ line="188"
+ column="40"/>
</issue>
<issue
@@ -7582,7 +9230,9 @@
errorLine1=" public void onRestoreInstanceState(Bundle bundle, String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"/>
+ file="src/main/java/androidx/leanback/widget/GuidedDatePickerAction.java"
+ line="188"
+ column="55"/>
</issue>
<issue
@@ -7591,7 +9241,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="254"
+ column="16"/>
</issue>
<issue
@@ -7600,7 +9252,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="254"
+ column="34"/>
</issue>
<issue
@@ -7609,7 +9263,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="254"
+ column="59"/>
</issue>
<issue
@@ -7618,7 +9274,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="255"
+ column="17"/>
</issue>
<issue
@@ -7627,7 +9285,9 @@
errorLine1=" public GuidanceStylist onCreateGuidanceStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="283"
+ column="12"/>
</issue>
<issue
@@ -7636,7 +9296,9 @@
errorLine1=" public GuidedActionsStylist onCreateActionsStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="292"
+ column="12"/>
</issue>
<issue
@@ -7645,7 +9307,9 @@
errorLine1=" public GuidedActionsStylist onCreateButtonActionsStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="301"
+ column="12"/>
</issue>
<issue
@@ -7654,7 +9318,9 @@
errorLine1=" public @NonNull Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="325"
+ column="47"/>
</issue>
<issue
@@ -7663,7 +9329,9 @@
errorLine1=" public void onCreateActions(@NonNull List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="335"
+ column="70"/>
</issue>
<issue
@@ -7672,7 +9340,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="345"
+ column="13"/>
</issue>
<issue
@@ -7681,7 +9351,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="353"
+ column="39"/>
</issue>
<issue
@@ -7690,7 +9362,9 @@
errorLine1=" public boolean onSubGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="363"
+ column="45"/>
</issue>
<issue
@@ -7699,7 +9373,9 @@
errorLine1=" public void expandSubActions(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="387"
+ column="34"/>
</issue>
<issue
@@ -7708,7 +9384,9 @@
errorLine1=" public void expandAction(GuidedAction action, boolean withTransition) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="402"
+ column="30"/>
</issue>
<issue
@@ -7717,7 +9395,9 @@
errorLine1=" public void onGuidedActionFocused(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="430"
+ column="39"/>
</issue>
<issue
@@ -7726,7 +9406,9 @@
errorLine1=" public void onGuidedActionEdited(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="440"
+ column="38"/>
</issue>
<issue
@@ -7735,7 +9417,9 @@
errorLine1=" public void onGuidedActionEditCanceled(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="449"
+ column="44"/>
</issue>
<issue
@@ -7744,7 +9428,9 @@
errorLine1=" public long onGuidedActionEditedAndProceed(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="462"
+ column="48"/>
</issue>
<issue
@@ -7753,7 +9439,9 @@
errorLine1=" public static int add(FragmentManager fragmentManager, GuidedStepFragment fragment) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="484"
+ column="27"/>
</issue>
<issue
@@ -7762,7 +9450,9 @@
errorLine1=" public static int add(FragmentManager fragmentManager, GuidedStepFragment fragment) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="484"
+ column="60"/>
</issue>
<issue
@@ -7771,7 +9461,9 @@
errorLine1=" public static int add(FragmentManager fragmentManager, GuidedStepFragment fragment, int id) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="508"
+ column="27"/>
</issue>
<issue
@@ -7780,7 +9472,9 @@
errorLine1=" public static int add(FragmentManager fragmentManager, GuidedStepFragment fragment, int id) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="508"
+ column="60"/>
</issue>
<issue
@@ -7789,7 +9483,9 @@
errorLine1=" protected void onAddSharedElementTransition(FragmentTransaction ft, GuidedStepFragment"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="541"
+ column="49"/>
</issue>
<issue
@@ -7798,7 +9494,9 @@
errorLine1=" protected void onAddSharedElementTransition(FragmentTransaction ft, GuidedStepFragment"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="541"
+ column="73"/>
</issue>
<issue
@@ -7807,7 +9505,9 @@
errorLine1=" public static int addAsRoot(Activity activity, GuidedStepFragment fragment, int id) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="648"
+ column="33"/>
</issue>
<issue
@@ -7816,7 +9516,9 @@
errorLine1=" public static int addAsRoot(Activity activity, GuidedStepFragment fragment, int id) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="648"
+ column="52"/>
</issue>
<issue
@@ -7825,7 +9527,9 @@
errorLine1=" public static GuidedStepFragment getCurrentGuidedStepFragment(FragmentManager fm) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="666"
+ column="19"/>
</issue>
<issue
@@ -7834,7 +9538,9 @@
errorLine1=" public static GuidedStepFragment getCurrentGuidedStepFragment(FragmentManager fm) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="666"
+ column="67"/>
</issue>
<issue
@@ -7843,7 +9549,9 @@
errorLine1=" public GuidanceStylist getGuidanceStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="678"
+ column="12"/>
</issue>
<issue
@@ -7852,7 +9560,9 @@
errorLine1=" public GuidedActionsStylist getGuidedActionsStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="686"
+ column="12"/>
</issue>
<issue
@@ -7861,7 +9571,9 @@
errorLine1=" public List<GuidedAction> getButtonActions() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="694"
+ column="12"/>
</issue>
<issue
@@ -7870,7 +9582,9 @@
errorLine1=" public GuidedAction findButtonActionById(long id) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="703"
+ column="12"/>
</issue>
<issue
@@ -7879,7 +9593,9 @@
errorLine1=" public GuidedActionsStylist getGuidedButtonActionsStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="728"
+ column="12"/>
</issue>
<issue
@@ -7888,7 +9604,9 @@
errorLine1=" public void setButtonActions(List<GuidedAction> actions) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="736"
+ column="34"/>
</issue>
<issue
@@ -7897,7 +9615,9 @@
errorLine1=" public View getButtonActionItemView(int position) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="760"
+ column="12"/>
</issue>
<issue
@@ -7906,7 +9626,9 @@
errorLine1=" public List<GuidedAction> getActions() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="786"
+ column="12"/>
</issue>
<issue
@@ -7915,7 +9637,9 @@
errorLine1=" public GuidedAction findActionById(long id) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="795"
+ column="12"/>
</issue>
<issue
@@ -7924,7 +9648,9 @@
errorLine1=" public void setActions(List<GuidedAction> actions) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="822"
+ column="28"/>
</issue>
<issue
@@ -7933,7 +9659,9 @@
errorLine1=" public void setActionsDiffCallback(DiffCallback<GuidedAction> diffCallback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="837"
+ column="40"/>
</issue>
<issue
@@ -7942,7 +9670,9 @@
errorLine1=" public View getActionItemView(int position) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="858"
+ column="12"/>
</issue>
<issue
@@ -7951,7 +9681,9 @@
errorLine1=" public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="967"
+ column="12"/>
</issue>
<issue
@@ -7960,7 +9692,9 @@
errorLine1=" public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="967"
+ column="40"/>
</issue>
<issue
@@ -7969,7 +9703,9 @@
errorLine1=" public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="967"
+ column="65"/>
</issue>
<issue
@@ -7978,7 +9714,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="968"
+ column="13"/>
</issue>
<issue
@@ -7987,7 +9725,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="1021"
+ column="26"/>
</issue>
<issue
@@ -7996,7 +9736,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="1066"
+ column="12"/>
</issue>
<issue
@@ -8005,7 +9747,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="1066"
+ column="30"/>
</issue>
<issue
@@ -8014,7 +9758,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="1066"
+ column="55"/>
</issue>
<issue
@@ -8023,7 +9769,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="1067"
+ column="13"/>
</issue>
<issue
@@ -8032,7 +9780,9 @@
errorLine1=" public void onSaveInstanceState(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="1258"
+ column="37"/>
</issue>
<issue
@@ -8041,7 +9791,9 @@
errorLine1=" public void popBackStackToGuidedStepFragment(Class<?> guidedStepFragmentClass,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="1304"
+ column="50"/>
</issue>
<issue
@@ -8050,7 +9802,9 @@
errorLine1=" public void openInEditMode(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepFragment.java"
+ line="1367"
+ column="32"/>
</issue>
<issue
@@ -8059,7 +9813,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="249"
+ column="16"/>
</issue>
<issue
@@ -8068,7 +9824,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="249"
+ column="34"/>
</issue>
<issue
@@ -8077,7 +9835,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="249"
+ column="59"/>
</issue>
<issue
@@ -8086,7 +9846,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="250"
+ column="17"/>
</issue>
<issue
@@ -8095,7 +9857,9 @@
errorLine1=" public GuidanceStylist onCreateGuidanceStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="278"
+ column="12"/>
</issue>
<issue
@@ -8104,7 +9868,9 @@
errorLine1=" public GuidedActionsStylist onCreateActionsStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="287"
+ column="12"/>
</issue>
<issue
@@ -8113,7 +9879,9 @@
errorLine1=" public GuidedActionsStylist onCreateButtonActionsStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="296"
+ column="12"/>
</issue>
<issue
@@ -8122,7 +9890,9 @@
errorLine1=" public @NonNull Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="320"
+ column="47"/>
</issue>
<issue
@@ -8131,7 +9901,9 @@
errorLine1=" public void onCreateActions(@NonNull List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="330"
+ column="70"/>
</issue>
<issue
@@ -8140,7 +9912,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="340"
+ column="13"/>
</issue>
<issue
@@ -8149,7 +9923,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="348"
+ column="39"/>
</issue>
<issue
@@ -8158,7 +9934,9 @@
errorLine1=" public boolean onSubGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="358"
+ column="45"/>
</issue>
<issue
@@ -8167,7 +9945,9 @@
errorLine1=" public void expandSubActions(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="382"
+ column="34"/>
</issue>
<issue
@@ -8176,7 +9956,9 @@
errorLine1=" public void expandAction(GuidedAction action, boolean withTransition) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="397"
+ column="30"/>
</issue>
<issue
@@ -8185,7 +9967,9 @@
errorLine1=" public void onGuidedActionFocused(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="425"
+ column="39"/>
</issue>
<issue
@@ -8194,7 +9978,9 @@
errorLine1=" public void onGuidedActionEdited(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="435"
+ column="38"/>
</issue>
<issue
@@ -8203,7 +9989,9 @@
errorLine1=" public void onGuidedActionEditCanceled(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="444"
+ column="44"/>
</issue>
<issue
@@ -8212,7 +10000,9 @@
errorLine1=" public long onGuidedActionEditedAndProceed(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="457"
+ column="48"/>
</issue>
<issue
@@ -8221,7 +10011,9 @@
errorLine1=" public static int add(FragmentManager fragmentManager, GuidedStepSupportFragment fragment) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="484"
+ column="27"/>
</issue>
<issue
@@ -8230,7 +10022,9 @@
errorLine1=" public static int add(FragmentManager fragmentManager, GuidedStepSupportFragment fragment) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="484"
+ column="60"/>
</issue>
<issue
@@ -8239,7 +10033,9 @@
errorLine1=" public static int add(FragmentManager fragmentManager, GuidedStepSupportFragment fragment, int id) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="513"
+ column="27"/>
</issue>
<issue
@@ -8248,7 +10044,9 @@
errorLine1=" public static int add(FragmentManager fragmentManager, GuidedStepSupportFragment fragment, int id) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="513"
+ column="60"/>
</issue>
<issue
@@ -8257,7 +10055,9 @@
errorLine1=" protected void onAddSharedElementTransition(FragmentTransaction ft, GuidedStepSupportFragment"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="546"
+ column="49"/>
</issue>
<issue
@@ -8266,7 +10066,9 @@
errorLine1=" protected void onAddSharedElementTransition(FragmentTransaction ft, GuidedStepSupportFragment"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="546"
+ column="73"/>
</issue>
<issue
@@ -8275,7 +10077,9 @@
errorLine1=" public static int addAsRoot(FragmentActivity activity, GuidedStepSupportFragment fragment, int id) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="653"
+ column="33"/>
</issue>
<issue
@@ -8284,7 +10088,9 @@
errorLine1=" public static int addAsRoot(FragmentActivity activity, GuidedStepSupportFragment fragment, int id) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="653"
+ column="60"/>
</issue>
<issue
@@ -8293,7 +10099,9 @@
errorLine1=" public static GuidedStepSupportFragment getCurrentGuidedStepSupportFragment(FragmentManager fm) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="671"
+ column="19"/>
</issue>
<issue
@@ -8302,7 +10110,9 @@
errorLine1=" public static GuidedStepSupportFragment getCurrentGuidedStepSupportFragment(FragmentManager fm) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="671"
+ column="81"/>
</issue>
<issue
@@ -8311,7 +10121,9 @@
errorLine1=" public GuidanceStylist getGuidanceStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="683"
+ column="12"/>
</issue>
<issue
@@ -8320,7 +10132,9 @@
errorLine1=" public GuidedActionsStylist getGuidedActionsStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="691"
+ column="12"/>
</issue>
<issue
@@ -8329,7 +10143,9 @@
errorLine1=" public List<GuidedAction> getButtonActions() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="699"
+ column="12"/>
</issue>
<issue
@@ -8338,7 +10154,9 @@
errorLine1=" public GuidedAction findButtonActionById(long id) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="708"
+ column="12"/>
</issue>
<issue
@@ -8347,7 +10165,9 @@
errorLine1=" public GuidedActionsStylist getGuidedButtonActionsStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="733"
+ column="12"/>
</issue>
<issue
@@ -8356,7 +10176,9 @@
errorLine1=" public void setButtonActions(List<GuidedAction> actions) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="741"
+ column="34"/>
</issue>
<issue
@@ -8365,7 +10187,9 @@
errorLine1=" public View getButtonActionItemView(int position) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="765"
+ column="12"/>
</issue>
<issue
@@ -8374,7 +10198,9 @@
errorLine1=" public List<GuidedAction> getActions() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="791"
+ column="12"/>
</issue>
<issue
@@ -8383,7 +10209,9 @@
errorLine1=" public GuidedAction findActionById(long id) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="800"
+ column="12"/>
</issue>
<issue
@@ -8392,7 +10220,9 @@
errorLine1=" public void setActions(List<GuidedAction> actions) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="827"
+ column="28"/>
</issue>
<issue
@@ -8401,7 +10231,9 @@
errorLine1=" public void setActionsDiffCallback(DiffCallback<GuidedAction> diffCallback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="842"
+ column="40"/>
</issue>
<issue
@@ -8410,7 +10242,9 @@
errorLine1=" public View getActionItemView(int position) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="863"
+ column="12"/>
</issue>
<issue
@@ -8419,7 +10253,9 @@
errorLine1=" public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="972"
+ column="12"/>
</issue>
<issue
@@ -8428,7 +10264,9 @@
errorLine1=" public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="972"
+ column="40"/>
</issue>
<issue
@@ -8437,7 +10275,9 @@
errorLine1=" public View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="972"
+ column="65"/>
</issue>
<issue
@@ -8446,7 +10286,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="973"
+ column="13"/>
</issue>
<issue
@@ -8455,7 +10297,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="1026"
+ column="26"/>
</issue>
<issue
@@ -8464,7 +10308,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="1071"
+ column="12"/>
</issue>
<issue
@@ -8473,7 +10319,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="1071"
+ column="30"/>
</issue>
<issue
@@ -8482,7 +10330,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="1071"
+ column="55"/>
</issue>
<issue
@@ -8491,7 +10341,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="1072"
+ column="13"/>
</issue>
<issue
@@ -8500,7 +10352,9 @@
errorLine1=" public void onSaveInstanceState(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="1263"
+ column="37"/>
</issue>
<issue
@@ -8509,7 +10363,9 @@
errorLine1=" public void popBackStackToGuidedStepSupportFragment(Class<?> guidedStepFragmentClass,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="1309"
+ column="57"/>
</issue>
<issue
@@ -8518,7 +10374,9 @@
errorLine1=" public void openInEditMode(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/GuidedStepSupportFragment.java"
+ line="1372"
+ column="32"/>
</issue>
<issue
@@ -8527,7 +10385,9 @@
errorLine1=" public HeaderItem(long id, String name) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+ file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+ line="32"
+ column="32"/>
</issue>
<issue
@@ -8536,7 +10396,9 @@
errorLine1=" public HeaderItem(String name) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+ file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+ line="40"
+ column="23"/>
</issue>
<issue
@@ -8545,7 +10407,9 @@
errorLine1=" public final String getName() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+ file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+ line="54"
+ column="18"/>
</issue>
<issue
@@ -8554,7 +10418,9 @@
errorLine1=" public CharSequence getContentDescription() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+ file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+ line="63"
+ column="12"/>
</issue>
<issue
@@ -8563,7 +10429,9 @@
errorLine1=" public void setContentDescription(CharSequence contentDescription) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+ file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+ line="71"
+ column="39"/>
</issue>
<issue
@@ -8572,7 +10440,9 @@
errorLine1=" public void setDescription(CharSequence description) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+ file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+ line="79"
+ column="32"/>
</issue>
<issue
@@ -8581,7 +10451,9 @@
errorLine1=" public CharSequence getDescription() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/HeaderItem.java"/>
+ file="src/main/java/androidx/leanback/widget/HeaderItem.java"
+ line="86"
+ column="12"/>
</issue>
<issue
@@ -8590,7 +10462,9 @@
errorLine1=" void onHeaderClicked(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
+ file="src/main/java/androidx/leanback/app/HeadersFragment.java"
+ line="73"
+ column="30"/>
</issue>
<issue
@@ -8599,7 +10473,9 @@
errorLine1=" void onHeaderClicked(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
+ file="src/main/java/androidx/leanback/app/HeadersFragment.java"
+ line="73"
+ column="72"/>
</issue>
<issue
@@ -8608,7 +10484,9 @@
errorLine1=" void onHeaderSelected(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
+ file="src/main/java/androidx/leanback/app/HeadersFragment.java"
+ line="88"
+ column="31"/>
</issue>
<issue
@@ -8617,7 +10495,9 @@
errorLine1=" void onHeaderSelected(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
+ file="src/main/java/androidx/leanback/app/HeadersFragment.java"
+ line="88"
+ column="73"/>
</issue>
<issue
@@ -8626,7 +10506,9 @@
errorLine1=" public void setOnHeaderClickedListener(OnHeaderClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
+ file="src/main/java/androidx/leanback/app/HeadersFragment.java"
+ line="109"
+ column="44"/>
</issue>
<issue
@@ -8635,7 +10517,9 @@
errorLine1=" public void setOnHeaderViewSelectedListener(OnHeaderViewSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/HeadersFragment.java"/>
+ file="src/main/java/androidx/leanback/app/HeadersFragment.java"
+ line="113"
+ column="49"/>
</issue>
<issue
@@ -8644,7 +10528,9 @@
errorLine1=" void onHeaderClicked(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"
+ line="66"
+ column="30"/>
</issue>
<issue
@@ -8653,7 +10539,9 @@
errorLine1=" void onHeaderClicked(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"
+ line="66"
+ column="72"/>
</issue>
<issue
@@ -8662,7 +10550,9 @@
errorLine1=" void onHeaderSelected(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"
+ line="79"
+ column="31"/>
</issue>
<issue
@@ -8671,7 +10561,9 @@
errorLine1=" void onHeaderSelected(RowHeaderPresenter.ViewHolder viewHolder, Row row);"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"
+ line="79"
+ column="73"/>
</issue>
<issue
@@ -8680,7 +10572,9 @@
errorLine1=" public void setOnHeaderClickedListener(OnHeaderClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"
+ line="100"
+ column="44"/>
</issue>
<issue
@@ -8689,7 +10583,9 @@
errorLine1=" public void setOnHeaderViewSelectedListener(OnHeaderViewSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/HeadersSupportFragment.java"
+ line="104"
+ column="49"/>
</issue>
<issue
@@ -8698,7 +10594,9 @@
errorLine1=" protected void insertView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"/>
+ file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"
+ line="38"
+ column="31"/>
</issue>
<issue
@@ -8707,7 +10605,9 @@
errorLine1=" protected void onViewSelected(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"/>
+ file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"
+ line="44"
+ column="35"/>
</issue>
<issue
@@ -8716,7 +10616,9 @@
errorLine1=" public void select(HorizontalGridView gridView, View childView, Object object) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"/>
+ file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"
+ line="68"
+ column="24"/>
</issue>
<issue
@@ -8725,7 +10627,9 @@
errorLine1=" public void select(HorizontalGridView gridView, View childView, Object object) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"/>
+ file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"
+ line="68"
+ column="53"/>
</issue>
<issue
@@ -8734,7 +10638,9 @@
errorLine1=" public void select(HorizontalGridView gridView, View childView, Object object) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"/>
+ file="src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java"
+ line="68"
+ column="69"/>
</issue>
<issue
@@ -8743,7 +10649,9 @@
errorLine1=" public ImageCardView(Context context, int themeResId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="154"
+ column="26"/>
</issue>
<issue
@@ -8752,7 +10660,9 @@
errorLine1=" public ImageCardView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="161"
+ column="26"/>
</issue>
<issue
@@ -8761,7 +10671,9 @@
errorLine1=" public ImageCardView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="161"
+ column="43"/>
</issue>
<issue
@@ -8770,7 +10682,9 @@
errorLine1=" public ImageCardView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="289"
+ column="26"/>
</issue>
<issue
@@ -8779,7 +10693,9 @@
errorLine1=" public ImageCardView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="296"
+ column="26"/>
</issue>
<issue
@@ -8788,7 +10704,9 @@
errorLine1=" public ImageCardView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="296"
+ column="43"/>
</issue>
<issue
@@ -8797,7 +10715,9 @@
errorLine1=" public final ImageView getMainImageView() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="303"
+ column="18"/>
</issue>
<issue
@@ -8806,7 +10726,9 @@
errorLine1=" public void setMainImageScaleType(ScaleType scaleType) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="319"
+ column="39"/>
</issue>
<issue
@@ -8815,7 +10737,9 @@
errorLine1=" public void setMainImage(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="328"
+ column="30"/>
</issue>
<issue
@@ -8824,7 +10748,9 @@
errorLine1=" public void setMainImage(Drawable drawable, boolean fade) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="335"
+ column="30"/>
</issue>
<issue
@@ -8833,7 +10759,9 @@
errorLine1=" public Drawable getMainImage() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="369"
+ column="12"/>
</issue>
<issue
@@ -8842,7 +10770,9 @@
errorLine1=" public Drawable getInfoAreaBackground() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="380"
+ column="12"/>
</issue>
<issue
@@ -8851,7 +10781,9 @@
errorLine1=" public void setInfoAreaBackground(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="390"
+ column="39"/>
</issue>
<issue
@@ -8860,7 +10792,9 @@
errorLine1=" public void setTitleText(CharSequence text) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="408"
+ column="30"/>
</issue>
<issue
@@ -8869,7 +10803,9 @@
errorLine1=" public CharSequence getTitleText() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="418"
+ column="12"/>
</issue>
<issue
@@ -8878,7 +10814,9 @@
errorLine1=" public void setContentText(CharSequence text) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="429"
+ column="32"/>
</issue>
<issue
@@ -8887,7 +10825,9 @@
errorLine1=" public CharSequence getContentText() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="439"
+ column="12"/>
</issue>
<issue
@@ -8896,7 +10836,9 @@
errorLine1=" public void setBadgeImage(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="450"
+ column="31"/>
</issue>
<issue
@@ -8905,7 +10847,9 @@
errorLine1=" public Drawable getBadgeImage() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImageCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ImageCardView.java"
+ line="465"
+ column="12"/>
</issue>
<issue
@@ -8914,7 +10858,9 @@
errorLine1=" public abstract boolean onKeyPreIme(EditText editText, int keyCode, KeyEvent event);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImeKeyMonitor.java"/>
+ file="src/main/java/androidx/leanback/widget/ImeKeyMonitor.java"
+ line="39"
+ column="45"/>
</issue>
<issue
@@ -8923,7 +10869,9 @@
errorLine1=" public abstract boolean onKeyPreIme(EditText editText, int keyCode, KeyEvent event);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImeKeyMonitor.java"/>
+ file="src/main/java/androidx/leanback/widget/ImeKeyMonitor.java"
+ line="39"
+ column="77"/>
</issue>
<issue
@@ -8932,7 +10880,9 @@
errorLine1=" public void setImeKeyListener(ImeKeyListener listener);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ImeKeyMonitor.java"/>
+ file="src/main/java/androidx/leanback/widget/ImeKeyMonitor.java"
+ line="46"
+ column="35"/>
</issue>
<issue
@@ -8941,7 +10891,9 @@
errorLine1=" protected ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/InvisibleRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/InvisibleRowPresenter.java"
+ line="34"
+ column="15"/>
</issue>
<issue
@@ -8950,7 +10902,9 @@
errorLine1=" protected ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/InvisibleRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/InvisibleRowPresenter.java"
+ line="34"
+ column="46"/>
</issue>
<issue
@@ -8959,7 +10913,9 @@
errorLine1=" public void onAddPresenter(Presenter presenter, int type) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="37"
+ column="36"/>
</issue>
<issue
@@ -8968,7 +10924,9 @@
errorLine1=" public void onCreate(ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="40"
+ column="30"/>
</issue>
<issue
@@ -8977,7 +10935,9 @@
errorLine1=" public void onBind(ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="43"
+ column="28"/>
</issue>
<issue
@@ -8986,7 +10946,9 @@
errorLine1=" public void onBind(ViewHolder viewHolder, List payloads) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="46"
+ column="28"/>
</issue>
<issue
@@ -8995,7 +10957,9 @@
errorLine1=" public void onBind(ViewHolder viewHolder, List payloads) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="46"
+ column="51"/>
</issue>
<issue
@@ -9004,7 +10968,9 @@
errorLine1=" public void onUnbind(ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="50"
+ column="30"/>
</issue>
<issue
@@ -9013,7 +10979,9 @@
errorLine1=" public void onAttachedToWindow(ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="53"
+ column="40"/>
</issue>
<issue
@@ -9022,7 +10990,9 @@
errorLine1=" public void onDetachedFromWindow(ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="56"
+ column="42"/>
</issue>
<issue
@@ -9031,7 +11001,9 @@
errorLine1=" public abstract View createWrapper(View root);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="65"
+ column="25"/>
</issue>
<issue
@@ -9040,7 +11012,9 @@
errorLine1=" public abstract View createWrapper(View root);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="65"
+ column="44"/>
</issue>
<issue
@@ -9049,7 +11023,9 @@
errorLine1=" public abstract void wrap(View wrapper, View wrapped);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="67"
+ column="35"/>
</issue>
<issue
@@ -9058,7 +11034,9 @@
errorLine1=" public abstract void wrap(View wrapper, View wrapped);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="67"
+ column="49"/>
</issue>
<issue
@@ -9067,7 +11045,9 @@
errorLine1=" public final Presenter getPresenter() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="122"
+ column="22"/>
</issue>
<issue
@@ -9076,7 +11056,9 @@
errorLine1=" public final Presenter.ViewHolder getViewHolder() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="129"
+ column="22"/>
</issue>
<issue
@@ -9085,7 +11067,9 @@
errorLine1=" public final Object getItem() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="136"
+ column="22"/>
</issue>
<issue
@@ -9094,7 +11078,9 @@
errorLine1=" public final Object getExtraObject() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="145"
+ column="22"/>
</issue>
<issue
@@ -9103,7 +11089,9 @@
errorLine1=" public void setExtraObject(Object object) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="154"
+ column="36"/>
</issue>
<issue
@@ -9112,7 +11100,9 @@
errorLine1=" public Object getFacet(Class<?> facetClass) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="159"
+ column="16"/>
</issue>
<issue
@@ -9121,7 +11111,9 @@
errorLine1=" public Object getFacet(Class<?> facetClass) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="159"
+ column="32"/>
</issue>
<issue
@@ -9130,7 +11122,9 @@
errorLine1=" public ItemBridgeAdapter(ObjectAdapter adapter, PresenterSelector presenterSelector) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="202"
+ column="30"/>
</issue>
<issue
@@ -9139,7 +11133,9 @@
errorLine1=" public ItemBridgeAdapter(ObjectAdapter adapter, PresenterSelector presenterSelector) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="202"
+ column="53"/>
</issue>
<issue
@@ -9148,7 +11144,9 @@
errorLine1=" public ItemBridgeAdapter(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="207"
+ column="30"/>
</issue>
<issue
@@ -9157,7 +11155,9 @@
errorLine1=" public void setAdapter(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="217"
+ column="28"/>
</issue>
<issue
@@ -9166,7 +11166,9 @@
errorLine1=" public void setPresenter(PresenterSelector presenterSelector) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="242"
+ column="30"/>
</issue>
<issue
@@ -9175,7 +11177,9 @@
errorLine1=" public void setWrapper(Wrapper wrapper) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="250"
+ column="28"/>
</issue>
<issue
@@ -9184,7 +11188,9 @@
errorLine1=" public Wrapper getWrapper() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="257"
+ column="12"/>
</issue>
<issue
@@ -9193,7 +11199,9 @@
errorLine1=" public void setPresenterMapper(ArrayList<Presenter> presenters) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="276"
+ column="36"/>
</issue>
<issue
@@ -9202,7 +11210,9 @@
errorLine1=" public ArrayList<Presenter> getPresenterMapper() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="283"
+ column="12"/>
</issue>
<issue
@@ -9211,7 +11221,9 @@
errorLine1=" protected void onAddPresenter(Presenter presenter, int type) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="314"
+ column="35"/>
</issue>
<issue
@@ -9220,7 +11232,9 @@
errorLine1=" protected void onCreate(ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="320"
+ column="29"/>
</issue>
<issue
@@ -9229,7 +11243,9 @@
errorLine1=" protected void onBind(ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="326"
+ column="27"/>
</issue>
<issue
@@ -9238,7 +11254,9 @@
errorLine1=" protected void onUnbind(ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="332"
+ column="29"/>
</issue>
<issue
@@ -9247,7 +11265,9 @@
errorLine1=" protected void onAttachedToWindow(ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="338"
+ column="39"/>
</issue>
<issue
@@ -9256,7 +11276,9 @@
errorLine1=" protected void onDetachedFromWindow(ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="344"
+ column="41"/>
</issue>
<issue
@@ -9265,7 +11287,9 @@
errorLine1=" public final RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="353"
+ column="18"/>
</issue>
<issue
@@ -9274,7 +11298,9 @@
errorLine1=" public final RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="353"
+ column="61"/>
</issue>
<issue
@@ -9283,7 +11309,9 @@
errorLine1=" public void setAdapterListener(AdapterListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="396"
+ column="36"/>
</issue>
<issue
@@ -9292,7 +11320,9 @@
errorLine1=" public final void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="401"
+ column="40"/>
</issue>
<issue
@@ -9301,7 +11331,9 @@
errorLine1=" public final void onBindViewHolder(RecyclerView.ViewHolder holder, int position,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="416"
+ column="41"/>
</issue>
<issue
@@ -9310,7 +11342,9 @@
errorLine1=" List payloads) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="417"
+ column="13"/>
</issue>
<issue
@@ -9319,7 +11353,9 @@
errorLine1=" public final void onViewRecycled(RecyclerView.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="431"
+ column="38"/>
</issue>
<issue
@@ -9328,7 +11364,9 @@
errorLine1=" public final boolean onFailedToRecycleView(RecyclerView.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="442"
+ column="48"/>
</issue>
<issue
@@ -9337,7 +11375,9 @@
errorLine1=" public final void onViewAttachedToWindow(RecyclerView.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="448"
+ column="46"/>
</issue>
<issue
@@ -9346,7 +11386,9 @@
errorLine1=" public final void onViewDetachedFromWindow(RecyclerView.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="458"
+ column="48"/>
</issue>
<issue
@@ -9355,7 +11397,9 @@
errorLine1=" public FacetProvider getFacetProvider(int type) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapter.java"
+ line="473"
+ column="12"/>
</issue>
<issue
@@ -9364,7 +11408,9 @@
errorLine1=" public ItemBridgeAdapterShadowOverlayWrapper(ShadowOverlayHelper helper) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"
+ line="28"
+ column="50"/>
</issue>
<issue
@@ -9373,7 +11419,9 @@
errorLine1=" public View createWrapper(View root) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"
+ line="33"
+ column="12"/>
</issue>
<issue
@@ -9382,7 +11430,9 @@
errorLine1=" public View createWrapper(View root) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"
+ line="33"
+ column="31"/>
</issue>
<issue
@@ -9391,7 +11441,9 @@
errorLine1=" public void wrap(View wrapper, View wrapped) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"
+ line="39"
+ column="22"/>
</issue>
<issue
@@ -9400,7 +11452,9 @@
errorLine1=" public void wrap(View wrapper, View wrapped) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"/>
+ file="src/main/java/androidx/leanback/widget/ItemBridgeAdapterShadowOverlayWrapper.java"
+ line="39"
+ column="36"/>
</issue>
<issue
@@ -9409,7 +11463,9 @@
errorLine1=" public static Object loadTitleInTransition(Context context) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+ line="33"
+ column="19"/>
</issue>
<issue
@@ -9418,7 +11474,9 @@
errorLine1=" public static Object loadTitleInTransition(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+ line="33"
+ column="48"/>
</issue>
<issue
@@ -9427,7 +11485,9 @@
errorLine1=" public static Object loadTitleOutTransition(Context context) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+ line="46"
+ column="19"/>
</issue>
<issue
@@ -9436,7 +11496,9 @@
errorLine1=" public static Object loadTitleOutTransition(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"/>
+ file="src/main/java/androidx/leanback/transition/LeanbackTransitionHelper.java"
+ line="46"
+ column="49"/>
</issue>
<issue
@@ -9445,7 +11507,9 @@
errorLine1=" public final ObjectAdapter getAdapter() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRow.java"
+ line="27"
+ column="18"/>
</issue>
<issue
@@ -9454,7 +11518,9 @@
errorLine1=" public ListRow(HeaderItem header, ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRow.java"
+ line="31"
+ column="20"/>
</issue>
<issue
@@ -9463,7 +11529,9 @@
errorLine1=" public ListRow(HeaderItem header, ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRow.java"
+ line="31"
+ column="39"/>
</issue>
<issue
@@ -9472,7 +11540,9 @@
errorLine1=" public ListRow(long id, HeaderItem header, ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRow.java"
+ line="37"
+ column="29"/>
</issue>
<issue
@@ -9481,7 +11551,9 @@
errorLine1=" public ListRow(long id, HeaderItem header, ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRow.java"
+ line="37"
+ column="48"/>
</issue>
<issue
@@ -9490,7 +11562,9 @@
errorLine1=" public ListRow(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRow.java"
+ line="43"
+ column="20"/>
</issue>
<issue
@@ -9499,7 +11573,9 @@
errorLine1=" public CharSequence getContentDescription() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRow.java"
+ line="62"
+ column="12"/>
</issue>
<issue
@@ -9508,7 +11584,9 @@
errorLine1=" public void setContentDescription(CharSequence contentDescription) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRow.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRow.java"
+ line="83"
+ column="39"/>
</issue>
<issue
@@ -9517,7 +11595,9 @@
errorLine1=" public ListRowHoverCardView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+ line="34"
+ column="33"/>
</issue>
<issue
@@ -9526,7 +11606,9 @@
errorLine1=" public ListRowHoverCardView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+ line="38"
+ column="33"/>
</issue>
<issue
@@ -9535,7 +11617,9 @@
errorLine1=" public ListRowHoverCardView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+ line="38"
+ column="50"/>
</issue>
<issue
@@ -9544,7 +11628,9 @@
errorLine1=" public ListRowHoverCardView(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+ line="42"
+ column="33"/>
</issue>
<issue
@@ -9553,7 +11639,9 @@
errorLine1=" public ListRowHoverCardView(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+ line="42"
+ column="50"/>
</issue>
<issue
@@ -9562,7 +11650,9 @@
errorLine1=" public final CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+ line="53"
+ column="18"/>
</issue>
<issue
@@ -9571,7 +11661,9 @@
errorLine1=" public final void setTitle(CharSequence text) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+ line="60"
+ column="32"/>
</issue>
<issue
@@ -9580,7 +11672,9 @@
errorLine1=" public final CharSequence getDescription() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+ line="72"
+ column="18"/>
</issue>
<issue
@@ -9589,7 +11683,9 @@
errorLine1=" public final void setDescription(CharSequence text) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowHoverCardView.java"
+ line="79"
+ column="38"/>
</issue>
<issue
@@ -9598,7 +11694,9 @@
errorLine1=" public ViewHolder(View rootView, HorizontalGridView gridView, ListRowPresenter p) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="70"
+ column="27"/>
</issue>
<issue
@@ -9607,7 +11705,9 @@
errorLine1=" public ViewHolder(View rootView, HorizontalGridView gridView, ListRowPresenter p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="70"
+ column="42"/>
</issue>
<issue
@@ -9616,7 +11716,9 @@
errorLine1=" public ViewHolder(View rootView, HorizontalGridView gridView, ListRowPresenter p) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="70"
+ column="71"/>
</issue>
<issue
@@ -9625,7 +11727,9 @@
errorLine1=" public final ListRowPresenter getListRowPresenter() {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="84"
+ column="22"/>
</issue>
<issue
@@ -9634,7 +11738,9 @@
errorLine1=" public final HorizontalGridView getGridView() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="92"
+ column="22"/>
</issue>
<issue
@@ -9643,7 +11749,9 @@
errorLine1=" public final ItemBridgeAdapter getBridgeAdapter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="100"
+ column="22"/>
</issue>
<issue
@@ -9652,7 +11760,9 @@
errorLine1=" public Presenter.ViewHolder getItemViewHolder(int position) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="118"
+ column="16"/>
</issue>
<issue
@@ -9661,7 +11771,9 @@
errorLine1=" public Presenter.ViewHolder getSelectedItemViewHolder() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="128"
+ column="16"/>
</issue>
<issue
@@ -9670,7 +11782,9 @@
errorLine1=" public Object getSelectedItem() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="133"
+ column="16"/>
</issue>
<issue
@@ -9679,7 +11793,9 @@
errorLine1=" public Presenter.ViewHolderTask getItemTask() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="194"
+ column="16"/>
</issue>
<issue
@@ -9688,7 +11804,9 @@
errorLine1=" public void setItemTask(Presenter.ViewHolderTask itemTask) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="202"
+ column="33"/>
</issue>
<issue
@@ -9697,7 +11815,9 @@
errorLine1=" public void run(Presenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="207"
+ column="25"/>
</issue>
<issue
@@ -9706,7 +11826,9 @@
errorLine1=" protected void initializeRowViewHolder(RowPresenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="416"
+ column="44"/>
</issue>
<issue
@@ -9715,7 +11837,9 @@
errorLine1=" public void setRecycledPoolSize(Presenter presenter, int size) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="470"
+ column="37"/>
</issue>
<issue
@@ -9724,7 +11848,9 @@
errorLine1=" public int getRecycledPoolSize(Presenter presenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="477"
+ column="36"/>
</issue>
<issue
@@ -9733,7 +11859,9 @@
errorLine1=" public final void setHoverCardPresenterSelector(PresenterSelector selector) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="485"
+ column="53"/>
</issue>
<issue
@@ -9742,7 +11870,9 @@
errorLine1=" public final PresenterSelector getHoverCardPresenterSelector() {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="492"
+ column="18"/>
</issue>
<issue
@@ -9751,7 +11881,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="570"
+ column="15"/>
</issue>
<issue
@@ -9760,7 +11892,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="570"
+ column="59"/>
</issue>
<issue
@@ -9769,7 +11903,9 @@
errorLine1=" protected void dispatchItemSelectedListener(RowPresenter.ViewHolder holder, boolean selected) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="586"
+ column="49"/>
</issue>
<issue
@@ -9778,7 +11914,9 @@
errorLine1=" protected void onRowViewSelected(RowPresenter.ViewHolder holder, boolean selected) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="604"
+ column="38"/>
</issue>
<issue
@@ -9787,7 +11925,9 @@
errorLine1=" protected void onRowViewExpanded(RowPresenter.ViewHolder holder, boolean expanded) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="645"
+ column="38"/>
</issue>
<issue
@@ -9796,7 +11936,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="657"
+ column="40"/>
</issue>
<issue
@@ -9805,7 +11947,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="657"
+ column="72"/>
</issue>
<issue
@@ -9814,7 +11958,9 @@
errorLine1=" protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="667"
+ column="42"/>
</issue>
<issue
@@ -9823,7 +11969,9 @@
errorLine1=" public boolean isUsingZOrder(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="708"
+ column="34"/>
</issue>
<issue
@@ -9832,7 +11980,9 @@
errorLine1=" public boolean isUsingOutlineClipping(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="720"
+ column="43"/>
</issue>
<issue
@@ -9841,7 +11991,9 @@
errorLine1=" protected ShadowOverlayHelper.Options createShadowOverlayOptions() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="794"
+ column="15"/>
</issue>
<issue
@@ -9850,7 +12002,9 @@
errorLine1=" protected void onSelectLevelChanged(RowPresenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="813"
+ column="41"/>
</issue>
<issue
@@ -9859,7 +12013,9 @@
errorLine1=" protected void applySelectLevelToChild(ViewHolder rowViewHolder, View childView) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="838"
+ column="44"/>
</issue>
<issue
@@ -9868,7 +12024,9 @@
errorLine1=" protected void applySelectLevelToChild(ViewHolder rowViewHolder, View childView) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="838"
+ column="70"/>
</issue>
<issue
@@ -9877,7 +12035,9 @@
errorLine1=" public void freeze(RowPresenter.ViewHolder holder, boolean freeze) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="846"
+ column="24"/>
</issue>
<issue
@@ -9886,7 +12046,9 @@
errorLine1=" public void setEntranceTransitionState(RowPresenter.ViewHolder holder,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowPresenter.java"
+ line="853"
+ column="44"/>
</issue>
<issue
@@ -9895,7 +12057,9 @@
errorLine1=" public ListRowView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowView.java"
+ line="32"
+ column="24"/>
</issue>
<issue
@@ -9904,7 +12068,9 @@
errorLine1=" public ListRowView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowView.java"
+ line="36"
+ column="24"/>
</issue>
<issue
@@ -9913,7 +12079,9 @@
errorLine1=" public ListRowView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowView.java"
+ line="36"
+ column="41"/>
</issue>
<issue
@@ -9922,7 +12090,9 @@
errorLine1=" public ListRowView(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowView.java"
+ line="40"
+ column="24"/>
</issue>
<issue
@@ -9931,7 +12101,9 @@
errorLine1=" public ListRowView(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowView.java"
+ line="40"
+ column="41"/>
</issue>
<issue
@@ -9940,7 +12112,9 @@
errorLine1=" public HorizontalGridView getGridView() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ListRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/ListRowView.java"
+ line="60"
+ column="12"/>
</issue>
<issue
@@ -9949,7 +12123,9 @@
errorLine1=" public MediaControllerAdapter(MediaControllerCompat controller) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+ line="128"
+ column="35"/>
</issue>
<issue
@@ -9958,7 +12134,9 @@
errorLine1=" public MediaControllerCompat getMediaController() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+ line="140"
+ column="12"/>
</issue>
<issue
@@ -9967,7 +12145,9 @@
errorLine1=" public CharSequence getMediaTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+ line="224"
+ column="12"/>
</issue>
<issue
@@ -9976,7 +12156,9 @@
errorLine1=" public CharSequence getMediaSubtitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+ line="236"
+ column="12"/>
</issue>
<issue
@@ -9985,7 +12167,9 @@
errorLine1=" public Drawable getMediaArt(Context context) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+ line="248"
+ column="12"/>
</issue>
<issue
@@ -9994,7 +12178,9 @@
errorLine1=" public Drawable getMediaArt(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+ line="248"
+ column="33"/>
</issue>
<issue
@@ -10003,7 +12189,9 @@
errorLine1=" public void onAttachedToHost(PlaybackGlueHost host) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerAdapter.java"
+ line="266"
+ column="34"/>
</issue>
<issue
@@ -10012,7 +12200,9 @@
errorLine1=" public MediaControllerGlue(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+ line="71"
+ column="32"/>
</issue>
<issue
@@ -10021,7 +12211,9 @@
errorLine1=" int[] fastForwardSpeeds,"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+ line="72"
+ column="32"/>
</issue>
<issue
@@ -10030,7 +12222,9 @@
errorLine1=" int[] rewindSpeeds) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+ line="73"
+ column="32"/>
</issue>
<issue
@@ -10039,7 +12233,9 @@
errorLine1=" public void attachToMediaController(MediaControllerCompat mediaController) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+ line="80"
+ column="41"/>
</issue>
<issue
@@ -10048,7 +12244,9 @@
errorLine1=" public final MediaControllerCompat getMediaController() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+ line="107"
+ column="18"/>
</issue>
<issue
@@ -10057,7 +12255,9 @@
errorLine1=" public CharSequence getMediaTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+ line="148"
+ column="12"/>
</issue>
<issue
@@ -10066,7 +12266,9 @@
errorLine1=" public CharSequence getMediaSubtitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+ line="153"
+ column="12"/>
</issue>
<issue
@@ -10075,7 +12277,9 @@
errorLine1=" public Drawable getMediaArt() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaControllerGlue.java"
+ line="169"
+ column="12"/>
</issue>
<issue
@@ -10084,7 +12288,9 @@
errorLine1=" public MediaNowPlayingView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/MediaNowPlayingView.java"/>
+ file="src/main/java/androidx/leanback/widget/MediaNowPlayingView.java"
+ line="47"
+ column="32"/>
</issue>
<issue
@@ -10093,7 +12299,9 @@
errorLine1=" public MediaNowPlayingView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/MediaNowPlayingView.java"/>
+ file="src/main/java/androidx/leanback/widget/MediaNowPlayingView.java"
+ line="47"
+ column="49"/>
</issue>
<issue
@@ -10102,7 +12310,9 @@
errorLine1=" public MediaPlayerAdapter(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"
+ line="137"
+ column="31"/>
</issue>
<issue
@@ -10111,7 +12321,9 @@
errorLine1=" public void onAttachedToHost(PlaybackGlueHost host) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"
+ line="142"
+ column="34"/>
</issue>
<issue
@@ -10120,7 +12332,9 @@
errorLine1=" public boolean setDataSource(Uri uri) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"
+ line="338"
+ column="34"/>
</issue>
<issue
@@ -10129,7 +12343,9 @@
errorLine1=" public final MediaPlayer getMediaPlayer() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerAdapter.java"
+ line="387"
+ column="18"/>
</issue>
<issue
@@ -10138,7 +12354,9 @@
errorLine1=" public void setCover(Drawable cover) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="91"
+ column="26"/>
</issue>
<issue
@@ -10147,7 +12365,9 @@
errorLine1=" public void setArtist(String artist) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="98"
+ column="27"/>
</issue>
<issue
@@ -10156,7 +12376,9 @@
errorLine1=" public void setTitle(String title) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="105"
+ column="26"/>
</issue>
<issue
@@ -10165,7 +12387,9 @@
errorLine1=" public void setVideoUrl(String videoUrl) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="112"
+ column="29"/>
</issue>
<issue
@@ -10174,7 +12398,9 @@
errorLine1=" public MediaPlayerGlue(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="120"
+ column="28"/>
</issue>
<issue
@@ -10183,7 +12409,9 @@
errorLine1=" Context context, int[] fastForwardSpeeds, int[] rewindSpeeds) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="128"
+ column="13"/>
</issue>
<issue
@@ -10192,7 +12420,9 @@
errorLine1=" Context context, int[] fastForwardSpeeds, int[] rewindSpeeds) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="128"
+ column="30"/>
</issue>
<issue
@@ -10201,7 +12431,9 @@
errorLine1=" Context context, int[] fastForwardSpeeds, int[] rewindSpeeds) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="128"
+ column="55"/>
</issue>
<issue
@@ -10210,7 +12442,9 @@
errorLine1=" protected void onAttachedToHost(PlaybackGlueHost host) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="140"
+ column="37"/>
</issue>
<issue
@@ -10219,7 +12453,9 @@
errorLine1=" protected void onCreateSecondaryActions(ArrayObjectAdapter secondaryActionsAdapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="189"
+ column="45"/>
</issue>
<issue
@@ -10228,7 +12464,9 @@
errorLine1=" public void setDisplay(SurfaceHolder surfaceHolder) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="198"
+ column="28"/>
</issue>
<issue
@@ -10237,7 +12475,9 @@
errorLine1=" public void onActionClicked(Action action) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="221"
+ column="33"/>
</issue>
<issue
@@ -10246,7 +12486,9 @@
errorLine1=" public boolean onKey(View v, int keyCode, KeyEvent event) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="246"
+ column="26"/>
</issue>
<issue
@@ -10255,7 +12497,9 @@
errorLine1=" public boolean onKey(View v, int keyCode, KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="246"
+ column="47"/>
</issue>
<issue
@@ -10264,7 +12508,9 @@
errorLine1=" public CharSequence getMediaTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="291"
+ column="12"/>
</issue>
<issue
@@ -10273,7 +12519,9 @@
errorLine1=" public CharSequence getMediaSubtitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="296"
+ column="12"/>
</issue>
<issue
@@ -10282,7 +12530,9 @@
errorLine1=" public Drawable getMediaArt() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="306"
+ column="12"/>
</issue>
<issue
@@ -10291,7 +12541,9 @@
errorLine1=" public boolean setMediaSource(Uri uri) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="401"
+ column="35"/>
</issue>
<issue
@@ -10300,7 +12552,9 @@
errorLine1=" public boolean setMediaSource(String path) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="418"
+ column="35"/>
</issue>
<issue
@@ -10309,7 +12563,9 @@
errorLine1=" public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="486"
+ column="32"/>
</issue>
<issue
@@ -10318,7 +12574,9 @@
errorLine1=" public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="486"
+ column="69"/>
</issue>
<issue
@@ -10327,7 +12585,9 @@
errorLine1=" RowPresenter.ViewHolder rowViewHolder, Row row) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="487"
+ column="32"/>
</issue>
<issue
@@ -10336,7 +12596,9 @@
errorLine1=" RowPresenter.ViewHolder rowViewHolder, Row row) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"/>
+ file="src/main/java/androidx/leanback/media/MediaPlayerGlue.java"
+ line="487"
+ column="71"/>
</issue>
<issue
@@ -10345,7 +12607,9 @@
errorLine1=" public void setDrawables(Drawable[] drawables) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"/>
+ file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"
+ line="53"
+ column="34"/>
</issue>
<issue
@@ -10354,7 +12618,9 @@
errorLine1=" public Drawable[] getDrawables() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"/>
+ file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"
+ line="66"
+ column="16"/>
</issue>
<issue
@@ -10363,7 +12629,9 @@
errorLine1=" public Drawable getCurrentDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"/>
+ file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"
+ line="97"
+ column="16"/>
</issue>
<issue
@@ -10372,7 +12640,9 @@
errorLine1=" public MultiAction[] getActions();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"/>
+ file="src/main/java/androidx/leanback/widget/MultiActionsProvider.java"
+ line="113"
+ column="12"/>
</issue>
<issue
@@ -10381,7 +12651,9 @@
errorLine1=" public NonOverlappingLinearLayout(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"
+ line="38"
+ column="39"/>
</issue>
<issue
@@ -10390,7 +12662,9 @@
errorLine1=" public NonOverlappingLinearLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"
+ line="42"
+ column="39"/>
</issue>
<issue
@@ -10399,7 +12673,9 @@
errorLine1=" public NonOverlappingLinearLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"
+ line="42"
+ column="56"/>
</issue>
<issue
@@ -10408,7 +12684,9 @@
errorLine1=" public NonOverlappingLinearLayout(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"
+ line="46"
+ column="39"/>
</issue>
<issue
@@ -10417,7 +12695,9 @@
errorLine1=" public NonOverlappingLinearLayout(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"
+ line="46"
+ column="56"/>
</issue>
<issue
@@ -10426,7 +12706,9 @@
errorLine1=" public void focusableViewAvailable(View v) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"/>
+ file="src/main/java/androidx/leanback/widget/NonOverlappingLinearLayout.java"
+ line="95"
+ column="40"/>
</issue>
<issue
@@ -10435,7 +12717,9 @@
errorLine1=" public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+ line="64"
+ column="74"/>
</issue>
<issue
@@ -10444,7 +12728,9 @@
errorLine1=" public ObjectAdapter(PresenterSelector presenterSelector) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+ line="152"
+ column="26"/>
</issue>
<issue
@@ -10453,7 +12739,9 @@
errorLine1=" public ObjectAdapter(Presenter presenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+ line="159"
+ column="26"/>
</issue>
<issue
@@ -10462,7 +12750,9 @@
errorLine1=" public final void setPresenterSelector(PresenterSelector presenterSelector) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+ line="172"
+ column="44"/>
</issue>
<issue
@@ -10471,7 +12761,9 @@
errorLine1=" public final PresenterSelector getPresenterSelector() {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+ line="199"
+ column="18"/>
</issue>
<issue
@@ -10480,7 +12772,9 @@
errorLine1=" public final void registerObserver(DataObserver observer) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+ line="206"
+ column="40"/>
</issue>
<issue
@@ -10489,7 +12783,9 @@
errorLine1=" public final void unregisterObserver(DataObserver observer) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+ line="213"
+ column="42"/>
</issue>
<issue
@@ -10498,7 +12794,9 @@
errorLine1=" public final void notifyItemRangeChanged(int positionStart, int itemCount, Object payload) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+ line="249"
+ column="80"/>
</issue>
<issue
@@ -10507,7 +12805,9 @@
errorLine1=" public final Presenter getPresenter(Object item) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+ line="322"
+ column="18"/>
</issue>
<issue
@@ -10516,7 +12816,9 @@
errorLine1=" public final Presenter getPresenter(Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+ line="322"
+ column="41"/>
</issue>
<issue
@@ -10525,7 +12827,9 @@
errorLine1=" public abstract Object get(int position);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"/>
+ file="src/main/java/androidx/leanback/widget/ObjectAdapter.java"
+ line="337"
+ column="21"/>
</issue>
<issue
@@ -10534,7 +12838,9 @@
errorLine1=" void onActionClicked(Action action);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/OnActionClickedListener.java"/>
+ file="src/main/java/androidx/leanback/widget/OnActionClickedListener.java"
+ line="24"
+ column="26"/>
</issue>
<issue
@@ -10543,7 +12849,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, final ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="313"
+ column="30"/>
</issue>
<issue
@@ -10552,7 +12860,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, final ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="313"
+ column="61"/>
</issue>
<issue
@@ -10561,7 +12871,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="314"
+ column="13"/>
</issue>
<issue
@@ -10570,7 +12882,9 @@
errorLine1=" public void onSaveInstanceState(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="396"
+ column="37"/>
</issue>
<issue
@@ -10579,7 +12893,9 @@
errorLine1=" public final CharSequence getStartButtonText() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="518"
+ column="18"/>
</issue>
<issue
@@ -10588,7 +12904,9 @@
errorLine1=" public void setStartButtonText(CharSequence text) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="528"
+ column="36"/>
</issue>
<issue
@@ -10597,7 +12915,9 @@
errorLine1=" protected Animator onCreateDescriptionAnimator() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="781"
+ column="15"/>
</issue>
<issue
@@ -10606,7 +12926,9 @@
errorLine1=" protected Animator onCreateTitleAnimator() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="790"
+ column="15"/>
</issue>
<issue
@@ -10615,7 +12937,9 @@
errorLine1=" abstract protected CharSequence getPageTitle(int pageIndex);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="818"
+ column="24"/>
</issue>
<issue
@@ -10624,7 +12948,9 @@
errorLine1=" abstract protected CharSequence getPageDescription(int pageIndex);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="827"
+ column="24"/>
</issue>
<issue
@@ -10633,7 +12959,9 @@
errorLine1=" abstract protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="850"
+ column="52"/>
</issue>
<issue
@@ -10642,7 +12970,9 @@
errorLine1=" abstract protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="850"
+ column="77"/>
</issue>
<issue
@@ -10651,7 +12981,9 @@
errorLine1=" abstract protected View onCreateContentView(LayoutInflater inflater, ViewGroup container);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="866"
+ column="49"/>
</issue>
<issue
@@ -10660,7 +12992,9 @@
errorLine1=" abstract protected View onCreateContentView(LayoutInflater inflater, ViewGroup container);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="866"
+ column="74"/>
</issue>
<issue
@@ -10669,7 +13003,9 @@
errorLine1=" abstract protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="882"
+ column="52"/>
</issue>
<issue
@@ -10678,7 +13014,9 @@
errorLine1=" abstract protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingFragment.java"
+ line="882"
+ column="77"/>
</issue>
<issue
@@ -10687,7 +13025,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, final ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="308"
+ column="30"/>
</issue>
<issue
@@ -10696,7 +13036,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, final ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="308"
+ column="61"/>
</issue>
<issue
@@ -10705,7 +13047,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="309"
+ column="13"/>
</issue>
<issue
@@ -10714,7 +13058,9 @@
errorLine1=" public void onSaveInstanceState(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="391"
+ column="37"/>
</issue>
<issue
@@ -10723,7 +13069,9 @@
errorLine1=" public final CharSequence getStartButtonText() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="513"
+ column="18"/>
</issue>
<issue
@@ -10732,7 +13080,9 @@
errorLine1=" public void setStartButtonText(CharSequence text) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="523"
+ column="36"/>
</issue>
<issue
@@ -10741,7 +13091,9 @@
errorLine1=" protected Animator onCreateDescriptionAnimator() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="776"
+ column="15"/>
</issue>
<issue
@@ -10750,7 +13102,9 @@
errorLine1=" protected Animator onCreateTitleAnimator() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="785"
+ column="15"/>
</issue>
<issue
@@ -10759,7 +13113,9 @@
errorLine1=" abstract protected CharSequence getPageTitle(int pageIndex);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="813"
+ column="24"/>
</issue>
<issue
@@ -10768,7 +13124,9 @@
errorLine1=" abstract protected CharSequence getPageDescription(int pageIndex);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="822"
+ column="24"/>
</issue>
<issue
@@ -10777,7 +13135,9 @@
errorLine1=" abstract protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="845"
+ column="52"/>
</issue>
<issue
@@ -10786,7 +13146,9 @@
errorLine1=" abstract protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="845"
+ column="77"/>
</issue>
<issue
@@ -10795,7 +13157,9 @@
errorLine1=" abstract protected View onCreateContentView(LayoutInflater inflater, ViewGroup container);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="861"
+ column="49"/>
</issue>
<issue
@@ -10804,7 +13168,9 @@
errorLine1=" abstract protected View onCreateContentView(LayoutInflater inflater, ViewGroup container);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="861"
+ column="74"/>
</issue>
<issue
@@ -10813,7 +13179,9 @@
errorLine1=" abstract protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="877"
+ column="52"/>
</issue>
<issue
@@ -10822,7 +13190,9 @@
errorLine1=" abstract protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/OnboardingSupportFragment.java"
+ line="877"
+ column="77"/>
</issue>
<issue
@@ -10831,7 +13201,9 @@
errorLine1=" public PageRow(HeaderItem headerItem) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PageRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PageRow.java"
+ line="21"
+ column="20"/>
</issue>
<issue
@@ -10840,7 +13212,9 @@
errorLine1=" public PagingIndicator(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+ file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+ line="134"
+ column="28"/>
</issue>
<issue
@@ -10849,7 +13223,9 @@
errorLine1=" public PagingIndicator(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+ file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+ line="138"
+ column="28"/>
</issue>
<issue
@@ -10858,7 +13234,9 @@
errorLine1=" public PagingIndicator(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+ file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+ line="138"
+ column="45"/>
</issue>
<issue
@@ -10867,7 +13245,9 @@
errorLine1=" public PagingIndicator(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+ file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+ line="142"
+ column="28"/>
</issue>
<issue
@@ -10876,7 +13256,9 @@
errorLine1=" public PagingIndicator(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+ file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+ line="142"
+ column="45"/>
</issue>
<issue
@@ -10885,7 +13267,9 @@
errorLine1=" protected void onDraw(Canvas canvas) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PagingIndicator.java"/>
+ file="src/main/java/androidx/leanback/widget/PagingIndicator.java"
+ line="416"
+ column="27"/>
</issue>
<issue
@@ -10894,7 +13278,9 @@
errorLine1=" public IntProperty(String name, int index) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="127"
+ column="28"/>
</issue>
<issue
@@ -10903,7 +13289,9 @@
errorLine1=" public final Integer get(Parallax object) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="133"
+ column="22"/>
</issue>
<issue
@@ -10912,7 +13300,9 @@
errorLine1=" public final Integer get(Parallax object) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="133"
+ column="34"/>
</issue>
<issue
@@ -10921,7 +13311,9 @@
errorLine1=" public final void set(Parallax object, Integer value) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="138"
+ column="31"/>
</issue>
<issue
@@ -10930,7 +13322,9 @@
errorLine1=" public final void set(Parallax object, Integer value) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="138"
+ column="48"/>
</issue>
<issue
@@ -10939,7 +13333,9 @@
errorLine1=" public final int getValue(Parallax object) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="154"
+ column="35"/>
</issue>
<issue
@@ -10948,7 +13344,9 @@
errorLine1=" public final void setValue(Parallax object, int value) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="164"
+ column="36"/>
</issue>
<issue
@@ -10957,7 +13355,9 @@
errorLine1=" public final PropertyMarkerValue atAbsolute(int absoluteValue) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="174"
+ column="22"/>
</issue>
<issue
@@ -10966,7 +13366,9 @@
errorLine1=" public final PropertyMarkerValue atMax() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="184"
+ column="22"/>
</issue>
<issue
@@ -10975,7 +13377,9 @@
errorLine1=" public final PropertyMarkerValue atMin() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="193"
+ column="22"/>
</issue>
<issue
@@ -10984,7 +13388,9 @@
errorLine1=" public final PropertyMarkerValue atFraction(float fractionOfMaxValue) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="206"
+ column="22"/>
</issue>
<issue
@@ -10993,7 +13399,9 @@
errorLine1=" public final PropertyMarkerValue at(int offsetValue,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="221"
+ column="22"/>
</issue>
<issue
@@ -11002,7 +13410,9 @@
errorLine1=" public FloatProperty(String name, int index) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="280"
+ column="30"/>
</issue>
<issue
@@ -11011,7 +13421,9 @@
errorLine1=" public final Float get(Parallax object) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="286"
+ column="22"/>
</issue>
<issue
@@ -11020,7 +13432,9 @@
errorLine1=" public final Float get(Parallax object) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="286"
+ column="32"/>
</issue>
<issue
@@ -11029,7 +13443,9 @@
errorLine1=" public final void set(Parallax object, Float value) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="291"
+ column="31"/>
</issue>
<issue
@@ -11038,7 +13454,9 @@
errorLine1=" public final void set(Parallax object, Float value) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="291"
+ column="48"/>
</issue>
<issue
@@ -11047,7 +13465,9 @@
errorLine1=" public final float getValue(Parallax object) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="307"
+ column="37"/>
</issue>
<issue
@@ -11056,7 +13476,9 @@
errorLine1=" public final void setValue(Parallax object, float value) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="317"
+ column="36"/>
</issue>
<issue
@@ -11065,7 +13487,9 @@
errorLine1=" public final PropertyMarkerValue atAbsolute(float markerValue) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="327"
+ column="22"/>
</issue>
<issue
@@ -11074,7 +13498,9 @@
errorLine1=" public final PropertyMarkerValue atMax() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="337"
+ column="22"/>
</issue>
<issue
@@ -11083,7 +13509,9 @@
errorLine1=" public final PropertyMarkerValue atMin() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="346"
+ column="22"/>
</issue>
<issue
@@ -11092,7 +13520,9 @@
errorLine1=" public final PropertyMarkerValue atFraction(float fractionOfMaxParentVisibleSize) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="359"
+ column="22"/>
</issue>
<issue
@@ -11101,7 +13531,9 @@
errorLine1=" public final PropertyMarkerValue at(float offsetValue,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="373"
+ column="22"/>
</issue>
<issue
@@ -11110,7 +13542,9 @@
errorLine1=" public final PropertyT addProperty(String name) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="453"
+ column="40"/>
</issue>
<issue
@@ -11119,7 +13553,9 @@
errorLine1=" public final List<PropertyT> getProperties() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="559"
+ column="18"/>
</issue>
<issue
@@ -11128,7 +13564,9 @@
errorLine1=" public abstract PropertyT createProperty(String name, int index);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="570"
+ column="46"/>
</issue>
<issue
@@ -11137,7 +13575,9 @@
errorLine1=" public List<ParallaxEffect> getEffects() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="589"
+ column="12"/>
</issue>
<issue
@@ -11146,7 +13586,9 @@
errorLine1=" public void removeEffect(ParallaxEffect effect) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="598"
+ column="30"/>
</issue>
<issue
@@ -11155,7 +13597,9 @@
errorLine1=" public ParallaxEffect addEffect(PropertyMarkerValue... ranges) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="616"
+ column="12"/>
</issue>
<issue
@@ -11164,7 +13608,9 @@
errorLine1=" public ParallaxEffect addEffect(PropertyMarkerValue... ranges) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Parallax.java"/>
+ file="src/main/java/androidx/leanback/widget/Parallax.java"
+ line="616"
+ column="37"/>
</issue>
<issue
@@ -11173,7 +13619,9 @@
errorLine1=" public final List<Parallax.PropertyMarkerValue> getPropertyRanges() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="64"
+ column="18"/>
</issue>
<issue
@@ -11182,7 +13630,9 @@
errorLine1=" public final List<Float> getWeights() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="76"
+ column="18"/>
</issue>
<issue
@@ -11191,7 +13641,9 @@
errorLine1=" public final void setPropertyRanges(Parallax.PropertyMarkerValue... markerValues) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="87"
+ column="41"/>
</issue>
<issue
@@ -11200,7 +13652,9 @@
errorLine1=" public final void setWeights(float... weights) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="103"
+ column="34"/>
</issue>
<issue
@@ -11209,7 +13663,9 @@
errorLine1=" public final ParallaxEffect weights(float... weights) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="129"
+ column="18"/>
</issue>
<issue
@@ -11218,7 +13674,9 @@
errorLine1=" public final ParallaxEffect weights(float... weights) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="129"
+ column="41"/>
</issue>
<issue
@@ -11227,7 +13685,9 @@
errorLine1=" public final void addTarget(ParallaxTarget target) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="139"
+ column="33"/>
</issue>
<issue
@@ -11236,7 +13696,9 @@
errorLine1=" public final ParallaxEffect target(ParallaxTarget target) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="149"
+ column="18"/>
</issue>
<issue
@@ -11245,7 +13707,9 @@
errorLine1=" public final ParallaxEffect target(ParallaxTarget target) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="149"
+ column="40"/>
</issue>
<issue
@@ -11254,7 +13718,9 @@
errorLine1=" public final ParallaxEffect target(Object targetObject, PropertyValuesHolder values) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="162"
+ column="18"/>
</issue>
<issue
@@ -11263,7 +13729,9 @@
errorLine1=" public final ParallaxEffect target(Object targetObject, PropertyValuesHolder values) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="162"
+ column="40"/>
</issue>
<issue
@@ -11272,7 +13740,9 @@
errorLine1=" public final ParallaxEffect target(Object targetObject, PropertyValuesHolder values) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="162"
+ column="61"/>
</issue>
<issue
@@ -11281,7 +13751,9 @@
errorLine1=" public final <T, V extends Number> ParallaxEffect target(T targetObject,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="179"
+ column="40"/>
</issue>
<issue
@@ -11290,7 +13762,9 @@
errorLine1=" Property<T, V> targetProperty) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="180"
+ column="13"/>
</issue>
<issue
@@ -11299,7 +13773,9 @@
errorLine1=" public final List<ParallaxTarget> getTargets() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="190"
+ column="18"/>
</issue>
<issue
@@ -11308,7 +13784,9 @@
errorLine1=" public final void removeTarget(ParallaxTarget target) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="198"
+ column="36"/>
</issue>
<issue
@@ -11317,7 +13795,9 @@
errorLine1=" public final void performMapping(Parallax source) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxEffect.java"
+ line="205"
+ column="38"/>
</issue>
<issue
@@ -11326,7 +13806,9 @@
errorLine1=" public void directUpdate(Number value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"
+ line="64"
+ column="30"/>
</issue>
<issue
@@ -11335,7 +13817,9 @@
errorLine1=" public PropertyValuesHolderTarget(Object targetObject, PropertyValuesHolder values) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"
+ line="81"
+ column="43"/>
</issue>
<issue
@@ -11344,7 +13828,9 @@
errorLine1=" public PropertyValuesHolderTarget(Object targetObject, PropertyValuesHolder values) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"
+ line="81"
+ column="64"/>
</issue>
<issue
@@ -11353,7 +13839,9 @@
errorLine1=" public DirectPropertyTarget(Object targetObject, Property<T, V> property) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"
+ line="111"
+ column="37"/>
</issue>
<issue
@@ -11362,7 +13850,9 @@
errorLine1=" public DirectPropertyTarget(Object targetObject, Property<T, V> property) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"
+ line="111"
+ column="58"/>
</issue>
<issue
@@ -11371,7 +13861,9 @@
errorLine1=" public void directUpdate(Number value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"/>
+ file="src/main/java/androidx/leanback/widget/ParallaxTarget.java"
+ line="127"
+ column="34"/>
</issue>
<issue
@@ -11380,7 +13872,9 @@
errorLine1=" public ParallaxTransition(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+ file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+ line="54"
+ column="31"/>
</issue>
<issue
@@ -11389,7 +13883,9 @@
errorLine1=" public ParallaxTransition(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+ file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+ line="54"
+ column="48"/>
</issue>
<issue
@@ -11398,7 +13894,9 @@
errorLine1=" public Animator onAppear(ViewGroup sceneRoot, View view,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+ file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+ line="75"
+ column="12"/>
</issue>
<issue
@@ -11407,7 +13905,9 @@
errorLine1=" public Animator onAppear(ViewGroup sceneRoot, View view,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+ file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+ line="75"
+ column="30"/>
</issue>
<issue
@@ -11416,7 +13916,9 @@
errorLine1=" public Animator onAppear(ViewGroup sceneRoot, View view,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+ file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+ line="75"
+ column="51"/>
</issue>
<issue
@@ -11425,7 +13927,9 @@
errorLine1=" TransitionValues startValues, TransitionValues endValues) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+ file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+ line="76"
+ column="30"/>
</issue>
<issue
@@ -11434,7 +13938,9 @@
errorLine1=" TransitionValues startValues, TransitionValues endValues) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+ file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+ line="76"
+ column="60"/>
</issue>
<issue
@@ -11443,7 +13949,9 @@
errorLine1=" public Animator onDisappear(ViewGroup sceneRoot, View view,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+ file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+ line="84"
+ column="12"/>
</issue>
<issue
@@ -11452,7 +13960,9 @@
errorLine1=" public Animator onDisappear(ViewGroup sceneRoot, View view,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+ file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+ line="84"
+ column="33"/>
</issue>
<issue
@@ -11461,7 +13971,9 @@
errorLine1=" public Animator onDisappear(ViewGroup sceneRoot, View view,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+ file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+ line="84"
+ column="54"/>
</issue>
<issue
@@ -11470,7 +13982,9 @@
errorLine1=" TransitionValues startValues, TransitionValues endValues) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+ file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+ line="85"
+ column="33"/>
</issue>
<issue
@@ -11479,7 +13993,9 @@
errorLine1=" TransitionValues startValues, TransitionValues endValues) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"/>
+ file="src/main/java/androidx/leanback/transition/ParallaxTransition.java"
+ line="85"
+ column="63"/>
</issue>
<issue
@@ -11488,7 +14004,9 @@
errorLine1=" public static void requestPermissions(android.app.Fragment fragment, String[] permissions,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PermissionHelper.java"/>
+ file="src/main/java/androidx/leanback/app/PermissionHelper.java"
+ line="30"
+ column="43"/>
</issue>
<issue
@@ -11497,7 +14015,9 @@
errorLine1=" public static void requestPermissions(android.app.Fragment fragment, String[] permissions,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PermissionHelper.java"/>
+ file="src/main/java/androidx/leanback/app/PermissionHelper.java"
+ line="30"
+ column="74"/>
</issue>
<issue
@@ -11506,7 +14026,9 @@
errorLine1=" void onValueChanged(Picker picker, int column);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="76"
+ column="29"/>
</issue>
<issue
@@ -11515,7 +14037,9 @@
errorLine1=" public final CharSequence getSeparator() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="105"
+ column="18"/>
</issue>
<issue
@@ -11524,7 +14048,9 @@
errorLine1=" public final void setSeparator(CharSequence separator) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="114"
+ column="36"/>
</issue>
<issue
@@ -11533,7 +14059,9 @@
errorLine1=" public final List<CharSequence> getSeparators() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="123"
+ column="18"/>
</issue>
<issue
@@ -11542,7 +14070,9 @@
errorLine1=" public final void setSeparators(List<CharSequence> separators) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="139"
+ column="37"/>
</issue>
<issue
@@ -11551,7 +14081,9 @@
errorLine1=" public Picker(Context context, AttributeSet attributeSet) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="189"
+ column="19"/>
</issue>
<issue
@@ -11560,7 +14092,9 @@
errorLine1=" public Picker(Context context, AttributeSet attributeSet) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="189"
+ column="36"/>
</issue>
<issue
@@ -11569,7 +14103,9 @@
errorLine1=" public Picker(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="197"
+ column="19"/>
</issue>
<issue
@@ -11578,7 +14114,9 @@
errorLine1=" public Picker(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="197"
+ column="36"/>
</issue>
<issue
@@ -11587,7 +14125,9 @@
errorLine1=" public PickerColumn getColumnAt(int colIndex) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="232"
+ column="12"/>
</issue>
<issue
@@ -11596,7 +14136,9 @@
errorLine1=" public void setColumns(List<PickerColumn> columns) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="258"
+ column="28"/>
</issue>
<issue
@@ -11605,7 +14147,9 @@
errorLine1=" public void setColumnAt(int columnIndex, PickerColumn column) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="333"
+ column="46"/>
</issue>
<issue
@@ -11614,7 +14158,9 @@
errorLine1=" public void addOnValueChangedListener(PickerValueListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="380"
+ column="43"/>
</issue>
<issue
@@ -11623,7 +14169,9 @@
errorLine1=" public void removeOnValueChangedListener(PickerValueListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="392"
+ column="46"/>
</issue>
<issue
@@ -11632,7 +14180,9 @@
errorLine1=" public boolean dispatchKeyEvent(android.view.KeyEvent event) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="545"
+ column="37"/>
</issue>
<issue
@@ -11641,7 +14191,9 @@
errorLine1=" protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="564"
+ column="66"/>
</issue>
<issue
@@ -11650,7 +14202,9 @@
errorLine1=" public void requestChildFocus(View child, View focused) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="700"
+ column="35"/>
</issue>
<issue
@@ -11659,7 +14213,9 @@
errorLine1=" public void requestChildFocus(View child, View focused) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/Picker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/Picker.java"
+ line="700"
+ column="47"/>
</issue>
<issue
@@ -11668,7 +14224,9 @@
errorLine1=" public void setLabelFormat(String labelFormat) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"
+ line="41"
+ column="32"/>
</issue>
<issue
@@ -11677,7 +14235,9 @@
errorLine1=" public String getLabelFormat() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"
+ line="50"
+ column="12"/>
</issue>
<issue
@@ -11686,7 +14246,9 @@
errorLine1=" public void setStaticLabels(CharSequence[] labels) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"
+ line="59"
+ column="33"/>
</issue>
<issue
@@ -11695,7 +14257,9 @@
errorLine1=" public CharSequence[] getStaticLabels() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"
+ line="67"
+ column="12"/>
</issue>
<issue
@@ -11704,7 +14268,9 @@
errorLine1=" public CharSequence getLabelFor(int value) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/PickerColumn.java"
+ line="78"
+ column="12"/>
</issue>
<issue
@@ -11713,7 +14279,9 @@
errorLine1=" public PinPicker(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"
+ line="41"
+ column="22"/>
</issue>
<issue
@@ -11722,7 +14290,9 @@
errorLine1=" public PinPicker(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"
+ line="41"
+ column="39"/>
</issue>
<issue
@@ -11731,7 +14301,9 @@
errorLine1=" public PinPicker(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"
+ line="46"
+ column="22"/>
</issue>
<issue
@@ -11740,7 +14312,9 @@
errorLine1=" public PinPicker(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"
+ line="46"
+ column="39"/>
</issue>
<issue
@@ -11749,7 +14323,9 @@
errorLine1=" public boolean dispatchKeyEvent(KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"
+ line="89"
+ column="37"/>
</issue>
<issue
@@ -11758,7 +14334,9 @@
errorLine1=" public String getPin() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"/>
+ file="src/main/java/androidx/leanback/widget/picker/PinPicker.java"
+ line="106"
+ column="12"/>
</issue>
<issue
@@ -11767,7 +14345,9 @@
errorLine1=" public PlaybackBannerControlGlue(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+ line="233"
+ column="38"/>
</issue>
<issue
@@ -11776,7 +14356,9 @@
errorLine1=" int[] seekSpeeds,"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+ line="234"
+ column="13"/>
</issue>
<issue
@@ -11785,7 +14367,9 @@
errorLine1=" public PlaybackBannerControlGlue(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+ line="249"
+ column="38"/>
</issue>
<issue
@@ -11794,7 +14378,9 @@
errorLine1=" int[] fastForwardSpeeds,"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+ line="250"
+ column="37"/>
</issue>
<issue
@@ -11803,7 +14389,9 @@
errorLine1=" int[] rewindSpeeds,"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+ line="251"
+ column="37"/>
</issue>
<issue
@@ -11812,7 +14400,9 @@
errorLine1=" public void setControlsRow(PlaybackControlsRow controlsRow) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+ line="273"
+ column="32"/>
</issue>
<issue
@@ -11821,7 +14411,9 @@
errorLine1=" protected void onCreatePrimaryActions(ArrayObjectAdapter primaryActionsAdapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+ line="279"
+ column="43"/>
</issue>
<issue
@@ -11830,7 +14422,9 @@
errorLine1=" protected PlaybackRowPresenter onCreateRowPresenter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+ line="324"
+ column="15"/>
</issue>
<issue
@@ -11839,7 +14433,9 @@
errorLine1=" public void onActionClicked(Action action) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+ line="357"
+ column="33"/>
</issue>
<issue
@@ -11848,7 +14444,9 @@
errorLine1=" public boolean onKey(View v, int keyCode, KeyEvent event) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+ line="366"
+ column="26"/>
</issue>
<issue
@@ -11857,7 +14455,9 @@
errorLine1=" public boolean onKey(View v, int keyCode, KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBannerControlGlue.java"
+ line="366"
+ column="47"/>
</issue>
<issue
@@ -11866,7 +14466,9 @@
errorLine1=" public PlaybackBaseControlGlue(Context context, T impl) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="212"
+ column="36"/>
</issue>
<issue
@@ -11875,7 +14477,9 @@
errorLine1=" protected void onAttachedToHost(PlaybackGlueHost host) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="223"
+ column="37"/>
</issue>
<issue
@@ -11884,7 +14488,9 @@
errorLine1=" protected abstract PlaybackRowPresenter onCreateRowPresenter();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="290"
+ column="24"/>
</issue>
<issue
@@ -11893,7 +14499,9 @@
errorLine1=" public void setControlsRow(PlaybackControlsRow controlsRow) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="323"
+ column="32"/>
</issue>
<issue
@@ -11902,7 +14510,9 @@
errorLine1=" public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="347"
+ column="41"/>
</issue>
<issue
@@ -11911,7 +14521,9 @@
errorLine1=" public PlaybackControlsRow getControlsRow() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="354"
+ column="12"/>
</issue>
<issue
@@ -11920,7 +14532,9 @@
errorLine1=" public PlaybackRowPresenter getPlaybackRowPresenter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="361"
+ column="12"/>
</issue>
<issue
@@ -11929,7 +14543,9 @@
errorLine1=" public abstract void onActionClicked(Action action);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="369"
+ column="42"/>
</issue>
<issue
@@ -11938,7 +14554,9 @@
errorLine1=" public abstract boolean onKey(View v, int keyCode, KeyEvent event);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="376"
+ column="35"/>
</issue>
<issue
@@ -11947,7 +14565,9 @@
errorLine1=" public abstract boolean onKey(View v, int keyCode, KeyEvent event);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="376"
+ column="56"/>
</issue>
<issue
@@ -11956,7 +14576,9 @@
errorLine1=" protected static void notifyItemChanged(ArrayObjectAdapter adapter, Object object) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="407"
+ column="45"/>
</issue>
<issue
@@ -11965,7 +14587,9 @@
errorLine1=" protected static void notifyItemChanged(ArrayObjectAdapter adapter, Object object) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="407"
+ column="73"/>
</issue>
<issue
@@ -11974,7 +14598,9 @@
errorLine1=" protected void onCreatePrimaryActions(ArrayObjectAdapter primaryActionsAdapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="420"
+ column="43"/>
</issue>
<issue
@@ -11983,7 +14609,9 @@
errorLine1=" protected void onCreateSecondaryActions(ArrayObjectAdapter secondaryActionsAdapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="428"
+ column="45"/>
</issue>
<issue
@@ -11992,7 +14620,9 @@
errorLine1=" public void setArt(Drawable cover) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="500"
+ column="24"/>
</issue>
<issue
@@ -12001,7 +14631,9 @@
errorLine1=" public Drawable getArt() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="514"
+ column="12"/>
</issue>
<issue
@@ -12010,7 +14642,9 @@
errorLine1=" public void setSubtitle(CharSequence subtitle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="523"
+ column="29"/>
</issue>
<issue
@@ -12019,7 +14653,9 @@
errorLine1=" public CharSequence getSubtitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="536"
+ column="12"/>
</issue>
<issue
@@ -12028,7 +14664,9 @@
errorLine1=" public void setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="544"
+ column="26"/>
</issue>
<issue
@@ -12037,7 +14675,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackBaseControlGlue.java"
+ line="557"
+ column="12"/>
</issue>
<issue
@@ -12046,7 +14686,9 @@
errorLine1=" public PlaybackControlGlue(Context context, int[] seekSpeeds) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="217"
+ column="32"/>
</issue>
<issue
@@ -12055,7 +14697,9 @@
errorLine1=" public PlaybackControlGlue(Context context, int[] seekSpeeds) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="217"
+ column="49"/>
</issue>
<issue
@@ -12064,7 +14708,9 @@
errorLine1=" public PlaybackControlGlue(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="228"
+ column="32"/>
</issue>
<issue
@@ -12073,7 +14719,9 @@
errorLine1=" int[] fastForwardSpeeds,"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="229"
+ column="32"/>
</issue>
<issue
@@ -12082,7 +14730,9 @@
errorLine1=" int[] rewindSpeeds) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="230"
+ column="32"/>
</issue>
<issue
@@ -12091,7 +14741,9 @@
errorLine1=" protected void onAttachedToHost(PlaybackGlueHost host) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="243"
+ column="37"/>
</issue>
<issue
@@ -12100,7 +14752,9 @@
errorLine1=" public int[] getFastForwardSpeeds() {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="314"
+ column="12"/>
</issue>
<issue
@@ -12109,7 +14763,9 @@
errorLine1=" public int[] getRewindSpeeds() {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="321"
+ column="12"/>
</issue>
<issue
@@ -12118,7 +14774,9 @@
errorLine1=" public void setControlsRow(PlaybackControlsRow controlsRow) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="347"
+ column="32"/>
</issue>
<issue
@@ -12127,7 +14785,9 @@
errorLine1=" protected SparseArrayObjectAdapter createPrimaryActionsAdapter("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="363"
+ column="15"/>
</issue>
<issue
@@ -12136,7 +14796,9 @@
errorLine1=" PresenterSelector presenterSelector) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="364"
+ column="13"/>
</issue>
<issue
@@ -12145,7 +14807,9 @@
errorLine1=" public void setControlsRowPresenter(PlaybackControlsRowPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="376"
+ column="41"/>
</issue>
<issue
@@ -12154,7 +14818,9 @@
errorLine1=" public PlaybackControlsRow getControlsRow() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="383"
+ column="12"/>
</issue>
<issue
@@ -12163,7 +14829,9 @@
errorLine1=" public PlaybackControlsRowPresenter getControlsRowPresenter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="393"
+ column="12"/>
</issue>
<issue
@@ -12172,7 +14840,9 @@
errorLine1=" public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="402"
+ column="41"/>
</issue>
<issue
@@ -12181,7 +14851,9 @@
errorLine1=" public PlaybackRowPresenter getPlaybackRowPresenter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="410"
+ column="12"/>
</issue>
<issue
@@ -12190,7 +14862,9 @@
errorLine1=" public void onActionClicked(Action action) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="445"
+ column="33"/>
</issue>
<issue
@@ -12199,7 +14873,9 @@
errorLine1=" public boolean onKey(View v, int keyCode, KeyEvent event) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="454"
+ column="26"/>
</issue>
<issue
@@ -12208,7 +14884,9 @@
errorLine1=" public boolean onKey(View v, int keyCode, KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="454"
+ column="47"/>
</issue>
<issue
@@ -12217,7 +14895,9 @@
errorLine1=" public abstract CharSequence getMediaTitle();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="754"
+ column="21"/>
</issue>
<issue
@@ -12226,7 +14906,9 @@
errorLine1=" public abstract CharSequence getMediaSubtitle();"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="759"
+ column="21"/>
</issue>
<issue
@@ -12235,7 +14917,9 @@
errorLine1=" public abstract Drawable getMediaArt();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="769"
+ column="21"/>
</issue>
<issue
@@ -12244,7 +14928,9 @@
errorLine1=" protected void onCreatePrimaryActions(SparseArrayObjectAdapter primaryActionsAdapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="792"
+ column="43"/>
</issue>
<issue
@@ -12253,7 +14939,9 @@
errorLine1=" protected void onCreateSecondaryActions(ArrayObjectAdapter secondaryActionsAdapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackControlGlue.java"
+ line="800"
+ column="45"/>
</issue>
<issue
@@ -12262,7 +14950,9 @@
errorLine1=" public void onCurrentPositionChanged(PlaybackControlsRow row, long currentTimeMs) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="57"
+ column="46"/>
</issue>
<issue
@@ -12271,7 +14961,9 @@
errorLine1=" public void onDurationChanged(PlaybackControlsRow row, long totalTime) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="65"
+ column="39"/>
</issue>
<issue
@@ -12280,7 +14972,9 @@
errorLine1=" public void onBufferedPositionChanged(PlaybackControlsRow row, long bufferedProgressMs) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="73"
+ column="47"/>
</issue>
<issue
@@ -12289,7 +14983,9 @@
errorLine1=" public void setDrawables(Drawable[] drawables) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="98"
+ column="34"/>
</issue>
<issue
@@ -12298,7 +14994,9 @@
errorLine1=" public void setLabels(String[] labels) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="108"
+ column="31"/>
</issue>
<issue
@@ -12307,7 +15005,9 @@
errorLine1=" public void setSecondaryLabels(String[] labels) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="117"
+ column="40"/>
</issue>
<issue
@@ -12316,7 +15016,9 @@
errorLine1=" public Drawable getDrawable(int index) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="138"
+ column="16"/>
</issue>
<issue
@@ -12325,7 +15027,9 @@
errorLine1=" public String getLabel(int index) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="145"
+ column="16"/>
</issue>
<issue
@@ -12334,7 +15038,9 @@
errorLine1=" public String getSecondaryLabel(int index) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="152"
+ column="16"/>
</issue>
<issue
@@ -12343,7 +15049,9 @@
errorLine1=" public PlayPauseAction(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="219"
+ column="32"/>
</issue>
<issue
@@ -12352,7 +15060,9 @@
errorLine1=" public FastForwardAction(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="246"
+ column="34"/>
</issue>
<issue
@@ -12361,7 +15071,9 @@
errorLine1=" public FastForwardAction(Context context, int numSpeeds) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="255"
+ column="34"/>
</issue>
<issue
@@ -12370,7 +15082,9 @@
errorLine1=" public RewindAction(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="293"
+ column="29"/>
</issue>
<issue
@@ -12379,7 +15093,9 @@
errorLine1=" public RewindAction(Context context, int numSpeeds) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="302"
+ column="29"/>
</issue>
<issue
@@ -12388,7 +15104,9 @@
errorLine1=" public SkipNextAction(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="340"
+ column="31"/>
</issue>
<issue
@@ -12397,7 +15115,9 @@
errorLine1=" public SkipPreviousAction(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="357"
+ column="35"/>
</issue>
<issue
@@ -12406,7 +15126,9 @@
errorLine1=" public PictureInPictureAction(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="374"
+ column="39"/>
</issue>
<issue
@@ -12415,7 +15137,9 @@
errorLine1=" public MoreActions(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="391"
+ column="28"/>
</issue>
<issue
@@ -12424,7 +15148,9 @@
errorLine1=" public ThumbsAction(int id, Context context, int solidIconIndex, int outlineIconIndex) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="430"
+ column="37"/>
</issue>
<issue
@@ -12433,7 +15159,9 @@
errorLine1=" public ThumbsUpAction(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="443"
+ column="31"/>
</issue>
<issue
@@ -12442,7 +15170,9 @@
errorLine1=" public ThumbsDownAction(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="459"
+ column="33"/>
</issue>
<issue
@@ -12451,7 +15181,9 @@
errorLine1=" public RepeatAction(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="515"
+ column="29"/>
</issue>
<issue
@@ -12460,7 +15192,9 @@
errorLine1=" public RepeatAction(Context context, int highlightColor) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="524"
+ column="29"/>
</issue>
<issue
@@ -12469,7 +15203,9 @@
errorLine1=" public RepeatAction(Context context, int repeatAllColor, int repeatOneColor) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="534"
+ column="29"/>
</issue>
<issue
@@ -12478,7 +15214,9 @@
errorLine1=" public ShuffleAction(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="591"
+ column="30"/>
</issue>
<issue
@@ -12487,7 +15225,9 @@
errorLine1=" public ShuffleAction(Context context, int highlightColor) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="600"
+ column="30"/>
</issue>
<issue
@@ -12496,7 +15236,9 @@
errorLine1=" public HighQualityAction(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="649"
+ column="34"/>
</issue>
<issue
@@ -12505,7 +15247,9 @@
errorLine1=" public HighQualityAction(Context context, int highlightColor) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="658"
+ column="34"/>
</issue>
<issue
@@ -12514,7 +15258,9 @@
errorLine1=" public ClosedCaptioningAction(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="710"
+ column="39"/>
</issue>
<issue
@@ -12523,7 +15269,9 @@
errorLine1=" public ClosedCaptioningAction(Context context, int highlightColor) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="719"
+ column="39"/>
</issue>
<issue
@@ -12532,7 +15280,9 @@
errorLine1=" public PlaybackControlsRow(Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="784"
+ column="32"/>
</issue>
<issue
@@ -12541,7 +15291,9 @@
errorLine1=" public final Object getItem() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="797"
+ column="18"/>
</issue>
<issue
@@ -12550,7 +15302,9 @@
errorLine1=" public final void setImageDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="808"
+ column="40"/>
</issue>
<issue
@@ -12559,7 +15313,9 @@
errorLine1=" public final void setImageBitmap(Context context, Bitmap bm) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="820"
+ column="38"/>
</issue>
<issue
@@ -12568,7 +15324,9 @@
errorLine1=" public final void setImageBitmap(Context context, Bitmap bm) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="820"
+ column="55"/>
</issue>
<issue
@@ -12577,7 +15335,9 @@
errorLine1=" public final Drawable getImageDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="830"
+ column="18"/>
</issue>
<issue
@@ -12586,7 +15346,9 @@
errorLine1=" public final void setPrimaryActionsAdapter(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="839"
+ column="48"/>
</issue>
<issue
@@ -12595,7 +15357,9 @@
errorLine1=" public final void setSecondaryActionsAdapter(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="848"
+ column="50"/>
</issue>
<issue
@@ -12604,7 +15368,9 @@
errorLine1=" public final ObjectAdapter getPrimaryActionsAdapter() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="855"
+ column="18"/>
</issue>
<issue
@@ -12613,7 +15379,9 @@
errorLine1=" public final ObjectAdapter getSecondaryActionsAdapter() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="862"
+ column="18"/>
</issue>
<issue
@@ -12622,7 +15390,9 @@
errorLine1=" public Action getActionForKeyCode(int keyCode) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="1054"
+ column="12"/>
</issue>
<issue
@@ -12631,7 +15401,9 @@
errorLine1=" public Action getActionForKeyCode(ObjectAdapter adapter, int keyCode) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="1065"
+ column="12"/>
</issue>
<issue
@@ -12640,7 +15412,9 @@
errorLine1=" public Action getActionForKeyCode(ObjectAdapter adapter, int keyCode) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="1065"
+ column="39"/>
</issue>
<issue
@@ -12649,7 +15423,9 @@
errorLine1=" public void setOnPlaybackProgressChangedListener(OnPlaybackProgressCallback listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRow.java"
+ line="1081"
+ column="54"/>
</issue>
<issue
@@ -12658,7 +15434,9 @@
errorLine1=" public PlaybackControlsRowPresenter(Presenter descriptionPresenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="206"
+ column="41"/>
</issue>
<issue
@@ -12667,7 +15445,9 @@
errorLine1=" public void setOnActionClickedListener(OnActionClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="230"
+ column="44"/>
</issue>
<issue
@@ -12676,7 +15456,9 @@
errorLine1=" public OnActionClickedListener getOnActionClickedListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="237"
+ column="12"/>
</issue>
<issue
@@ -12685,7 +15467,9 @@
errorLine1=" public void showBottomSpace(ViewHolder vh, boolean show) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="297"
+ column="33"/>
</issue>
<issue
@@ -12694,7 +15478,9 @@
errorLine1=" public void showPrimaryActions(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="305"
+ column="36"/>
</issue>
<issue
@@ -12703,7 +15489,9 @@
errorLine1=" public void onReappear(RowPresenter.ViewHolder rowViewHolder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="313"
+ column="28"/>
</issue>
<issue
@@ -12712,7 +15500,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="335"
+ column="15"/>
</issue>
<issue
@@ -12721,7 +15511,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="335"
+ column="59"/>
</issue>
<issue
@@ -12730,7 +15522,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="376"
+ column="40"/>
</issue>
<issue
@@ -12739,7 +15533,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="376"
+ column="72"/>
</issue>
<issue
@@ -12748,7 +15544,9 @@
errorLine1=" protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="452"
+ column="42"/>
</issue>
<issue
@@ -12757,7 +15555,9 @@
errorLine1=" protected void onRowViewSelected(RowPresenter.ViewHolder vh, boolean selected) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="467"
+ column="38"/>
</issue>
<issue
@@ -12766,7 +15566,9 @@
errorLine1=" protected void onRowViewAttachedToWindow(RowPresenter.ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="475"
+ column="46"/>
</issue>
<issue
@@ -12775,7 +15577,9 @@
errorLine1=" protected void onRowViewDetachedFromWindow(RowPresenter.ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowPresenter.java"
+ line="484"
+ column="48"/>
</issue>
<issue
@@ -12784,7 +15588,9 @@
errorLine1=" public boolean onUnhandledKey(KeyEvent event);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackControlsRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackControlsRowView.java"
+ line="34"
+ column="39"/>
</issue>
<issue
@@ -12793,7 +15599,9 @@
errorLine1=" public ObjectAdapter getAdapter() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="208"
+ column="12"/>
</issue>
<issue
@@ -12802,7 +15610,9 @@
errorLine1=" public void setFadeCompleteListener(OnFadeCompleteListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="418"
+ column="41"/>
</issue>
<issue
@@ -12811,7 +15621,9 @@
errorLine1=" public OnFadeCompleteListener getFadeCompleteListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="427"
+ column="12"/>
</issue>
<issue
@@ -12820,7 +15632,9 @@
errorLine1=" public final void setOnKeyInterceptListener(View.OnKeyListener handler) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="434"
+ column="49"/>
</issue>
<issue
@@ -12829,7 +15643,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="815"
+ column="26"/>
</issue>
<issue
@@ -12838,7 +15654,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="922"
+ column="12"/>
</issue>
<issue
@@ -12847,7 +15665,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="922"
+ column="30"/>
</issue>
<issue
@@ -12856,7 +15676,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="922"
+ column="55"/>
</issue>
<issue
@@ -12865,7 +15687,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="923"
+ column="30"/>
</issue>
<issue
@@ -12874,7 +15698,9 @@
errorLine1=" public void setHostCallback(PlaybackGlueHost.HostCallback hostCallback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="956"
+ column="33"/>
</issue>
<issue
@@ -12883,7 +15709,9 @@
errorLine1=" public void setOnItemViewSelectedListener(final BaseOnItemViewSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="996"
+ column="53"/>
</issue>
<issue
@@ -12892,7 +15720,9 @@
errorLine1=" public void setOnItemViewClickedListener(final BaseOnItemViewClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="1004"
+ column="52"/>
</issue>
<issue
@@ -12901,7 +15731,9 @@
errorLine1=" public void setOnPlaybackItemViewClickedListener(final BaseOnItemViewClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="1012"
+ column="60"/>
</issue>
<issue
@@ -12910,7 +15742,9 @@
errorLine1=" public void setPlaybackRow(Row row) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="1036"
+ column="32"/>
</issue>
<issue
@@ -12919,7 +15753,9 @@
errorLine1=" public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="1050"
+ column="41"/>
</issue>
<issue
@@ -12928,7 +15764,9 @@
errorLine1=" public void setAdapter(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="1095"
+ column="28"/>
</issue>
<issue
@@ -12937,7 +15775,9 @@
errorLine1=" public void setPlaybackSeekUiClient(PlaybackSeekUi.Client client) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="1171"
+ column="41"/>
</issue>
<issue
@@ -12946,7 +15786,9 @@
errorLine1=" protected void onError(int errorCode, CharSequence errorMessage) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="1228"
+ column="43"/>
</issue>
<issue
@@ -12955,7 +15797,9 @@
errorLine1=" public ProgressBarManager getProgressBarManager() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragment.java"
+ line="1237"
+ column="12"/>
</issue>
<issue
@@ -12964,7 +15808,9 @@
errorLine1=" public PlaybackFragmentGlueHost(PlaybackFragment fragment) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+ line="40"
+ column="37"/>
</issue>
<issue
@@ -12973,7 +15819,9 @@
errorLine1=" public void setOnKeyInterceptListener(View.OnKeyListener onKeyListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+ line="55"
+ column="43"/>
</issue>
<issue
@@ -12982,7 +15830,9 @@
errorLine1=" public void setOnActionClickedListener(final OnActionClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+ line="60"
+ column="50"/>
</issue>
<issue
@@ -12991,7 +15841,9 @@
errorLine1=" public void setHostCallback(HostCallback callback) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+ line="77"
+ column="33"/>
</issue>
<issue
@@ -13000,7 +15852,9 @@
errorLine1=" public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+ line="87"
+ column="41"/>
</issue>
<issue
@@ -13009,7 +15863,9 @@
errorLine1=" public void setPlaybackRow(Row row) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+ line="92"
+ column="32"/>
</issue>
<issue
@@ -13018,7 +15874,9 @@
errorLine1=" public void setPlaybackSeekUiClient(Client client) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+ line="117"
+ column="41"/>
</issue>
<issue
@@ -13027,7 +15885,9 @@
errorLine1=" public PlayerCallback getPlayerCallback() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackFragmentGlueHost.java"
+ line="140"
+ column="12"/>
</issue>
<issue
@@ -13036,7 +15896,9 @@
errorLine1=" public void onPreparedStateChanged(PlaybackGlue glue) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+ line="56"
+ column="44"/>
</issue>
<issue
@@ -13045,7 +15907,9 @@
errorLine1=" public void onPlayStateChanged(PlaybackGlue glue) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+ line="63"
+ column="40"/>
</issue>
<issue
@@ -13054,7 +15918,9 @@
errorLine1=" public void onPlayCompleted(PlaybackGlue glue) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+ line="70"
+ column="37"/>
</issue>
<issue
@@ -13063,7 +15929,9 @@
errorLine1=" public PlaybackGlue(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+ line="79"
+ column="25"/>
</issue>
<issue
@@ -13072,7 +15940,9 @@
errorLine1=" public Context getContext() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+ line="86"
+ column="12"/>
</issue>
<issue
@@ -13081,7 +15951,9 @@
errorLine1=" public void addPlayerCallback(PlayerCallback playerCallback) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+ line="103"
+ column="35"/>
</issue>
<issue
@@ -13090,7 +15962,9 @@
errorLine1=" public void removePlayerCallback(PlayerCallback callback) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+ line="114"
+ column="38"/>
</issue>
<issue
@@ -13099,7 +15973,9 @@
errorLine1=" protected List<PlayerCallback> getPlayerCallbacks() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+ line="123"
+ column="15"/>
</issue>
<issue
@@ -13108,7 +15984,9 @@
errorLine1=" public final void setHost(PlaybackGlueHost host) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+ line="187"
+ column="31"/>
</issue>
<issue
@@ -13117,7 +15995,9 @@
errorLine1=" protected void onAttachedToHost(PlaybackGlueHost host) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+ line="229"
+ column="37"/>
</issue>
<issue
@@ -13126,7 +16006,9 @@
errorLine1=" public PlaybackGlueHost getHost() {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlue.java"
+ line="276"
+ column="12"/>
</issue>
<issue
@@ -13135,7 +16017,9 @@
errorLine1=" public void onError(int errorCode, CharSequence errorMessage) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+ line="116"
+ column="44"/>
</issue>
<issue
@@ -13144,7 +16028,9 @@
errorLine1=" public void setOnKeyInterceptListener(View.OnKeyListener onKeyListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+ line="186"
+ column="43"/>
</issue>
<issue
@@ -13153,7 +16039,9 @@
errorLine1=" public void setOnActionClickedListener(OnActionClickedListener listener) {}"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+ line="192"
+ column="44"/>
</issue>
<issue
@@ -13162,7 +16050,9 @@
errorLine1=" public void setHostCallback(HostCallback callback) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+ line="199"
+ column="33"/>
</issue>
<issue
@@ -13171,7 +16061,9 @@
errorLine1=" public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {}"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+ line="210"
+ column="41"/>
</issue>
<issue
@@ -13180,7 +16072,9 @@
errorLine1=" public void setPlaybackRow(Row row) {}"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+ line="216"
+ column="32"/>
</issue>
<issue
@@ -13189,7 +16083,9 @@
errorLine1=" public PlayerCallback getPlayerCallback() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackGlueHost.java"
+ line="233"
+ column="12"/>
</issue>
<issue
@@ -13198,7 +16094,9 @@
errorLine1=" public ViewHolder(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackRowPresenter.java"
+ line="17"
+ column="27"/>
</issue>
<issue
@@ -13207,7 +16105,9 @@
errorLine1=" public void onReappear(RowPresenter.ViewHolder rowViewHolder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackRowPresenter.java"
+ line="25"
+ column="28"/>
</issue>
<issue
@@ -13216,7 +16116,9 @@
errorLine1=" public void onThumbnailLoaded(Bitmap bitmap, int index) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackSeekDataProvider.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackSeekDataProvider.java"
+ line="39"
+ column="39"/>
</issue>
<issue
@@ -13225,7 +16127,9 @@
errorLine1=" public long[] getSeekPositions() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackSeekDataProvider.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackSeekDataProvider.java"
+ line="49"
+ column="12"/>
</issue>
<issue
@@ -13234,7 +16138,9 @@
errorLine1=" public void getThumbnail(int index, ResultCallback callback) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackSeekDataProvider.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackSeekDataProvider.java"
+ line="68"
+ column="41"/>
</issue>
<issue
@@ -13243,7 +16149,9 @@
errorLine1=" public PlaybackSeekDataProvider getPlaybackSeekDataProvider() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackSeekUi.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackSeekUi.java"
+ line="57"
+ column="16"/>
</issue>
<issue
@@ -13252,7 +16160,9 @@
errorLine1=" void setPlaybackSeekUiClient(Client client);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackSeekUi.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackSeekUi.java"
+ line="82"
+ column="34"/>
</issue>
<issue
@@ -13261,7 +16171,9 @@
errorLine1=" public ObjectAdapter getAdapter() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="203"
+ column="12"/>
</issue>
<issue
@@ -13270,7 +16182,9 @@
errorLine1=" public void setFadeCompleteListener(OnFadeCompleteListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="413"
+ column="41"/>
</issue>
<issue
@@ -13279,7 +16193,9 @@
errorLine1=" public OnFadeCompleteListener getFadeCompleteListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="422"
+ column="12"/>
</issue>
<issue
@@ -13288,7 +16204,9 @@
errorLine1=" public final void setOnKeyInterceptListener(View.OnKeyListener handler) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="429"
+ column="49"/>
</issue>
<issue
@@ -13297,7 +16215,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="810"
+ column="26"/>
</issue>
<issue
@@ -13306,7 +16226,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="917"
+ column="12"/>
</issue>
<issue
@@ -13315,7 +16237,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="917"
+ column="30"/>
</issue>
<issue
@@ -13324,7 +16248,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="917"
+ column="55"/>
</issue>
<issue
@@ -13333,7 +16259,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="918"
+ column="30"/>
</issue>
<issue
@@ -13342,7 +16270,9 @@
errorLine1=" public void setHostCallback(PlaybackGlueHost.HostCallback hostCallback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="951"
+ column="33"/>
</issue>
<issue
@@ -13351,7 +16281,9 @@
errorLine1=" public void setOnItemViewSelectedListener(final BaseOnItemViewSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="991"
+ column="53"/>
</issue>
<issue
@@ -13360,7 +16292,9 @@
errorLine1=" public void setOnItemViewClickedListener(final BaseOnItemViewClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="999"
+ column="52"/>
</issue>
<issue
@@ -13369,7 +16303,9 @@
errorLine1=" public void setOnPlaybackItemViewClickedListener(final BaseOnItemViewClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="1007"
+ column="60"/>
</issue>
<issue
@@ -13378,7 +16314,9 @@
errorLine1=" public void setPlaybackRow(Row row) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="1031"
+ column="32"/>
</issue>
<issue
@@ -13387,7 +16325,9 @@
errorLine1=" public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="1045"
+ column="41"/>
</issue>
<issue
@@ -13396,7 +16336,9 @@
errorLine1=" public void setAdapter(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="1090"
+ column="28"/>
</issue>
<issue
@@ -13405,7 +16347,9 @@
errorLine1=" public void setPlaybackSeekUiClient(PlaybackSeekUi.Client client) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="1166"
+ column="41"/>
</issue>
<issue
@@ -13414,7 +16358,9 @@
errorLine1=" protected void onError(int errorCode, CharSequence errorMessage) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="1223"
+ column="43"/>
</issue>
<issue
@@ -13423,7 +16369,9 @@
errorLine1=" public ProgressBarManager getProgressBarManager() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragment.java"
+ line="1232"
+ column="12"/>
</issue>
<issue
@@ -13432,7 +16380,9 @@
errorLine1=" public PlaybackSupportFragmentGlueHost(PlaybackSupportFragment fragment) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+ line="35"
+ column="44"/>
</issue>
<issue
@@ -13441,7 +16391,9 @@
errorLine1=" public void setOnKeyInterceptListener(View.OnKeyListener onKeyListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+ line="50"
+ column="43"/>
</issue>
<issue
@@ -13450,7 +16402,9 @@
errorLine1=" public void setOnActionClickedListener(final OnActionClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+ line="55"
+ column="50"/>
</issue>
<issue
@@ -13459,7 +16413,9 @@
errorLine1=" public void setHostCallback(HostCallback callback) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+ line="72"
+ column="33"/>
</issue>
<issue
@@ -13468,7 +16424,9 @@
errorLine1=" public void setPlaybackRowPresenter(PlaybackRowPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+ line="82"
+ column="41"/>
</issue>
<issue
@@ -13477,7 +16435,9 @@
errorLine1=" public void setPlaybackRow(Row row) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+ line="87"
+ column="32"/>
</issue>
<issue
@@ -13486,7 +16446,9 @@
errorLine1=" public void setPlaybackSeekUiClient(Client client) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+ line="112"
+ column="41"/>
</issue>
<issue
@@ -13495,7 +16457,9 @@
errorLine1=" public PlayerCallback getPlayerCallback() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"/>
+ file="src/main/java/androidx/leanback/app/PlaybackSupportFragmentGlueHost.java"
+ line="135"
+ column="12"/>
</issue>
<issue
@@ -13504,7 +16468,9 @@
errorLine1=" public PlaybackTransportControlGlue(Context context, T impl) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+ line="123"
+ column="41"/>
</issue>
<issue
@@ -13513,7 +16479,9 @@
errorLine1=" public void setControlsRow(PlaybackControlsRow controlsRow) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+ line="128"
+ column="32"/>
</issue>
<issue
@@ -13522,7 +16490,9 @@
errorLine1=" protected void onCreatePrimaryActions(ArrayObjectAdapter primaryActionsAdapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+ line="135"
+ column="43"/>
</issue>
<issue
@@ -13531,7 +16501,9 @@
errorLine1=" protected PlaybackRowPresenter onCreateRowPresenter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+ line="141"
+ column="15"/>
</issue>
<issue
@@ -13540,7 +16512,9 @@
errorLine1=" protected void onAttachedToHost(PlaybackGlueHost host) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+ line="170"
+ column="37"/>
</issue>
<issue
@@ -13549,7 +16523,9 @@
errorLine1=" public void onActionClicked(Action action) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+ line="195"
+ column="33"/>
</issue>
<issue
@@ -13558,7 +16534,9 @@
errorLine1=" public boolean onKey(View v, int keyCode, KeyEvent event) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+ line="200"
+ column="26"/>
</issue>
<issue
@@ -13567,7 +16545,9 @@
errorLine1=" public boolean onKey(View v, int keyCode, KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+ line="200"
+ column="47"/>
</issue>
<issue
@@ -13576,7 +16556,9 @@
errorLine1=" public final void setSeekProvider(PlaybackSeekDataProvider seekProvider) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+ line="394"
+ column="39"/>
</issue>
<issue
@@ -13585,7 +16567,9 @@
errorLine1=" public final PlaybackSeekDataProvider getSeekProvider() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"/>
+ file="src/main/java/androidx/leanback/media/PlaybackTransportControlGlue.java"
+ line="402"
+ column="18"/>
</issue>
<issue
@@ -13594,7 +16578,9 @@
errorLine1=" public ViewHolder(View rootView, Presenter descriptionPresenter) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="265"
+ column="27"/>
</issue>
<issue
@@ -13603,7 +16589,9 @@
errorLine1=" public ViewHolder(View rootView, Presenter descriptionPresenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="265"
+ column="42"/>
</issue>
<issue
@@ -13612,7 +16600,9 @@
errorLine1=" public final Presenter.ViewHolder getDescriptionViewHolder() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="353"
+ column="22"/>
</issue>
<issue
@@ -13621,7 +16611,9 @@
errorLine1=" public void setPlaybackSeekUiClient(Client client) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="358"
+ column="45"/>
</issue>
<issue
@@ -13630,7 +16622,9 @@
errorLine1=" public final TextView getDurationView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="449"
+ column="22"/>
</issue>
<issue
@@ -13639,7 +16633,9 @@
errorLine1=" public final TextView getCurrentPositionView() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="477"
+ column="22"/>
</issue>
<issue
@@ -13648,7 +16644,9 @@
errorLine1=" public void setDescriptionPresenter(Presenter descriptionPresenter) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="602"
+ column="41"/>
</issue>
<issue
@@ -13657,7 +16655,9 @@
errorLine1=" public void setOnActionClickedListener(OnActionClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="609"
+ column="44"/>
</issue>
<issue
@@ -13666,7 +16666,9 @@
errorLine1=" public OnActionClickedListener getOnActionClickedListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="616"
+ column="12"/>
</issue>
<issue
@@ -13675,7 +16677,9 @@
errorLine1=" public void onReappear(RowPresenter.ViewHolder rowViewHolder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="658"
+ column="28"/>
</issue>
<issue
@@ -13684,7 +16688,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="685"
+ column="15"/>
</issue>
<issue
@@ -13693,7 +16699,9 @@
errorLine1=" protected RowPresenter.ViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="685"
+ column="59"/>
</issue>
<issue
@@ -13702,7 +16710,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="719"
+ column="40"/>
</issue>
<issue
@@ -13711,7 +16721,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="719"
+ column="72"/>
</issue>
<issue
@@ -13720,7 +16732,9 @@
errorLine1=" protected void onUnbindRowViewHolder(RowPresenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="759"
+ column="42"/>
</issue>
<issue
@@ -13729,7 +16743,9 @@
errorLine1=" protected void onProgressBarClicked(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="780"
+ column="41"/>
</issue>
<issue
@@ -13738,7 +16754,9 @@
errorLine1=" protected void onRowViewSelected(RowPresenter.ViewHolder vh, boolean selected) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="812"
+ column="38"/>
</issue>
<issue
@@ -13747,7 +16765,9 @@
errorLine1=" protected void onRowViewAttachedToWindow(RowPresenter.ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="820"
+ column="46"/>
</issue>
<issue
@@ -13756,7 +16776,9 @@
errorLine1=" protected void onRowViewDetachedFromWindow(RowPresenter.ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowPresenter.java"
+ line="829"
+ column="48"/>
</issue>
<issue
@@ -13765,7 +16787,9 @@
errorLine1=" boolean onUnhandledKey(KeyEvent event);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+ line="48"
+ column="32"/>
</issue>
<issue
@@ -13774,7 +16798,9 @@
errorLine1=" public PlaybackTransportRowView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+ line="53"
+ column="37"/>
</issue>
<issue
@@ -13783,7 +16809,9 @@
errorLine1=" public PlaybackTransportRowView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+ line="53"
+ column="54"/>
</issue>
<issue
@@ -13792,7 +16820,9 @@
errorLine1=" public PlaybackTransportRowView(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+ line="57"
+ column="37"/>
</issue>
<issue
@@ -13801,7 +16831,9 @@
errorLine1=" public PlaybackTransportRowView(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+ line="57"
+ column="54"/>
</issue>
<issue
@@ -13810,7 +16842,9 @@
errorLine1=" public boolean dispatchKeyEvent(KeyEvent event) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+ line="70"
+ column="37"/>
</issue>
<issue
@@ -13819,7 +16853,9 @@
errorLine1=" protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+ line="78"
+ column="66"/>
</issue>
<issue
@@ -13828,7 +16864,9 @@
errorLine1=" public View focusSearch(View focused, int direction) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+ line="93"
+ column="12"/>
</issue>
<issue
@@ -13837,7 +16875,9 @@
errorLine1=" public View focusSearch(View focused, int direction) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"/>
+ file="src/main/java/androidx/leanback/widget/PlaybackTransportRowView.java"
+ line="93"
+ column="29"/>
</issue>
<issue
@@ -13846,7 +16886,9 @@
errorLine1=" public void onPlayStateChanged(PlayerAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="38"
+ column="40"/>
</issue>
<issue
@@ -13855,7 +16897,9 @@
errorLine1=" public void onPreparedStateChanged(PlayerAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="45"
+ column="44"/>
</issue>
<issue
@@ -13864,7 +16908,9 @@
errorLine1=" public void onPlayCompleted(PlayerAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="52"
+ column="37"/>
</issue>
<issue
@@ -13873,7 +16919,9 @@
errorLine1=" public void onCurrentPositionChanged(PlayerAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="59"
+ column="46"/>
</issue>
<issue
@@ -13882,7 +16930,9 @@
errorLine1=" public void onBufferedPositionChanged(PlayerAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="66"
+ column="47"/>
</issue>
<issue
@@ -13891,7 +16941,9 @@
errorLine1=" public void onDurationChanged(PlayerAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="74"
+ column="39"/>
</issue>
<issue
@@ -13900,7 +16952,9 @@
errorLine1=" public void onVideoSizeChanged(PlayerAdapter adapter, int width, int height) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="83"
+ column="40"/>
</issue>
<issue
@@ -13909,7 +16963,9 @@
errorLine1=" public void onError(PlayerAdapter adapter, int errorCode, String errorMessage) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="92"
+ column="29"/>
</issue>
<issue
@@ -13918,7 +16974,9 @@
errorLine1=" public void onError(PlayerAdapter adapter, int errorCode, String errorMessage) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="92"
+ column="67"/>
</issue>
<issue
@@ -13927,7 +16985,9 @@
errorLine1=" public void onBufferingStateChanged(PlayerAdapter adapter, boolean start) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="100"
+ column="45"/>
</issue>
<issue
@@ -13936,7 +16996,9 @@
errorLine1=" public void onMetadataChanged(PlayerAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="107"
+ column="39"/>
</issue>
<issue
@@ -13945,7 +17007,9 @@
errorLine1=" public final void setCallback(Callback callback) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="117"
+ column="35"/>
</issue>
<issue
@@ -13954,7 +17018,9 @@
errorLine1=" public final Callback getCallback() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="125"
+ column="18"/>
</issue>
<issue
@@ -13963,7 +17029,9 @@
errorLine1=" public void onAttachedToHost(PlaybackGlueHost host) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/media/PlayerAdapter.java"/>
+ file="src/main/java/androidx/leanback/media/PlayerAdapter.java"
+ line="255"
+ column="34"/>
</issue>
<issue
@@ -13972,7 +17040,9 @@
errorLine1=" public ViewHolder(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="82"
+ column="27"/>
</issue>
<issue
@@ -13981,7 +17051,9 @@
errorLine1=" public final Object getFacet(Class<?> facetClass) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="87"
+ column="22"/>
</issue>
<issue
@@ -13990,7 +17062,9 @@
errorLine1=" public final Object getFacet(Class<?> facetClass) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="87"
+ column="38"/>
</issue>
<issue
@@ -13999,7 +17073,9 @@
errorLine1=" public final void setFacet(Class<?> facetClass, Object facetImpl) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="99"
+ column="36"/>
</issue>
<issue
@@ -14008,7 +17084,9 @@
errorLine1=" public final void setFacet(Class<?> facetClass, Object facetImpl) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="99"
+ column="57"/>
</issue>
<issue
@@ -14017,7 +17095,9 @@
errorLine1=" public void run(Presenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="115"
+ column="25"/>
</issue>
<issue
@@ -14026,7 +17106,9 @@
errorLine1=" public abstract ViewHolder onCreateViewHolder(ViewGroup parent);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="124"
+ column="21"/>
</issue>
<issue
@@ -14035,7 +17117,9 @@
errorLine1=" public abstract ViewHolder onCreateViewHolder(ViewGroup parent);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="124"
+ column="51"/>
</issue>
<issue
@@ -14044,7 +17128,9 @@
errorLine1=" public abstract void onBindViewHolder(ViewHolder viewHolder, Object item);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="129"
+ column="43"/>
</issue>
<issue
@@ -14053,7 +17139,9 @@
errorLine1=" public abstract void onBindViewHolder(ViewHolder viewHolder, Object item);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="129"
+ column="66"/>
</issue>
<issue
@@ -14062,7 +17150,9 @@
errorLine1=" public void onBindViewHolder(ViewHolder viewHolder, Object item, List<Object> payloads) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="139"
+ column="34"/>
</issue>
<issue
@@ -14071,7 +17161,9 @@
errorLine1=" public void onBindViewHolder(ViewHolder viewHolder, Object item, List<Object> payloads) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="139"
+ column="57"/>
</issue>
<issue
@@ -14080,7 +17172,9 @@
errorLine1=" public void onBindViewHolder(ViewHolder viewHolder, Object item, List<Object> payloads) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="139"
+ column="70"/>
</issue>
<issue
@@ -14089,7 +17183,9 @@
errorLine1=" public abstract void onUnbindViewHolder(ViewHolder viewHolder);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="148"
+ column="45"/>
</issue>
<issue
@@ -14098,7 +17194,9 @@
errorLine1=" public void onViewAttachedToWindow(ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="160"
+ column="40"/>
</issue>
<issue
@@ -14107,7 +17205,9 @@
errorLine1=" public void onViewDetachedFromWindow(ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="175"
+ column="42"/>
</issue>
<issue
@@ -14116,7 +17216,9 @@
errorLine1=" protected static void cancelAnimationsRecursive(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="183"
+ column="53"/>
</issue>
<issue
@@ -14125,7 +17227,9 @@
errorLine1=" public void setOnClickListener(ViewHolder holder, View.OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="205"
+ column="36"/>
</issue>
<issue
@@ -14134,7 +17238,9 @@
errorLine1=" public void setOnClickListener(ViewHolder holder, View.OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="205"
+ column="55"/>
</issue>
<issue
@@ -14143,7 +17249,9 @@
errorLine1=" public final Object getFacet(Class<?> facetClass) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="210"
+ column="18"/>
</issue>
<issue
@@ -14152,7 +17260,9 @@
errorLine1=" public final Object getFacet(Class<?> facetClass) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="210"
+ column="34"/>
</issue>
<issue
@@ -14161,7 +17271,9 @@
errorLine1=" public final void setFacet(Class<?> facetClass, Object facetImpl) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="222"
+ column="32"/>
</issue>
<issue
@@ -14170,7 +17282,9 @@
errorLine1=" public final void setFacet(Class<?> facetClass, Object facetImpl) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Presenter.java"/>
+ file="src/main/java/androidx/leanback/widget/Presenter.java"
+ line="222"
+ column="53"/>
</issue>
<issue
@@ -14179,7 +17293,9 @@
errorLine1=" public abstract Presenter getPresenter(Object item);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/PresenterSelector.java"
+ line="24"
+ column="21"/>
</issue>
<issue
@@ -14188,7 +17304,9 @@
errorLine1=" public abstract Presenter getPresenter(Object item);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/PresenterSelector.java"
+ line="24"
+ column="44"/>
</issue>
<issue
@@ -14197,7 +17315,9 @@
errorLine1=" public Presenter[] getPresenters() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PresenterSelector.java"/>
+ file="src/main/java/androidx/leanback/widget/PresenterSelector.java"
+ line="30"
+ column="12"/>
</issue>
<issue
@@ -14206,7 +17326,9 @@
errorLine1=" public void init(ViewGroup parent, PresenterSelector presenterSelector) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+ file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+ line="36"
+ column="22"/>
</issue>
<issue
@@ -14215,7 +17337,9 @@
errorLine1=" public void init(ViewGroup parent, PresenterSelector presenterSelector) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+ file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+ line="36"
+ column="40"/>
</issue>
<issue
@@ -14224,7 +17348,9 @@
errorLine1=" public void select(Object object) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+ file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+ line="45"
+ column="24"/>
</issue>
<issue
@@ -14233,7 +17359,9 @@
errorLine1=" public final ViewGroup getParentViewGroup() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+ file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+ line="60"
+ column="18"/>
</issue>
<issue
@@ -14242,7 +17370,9 @@
errorLine1=" protected abstract void insertView(View view);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+ file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+ line="91"
+ column="40"/>
</issue>
<issue
@@ -14251,7 +17381,9 @@
errorLine1=" protected void onViewSelected(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+ file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+ line="96"
+ column="35"/>
</issue>
<issue
@@ -14260,7 +17392,9 @@
errorLine1=" protected void showView(View view, boolean visible) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"/>
+ file="src/main/java/androidx/leanback/widget/PresenterSwitcher.java"
+ line="99"
+ column="29"/>
</issue>
<issue
@@ -14269,7 +17403,9 @@
errorLine1=" public void setRootView(ViewGroup rootView) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/ProgressBarManager.java"/>
+ file="src/main/java/androidx/leanback/app/ProgressBarManager.java"
+ line="58"
+ column="29"/>
</issue>
<issue
@@ -14278,7 +17414,9 @@
errorLine1=" public void setProgressBarView(View progressBarView) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/ProgressBarManager.java"/>
+ file="src/main/java/androidx/leanback/app/ProgressBarManager.java"
+ line="93"
+ column="36"/>
</issue>
<issue
@@ -14287,7 +17425,9 @@
errorLine1=" public ChildPositionProperty adapterPosition(int adapterPosition) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+ file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+ line="77"
+ column="16"/>
</issue>
<issue
@@ -14296,7 +17436,9 @@
errorLine1=" public ChildPositionProperty viewId(int viewId) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+ file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+ line="88"
+ column="16"/>
</issue>
<issue
@@ -14305,7 +17447,9 @@
errorLine1=" public ChildPositionProperty offset(int offset) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+ file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+ line="99"
+ column="16"/>
</issue>
<issue
@@ -14314,7 +17458,9 @@
errorLine1=" public ChildPositionProperty fraction(float fraction) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+ file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+ line="112"
+ column="16"/>
</issue>
<issue
@@ -14323,7 +17469,9 @@
errorLine1=" public ChildPositionProperty createProperty(String name, int index) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+ file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+ line="201"
+ column="12"/>
</issue>
<issue
@@ -14332,7 +17480,9 @@
errorLine1=" public ChildPositionProperty createProperty(String name, int index) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+ file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+ line="201"
+ column="49"/>
</issue>
<issue
@@ -14341,7 +17491,9 @@
errorLine1=" public void setRecyclerView(RecyclerView recyclerView) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+ file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+ line="217"
+ column="33"/>
</issue>
<issue
@@ -14350,7 +17502,9 @@
errorLine1=" public RecyclerView getRecyclerView() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"/>
+ file="src/main/java/androidx/leanback/widget/RecyclerViewParallax.java"
+ line="250"
+ column="12"/>
</issue>
<issue
@@ -14359,7 +17513,9 @@
errorLine1=" public Row(long id, HeaderItem headerItem) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Row.java"/>
+ file="src/main/java/androidx/leanback/widget/Row.java"
+ line="39"
+ column="25"/>
</issue>
<issue
@@ -14368,7 +17524,9 @@
errorLine1=" public Row(HeaderItem headerItem) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Row.java"/>
+ file="src/main/java/androidx/leanback/widget/Row.java"
+ line="50"
+ column="16"/>
</issue>
<issue
@@ -14377,7 +17535,9 @@
errorLine1=" public final HeaderItem getHeaderItem() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Row.java"/>
+ file="src/main/java/androidx/leanback/widget/Row.java"
+ line="65"
+ column="18"/>
</issue>
<issue
@@ -14386,7 +17546,9 @@
errorLine1=" public final void setHeaderItem(HeaderItem headerItem) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/Row.java"/>
+ file="src/main/java/androidx/leanback/widget/Row.java"
+ line="75"
+ column="37"/>
</issue>
<issue
@@ -14395,7 +17557,9 @@
errorLine1=" public ViewHolder(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+ line="94"
+ column="27"/>
</issue>
<issue
@@ -14404,7 +17568,9 @@
errorLine1=" public ViewHolder(RowHeaderView view) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+ line="107"
+ column="27"/>
</issue>
<issue
@@ -14413,7 +17579,9 @@
errorLine1=" public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+ line="128"
+ column="12"/>
</issue>
<issue
@@ -14422,7 +17590,9 @@
errorLine1=" public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+ line="128"
+ column="52"/>
</issue>
<issue
@@ -14431,7 +17601,9 @@
errorLine1=" public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+ line="140"
+ column="34"/>
</issue>
<issue
@@ -14440,7 +17612,9 @@
errorLine1=" public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+ line="140"
+ column="67"/>
</issue>
<issue
@@ -14449,7 +17623,9 @@
errorLine1=" public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+ line="173"
+ column="36"/>
</issue>
<issue
@@ -14458,7 +17634,9 @@
errorLine1=" public final void setSelectLevel(ViewHolder holder, float selectLevel) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+ line="190"
+ column="38"/>
</issue>
<issue
@@ -14467,7 +17645,9 @@
errorLine1=" protected void onSelectLevelChanged(ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+ line="198"
+ column="41"/>
</issue>
<issue
@@ -14476,7 +17656,9 @@
errorLine1=" public int getSpaceUnderBaseline(ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+ line="209"
+ column="38"/>
</issue>
<issue
@@ -14485,7 +17667,9 @@
errorLine1=" protected static float getFontDescent(TextView textView, Paint fontMeasurePaint) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+ line="218"
+ column="43"/>
</issue>
<issue
@@ -14494,7 +17678,9 @@
errorLine1=" protected static float getFontDescent(TextView textView, Paint fontMeasurePaint) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderPresenter.java"
+ line="218"
+ column="62"/>
</issue>
<issue
@@ -14503,7 +17689,9 @@
errorLine1=" public RowHeaderView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderView.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderView.java"
+ line="31"
+ column="26"/>
</issue>
<issue
@@ -14512,7 +17700,9 @@
errorLine1=" public RowHeaderView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderView.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderView.java"
+ line="35"
+ column="26"/>
</issue>
<issue
@@ -14521,7 +17711,9 @@
errorLine1=" public RowHeaderView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderView.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderView.java"
+ line="35"
+ column="43"/>
</issue>
<issue
@@ -14530,7 +17722,9 @@
errorLine1=" public RowHeaderView(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderView.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderView.java"
+ line="39"
+ column="26"/>
</issue>
<issue
@@ -14539,7 +17733,9 @@
errorLine1=" public RowHeaderView(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderView.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderView.java"
+ line="39"
+ column="43"/>
</issue>
<issue
@@ -14548,7 +17744,9 @@
errorLine1=" public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowHeaderView.java"/>
+ file="src/main/java/androidx/leanback/widget/RowHeaderView.java"
+ line="48"
+ column="54"/>
</issue>
<issue
@@ -14557,7 +17755,9 @@
errorLine1=" public ViewHolder(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="165"
+ column="27"/>
</issue>
<issue
@@ -14566,7 +17766,9 @@
errorLine1=" public final Row getRow() {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="176"
+ column="22"/>
</issue>
<issue
@@ -14575,7 +17777,9 @@
errorLine1=" public final Object getRowObject() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="184"
+ column="22"/>
</issue>
<issue
@@ -14584,7 +17788,9 @@
errorLine1=" public final RowHeaderPresenter.ViewHolder getHeaderViewHolder() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="216"
+ column="22"/>
</issue>
<issue
@@ -14593,7 +17799,9 @@
errorLine1=" public final void syncActivatedStatus(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="240"
+ column="47"/>
</issue>
<issue
@@ -14602,7 +17810,9 @@
errorLine1=" public void setOnKeyListener(View.OnKeyListener keyListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="251"
+ column="38"/>
</issue>
<issue
@@ -14611,7 +17821,9 @@
errorLine1=" public View.OnKeyListener getOnKeyListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="258"
+ column="16"/>
</issue>
<issue
@@ -14620,7 +17832,9 @@
errorLine1=" public final void setOnItemViewSelectedListener(BaseOnItemViewSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="267"
+ column="57"/>
</issue>
<issue
@@ -14629,7 +17843,9 @@
errorLine1=" public final BaseOnItemViewSelectedListener getOnItemViewSelectedListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="274"
+ column="22"/>
</issue>
<issue
@@ -14638,7 +17854,9 @@
errorLine1=" public final void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="284"
+ column="56"/>
</issue>
<issue
@@ -14647,7 +17865,9 @@
errorLine1=" public final BaseOnItemViewClickedListener getOnItemViewClickedListener() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="291"
+ column="22"/>
</issue>
<issue
@@ -14656,7 +17876,9 @@
errorLine1=" public Presenter.ViewHolder getSelectedItemViewHolder() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="298"
+ column="16"/>
</issue>
<issue
@@ -14665,7 +17887,9 @@
errorLine1=" public Object getSelectedItem() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="306"
+ column="16"/>
</issue>
<issue
@@ -14674,7 +17898,9 @@
errorLine1=" public final Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="325"
+ column="18"/>
</issue>
<issue
@@ -14683,7 +17909,9 @@
errorLine1=" public final Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="325"
+ column="58"/>
</issue>
<issue
@@ -14692,7 +17920,9 @@
errorLine1=" protected abstract ViewHolder createRowViewHolder(ViewGroup parent);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="353"
+ column="24"/>
</issue>
<issue
@@ -14701,7 +17931,9 @@
errorLine1=" protected abstract ViewHolder createRowViewHolder(ViewGroup parent);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="353"
+ column="55"/>
</issue>
<issue
@@ -14710,7 +17942,9 @@
errorLine1=" protected void initializeRowViewHolder(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="372"
+ column="44"/>
</issue>
<issue
@@ -14719,7 +17953,9 @@
errorLine1=" public final void setHeaderPresenter(RowHeaderPresenter headerPresenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="389"
+ column="42"/>
</issue>
<issue
@@ -14728,7 +17964,9 @@
errorLine1=" public final RowHeaderPresenter getHeaderPresenter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="397"
+ column="18"/>
</issue>
<issue
@@ -14737,7 +17975,9 @@
errorLine1=" public final ViewHolder getRowViewHolder(Presenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="405"
+ column="18"/>
</issue>
<issue
@@ -14746,7 +17986,9 @@
errorLine1=" public final ViewHolder getRowViewHolder(Presenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="405"
+ column="46"/>
</issue>
<issue
@@ -14755,7 +17997,9 @@
errorLine1=" public final void setRowViewExpanded(Presenter.ViewHolder holder, boolean expanded) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="419"
+ column="42"/>
</issue>
<issue
@@ -14764,7 +18008,9 @@
errorLine1=" public final void setRowViewSelected(Presenter.ViewHolder holder, boolean selected) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="431"
+ column="42"/>
</issue>
<issue
@@ -14773,7 +18019,9 @@
errorLine1=" protected void onRowViewExpanded(ViewHolder vh, boolean expanded) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="444"
+ column="38"/>
</issue>
<issue
@@ -14782,7 +18030,9 @@
errorLine1=" protected void dispatchItemSelectedListener(ViewHolder vh, boolean selected) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="502"
+ column="49"/>
</issue>
<issue
@@ -14791,7 +18041,9 @@
errorLine1=" protected void onRowViewSelected(ViewHolder vh, boolean selected) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="515"
+ column="38"/>
</issue>
<issue
@@ -14800,7 +18052,9 @@
errorLine1=" public final void setSelectLevel(Presenter.ViewHolder vh, float level) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="533"
+ column="38"/>
</issue>
<issue
@@ -14809,7 +18063,9 @@
errorLine1=" public final float getSelectLevel(Presenter.ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="543"
+ column="39"/>
</issue>
<issue
@@ -14818,7 +18074,9 @@
errorLine1=" protected void onSelectLevelChanged(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="555"
+ column="41"/>
</issue>
<issue
@@ -14827,7 +18085,9 @@
errorLine1=" public final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="604"
+ column="40"/>
</issue>
<issue
@@ -14836,7 +18096,9 @@
errorLine1=" public final void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="604"
+ column="73"/>
</issue>
<issue
@@ -14845,7 +18107,9 @@
errorLine1=" protected void onBindRowViewHolder(ViewHolder vh, Object item) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="614"
+ column="40"/>
</issue>
<issue
@@ -14854,7 +18118,9 @@
errorLine1=" protected void onBindRowViewHolder(ViewHolder vh, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="614"
+ column="55"/>
</issue>
<issue
@@ -14863,7 +18129,9 @@
errorLine1=" public final void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="623"
+ column="42"/>
</issue>
<issue
@@ -14872,7 +18140,9 @@
errorLine1=" protected void onUnbindRowViewHolder(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="632"
+ column="42"/>
</issue>
<issue
@@ -14881,7 +18151,9 @@
errorLine1=" public final void onViewAttachedToWindow(Presenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="641"
+ column="46"/>
</issue>
<issue
@@ -14890,7 +18162,9 @@
errorLine1=" protected void onRowViewAttachedToWindow(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="648"
+ column="46"/>
</issue>
<issue
@@ -14899,7 +18173,9 @@
errorLine1=" public final void onViewDetachedFromWindow(Presenter.ViewHolder holder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="655"
+ column="48"/>
</issue>
<issue
@@ -14908,7 +18184,9 @@
errorLine1=" protected void onRowViewDetachedFromWindow(ViewHolder vh) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="662"
+ column="48"/>
</issue>
<issue
@@ -14917,7 +18195,9 @@
errorLine1=" public void freeze(ViewHolder holder, boolean freeze) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="673"
+ column="24"/>
</issue>
<issue
@@ -14926,7 +18206,9 @@
errorLine1=" public void setEntranceTransitionState(ViewHolder holder, boolean afterEntrance) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/widget/RowPresenter.java"/>
+ file="src/main/java/androidx/leanback/widget/RowPresenter.java"
+ line="686"
+ column="44"/>
</issue>
<issue
@@ -14935,7 +18217,9 @@
errorLine1=" public BrowseFragment.MainFragmentAdapter getMainFragmentAdapter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/RowsFragment.java"
+ line="68"
+ column="12"/>
</issue>
<issue
@@ -14944,7 +18228,9 @@
errorLine1=" public BrowseFragment.MainFragmentRowsAdapter getMainFragmentRowsAdapter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/RowsFragment.java"
+ line="76"
+ column="12"/>
</issue>
<issue
@@ -14953,7 +18239,9 @@
errorLine1=" protected VerticalGridView findGridViewFromRoot(View view) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/RowsFragment.java"
+ line="169"
+ column="15"/>
</issue>
<issue
@@ -14962,7 +18250,9 @@
errorLine1=" protected VerticalGridView findGridViewFromRoot(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/RowsFragment.java"
+ line="169"
+ column="53"/>
</issue>
<issue
@@ -14971,7 +18261,9 @@
errorLine1=" public void setOnItemViewClickedListener(BaseOnItemViewClickedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/leanback/app/RowsFragment.java"/>
+ file="src/main/java/androidx/leanback/app/RowsFragment.java"
+ line="179"
+ column="46"/>
</issue>
<issue
diff --git a/libraryversions.toml b/libraryversions.toml
index bce6a79..bfbcd1a 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -1,10 +1,10 @@
[versions]
-ACTIVITY = "1.7.0-alpha01"
+ACTIVITY = "1.6.0-alpha05"
ADS_IDENTIFIER = "1.0.0-alpha05"
ANNOTATION = "1.4.0-rc01"
ANNOTATION_EXPERIMENTAL = "1.3.0-alpha01"
-APPCOMPAT = "1.5.0-beta01"
-APPSEARCH = "1.0.0-alpha05"
+APPCOMPAT = "1.6.0-alpha06"
+APPSEARCH = "1.1.0-alpha01"
ARCH_CORE = "2.2.0-alpha01"
ASYNCLAYOUTINFLATER = "1.1.0-alpha01"
AUTOFILL = "1.2.0-beta02"
@@ -24,7 +24,7 @@
COMPOSE_RUNTIME_TRACING = "1.0.0-alpha01"
CONTENTPAGER = "1.1.0-alpha01"
COORDINATORLAYOUT = "1.3.0-alpha01"
-CORE = "1.9.0-alpha04"
+CORE = "1.9.0-alpha05"
CORE_ANIMATION = "1.0.0-beta02"
CORE_ANIMATION_TESTING = "1.0.0-beta01"
CORE_APPDIGEST = "1.0.0-alpha01"
@@ -52,6 +52,7 @@
FUTURES = "1.2.0-alpha01"
GLANCE = "1.0.0-alpha04"
GLANCE_TEMPLATE = "1.0.0-alpha01"
+GRAPHICS = "1.0.0-alpha01"
GRIDLAYOUT = "1.1.0-alpha01"
HEALTH_CONNECT_CLIENT = "1.0.0-alpha03"
HEALTH_SERVICES_CLIENT = "1.0.0-beta01"
@@ -132,7 +133,7 @@
WINDOW = "1.1.0-alpha03"
WINDOW_EXTENSIONS = "1.1.0-alpha01"
WINDOW_SIDECAR = "1.0.0-rc01"
-WORK = "2.8.0-alpha02"
+WORK = "2.8.0-alpha03"
[groups]
ACTIVITY = { group = "androidx.activity", atomicGroupVersion = "versions.ACTIVITY" }
@@ -179,6 +180,7 @@
FRAGMENT = { group = "androidx.fragment", atomicGroupVersion = "versions.FRAGMENT" }
GLANCE = { group = "androidx.glance", atomicGroupVersion = "versions.GLANCE" }
GLANCE_TEMPLATE = { group = "androidx.template", atomicGroupVersion = "versions.GLANCE_TEMPLATE" }
+GRAPHICS = { group = "androidx.graphics", atomicGroupVersion = "versions.GRAPHICS" }
GRIDLAYOUT = { group = "androidx.gridlayout", atomicGroupVersion = "versions.GRIDLAYOUT" }
HEALTH = { group = "androidx.health" }
HEIFWRITER = { group = "androidx.heifwriter", atomicGroupVersion = "versions.HEIFWRITER" }
diff --git a/lifecycle/lifecycle-livedata-ktx/api/2.5.0-beta01.txt b/lifecycle/lifecycle-livedata-ktx/api/2.5.0-beta01.txt
index 7bf189f..784f04e 100644
--- a/lifecycle/lifecycle-livedata-ktx/api/2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-livedata-ktx/api/2.5.0-beta01.txt
@@ -15,8 +15,8 @@
}
public interface LiveDataScope<T> {
- method public suspend Object? emit(T? value, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public suspend Object? emitSource(androidx.lifecycle.LiveData<T> source, kotlin.coroutines.Continuation<? super kotlinx.coroutines.DisposableHandle>);
+ method public suspend Object? emit(T? value, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public suspend Object? emitSource(androidx.lifecycle.LiveData<T> source, kotlin.coroutines.Continuation<? super kotlinx.coroutines.DisposableHandle> p);
method public T? getLatestValue();
property public abstract T? latestValue;
}
diff --git a/lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_2.5.0-beta01.txt b/lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_2.5.0-beta01.txt
index b542f27..7b099da 100644
--- a/lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-livedata-ktx/api/public_plus_experimental_2.5.0-beta01.txt
@@ -15,8 +15,8 @@
}
public interface LiveDataScope<T> {
- method public suspend Object? emit(T? value, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public suspend Object? emitSource(androidx.lifecycle.LiveData<T> source, kotlin.coroutines.Continuation<? super kotlinx.coroutines.DisposableHandle>);
+ method public suspend Object? emit(T? value, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public suspend Object? emitSource(androidx.lifecycle.LiveData<T> source, kotlin.coroutines.Continuation<? super kotlinx.coroutines.DisposableHandle> p);
method public T? getLatestValue();
property public abstract T? latestValue;
}
diff --git a/lifecycle/lifecycle-livedata-ktx/api/restricted_2.5.0-beta01.txt b/lifecycle/lifecycle-livedata-ktx/api/restricted_2.5.0-beta01.txt
index 7bf189f..784f04e 100644
--- a/lifecycle/lifecycle-livedata-ktx/api/restricted_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-livedata-ktx/api/restricted_2.5.0-beta01.txt
@@ -15,8 +15,8 @@
}
public interface LiveDataScope<T> {
- method public suspend Object? emit(T? value, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public suspend Object? emitSource(androidx.lifecycle.LiveData<T> source, kotlin.coroutines.Continuation<? super kotlinx.coroutines.DisposableHandle>);
+ method public suspend Object? emit(T? value, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public suspend Object? emitSource(androidx.lifecycle.LiveData<T> source, kotlin.coroutines.Continuation<? super kotlinx.coroutines.DisposableHandle> p);
method public T? getLatestValue();
property public abstract T? latestValue;
}
diff --git a/lifecycle/lifecycle-runtime-ktx/api/2.5.0-beta01.txt b/lifecycle/lifecycle-runtime-ktx/api/2.5.0-beta01.txt
index 46720fe..13b58cd 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/2.5.0-beta01.txt
@@ -24,18 +24,18 @@
}
public final class PausingDispatcherKt {
- method public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
}
public final class RepeatOnLifecycleKt {
- method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
}
public final class ViewKt {
@@ -43,14 +43,14 @@
}
public final class WithLifecycleStateKt {
- method public static suspend inline <R> Object? withCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend inline <R> Object? withCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
}
}
diff --git a/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt b/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt
index 46720fe..13b58cd 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt
@@ -24,18 +24,18 @@
}
public final class PausingDispatcherKt {
- method public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
}
public final class RepeatOnLifecycleKt {
- method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
}
public final class ViewKt {
@@ -43,14 +43,14 @@
}
public final class WithLifecycleStateKt {
- method public static suspend inline <R> Object? withCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
+ method public static suspend inline <R> Object? withCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
}
}
diff --git a/lifecycle/lifecycle-runtime-ktx/api/restricted_2.5.0-beta01.txt b/lifecycle/lifecycle-runtime-ktx/api/restricted_2.5.0-beta01.txt
index 28a306d..f721a9e 100644
--- a/lifecycle/lifecycle-runtime-ktx/api/restricted_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-runtime-ktx/api/restricted_2.5.0-beta01.txt
@@ -24,18 +24,18 @@
}
public final class PausingDispatcherKt {
- method public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
- method public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T>);
+ method public static suspend <T> Object? whenCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
+ method public static suspend <T> Object? whenStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State minState, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super T>,?> block, kotlin.coroutines.Continuation<? super T> p);
}
public final class RepeatOnLifecycleKt {
- method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+ method public static suspend Object? repeatOnLifecycle(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function2<? super kotlinx.coroutines.CoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
}
public final class ViewKt {
@@ -43,16 +43,16 @@
}
public final class WithLifecycleStateKt {
- method @kotlin.PublishedApi internal static suspend <R> Object? suspendWithStateAtLeastUnchecked(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, boolean dispatchNeeded, kotlinx.coroutines.CoroutineDispatcher lifecycleDispatcher, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
- method @kotlin.PublishedApi internal static suspend inline <R> Object? withStateAtLeastUnchecked(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R>);
+ method @kotlin.PublishedApi internal static suspend <R> Object? suspendWithStateAtLeastUnchecked(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, boolean dispatchNeeded, kotlinx.coroutines.CoroutineDispatcher lifecycleDispatcher, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withCreated(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withCreated(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withResumed(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withResumed(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withStarted(androidx.lifecycle.Lifecycle, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withStarted(androidx.lifecycle.LifecycleOwner, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method public static suspend inline <R> Object? withStateAtLeast(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
+ method @kotlin.PublishedApi internal static suspend inline <R> Object? withStateAtLeastUnchecked(androidx.lifecycle.Lifecycle, androidx.lifecycle.Lifecycle.State state, kotlin.jvm.functions.Function0<? extends R> block, kotlin.coroutines.Continuation<? super R> p);
}
}
diff --git a/lifecycle/lifecycle-runtime-testing/api/2.5.0-beta01.txt b/lifecycle/lifecycle-runtime-testing/api/2.5.0-beta01.txt
index dc2274c..8209a73 100644
--- a/lifecycle/lifecycle-runtime-testing/api/2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-runtime-testing/api/2.5.0-beta01.txt
@@ -9,7 +9,7 @@
method public androidx.lifecycle.LifecycleRegistry getLifecycle();
method public int getObserverCount();
method public void handleLifecycleEvent(androidx.lifecycle.Lifecycle.Event event);
- method public void setCurrentState(androidx.lifecycle.Lifecycle.State);
+ method public void setCurrentState(androidx.lifecycle.Lifecycle.State value);
property public final androidx.lifecycle.Lifecycle.State currentState;
property public final int observerCount;
}
diff --git a/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_2.5.0-beta01.txt b/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_2.5.0-beta01.txt
index dc2274c..8209a73 100644
--- a/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-runtime-testing/api/public_plus_experimental_2.5.0-beta01.txt
@@ -9,7 +9,7 @@
method public androidx.lifecycle.LifecycleRegistry getLifecycle();
method public int getObserverCount();
method public void handleLifecycleEvent(androidx.lifecycle.Lifecycle.Event event);
- method public void setCurrentState(androidx.lifecycle.Lifecycle.State);
+ method public void setCurrentState(androidx.lifecycle.Lifecycle.State value);
property public final androidx.lifecycle.Lifecycle.State currentState;
property public final int observerCount;
}
diff --git a/lifecycle/lifecycle-runtime-testing/api/restricted_2.5.0-beta01.txt b/lifecycle/lifecycle-runtime-testing/api/restricted_2.5.0-beta01.txt
index dc2274c..8209a73 100644
--- a/lifecycle/lifecycle-runtime-testing/api/restricted_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-runtime-testing/api/restricted_2.5.0-beta01.txt
@@ -9,7 +9,7 @@
method public androidx.lifecycle.LifecycleRegistry getLifecycle();
method public int getObserverCount();
method public void handleLifecycleEvent(androidx.lifecycle.Lifecycle.Event event);
- method public void setCurrentState(androidx.lifecycle.Lifecycle.State);
+ method public void setCurrentState(androidx.lifecycle.Lifecycle.State value);
property public final androidx.lifecycle.Lifecycle.State currentState;
property public final int observerCount;
}
diff --git a/lifecycle/lifecycle-service/src/androidTest/java/androidx/lifecycle/ServiceLifecycleTest.java b/lifecycle/lifecycle-service/src/androidTest/java/androidx/lifecycle/ServiceLifecycleTest.java
index 1cab987..04055db 100644
--- a/lifecycle/lifecycle-service/src/androidTest/java/androidx/lifecycle/ServiceLifecycleTest.java
+++ b/lifecycle/lifecycle-service/src/androidTest/java/androidx/lifecycle/ServiceLifecycleTest.java
@@ -52,6 +52,7 @@
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+@SuppressWarnings("deprecation")
@MediumTest
@RunWith(AndroidJUnit4.class)
public class ServiceLifecycleTest {
diff --git a/lifecycle/lifecycle-viewmodel-compose/api/public_plus_experimental_2.5.0-beta01.txt b/lifecycle/lifecycle-viewmodel-compose/api/public_plus_experimental_2.5.0-beta01.txt
index 8a4ed64..55cd478 100644
--- a/lifecycle/lifecycle-viewmodel-compose/api/public_plus_experimental_2.5.0-beta01.txt
+++ b/lifecycle/lifecycle-viewmodel-compose/api/public_plus_experimental_2.5.0-beta01.txt
@@ -13,9 +13,6 @@
public final class SavedStateHandleSaverKt {
method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T> T saveable(androidx.lifecycle.SavedStateHandle, String key, optional androidx.compose.runtime.saveable.Saver<T,?> saver, kotlin.jvm.functions.Function0<? extends T> init);
- method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T> androidx.compose.runtime.MutableState<T> saveable(androidx.lifecycle.SavedStateHandle, String key, androidx.compose.runtime.saveable.Saver<T,?> stateSaver, kotlin.jvm.functions.Function0<? extends androidx.compose.runtime.MutableState<T>> init);
- method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T> kotlin.properties.PropertyDelegateProvider<java.lang.Object,kotlin.properties.ReadOnlyProperty<java.lang.Object,T>> saveable(androidx.lifecycle.SavedStateHandle, optional androidx.compose.runtime.saveable.Saver<T,?> saver, kotlin.jvm.functions.Function0<? extends T> init);
- method @androidx.lifecycle.viewmodel.compose.SavedStateHandleSaveableApi public static <T, M extends androidx.compose.runtime.MutableState<T>> kotlin.properties.PropertyDelegateProvider<java.lang.Object,kotlin.properties.ReadWriteProperty<java.lang.Object,T>> saveableMutableState(androidx.lifecycle.SavedStateHandle, optional androidx.compose.runtime.saveable.Saver<T,?> stateSaver, kotlin.jvm.functions.Function0<? extends M> init);
}
public final class ViewModelKt {
diff --git a/media/media/lint-baseline.xml b/media/media/lint-baseline.xml
index 2e83abe..3db7c43f 100644
--- a/media/media/lint-baseline.xml
+++ b/media/media/lint-baseline.xml
@@ -241,7 +241,9 @@
errorLine1=" public void onProgressUpdate(String action, Bundle extras, Bundle data) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+ line="962"
+ column="68"/>
</issue>
<issue
@@ -250,7 +252,9 @@
errorLine1=" public void onResult(String action, Bundle extras, Bundle resultData) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+ line="972"
+ column="30"/>
</issue>
<issue
@@ -259,7 +263,9 @@
errorLine1=" public void onResult(String action, Bundle extras, Bundle resultData) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+ line="972"
+ column="45"/>
</issue>
<issue
@@ -268,7 +274,9 @@
errorLine1=" public void onResult(String action, Bundle extras, Bundle resultData) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+ line="972"
+ column="60"/>
</issue>
<issue
@@ -277,7 +285,9 @@
errorLine1=" public void onError(String action, Bundle extras, Bundle data) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+ line="983"
+ column="29"/>
</issue>
<issue
@@ -286,7 +296,9 @@
errorLine1=" public void onError(String action, Bundle extras, Bundle data) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+ line="983"
+ column="44"/>
</issue>
<issue
@@ -295,7 +307,9 @@
errorLine1=" public void onError(String action, Bundle extras, Bundle data) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaBrowserCompat.java"
+ line="983"
+ column="59"/>
</issue>
<issue
@@ -304,7 +318,9 @@
errorLine1=" public static boolean areSameOptions(Bundle options1, Bundle options2) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"/>
+ file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"
+ line="31"
+ column="42"/>
</issue>
<issue
@@ -313,7 +329,9 @@
errorLine1=" public static boolean areSameOptions(Bundle options1, Bundle options2) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"/>
+ file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"
+ line="31"
+ column="59"/>
</issue>
<issue
@@ -322,7 +340,9 @@
errorLine1=" public static boolean hasDuplicatedItems(Bundle options1, Bundle options2) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"/>
+ file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"
+ line="48"
+ column="46"/>
</issue>
<issue
@@ -331,7 +351,9 @@
errorLine1=" public static boolean hasDuplicatedItems(Bundle options1, Bundle options2) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"/>
+ file="src/main/java/androidx/media/MediaBrowserCompatUtils.java"
+ line="48"
+ column="63"/>
</issue>
<issue
@@ -340,7 +362,9 @@
errorLine1=" public void attachToBaseContext(Context base) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1311"
+ column="37"/>
</issue>
<issue
@@ -349,7 +373,9 @@
errorLine1=" public IBinder onBind(Intent intent) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1333"
+ column="12"/>
</issue>
<issue
@@ -358,7 +384,9 @@
errorLine1=" public IBinder onBind(Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1333"
+ column="27"/>
</issue>
<issue
@@ -367,7 +395,9 @@
errorLine1=" public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1338"
+ column="22"/>
</issue>
<issue
@@ -376,7 +406,9 @@
errorLine1=" public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1338"
+ column="41"/>
</issue>
<issue
@@ -385,7 +417,9 @@
errorLine1=" public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1338"
+ column="61"/>
</issue>
<issue
@@ -394,7 +428,9 @@
errorLine1=" public void onSubscribe(String id, Bundle option) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1429"
+ column="29"/>
</issue>
<issue
@@ -403,7 +439,9 @@
errorLine1=" public void onSubscribe(String id, Bundle option) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1429"
+ column="40"/>
</issue>
<issue
@@ -412,7 +450,9 @@
errorLine1=" public void onUnsubscribe(String id) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1439"
+ column="31"/>
</issue>
<issue
@@ -421,7 +461,9 @@
errorLine1=" public void onLoadItem(String itemId, @NonNull Result<MediaBrowserCompat.MediaItem> result) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1460"
+ column="28"/>
</issue>
<issue
@@ -430,7 +472,9 @@
errorLine1=" public void onSearch(@NonNull String query, Bundle extras,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1486"
+ column="49"/>
</issue>
<issue
@@ -439,7 +483,9 @@
errorLine1=" public void onCustomAction(@NonNull String action, Bundle extras,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1511"
+ column="56"/>
</issue>
<issue
@@ -448,7 +494,9 @@
errorLine1=" public void setSessionToken(MediaSessionCompat.Token token) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1524"
+ column="33"/>
</issue>
<issue
@@ -457,7 +505,9 @@
errorLine1=" public final Bundle getBrowserRootHints() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1559"
+ column="18"/>
</issue>
<issue
@@ -466,7 +516,9 @@
errorLine1=" public String getRootId() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1967"
+ column="16"/>
</issue>
<issue
@@ -475,7 +527,9 @@
errorLine1=" public Bundle getExtras() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"/>
+ file="src/main/java/androidx/media/MediaBrowserServiceCompat.java"
+ line="1974"
+ column="16"/>
</issue>
<issue
@@ -484,7 +538,9 @@
errorLine1=" public void onReceive(Context context, Intent intent) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+ file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+ line="105"
+ column="27"/>
</issue>
<issue
@@ -493,7 +549,9 @@
errorLine1=" public void onReceive(Context context, Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+ file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+ line="105"
+ column="44"/>
</issue>
<issue
@@ -502,7 +560,9 @@
errorLine1=" public static KeyEvent handleIntent(MediaSessionCompat mediaSessionCompat, Intent intent) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+ file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+ line="190"
+ column="19"/>
</issue>
<issue
@@ -511,7 +571,9 @@
errorLine1=" public static KeyEvent handleIntent(MediaSessionCompat mediaSessionCompat, Intent intent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+ file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+ line="190"
+ column="41"/>
</issue>
<issue
@@ -520,7 +582,9 @@
errorLine1=" public static KeyEvent handleIntent(MediaSessionCompat mediaSessionCompat, Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+ file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+ line="190"
+ column="80"/>
</issue>
<issue
@@ -529,7 +593,9 @@
errorLine1=" public static PendingIntent buildMediaButtonPendingIntent(Context context,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+ file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+ line="223"
+ column="19"/>
</issue>
<issue
@@ -538,7 +604,9 @@
errorLine1=" public static PendingIntent buildMediaButtonPendingIntent(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+ file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+ line="223"
+ column="63"/>
</issue>
<issue
@@ -547,7 +615,9 @@
errorLine1=" public static PendingIntent buildMediaButtonPendingIntent(Context context,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+ file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+ line="256"
+ column="19"/>
</issue>
<issue
@@ -556,7 +626,9 @@
errorLine1=" public static PendingIntent buildMediaButtonPendingIntent(Context context,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+ file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+ line="256"
+ column="63"/>
</issue>
<issue
@@ -565,7 +637,9 @@
errorLine1=" ComponentName mbrComponent, @MediaKeyAction long action) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+ file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+ line="257"
+ column="13"/>
</issue>
<issue
@@ -574,7 +648,9 @@
errorLine1=" public static ComponentName getMediaButtonReceiverComponent(Context context) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+ file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+ line="282"
+ column="19"/>
</issue>
<issue
@@ -583,7 +659,9 @@
errorLine1=" public static ComponentName getMediaButtonReceiverComponent(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/media/session/MediaButtonReceiver.java"/>
+ file="src/main/java/androidx/media/session/MediaButtonReceiver.java"
+ line="282"
+ column="65"/>
</issue>
<issue
@@ -592,7 +670,9 @@
errorLine1=" MediaControllerCompat mediaController) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="162"
+ column="13"/>
</issue>
<issue
@@ -601,7 +681,9 @@
errorLine1=" public static MediaControllerCompat getMediaController(@NonNull Activity activity) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="181"
+ column="19"/>
</issue>
<issue
@@ -610,7 +692,9 @@
errorLine1=" public MediaControllerCompat(Context context, @NonNull MediaSessionCompat session) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="224"
+ column="34"/>
</issue>
<issue
@@ -619,7 +703,9 @@
errorLine1=" public MediaControllerCompat(Context context, @NonNull MediaSessionCompat.Token sessionToken) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="245"
+ column="34"/>
</issue>
<issue
@@ -628,7 +714,9 @@
errorLine1=" public TransportControls getTransportControls() {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="263"
+ column="12"/>
</issue>
<issue
@@ -637,7 +725,9 @@
errorLine1=" public boolean dispatchMediaButtonEvent(KeyEvent keyEvent) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="274"
+ column="45"/>
</issue>
<issue
@@ -646,7 +736,9 @@
errorLine1=" public PlaybackStateCompat getPlaybackState() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="291"
+ column="12"/>
</issue>
<issue
@@ -655,7 +747,9 @@
errorLine1=" public MediaMetadataCompat getMetadata() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="300"
+ column="12"/>
</issue>
<issue
@@ -664,7 +758,9 @@
errorLine1=" public List<QueueItem> getQueue() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="310"
+ column="12"/>
</issue>
<issue
@@ -673,7 +769,9 @@
errorLine1=" public void addQueueItem(MediaDescriptionCompat description) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="326"
+ column="30"/>
</issue>
<issue
@@ -682,7 +780,9 @@
errorLine1=" public void addQueueItem(MediaDescriptionCompat description, int index) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="346"
+ column="30"/>
</issue>
<issue
@@ -691,7 +791,9 @@
errorLine1=" public void removeQueueItem(MediaDescriptionCompat description) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="363"
+ column="33"/>
</issue>
<issue
@@ -700,7 +802,9 @@
errorLine1=" public CharSequence getQueueTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="393"
+ column="12"/>
</issue>
<issue
@@ -709,7 +813,9 @@
errorLine1=" public Bundle getExtras() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="400"
+ column="12"/>
</issue>
<issue
@@ -718,7 +824,9 @@
errorLine1=" public PlaybackInfo getPlaybackInfo() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="480"
+ column="12"/>
</issue>
<issue
@@ -727,7 +835,9 @@
errorLine1=" public PendingIntent getSessionActivity() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="490"
+ column="12"/>
</issue>
<issue
@@ -736,7 +846,9 @@
errorLine1=" public MediaSessionCompat.Token getSessionToken() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="499"
+ column="12"/>
</issue>
<issue
@@ -745,7 +857,9 @@
errorLine1=" public void registerCallback(@NonNull Callback callback, Handler handler) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="567"
+ column="62"/>
</issue>
<issue
@@ -754,7 +868,9 @@
errorLine1=" public String getPackageName() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="645"
+ column="12"/>
</issue>
<issue
@@ -763,7 +879,9 @@
errorLine1=" public Object getMediaController() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="675"
+ column="12"/>
</issue>
<issue
@@ -772,7 +890,9 @@
errorLine1=" public void onSessionEvent(String event, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="720"
+ column="36"/>
</issue>
<issue
@@ -781,7 +901,9 @@
errorLine1=" public void onSessionEvent(String event, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="720"
+ column="50"/>
</issue>
<issue
@@ -790,7 +912,9 @@
errorLine1=" public void onPlaybackStateChanged(PlaybackStateCompat state) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="728"
+ column="44"/>
</issue>
<issue
@@ -799,7 +923,9 @@
errorLine1=" public void onMetadataChanged(MediaMetadataCompat metadata) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="737"
+ column="39"/>
</issue>
<issue
@@ -808,7 +934,9 @@
errorLine1=" public void onQueueChanged(List<QueueItem> queue) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="748"
+ column="36"/>
</issue>
<issue
@@ -817,7 +945,9 @@
errorLine1=" public void onQueueTitleChanged(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="758"
+ column="41"/>
</issue>
<issue
@@ -826,7 +956,9 @@
errorLine1=" public void onExtrasChanged(Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="767"
+ column="37"/>
</issue>
<issue
@@ -835,7 +967,9 @@
errorLine1=" public void onAudioInfoChanged(PlaybackInfo info) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="775"
+ column="40"/>
</issue>
<issue
@@ -844,7 +978,9 @@
errorLine1=" public IMediaControllerCallback getIControllerCallback() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="814"
+ column="16"/>
</issue>
<issue
@@ -853,7 +989,9 @@
errorLine1=" public abstract void prepareFromMediaId(String mediaId, Bundle extras);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1165"
+ column="49"/>
</issue>
<issue
@@ -862,7 +1000,9 @@
errorLine1=" public abstract void prepareFromMediaId(String mediaId, Bundle extras);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1165"
+ column="65"/>
</issue>
<issue
@@ -871,7 +1011,9 @@
errorLine1=" public abstract void prepareFromSearch(String query, Bundle extras);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1177"
+ column="48"/>
</issue>
<issue
@@ -880,7 +1022,9 @@
errorLine1=" public abstract void prepareFromSearch(String query, Bundle extras);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1177"
+ column="62"/>
</issue>
<issue
@@ -889,7 +1033,9 @@
errorLine1=" public abstract void prepareFromUri(Uri uri, Bundle extras);"
errorLine2=" ~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1188"
+ column="45"/>
</issue>
<issue
@@ -898,7 +1044,9 @@
errorLine1=" public abstract void prepareFromUri(Uri uri, Bundle extras);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1188"
+ column="54"/>
</issue>
<issue
@@ -907,7 +1055,9 @@
errorLine1=" public abstract void playFromMediaId(String mediaId, Bundle extras);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1202"
+ column="46"/>
</issue>
<issue
@@ -916,7 +1066,9 @@
errorLine1=" public abstract void playFromMediaId(String mediaId, Bundle extras);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1202"
+ column="62"/>
</issue>
<issue
@@ -925,7 +1077,9 @@
errorLine1=" public abstract void playFromSearch(String query, Bundle extras);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1213"
+ column="45"/>
</issue>
<issue
@@ -934,7 +1088,9 @@
errorLine1=" public abstract void playFromSearch(String query, Bundle extras);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1213"
+ column="59"/>
</issue>
<issue
@@ -943,7 +1099,9 @@
errorLine1=" public abstract void playFromUri(Uri uri, Bundle extras);"
errorLine2=" ~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1222"
+ column="42"/>
</issue>
<issue
@@ -952,7 +1110,9 @@
errorLine1=" public abstract void playFromUri(Uri uri, Bundle extras);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1222"
+ column="51"/>
</issue>
<issue
@@ -961,7 +1121,9 @@
errorLine1=" public abstract void setRating(RatingCompat rating);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1278"
+ column="40"/>
</issue>
<issue
@@ -970,7 +1132,9 @@
errorLine1=" public abstract void setRating(RatingCompat rating, Bundle extras);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1292"
+ column="40"/>
</issue>
<issue
@@ -979,7 +1143,9 @@
errorLine1=" public abstract void setRating(RatingCompat rating, Bundle extras);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1292"
+ column="61"/>
</issue>
<issue
@@ -988,7 +1154,9 @@
errorLine1=" public abstract void sendCustomAction(PlaybackStateCompat.CustomAction customAction,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1338"
+ column="47"/>
</issue>
<issue
@@ -997,7 +1165,9 @@
errorLine1=" Bundle args);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1339"
+ column="17"/>
</issue>
<issue
@@ -1006,7 +1176,9 @@
errorLine1=" public abstract void sendCustomAction(String action, Bundle args);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1357"
+ column="47"/>
</issue>
<issue
@@ -1015,7 +1187,9 @@
errorLine1=" public abstract void sendCustomAction(String action, Bundle args);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaControllerCompat.java"
+ line="1357"
+ column="62"/>
</issue>
<issue
@@ -1024,7 +1198,9 @@
errorLine1=" public void writeToParcel(Parcel dest, int flags) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+ line="306"
+ column="31"/>
</issue>
<issue
@@ -1033,7 +1209,9 @@
errorLine1=" public Object getMediaDescription() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+ line="337"
+ column="12"/>
</issue>
<issue
@@ -1042,7 +1220,9 @@
errorLine1=" public static MediaDescriptionCompat fromMediaDescription(Object descriptionObj) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+ line="385"
+ column="19"/>
</issue>
<issue
@@ -1051,7 +1231,9 @@
errorLine1=" public static MediaDescriptionCompat fromMediaDescription(Object descriptionObj) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+ line="385"
+ column="63"/>
</issue>
<issue
@@ -1060,7 +1242,9 @@
errorLine1=" public Builder setMediaId(@Nullable String mediaId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+ line="474"
+ column="16"/>
</issue>
<issue
@@ -1069,7 +1253,9 @@
errorLine1=" public Builder setTitle(@Nullable CharSequence title) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+ line="485"
+ column="16"/>
</issue>
<issue
@@ -1078,7 +1264,9 @@
errorLine1=" public Builder setSubtitle(@Nullable CharSequence subtitle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+ line="496"
+ column="16"/>
</issue>
<issue
@@ -1087,7 +1275,9 @@
errorLine1=" public Builder setDescription(@Nullable CharSequence description) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+ line="508"
+ column="16"/>
</issue>
<issue
@@ -1096,7 +1286,9 @@
errorLine1=" public Builder setIconBitmap(@Nullable Bitmap icon) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+ line="520"
+ column="16"/>
</issue>
<issue
@@ -1105,7 +1297,9 @@
errorLine1=" public Builder setIconUri(@Nullable Uri iconUri) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+ line="532"
+ column="16"/>
</issue>
<issue
@@ -1114,7 +1308,9 @@
errorLine1=" public Builder setExtras(@Nullable Bundle extras) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+ line="543"
+ column="16"/>
</issue>
<issue
@@ -1123,7 +1319,9 @@
errorLine1=" public Builder setMediaUri(@Nullable Uri mediaUri) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+ line="554"
+ column="16"/>
</issue>
<issue
@@ -1132,7 +1330,9 @@
errorLine1=" public MediaDescriptionCompat build() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaDescriptionCompat.java"
+ line="565"
+ column="16"/>
</issue>
<issue
@@ -1141,7 +1341,9 @@
errorLine1=" public boolean containsKey(String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="374"
+ column="32"/>
</issue>
<issue
@@ -1150,7 +1352,9 @@
errorLine1=" public CharSequence getText(@TextKey String key) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="386"
+ column="12"/>
</issue>
<issue
@@ -1159,7 +1363,9 @@
errorLine1=" public CharSequence getText(@TextKey String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="386"
+ column="42"/>
</issue>
<issue
@@ -1168,7 +1374,9 @@
errorLine1=" public String getString(@TextKey String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="398"
+ column="12"/>
</issue>
<issue
@@ -1177,7 +1385,9 @@
errorLine1=" public String getString(@TextKey String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="398"
+ column="38"/>
</issue>
<issue
@@ -1186,7 +1396,9 @@
errorLine1=" public long getLong(@LongKey String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="413"
+ column="34"/>
</issue>
<issue
@@ -1195,7 +1407,9 @@
errorLine1=" public RatingCompat getRating(@RatingKey String key) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="424"
+ column="12"/>
</issue>
<issue
@@ -1204,7 +1418,9 @@
errorLine1=" public RatingCompat getRating(@RatingKey String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="424"
+ column="46"/>
</issue>
<issue
@@ -1213,7 +1429,9 @@
errorLine1=" public Bitmap getBitmap(@BitmapKey String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="448"
+ column="12"/>
</issue>
<issue
@@ -1222,7 +1440,9 @@
errorLine1=" public Bitmap getBitmap(@BitmapKey String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="448"
+ column="40"/>
</issue>
<issue
@@ -1231,7 +1451,9 @@
errorLine1=" public MediaDescriptionCompat getDescription() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="464"
+ column="12"/>
</issue>
<issue
@@ -1240,7 +1462,9 @@
errorLine1=" public void writeToParcel(Parcel dest, int flags) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="552"
+ column="31"/>
</issue>
<issue
@@ -1249,7 +1473,9 @@
errorLine1=" public Set<String> keySet() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="570"
+ column="12"/>
</issue>
<issue
@@ -1258,7 +1484,9 @@
errorLine1=" public Bundle getBundle() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="580"
+ column="12"/>
</issue>
<issue
@@ -1267,7 +1495,9 @@
errorLine1=" public static MediaMetadataCompat fromMediaMetadata(Object metadataObj) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="597"
+ column="19"/>
</issue>
<issue
@@ -1276,7 +1506,9 @@
errorLine1=" public static MediaMetadataCompat fromMediaMetadata(Object metadataObj) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="597"
+ column="57"/>
</issue>
<issue
@@ -1285,7 +1517,9 @@
errorLine1=" public Object getMediaMetadata() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="621"
+ column="12"/>
</issue>
<issue
@@ -1294,7 +1528,9 @@
errorLine1=" public Builder(MediaMetadataCompat source) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="667"
+ column="24"/>
</issue>
<issue
@@ -1303,7 +1539,9 @@
errorLine1=" public Builder(MediaMetadataCompat source, int maxBitmapSize) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="683"
+ column="24"/>
</issue>
<issue
@@ -1312,7 +1550,9 @@
errorLine1=" public Builder putText(@TextKey String key, CharSequence value) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="722"
+ column="16"/>
</issue>
<issue
@@ -1321,7 +1561,9 @@
errorLine1=" public Builder putText(@TextKey String key, CharSequence value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="722"
+ column="41"/>
</issue>
<issue
@@ -1330,7 +1572,9 @@
errorLine1=" public Builder putText(@TextKey String key, CharSequence value) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="722"
+ column="53"/>
</issue>
<issue
@@ -1339,7 +1583,9 @@
errorLine1=" public Builder putString(@TextKey String key, String value) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="759"
+ column="16"/>
</issue>
<issue
@@ -1348,7 +1594,9 @@
errorLine1=" public Builder putString(@TextKey String key, String value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="759"
+ column="43"/>
</issue>
<issue
@@ -1357,7 +1605,9 @@
errorLine1=" public Builder putString(@TextKey String key, String value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="759"
+ column="55"/>
</issue>
<issue
@@ -1366,7 +1616,9 @@
errorLine1=" public Builder putLong(@LongKey String key, long value) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="789"
+ column="16"/>
</issue>
<issue
@@ -1375,7 +1627,9 @@
errorLine1=" public Builder putLong(@LongKey String key, long value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="789"
+ column="41"/>
</issue>
<issue
@@ -1384,7 +1638,9 @@
errorLine1=" public Builder putRating(@RatingKey String key, RatingCompat value) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="813"
+ column="16"/>
</issue>
<issue
@@ -1393,7 +1649,9 @@
errorLine1=" public Builder putRating(@RatingKey String key, RatingCompat value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="813"
+ column="45"/>
</issue>
<issue
@@ -1402,7 +1660,9 @@
errorLine1=" public Builder putRating(@RatingKey String key, RatingCompat value) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="813"
+ column="57"/>
</issue>
<issue
@@ -1411,7 +1671,9 @@
errorLine1=" public Builder putBitmap(@BitmapKey String key, Bitmap value) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="848"
+ column="16"/>
</issue>
<issue
@@ -1420,7 +1682,9 @@
errorLine1=" public Builder putBitmap(@BitmapKey String key, Bitmap value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="848"
+ column="45"/>
</issue>
<issue
@@ -1429,7 +1693,9 @@
errorLine1=" public Builder putBitmap(@BitmapKey String key, Bitmap value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="848"
+ column="57"/>
</issue>
<issue
@@ -1438,7 +1704,9 @@
errorLine1=" public MediaMetadataCompat build() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"/>
+ file="src/main/java/android/support/v4/media/MediaMetadataCompat.java"
+ line="864"
+ column="16"/>
</issue>
<issue
@@ -1447,7 +1715,9 @@
errorLine1=" public void setCallback(Callback callback) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="613"
+ column="29"/>
</issue>
<issue
@@ -1456,7 +1726,9 @@
errorLine1=" public void setCallback(Callback callback, Handler handler) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="629"
+ column="29"/>
</issue>
<issue
@@ -1465,7 +1737,9 @@
errorLine1=" public void setCallback(Callback callback, Handler handler) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="629"
+ column="48"/>
</issue>
<issue
@@ -1474,7 +1748,9 @@
errorLine1=" public void setSessionActivity(PendingIntent pi) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="658"
+ column="36"/>
</issue>
<issue
@@ -1483,7 +1759,9 @@
errorLine1=" public void setMediaButtonReceiver(PendingIntent mbr) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="675"
+ column="40"/>
</issue>
<issue
@@ -1492,7 +1770,9 @@
errorLine1=" public void setPlaybackToRemote(VolumeProviderCompat volumeProvider) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="717"
+ column="37"/>
</issue>
<issue
@@ -1501,7 +1781,9 @@
errorLine1=" public void sendSessionEvent(String event, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="761"
+ column="34"/>
</issue>
<issue
@@ -1510,7 +1792,9 @@
errorLine1=" public void sendSessionEvent(String event, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="761"
+ column="48"/>
</issue>
<issue
@@ -1519,7 +1803,9 @@
errorLine1=" public Token getSessionToken() {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="791"
+ column="12"/>
</issue>
<issue
@@ -1528,7 +1814,9 @@
errorLine1=" public MediaControllerCompat getController() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="801"
+ column="12"/>
</issue>
<issue
@@ -1537,7 +1825,9 @@
errorLine1=" public void setPlaybackState(PlaybackStateCompat state) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="810"
+ column="34"/>
</issue>
<issue
@@ -1546,7 +1836,9 @@
errorLine1=" public void setMetadata(MediaMetadataCompat metadata) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="822"
+ column="29"/>
</issue>
<issue
@@ -1555,7 +1847,9 @@
errorLine1=" public void setQueue(List<QueueItem> queue) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="838"
+ column="26"/>
</issue>
<issue
@@ -1564,7 +1858,9 @@
errorLine1=" public void setQueueTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="862"
+ column="31"/>
</issue>
<issue
@@ -1573,7 +1869,9 @@
errorLine1=" public void setExtras(Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="931"
+ column="27"/>
</issue>
<issue
@@ -1582,7 +1880,9 @@
errorLine1=" public Object getMediaSession() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="945"
+ column="12"/>
</issue>
<issue
@@ -1591,7 +1891,9 @@
errorLine1=" public Object getRemoteControlClient() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="959"
+ column="12"/>
</issue>
<issue
@@ -1600,7 +1902,9 @@
errorLine1=" public String getCallingPackage() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="995"
+ column="12"/>
</issue>
<issue
@@ -1609,7 +1913,9 @@
errorLine1=" public void addOnActiveChangeListener(OnActiveChangeListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1006"
+ column="43"/>
</issue>
<issue
@@ -1618,7 +1924,9 @@
errorLine1=" public void removeOnActiveChangeListener(OnActiveChangeListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1019"
+ column="46"/>
</issue>
<issue
@@ -1627,7 +1935,9 @@
errorLine1=" public static MediaSessionCompat fromMediaSession(Context context, Object mediaSession) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1042"
+ column="19"/>
</issue>
<issue
@@ -1636,7 +1946,9 @@
errorLine1=" public static MediaSessionCompat fromMediaSession(Context context, Object mediaSession) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1042"
+ column="55"/>
</issue>
<issue
@@ -1645,7 +1957,9 @@
errorLine1=" public static MediaSessionCompat fromMediaSession(Context context, Object mediaSession) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1042"
+ column="72"/>
</issue>
<issue
@@ -1654,7 +1968,9 @@
errorLine1=" public void onCommand(String command, Bundle extras, ResultReceiver cb) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1175"
+ column="31"/>
</issue>
<issue
@@ -1663,7 +1979,9 @@
errorLine1=" public void onCommand(String command, Bundle extras, ResultReceiver cb) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1175"
+ column="47"/>
</issue>
<issue
@@ -1672,7 +1990,9 @@
errorLine1=" public void onCommand(String command, Bundle extras, ResultReceiver cb) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1175"
+ column="62"/>
</issue>
<issue
@@ -1681,7 +2001,9 @@
errorLine1=" public boolean onMediaButtonEvent(Intent mediaButtonEvent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1189"
+ column="43"/>
</issue>
<issue
@@ -1690,7 +2012,9 @@
errorLine1=" public void onPrepareFromMediaId(String mediaId, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1282"
+ column="42"/>
</issue>
<issue
@@ -1699,7 +2023,9 @@
errorLine1=" public void onPrepareFromMediaId(String mediaId, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1282"
+ column="58"/>
</issue>
<issue
@@ -1708,7 +2034,9 @@
errorLine1=" public void onPrepareFromSearch(String query, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1292"
+ column="41"/>
</issue>
<issue
@@ -1717,7 +2045,9 @@
errorLine1=" public void onPrepareFromSearch(String query, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1292"
+ column="55"/>
</issue>
<issue
@@ -1726,7 +2056,9 @@
errorLine1=" public void onPrepareFromUri(Uri uri, Bundle extras) {"
errorLine2=" ~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1300"
+ column="38"/>
</issue>
<issue
@@ -1735,7 +2067,9 @@
errorLine1=" public void onPrepareFromUri(Uri uri, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1300"
+ column="47"/>
</issue>
<issue
@@ -1744,7 +2078,9 @@
errorLine1=" public void onPlayFromMediaId(String mediaId, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1313"
+ column="39"/>
</issue>
<issue
@@ -1753,7 +2089,9 @@
errorLine1=" public void onPlayFromMediaId(String mediaId, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1313"
+ column="55"/>
</issue>
<issue
@@ -1762,7 +2100,9 @@
errorLine1=" public void onPlayFromSearch(String query, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1322"
+ column="38"/>
</issue>
<issue
@@ -1771,7 +2111,9 @@
errorLine1=" public void onPlayFromSearch(String query, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1322"
+ column="52"/>
</issue>
<issue
@@ -1780,7 +2122,9 @@
errorLine1=" public void onPlayFromUri(Uri uri, Bundle extras) {"
errorLine2=" ~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1328"
+ column="35"/>
</issue>
<issue
@@ -1789,7 +2133,9 @@
errorLine1=" public void onPlayFromUri(Uri uri, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1328"
+ column="44"/>
</issue>
<issue
@@ -1798,7 +2144,9 @@
errorLine1=" public void onSetRating(RatingCompat rating) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1387"
+ column="33"/>
</issue>
<issue
@@ -1807,7 +2155,9 @@
errorLine1=" public void onSetRating(RatingCompat rating, Bundle extras) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1396"
+ column="33"/>
</issue>
<issue
@@ -1816,7 +2166,9 @@
errorLine1=" public void onSetRating(RatingCompat rating, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1396"
+ column="54"/>
</issue>
<issue
@@ -1825,7 +2177,9 @@
errorLine1=" public void onCustomAction(String action, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1467"
+ column="36"/>
</issue>
<issue
@@ -1834,7 +2188,9 @@
errorLine1=" public void onCustomAction(String action, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1467"
+ column="51"/>
</issue>
<issue
@@ -1843,7 +2199,9 @@
errorLine1=" public void onAddQueueItem(MediaDescriptionCompat description) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1477"
+ column="36"/>
</issue>
<issue
@@ -1852,7 +2210,9 @@
errorLine1=" public void onAddQueueItem(MediaDescriptionCompat description, int index) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1489"
+ column="36"/>
</issue>
<issue
@@ -1861,7 +2221,9 @@
errorLine1=" public void onRemoveQueueItem(MediaDescriptionCompat description) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1500"
+ column="39"/>
</issue>
<issue
@@ -1870,7 +2232,9 @@
errorLine1=" public static Token fromToken(Object token) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1984"
+ column="23"/>
</issue>
<issue
@@ -1879,7 +2243,9 @@
errorLine1=" public static Token fromToken(Object token) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="1984"
+ column="39"/>
</issue>
<issue
@@ -1888,7 +2254,9 @@
errorLine1=" public static Token fromToken(Object token, IMediaSession extraBinder) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2002"
+ column="23"/>
</issue>
<issue
@@ -1897,7 +2265,9 @@
errorLine1=" public static Token fromToken(Object token, IMediaSession extraBinder) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2002"
+ column="39"/>
</issue>
<issue
@@ -1906,7 +2276,9 @@
errorLine1=" public static Token fromToken(Object token, IMediaSession extraBinder) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2002"
+ column="53"/>
</issue>
<issue
@@ -1915,7 +2287,9 @@
errorLine1=" public void writeToParcel(Parcel dest, int flags) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2019"
+ column="35"/>
</issue>
<issue
@@ -1924,7 +2298,9 @@
errorLine1=" public Object getToken() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2063"
+ column="16"/>
</issue>
<issue
@@ -1933,7 +2309,9 @@
errorLine1=" public IMediaSession getExtraBinder() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2071"
+ column="16"/>
</issue>
<issue
@@ -1942,7 +2320,9 @@
errorLine1=" public void setExtraBinder(IMediaSession extraBinder) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2081"
+ column="36"/>
</issue>
<issue
@@ -1951,7 +2331,9 @@
errorLine1=" public VersionedParcelable getSession2Token() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2091"
+ column="16"/>
</issue>
<issue
@@ -1960,7 +2342,9 @@
errorLine1=" public void setSession2Token(VersionedParcelable session2Token) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2101"
+ column="38"/>
</issue>
<issue
@@ -1969,7 +2353,9 @@
errorLine1=" public Bundle toBundle() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2111"
+ column="16"/>
</issue>
<issue
@@ -1978,7 +2364,9 @@
errorLine1=" public static Token fromBundle(Bundle tokenBundle) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2133"
+ column="23"/>
</issue>
<issue
@@ -1987,7 +2375,9 @@
errorLine1=" public static Token fromBundle(Bundle tokenBundle) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2133"
+ column="40"/>
</issue>
<issue
@@ -1996,7 +2386,9 @@
errorLine1=" public QueueItem(MediaDescriptionCompat description, long id) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2189"
+ column="26"/>
</issue>
<issue
@@ -2005,7 +2397,9 @@
errorLine1=" public MediaDescriptionCompat getDescription() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2216"
+ column="16"/>
</issue>
<issue
@@ -2014,7 +2408,9 @@
errorLine1=" public void writeToParcel(Parcel dest, int flags) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2228"
+ column="35"/>
</issue>
<issue
@@ -2023,7 +2419,9 @@
errorLine1=" public Object getQueueItem() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2248"
+ column="16"/>
</issue>
<issue
@@ -2032,7 +2430,9 @@
errorLine1=" public static QueueItem fromQueueItem(Object queueItem) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2268"
+ column="23"/>
</issue>
<issue
@@ -2041,7 +2441,9 @@
errorLine1=" public static QueueItem fromQueueItem(Object queueItem) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2268"
+ column="47"/>
</issue>
<issue
@@ -2050,7 +2452,9 @@
errorLine1=" public static List<QueueItem> fromQueueItemList(List<?> itemList) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2290"
+ column="23"/>
</issue>
<issue
@@ -2059,7 +2463,9 @@
errorLine1=" public static List<QueueItem> fromQueueItemList(List<?> itemList) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
+ line="2290"
+ column="57"/>
</issue>
<issue
@@ -2068,7 +2474,9 @@
errorLine1=" android.media.session.MediaSessionManager.RemoteUserInfo remoteUserInfo) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/MediaSessionManager.java"/>
+ file="src/main/java/androidx/media/MediaSessionManager.java"
+ line="184"
+ column="17"/>
</issue>
<issue
@@ -2077,7 +2485,9 @@
errorLine1=" public static MediaSessionCompat.Token getMediaSession(Notification notification) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="102"
+ column="23"/>
</issue>
<issue
@@ -2086,7 +2496,9 @@
errorLine1=" public static MediaSessionCompat.Token getMediaSession(Notification notification) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="102"
+ column="64"/>
</issue>
<issue
@@ -2095,7 +2507,9 @@
errorLine1=" public MediaStyle(androidx.core.app.NotificationCompat.Builder builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="139"
+ column="27"/>
</issue>
<issue
@@ -2104,7 +2518,9 @@
errorLine1=" public MediaStyle setShowActionsInCompactView(int...actions) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="149"
+ column="16"/>
</issue>
<issue
@@ -2113,7 +2529,9 @@
errorLine1=" public MediaStyle setShowActionsInCompactView(int...actions) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="149"
+ column="55"/>
</issue>
<issue
@@ -2122,7 +2540,9 @@
errorLine1=" public MediaStyle setMediaSession(MediaSessionCompat.Token token) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="158"
+ column="16"/>
</issue>
<issue
@@ -2131,7 +2551,9 @@
errorLine1=" public MediaStyle setMediaSession(MediaSessionCompat.Token token) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="158"
+ column="43"/>
</issue>
<issue
@@ -2140,7 +2562,9 @@
errorLine1=" public MediaStyle setShowCancelButton(boolean show) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="187"
+ column="16"/>
</issue>
<issue
@@ -2149,7 +2573,9 @@
errorLine1=" public MediaStyle setCancelButtonIntent(PendingIntent pendingIntent) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="200"
+ column="16"/>
</issue>
<issue
@@ -2158,7 +2584,9 @@
errorLine1=" public MediaStyle setCancelButtonIntent(PendingIntent pendingIntent) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="200"
+ column="49"/>
</issue>
<issue
@@ -2167,7 +2595,9 @@
errorLine1=" public void apply(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="210"
+ column="27"/>
</issue>
<issue
@@ -2176,7 +2606,9 @@
errorLine1=" public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="225"
+ column="16"/>
</issue>
<issue
@@ -2185,7 +2617,9 @@
errorLine1=" public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="225"
+ column="44"/>
</issue>
<issue
@@ -2194,7 +2628,9 @@
errorLine1=" public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="293"
+ column="16"/>
</issue>
<issue
@@ -2203,7 +2639,9 @@
errorLine1=" public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="293"
+ column="47"/>
</issue>
<issue
@@ -2212,7 +2650,9 @@
errorLine1=" public void apply(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="378"
+ column="27"/>
</issue>
<issue
@@ -2221,7 +2661,9 @@
errorLine1=" public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="393"
+ column="16"/>
</issue>
<issue
@@ -2230,7 +2672,9 @@
errorLine1=" public RemoteViews makeContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="393"
+ column="44"/>
</issue>
<issue
@@ -2239,7 +2683,9 @@
errorLine1=" public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="435"
+ column="16"/>
</issue>
<issue
@@ -2248,7 +2694,9 @@
errorLine1=" public RemoteViews makeBigContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="435"
+ column="47"/>
</issue>
<issue
@@ -2257,7 +2705,9 @@
errorLine1=" public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="467"
+ column="16"/>
</issue>
<issue
@@ -2266,7 +2716,9 @@
errorLine1=" public RemoteViews makeHeadsUpContentView(NotificationBuilderWithBuilderAccessor builder) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/app/NotificationCompat.java"/>
+ file="src/main/java/androidx/media/app/NotificationCompat.java"
+ line="467"
+ column="51"/>
</issue>
<issue
@@ -2275,7 +2727,9 @@
errorLine1=" public ParcelableVolumeInfo(Parcel from) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/ParcelableVolumeInfo.java"/>
+ file="src/main/java/android/support/v4/media/session/ParcelableVolumeInfo.java"
+ line="44"
+ column="33"/>
</issue>
<issue
@@ -2284,7 +2738,9 @@
errorLine1=" public void writeToParcel(Parcel dest, int flags) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/ParcelableVolumeInfo.java"/>
+ file="src/main/java/android/support/v4/media/session/ParcelableVolumeInfo.java"
+ line="58"
+ column="31"/>
</issue>
<issue
@@ -2293,7 +2749,9 @@
errorLine1=" public void writeToParcel(Parcel dest, int flags) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="618"
+ column="31"/>
</issue>
<issue
@@ -2302,7 +2760,9 @@
errorLine1=" public long getCurrentPosition(Long timeDiff) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="679"
+ column="36"/>
</issue>
<issue
@@ -2311,7 +2771,9 @@
errorLine1=" public List<PlaybackStateCompat.CustomAction> getCustomActions() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="741"
+ column="12"/>
</issue>
<issue
@@ -2320,7 +2782,9 @@
errorLine1=" public CharSequence getErrorMessage() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="774"
+ column="12"/>
</issue>
<issue
@@ -2329,7 +2793,9 @@
errorLine1=" public static PlaybackStateCompat fromPlaybackState(Object stateObj) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="808"
+ column="19"/>
</issue>
<issue
@@ -2338,7 +2804,9 @@
errorLine1=" public static PlaybackStateCompat fromPlaybackState(Object stateObj) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="808"
+ column="57"/>
</issue>
<issue
@@ -2347,7 +2815,9 @@
errorLine1=" public Object getPlaybackState() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="854"
+ column="12"/>
</issue>
<issue
@@ -2356,7 +2826,9 @@
errorLine1=" public void writeToParcel(Parcel dest, int flags) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="918"
+ column="35"/>
</issue>
<issue
@@ -2365,7 +2837,9 @@
errorLine1=" public static PlaybackStateCompat.CustomAction fromCustomAction(Object customActionObj) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="941"
+ column="23"/>
</issue>
<issue
@@ -2374,7 +2848,9 @@
errorLine1=" public static PlaybackStateCompat.CustomAction fromCustomAction(Object customActionObj) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="941"
+ column="73"/>
</issue>
<issue
@@ -2383,7 +2859,9 @@
errorLine1=" public Object getCustomAction() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="970"
+ column="16"/>
</issue>
<issue
@@ -2392,7 +2870,9 @@
errorLine1=" public String getAction() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1000"
+ column="16"/>
</issue>
<issue
@@ -2401,7 +2881,9 @@
errorLine1=" public CharSequence getName() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1009"
+ column="16"/>
</issue>
<issue
@@ -2410,7 +2892,9 @@
errorLine1=" public Bundle getExtras() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1032"
+ column="16"/>
</issue>
<issue
@@ -2419,7 +2903,9 @@
errorLine1=" public Builder(String action, CharSequence name, int icon) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1066"
+ column="28"/>
</issue>
<issue
@@ -2428,7 +2914,9 @@
errorLine1=" public Builder(String action, CharSequence name, int icon) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1066"
+ column="43"/>
</issue>
<issue
@@ -2437,7 +2925,9 @@
errorLine1=" public Builder setExtras(Bundle extras) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1093"
+ column="20"/>
</issue>
<issue
@@ -2446,7 +2936,9 @@
errorLine1=" public Builder setExtras(Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1093"
+ column="38"/>
</issue>
<issue
@@ -2455,7 +2947,9 @@
errorLine1=" public CustomAction build() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1104"
+ column="20"/>
</issue>
<issue
@@ -2464,7 +2958,9 @@
errorLine1=" public Builder(PlaybackStateCompat source) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1139"
+ column="24"/>
</issue>
<issue
@@ -2473,7 +2969,9 @@
errorLine1=" public Builder setState(@State int state, long position, float playbackSpeed) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1186"
+ column="16"/>
</issue>
<issue
@@ -2482,7 +2980,9 @@
errorLine1=" public Builder setState(@State int state, long position, float playbackSpeed,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1224"
+ column="16"/>
</issue>
<issue
@@ -2491,7 +2991,9 @@
errorLine1=" public Builder setBufferedPosition(long bufferPosition) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1240"
+ column="16"/>
</issue>
<issue
@@ -2500,7 +3002,9 @@
errorLine1=" public Builder setActions(@Actions long capabilities) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1275"
+ column="16"/>
</issue>
<issue
@@ -2509,7 +3013,9 @@
errorLine1=" public Builder addCustomAction(String action, String name, int icon) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1300"
+ column="16"/>
</issue>
<issue
@@ -2518,7 +3024,9 @@
errorLine1=" public Builder addCustomAction(String action, String name, int icon) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1300"
+ column="40"/>
</issue>
<issue
@@ -2527,7 +3035,9 @@
errorLine1=" public Builder addCustomAction(String action, String name, int icon) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1300"
+ column="55"/>
</issue>
<issue
@@ -2536,7 +3046,9 @@
errorLine1=" public Builder addCustomAction(PlaybackStateCompat.CustomAction customAction) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1315"
+ column="16"/>
</issue>
<issue
@@ -2545,7 +3057,9 @@
errorLine1=" public Builder addCustomAction(PlaybackStateCompat.CustomAction customAction) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1315"
+ column="40"/>
</issue>
<issue
@@ -2554,7 +3068,9 @@
errorLine1=" public Builder setActiveQueueItemId(long id) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1331"
+ column="16"/>
</issue>
<issue
@@ -2563,7 +3079,9 @@
errorLine1=" public Builder setErrorMessage(CharSequence errorMessage) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1344"
+ column="16"/>
</issue>
<issue
@@ -2572,7 +3090,9 @@
errorLine1=" public Builder setErrorMessage(CharSequence errorMessage) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1344"
+ column="40"/>
</issue>
<issue
@@ -2581,7 +3101,9 @@
errorLine1=" public Builder setErrorMessage(@ErrorCode int errorCode, CharSequence errorMessage) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1357"
+ column="16"/>
</issue>
<issue
@@ -2590,7 +3112,9 @@
errorLine1=" public Builder setErrorMessage(@ErrorCode int errorCode, CharSequence errorMessage) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1357"
+ column="66"/>
</issue>
<issue
@@ -2599,7 +3123,9 @@
errorLine1=" public Builder setExtras(Bundle extras) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1369"
+ column="16"/>
</issue>
<issue
@@ -2608,7 +3134,9 @@
errorLine1=" public Builder setExtras(Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1369"
+ column="34"/>
</issue>
<issue
@@ -2617,7 +3145,9 @@
errorLine1=" public PlaybackStateCompat build() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"/>
+ file="src/main/java/android/support/v4/media/session/PlaybackStateCompat.java"
+ line="1377"
+ column="16"/>
</issue>
<issue
@@ -2626,7 +3156,9 @@
errorLine1=" public void writeToParcel(Parcel dest, int flags) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+ file="src/main/java/android/support/v4/media/RatingCompat.java"
+ line="128"
+ column="31"/>
</issue>
<issue
@@ -2635,7 +3167,9 @@
errorLine1=" public static RatingCompat newUnratedRating(@Style int ratingStyle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+ file="src/main/java/android/support/v4/media/RatingCompat.java"
+ line="160"
+ column="19"/>
</issue>
<issue
@@ -2644,7 +3178,9 @@
errorLine1=" public static RatingCompat newHeartRating(boolean hasHeart) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+ file="src/main/java/android/support/v4/media/RatingCompat.java"
+ line="181"
+ column="19"/>
</issue>
<issue
@@ -2653,7 +3189,9 @@
errorLine1=" public static RatingCompat newThumbRating(boolean thumbIsUp) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+ file="src/main/java/android/support/v4/media/RatingCompat.java"
+ line="192"
+ column="19"/>
</issue>
<issue
@@ -2662,7 +3200,9 @@
errorLine1=" public static RatingCompat newStarRating(@StarStyle int starRatingStyle,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+ file="src/main/java/android/support/v4/media/RatingCompat.java"
+ line="208"
+ column="19"/>
</issue>
<issue
@@ -2671,7 +3211,9 @@
errorLine1=" public static RatingCompat newPercentageRating(float percent) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+ file="src/main/java/android/support/v4/media/RatingCompat.java"
+ line="239"
+ column="19"/>
</issue>
<issue
@@ -2680,7 +3222,9 @@
errorLine1=" public static RatingCompat fromRating(Object ratingObj) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+ file="src/main/java/android/support/v4/media/RatingCompat.java"
+ line="334"
+ column="19"/>
</issue>
<issue
@@ -2689,7 +3233,9 @@
errorLine1=" public static RatingCompat fromRating(Object ratingObj) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+ file="src/main/java/android/support/v4/media/RatingCompat.java"
+ line="334"
+ column="43"/>
</issue>
<issue
@@ -2698,7 +3244,9 @@
errorLine1=" public Object getRating() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/android/support/v4/media/RatingCompat.java"/>
+ file="src/main/java/android/support/v4/media/RatingCompat.java"
+ line="377"
+ column="12"/>
</issue>
<issue
@@ -2707,7 +3255,9 @@
errorLine1=" public void setCallback(Callback callback) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/media/VolumeProviderCompat.java"/>
+ file="src/main/java/androidx/media/VolumeProviderCompat.java"
+ line="190"
+ column="29"/>
</issue>
<issue
@@ -2716,7 +3266,9 @@
errorLine1=" public Object getVolumeProvider() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media/VolumeProviderCompat.java"/>
+ file="src/main/java/androidx/media/VolumeProviderCompat.java"
+ line="202"
+ column="12"/>
</issue>
<issue
@@ -2725,7 +3277,9 @@
errorLine1=" public abstract void onVolumeChanged(VolumeProviderCompat volumeProvider);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media/VolumeProviderCompat.java"/>
+ file="src/main/java/androidx/media/VolumeProviderCompat.java"
+ line="238"
+ column="46"/>
</issue>
</issues>
diff --git a/media/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java b/media/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java
index 16acd88..717e9c1 100644
--- a/media/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java
+++ b/media/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java
@@ -1185,6 +1185,7 @@
* @param mediaButtonEvent The media button event intent.
* @return True if the event was handled, false otherwise.
*/
+ @SuppressWarnings("deprecation")
public boolean onMediaButtonEvent(Intent mediaButtonEvent) {
if (android.os.Build.VERSION.SDK_INT >= 27) {
// Double tap of play/pause as skipping to next is already handled by framework,
diff --git a/media/media/src/main/java/androidx/media/session/MediaButtonReceiver.java b/media/media/src/main/java/androidx/media/session/MediaButtonReceiver.java
index 10d515c..1b26d16 100644
--- a/media/media/src/main/java/androidx/media/session/MediaButtonReceiver.java
+++ b/media/media/src/main/java/androidx/media/session/MediaButtonReceiver.java
@@ -150,6 +150,7 @@
mMediaBrowser = mediaBrowser;
}
+ @SuppressWarnings("deprecation")
@Override
public void onConnected() {
MediaControllerCompat mediaController = new MediaControllerCompat(mContext,
@@ -186,6 +187,7 @@
* @param intent The intent to parse.
* @return The extracted {@link KeyEvent} if found, or null.
*/
+ @SuppressWarnings("deprecation")
public static KeyEvent handleIntent(MediaSessionCompat mediaSessionCompat, Intent intent) {
if (mediaSessionCompat == null || intent == null
|| !Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())
diff --git a/media2/integration-tests/testapp/src/main/java/androidx/media2/integration/testapp/VideoSessionService.java b/media2/integration-tests/testapp/src/main/java/androidx/media2/integration/testapp/VideoSessionService.java
index 8ff807d..f2df815 100644
--- a/media2/integration-tests/testapp/src/main/java/androidx/media2/integration/testapp/VideoSessionService.java
+++ b/media2/integration-tests/testapp/src/main/java/androidx/media2/integration/testapp/VideoSessionService.java
@@ -39,6 +39,7 @@
import com.google.common.util.concurrent.ListenableFuture;
+import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.List;
import java.util.concurrent.Executor;
@@ -195,7 +196,11 @@
Bitmap musicAlbumBitmap = extractAlbumArt(retriever);
if (retriever != null) {
- retriever.release();
+ try {
+ retriever.release();
+ } catch (IOException e) {
+ // Nothing we can do about that...
+ }
}
MediaMetadata metadata = mediaItem.getMetadata();
diff --git a/media2/media2-player/lint-baseline.xml b/media2/media2-player/lint-baseline.xml
index 55adabc..b5478ee 100644
--- a/media2/media2-player/lint-baseline.xml
+++ b/media2/media2-player/lint-baseline.xml
@@ -250,7 +250,8 @@
errorLine1=" void onLoop(MediaItem mediaItem);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"/>
+ file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"
+ column="21"/>
</issue>
<issue
@@ -259,7 +260,9 @@
errorLine1=" void onMediaTimeDiscontinuity(MediaItem mediaItem, MediaTimestamp mediaTimestamp);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"/>
+ file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"
+ line="135"
+ column="39"/>
</issue>
<issue
@@ -268,7 +271,9 @@
errorLine1=" void onMediaTimeDiscontinuity(MediaItem mediaItem, MediaTimestamp mediaTimestamp);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"/>
+ file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"
+ line="135"
+ column="60"/>
</issue>
<issue
@@ -277,7 +282,9 @@
errorLine1=" void onPlaybackEnded(MediaItem mediaItem);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"/>
+ file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"
+ line="138"
+ column="30"/>
</issue>
<issue
@@ -286,7 +293,9 @@
errorLine1=" void onError(MediaItem mediaItem, int what);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"/>
+ file="src/main/java/androidx/media2/player/ExoPlayerWrapper.java"
+ line="141"
+ column="22"/>
</issue>
<issue
@@ -295,7 +304,9 @@
errorLine1=" public PersistableBundle getMetrics() {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer.java"
+ line="2167"
+ column="12"/>
</issue>
<issue
@@ -304,7 +315,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, int width, int height) { }"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="824"
+ column="17"/>
</issue>
<issue
@@ -313,7 +326,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, int width, int height) { }"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="824"
+ column="34"/>
</issue>
<issue
@@ -322,7 +337,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, TimedMetaData data) { }"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="844"
+ column="17"/>
</issue>
<issue
@@ -331,7 +348,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, TimedMetaData data) { }"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="844"
+ column="34"/>
</issue>
<issue
@@ -340,7 +359,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, TimedMetaData data) { }"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="844"
+ column="50"/>
</issue>
<issue
@@ -349,7 +370,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, @MediaError int what, int extra) { }"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="856"
+ column="17"/>
</issue>
<issue
@@ -358,7 +381,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, @MediaError int what, int extra) { }"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="856"
+ column="34"/>
</issue>
<issue
@@ -367,7 +392,9 @@
errorLine1=" public void onInfo(MediaPlayer2 mp, MediaItem item, @MediaInfo int what, int extra) { }"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="867"
+ column="28"/>
</issue>
<issue
@@ -376,7 +403,9 @@
errorLine1=" public void onInfo(MediaPlayer2 mp, MediaItem item, @MediaInfo int what, int extra) { }"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="867"
+ column="45"/>
</issue>
<issue
@@ -385,7 +414,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, @CallCompleted int what,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="878"
+ column="17"/>
</issue>
<issue
@@ -394,7 +425,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, @CallCompleted int what,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="878"
+ column="34"/>
</issue>
<issue
@@ -403,7 +436,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, MediaTimestamp timestamp) { }"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="902"
+ column="17"/>
</issue>
<issue
@@ -412,7 +447,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, MediaTimestamp timestamp) { }"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="902"
+ column="34"/>
</issue>
<issue
@@ -421,7 +458,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, MediaTimestamp timestamp) { }"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="902"
+ column="50"/>
</issue>
<issue
@@ -430,7 +469,9 @@
errorLine1=" public void onCommandLabelReached(MediaPlayer2 mp, @NonNull Object label) { }"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="911"
+ column="43"/>
</issue>
<issue
@@ -439,7 +480,9 @@
errorLine1=" void onDrmConfig(MediaPlayer2 mp, MediaItem item);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="1452"
+ column="26"/>
</issue>
<issue
@@ -448,7 +491,9 @@
errorLine1=" void onDrmConfig(MediaPlayer2 mp, MediaItem item);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="1452"
+ column="43"/>
</issue>
<issue
@@ -457,7 +502,9 @@
errorLine1=" public void onDrmInfo(MediaPlayer2 mp, MediaItem item, DrmInfo drmInfo) { }"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="1479"
+ column="31"/>
</issue>
<issue
@@ -466,7 +513,9 @@
errorLine1=" public void onDrmInfo(MediaPlayer2 mp, MediaItem item, DrmInfo drmInfo) { }"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="1479"
+ column="48"/>
</issue>
<issue
@@ -475,7 +524,9 @@
errorLine1=" public void onDrmInfo(MediaPlayer2 mp, MediaItem item, DrmInfo drmInfo) { }"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="1479"
+ column="64"/>
</issue>
<issue
@@ -484,7 +535,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, @PrepareDrmStatusCode int status) { }"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="1490"
+ column="17"/>
</issue>
<issue
@@ -493,7 +546,9 @@
errorLine1=" MediaPlayer2 mp, MediaItem item, @PrepareDrmStatusCode int status) { }"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="1490"
+ column="34"/>
</issue>
<issue
@@ -502,7 +557,9 @@
errorLine1=" public abstract Map<UUID, byte[]> getPssh();"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="1714"
+ column="25"/>
</issue>
<issue
@@ -511,7 +568,9 @@
errorLine1=" public abstract List<UUID> getSupportedSchemes();"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/MediaPlayer2.java"/>
+ file="src/main/java/androidx/media2/player/MediaPlayer2.java"
+ line="1721"
+ column="25"/>
</issue>
<issue
@@ -520,7 +579,9 @@
errorLine1=" public android.media.PlaybackParams getPlaybackParams() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/PlaybackParams.java"/>
+ file="src/main/java/androidx/media2/player/PlaybackParams.java"
+ line="166"
+ column="12"/>
</issue>
<issue
@@ -529,7 +590,9 @@
errorLine1=" public Builder(android.media.PlaybackParams playbackParams) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/media2/player/PlaybackParams.java"/>
+ file="src/main/java/androidx/media2/player/PlaybackParams.java"
+ line="196"
+ column="24"/>
</issue>
<issue
@@ -538,7 +601,9 @@
errorLine1=" void onCcData(byte[] data, long timeUs);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media2/player/TextRenderer.java"/>
+ file="src/main/java/androidx/media2/player/TextRenderer.java"
+ line="53"
+ column="23"/>
</issue>
<issue
@@ -547,7 +612,9 @@
errorLine1=" public TimedMetaData(long timestampUs, byte[] metaData) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media2/player/TimedMetaData.java"/>
+ file="src/main/java/androidx/media2/player/TimedMetaData.java"
+ line="43"
+ column="44"/>
</issue>
<issue
@@ -556,7 +623,9 @@
errorLine1=" public byte[] getMetaData() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/media2/player/TimedMetaData.java"/>
+ file="src/main/java/androidx/media2/player/TimedMetaData.java"
+ line="60"
+ column="12"/>
</issue>
</issues>
diff --git a/media2/media2-player/src/androidTest/java/androidx/media2/player/MediaPlayer2Test.java b/media2/media2-player/src/androidTest/java/androidx/media2/player/MediaPlayer2Test.java
index 9510928..d60bd4e 100644
--- a/media2/media2-player/src/androidTest/java/androidx/media2/player/MediaPlayer2Test.java
+++ b/media2/media2-player/src/androidTest/java/androidx/media2/player/MediaPlayer2Test.java
@@ -826,7 +826,11 @@
retriever.setDataSource(file);
String rotation = retriever.extractMetadata(
MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
- retriever.release();
+ try {
+ retriever.release();
+ } catch (IOException e) {
+ // Nothing we can do about it.
+ }
retriever = null;
assertNotNull(rotation);
assertEquals(Integer.parseInt(rotation), angle);
diff --git a/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionImplBase.java b/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionImplBase.java
index 34f5ad0..27ec402 100644
--- a/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionImplBase.java
+++ b/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionImplBase.java
@@ -1672,6 +1672,7 @@
@SuppressWarnings("WeakerAccess") /* synthetic access */
final class MediaButtonReceiver extends BroadcastReceiver {
+ @SuppressWarnings("deprecation")
@Override
public void onReceive(Context context, Intent intent) {
if (!Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
diff --git a/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionServiceImplBase.java b/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionServiceImplBase.java
index 5dc5374..9515408 100644
--- a/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionServiceImplBase.java
+++ b/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionServiceImplBase.java
@@ -150,6 +150,7 @@
}
}
+ @SuppressWarnings("deprecation")
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent == null || intent.getAction() == null) {
diff --git a/navigation/navigation-common-ktx/api/2.5.0-beta01.txt b/navigation/navigation-common-ktx/api/2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-common-ktx/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-common-ktx/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-common-ktx/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-common-ktx/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-common-ktx/api/res-2.5.0-beta01.txt b/navigation/navigation-common-ktx/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-common-ktx/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-common-ktx/api/restricted_2.5.0-beta01.txt b/navigation/navigation-common-ktx/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-common-ktx/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-common/api/2.5.0-beta01.txt b/navigation/navigation-common/api/2.5.0-beta01.txt
deleted file mode 100644
index fe9681f..0000000
--- a/navigation/navigation-common/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,522 +0,0 @@
-// 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 NavArgsLazyKt {
- }
-
- 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 final androidx.navigation.NavDestination destination;
- property public final String id;
- property public final androidx.lifecycle.SavedStateHandle savedStateHandle;
- property public androidx.savedstate.SavedStateRegistry savedStateRegistry;
- }
-
- 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 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();
- }
-
- 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 abstract void put(android.os.Bundle bundle, String key, 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 public void pop(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
- method public void popWithTransition(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
- 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.5.0-beta01.txt b/navigation/navigation-common/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index fe9681f..0000000
--- a/navigation/navigation-common/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,522 +0,0 @@
-// 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 NavArgsLazyKt {
- }
-
- 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 final androidx.navigation.NavDestination destination;
- property public final String id;
- property public final androidx.lifecycle.SavedStateHandle savedStateHandle;
- property public androidx.savedstate.SavedStateRegistry savedStateRegistry;
- }
-
- 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 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();
- }
-
- 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 abstract void put(android.os.Bundle bundle, String key, 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 public void pop(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
- method public void popWithTransition(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
- 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.5.0-beta01.txt b/navigation/navigation-common/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-common/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-common/api/restricted_2.5.0-beta01.txt b/navigation/navigation-common/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index fe9681f..0000000
--- a/navigation/navigation-common/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,522 +0,0 @@
-// 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 NavArgsLazyKt {
- }
-
- 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 final androidx.navigation.NavDestination destination;
- property public final String id;
- property public final androidx.lifecycle.SavedStateHandle savedStateHandle;
- property public androidx.savedstate.SavedStateRegistry savedStateRegistry;
- }
-
- 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 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();
- }
-
- 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 abstract void put(android.os.Bundle bundle, String key, 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 public void pop(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
- method public void popWithTransition(androidx.navigation.NavBackStackEntry popUpTo, boolean saveState);
- 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.5.0-beta01.txt b/navigation/navigation-compose/api/2.5.0-beta01.txt
deleted file mode 100644
index d46757e..0000000
--- a/navigation/navigation-compose/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-// 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();
- }
-
- @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.5.0-beta01.txt b/navigation/navigation-compose/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index d46757e..0000000
--- a/navigation/navigation-compose/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-// 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();
- }
-
- @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.5.0-beta01.txt b/navigation/navigation-compose/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-compose/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-compose/api/restricted_2.5.0-beta01.txt b/navigation/navigation-compose/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index d46757e..0000000
--- a/navigation/navigation-compose/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-// 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();
- }
-
- @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.5.0-beta01.txt b/navigation/navigation-dynamic-features-fragment/api/2.5.0-beta01.txt
deleted file mode 100644
index fe32d9b..0000000
--- a/navigation/navigation-dynamic-features-fragment/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-// 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.5.0-beta01.txt b/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index fe32d9b..0000000
--- a/navigation/navigation-dynamic-features-fragment/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-// 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.5.0-beta01.txt b/navigation/navigation-dynamic-features-fragment/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-dynamic-features-fragment/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-dynamic-features-fragment/api/restricted_2.5.0-beta01.txt b/navigation/navigation-dynamic-features-fragment/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index fe32d9b..0000000
--- a/navigation/navigation-dynamic-features-fragment/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-// 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.5.0-beta01.txt b/navigation/navigation-dynamic-features-runtime/api/2.5.0-beta01.txt
deleted file mode 100644
index e4c37db..0000000
--- a/navigation/navigation-dynamic-features-runtime/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,154 +0,0 @@
-// 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.5.0-beta01.txt b/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index e4c37db..0000000
--- a/navigation/navigation-dynamic-features-runtime/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,154 +0,0 @@
-// 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.5.0-beta01.txt b/navigation/navigation-dynamic-features-runtime/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-dynamic-features-runtime/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-dynamic-features-runtime/api/restricted_2.5.0-beta01.txt b/navigation/navigation-dynamic-features-runtime/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index e4c37db..0000000
--- a/navigation/navigation-dynamic-features-runtime/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,154 +0,0 @@
-// 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.5.0-beta01.txt b/navigation/navigation-fragment-ktx/api/2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-fragment-ktx/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-fragment-ktx/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-fragment-ktx/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-fragment-ktx/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-fragment-ktx/api/res-2.5.0-beta01.txt b/navigation/navigation-fragment-ktx/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-fragment-ktx/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-fragment-ktx/api/restricted_2.5.0-beta01.txt b/navigation/navigation-fragment-ktx/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-fragment-ktx/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-fragment/api/2.5.0-beta01.txt b/navigation/navigation-fragment/api/2.5.0-beta01.txt
deleted file mode 100644
index 52fc882..0000000
--- a/navigation/navigation-fragment/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-// 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.5.0-beta01.txt b/navigation/navigation-fragment/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index 52fc882..0000000
--- a/navigation/navigation-fragment/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-// 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.5.0-beta01.txt b/navigation/navigation-fragment/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-fragment/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-fragment/api/restricted_2.5.0-beta01.txt b/navigation/navigation-fragment/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index 52fc882..0000000
--- a/navigation/navigation-fragment/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-// 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.5.0-beta01.txt b/navigation/navigation-runtime-ktx/api/2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-runtime-ktx/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-runtime-ktx/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-runtime-ktx/api/res-2.5.0-beta01.txt b/navigation/navigation-runtime-ktx/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-runtime-ktx/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-runtime-ktx/api/restricted_2.5.0-beta01.txt b/navigation/navigation-runtime-ktx/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-runtime-ktx/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-runtime/api/2.5.0-beta01.txt b/navigation/navigation-runtime/api/2.5.0-beta01.txt
deleted file mode 100644
index 7f117bb..0000000
--- a/navigation/navigation-runtime/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,224 +0,0 @@
-// 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 public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
- method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
- method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
- method 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.5.0-beta01.txt b/navigation/navigation-runtime/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index 70ea8db..0000000
--- a/navigation/navigation-runtime/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,229 +0,0 @@
-// 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 public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
- method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
- method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
- method 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.5.0-beta01.txt b/navigation/navigation-runtime/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-runtime/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-runtime/api/restricted_2.5.0-beta01.txt b/navigation/navigation-runtime/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index 7f117bb..0000000
--- a/navigation/navigation-runtime/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,224 +0,0 @@
-// 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 public final void navigate(String route, kotlin.jvm.functions.Function1<? super androidx.navigation.NavOptionsBuilder,kotlin.Unit> builder);
- method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions, optional androidx.navigation.Navigator.Extras? navigatorExtras);
- method public final void navigate(String route, optional androidx.navigation.NavOptions? navOptions);
- method 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/src/androidTest/java/androidx/navigation/NavDeepLinkBuilderTest.kt b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavDeepLinkBuilderTest.kt
index b53c19f..602e9f0 100644
--- a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavDeepLinkBuilderTest.kt
+++ b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavDeepLinkBuilderTest.kt
@@ -184,6 +184,7 @@
assertThat(ids).asList().containsExactly(R.id.nav_root, R.id.second_test)
}
+ @Suppress("DEPRECATION")
@Test
fun generateExplicitStartDestinationWithArgs() {
val deepLinkBuilder = NavDeepLinkBuilder(targetContext)
@@ -204,6 +205,7 @@
assertThat(args).containsExactly("arg1", "arg2").inOrder()
}
+ @Suppress("DEPRECATION")
@Test
fun generateExplicitNavRootWithArgs() {
val deepLinkBuilder = NavDeepLinkBuilder(targetContext)
diff --git a/navigation/navigation-testing/api/2.5.0-beta01.txt b/navigation/navigation-testing/api/2.5.0-beta01.txt
deleted file mode 100644
index 89f60a4..0000000
--- a/navigation/navigation-testing/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-// 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.5.0-beta01.txt b/navigation/navigation-testing/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index 89f60a4..0000000
--- a/navigation/navigation-testing/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-// 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.5.0-beta01.txt b/navigation/navigation-testing/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-testing/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-testing/api/restricted_2.5.0-beta01.txt b/navigation/navigation-testing/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index 89f60a4..0000000
--- a/navigation/navigation-testing/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-// 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.5.0-beta01.txt b/navigation/navigation-ui-ktx/api/2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-ui-ktx/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-ui-ktx/api/public_plus_experimental_2.5.0-beta01.txt b/navigation/navigation-ui-ktx/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-ui-ktx/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-ui-ktx/api/res-2.5.0-beta01.txt b/navigation/navigation-ui-ktx/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/navigation/navigation-ui-ktx/api/res-2.5.0-beta01.txt
+++ /dev/null
diff --git a/navigation/navigation-ui-ktx/api/restricted_2.5.0-beta01.txt b/navigation/navigation-ui-ktx/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/navigation/navigation-ui-ktx/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/navigation/navigation-ui/api/2.5.0-beta01.txt b/navigation/navigation-ui/api/2.5.0-beta01.txt
deleted file mode 100644
index 9551da2..0000000
--- a/navigation/navigation-ui/api/2.5.0-beta01.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-// 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();
- 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.5.0-beta01.txt b/navigation/navigation-ui/api/public_plus_experimental_2.5.0-beta01.txt
deleted file mode 100644
index 62b5ce4..0000000
--- a/navigation/navigation-ui/api/public_plus_experimental_2.5.0-beta01.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-// 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();
- 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.5.0-beta01.txt b/navigation/navigation-ui/api/res-2.5.0-beta01.txt
deleted file mode 100644
index e65fdbe..0000000
--- a/navigation/navigation-ui/api/res-2.5.0-beta01.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-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.5.0-beta01.txt b/navigation/navigation-ui/api/restricted_2.5.0-beta01.txt
deleted file mode 100644
index 9551da2..0000000
--- a/navigation/navigation-ui/api/restricted_2.5.0-beta01.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-// 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();
- 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/preference/preference/lint-baseline.xml b/preference/preference/lint-baseline.xml
index 20e6e28..e7829c9 100644
--- a/preference/preference/lint-baseline.xml
+++ b/preference/preference/lint-baseline.xml
@@ -196,7 +196,8 @@
errorLine1=" public CharSequence[] getEntryValues() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/MultiSelectListPreference.java"/>
+ file="src/main/java/androidx/preference/MultiSelectListPreference.java"
+ column="12"/>
</issue>
<issue
@@ -205,7 +206,9 @@
errorLine1=" public void setValues(Set<String> values) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/MultiSelectListPreference.java"/>
+ file="src/main/java/androidx/preference/MultiSelectListPreference.java"
+ line="147"
+ column="27"/>
</issue>
<issue
@@ -214,7 +217,9 @@
errorLine1=" public Set<String> getValues() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/MultiSelectListPreference.java"/>
+ file="src/main/java/androidx/preference/MultiSelectListPreference.java"
+ line="160"
+ column="12"/>
</issue>
<issue
@@ -223,7 +228,9 @@
errorLine1=" public int findIndexOfValue(String value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/MultiSelectListPreference.java"/>
+ file="src/main/java/androidx/preference/MultiSelectListPreference.java"
+ line="170"
+ column="33"/>
</issue>
<issue
@@ -232,7 +239,9 @@
errorLine1=" protected boolean[] getSelectedItems() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/MultiSelectListPreference.java"/>
+ file="src/main/java/androidx/preference/MultiSelectListPreference.java"
+ line="181"
+ column="15"/>
</issue>
<issue
@@ -241,7 +250,9 @@
errorLine1=" protected void onSetInitialValue(Object defaultValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/MultiSelectListPreference.java"/>
+ file="src/main/java/androidx/preference/MultiSelectListPreference.java"
+ line="208"
+ column="38"/>
</issue>
<issue
@@ -250,7 +261,9 @@
errorLine1=" public static MultiSelectListPreferenceDialogFragmentCompat newInstance(String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/MultiSelectListPreferenceDialogFragmentCompat.java"/>
+ file="src/main/java/androidx/preference/MultiSelectListPreferenceDialogFragmentCompat.java"
+ line="51"
+ column="77"/>
</issue>
<issue
@@ -259,7 +272,9 @@
errorLine1=" public void setKey(String key) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="950"
+ column="24"/>
</issue>
<issue
@@ -268,7 +283,9 @@
errorLine1=" public String getKey() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="964"
+ column="12"/>
</issue>
<issue
@@ -277,7 +294,9 @@
errorLine1=" public boolean callChangeListener(Object newValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="1130"
+ column="39"/>
</issue>
<issue
@@ -286,7 +305,9 @@
errorLine1=" public PreferenceManager getPreferenceManager() {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="1313"
+ column="12"/>
</issue>
<issue
@@ -295,7 +316,9 @@
errorLine1=" public void setDefaultValue(Object defaultValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="1590"
+ column="33"/>
</issue>
<issue
@@ -304,7 +327,9 @@
errorLine1=" protected boolean persistString(String value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="1666"
+ column="37"/>
</issue>
<issue
@@ -313,7 +338,9 @@
errorLine1=" protected String getPersistedString(String defaultReturnValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="1696"
+ column="15"/>
</issue>
<issue
@@ -322,7 +349,9 @@
errorLine1=" protected String getPersistedString(String defaultReturnValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="1696"
+ column="41"/>
</issue>
<issue
@@ -331,7 +360,9 @@
errorLine1=" public boolean persistStringSet(Set<String> values) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="1719"
+ column="37"/>
</issue>
<issue
@@ -340,7 +371,9 @@
errorLine1=" public Set<String> getPersistedStringSet(Set<String> defaultReturnValue) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="1749"
+ column="12"/>
</issue>
<issue
@@ -349,7 +382,9 @@
errorLine1=" public Set<String> getPersistedStringSet(Set<String> defaultReturnValue) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="1749"
+ column="46"/>
</issue>
<issue
@@ -358,7 +393,9 @@
errorLine1=" boolean onPreferenceChange(@NonNull Preference preference, Object newValue);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="2141"
+ column="68"/>
</issue>
<issue
@@ -367,7 +404,9 @@
errorLine1=" public BaseSavedState(Parcel source) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="2233"
+ column="31"/>
</issue>
<issue
@@ -376,7 +415,9 @@
errorLine1=" public BaseSavedState(Parcelable superState) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/Preference.java"/>
+ file="src/main/java/androidx/preference/Preference.java"
+ line="2237"
+ column="31"/>
</issue>
<issue
@@ -385,7 +426,9 @@
errorLine1=" public void putString(String key, @Nullable String value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+ file="src/main/java/androidx/preference/PreferenceDataStore.java"
+ line="55"
+ column="27"/>
</issue>
<issue
@@ -394,7 +437,9 @@
errorLine1=" public void putStringSet(String key, @Nullable Set<String> values) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+ file="src/main/java/androidx/preference/PreferenceDataStore.java"
+ line="68"
+ column="30"/>
</issue>
<issue
@@ -403,7 +448,9 @@
errorLine1=" public void putInt(String key, int value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+ file="src/main/java/androidx/preference/PreferenceDataStore.java"
+ line="81"
+ column="24"/>
</issue>
<issue
@@ -412,7 +459,9 @@
errorLine1=" public void putLong(String key, long value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+ file="src/main/java/androidx/preference/PreferenceDataStore.java"
+ line="94"
+ column="25"/>
</issue>
<issue
@@ -421,7 +470,9 @@
errorLine1=" public void putFloat(String key, float value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+ file="src/main/java/androidx/preference/PreferenceDataStore.java"
+ line="107"
+ column="26"/>
</issue>
<issue
@@ -430,7 +481,9 @@
errorLine1=" public void putBoolean(String key, boolean value) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+ file="src/main/java/androidx/preference/PreferenceDataStore.java"
+ line="120"
+ column="28"/>
</issue>
<issue
@@ -439,7 +492,9 @@
errorLine1=" public String getString(String key, @Nullable String defValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+ file="src/main/java/androidx/preference/PreferenceDataStore.java"
+ line="133"
+ column="29"/>
</issue>
<issue
@@ -448,7 +503,9 @@
errorLine1=" public Set<String> getStringSet(String key, @Nullable Set<String> defValues) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+ file="src/main/java/androidx/preference/PreferenceDataStore.java"
+ line="146"
+ column="37"/>
</issue>
<issue
@@ -457,7 +514,9 @@
errorLine1=" public int getInt(String key, int defValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+ file="src/main/java/androidx/preference/PreferenceDataStore.java"
+ line="158"
+ column="23"/>
</issue>
<issue
@@ -466,7 +525,9 @@
errorLine1=" public long getLong(String key, long defValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+ file="src/main/java/androidx/preference/PreferenceDataStore.java"
+ line="170"
+ column="25"/>
</issue>
<issue
@@ -475,7 +536,9 @@
errorLine1=" public float getFloat(String key, float defValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+ file="src/main/java/androidx/preference/PreferenceDataStore.java"
+ line="182"
+ column="27"/>
</issue>
<issue
@@ -484,7 +547,9 @@
errorLine1=" public boolean getBoolean(String key, boolean defValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceDataStore.java"/>
+ file="src/main/java/androidx/preference/PreferenceDataStore.java"
+ line="194"
+ column="31"/>
</issue>
<issue
@@ -493,7 +558,9 @@
errorLine1=" public DialogPreference getPreference() {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceDialogFragmentCompat.java"/>
+ file="src/main/java/androidx/preference/PreferenceDialogFragmentCompat.java"
+ line="176"
+ column="12"/>
</issue>
<issue
@@ -502,7 +569,9 @@
errorLine1=" public PreferenceManager getPreferenceManager() {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"/>
+ file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"
+ line="327"
+ column="12"/>
</issue>
<issue
@@ -511,7 +580,9 @@
errorLine1=" public PreferenceScreen getPreferenceScreen() {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"/>
+ file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"
+ line="336"
+ column="12"/>
</issue>
<issue
@@ -520,7 +591,9 @@
errorLine1=" public void setPreferenceScreen(PreferenceScreen preferenceScreen) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"/>
+ file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"
+ line="345"
+ column="37"/>
</issue>
<issue
@@ -529,7 +602,9 @@
errorLine1=" public final RecyclerView getListView() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"/>
+ file="src/main/java/androidx/preference/PreferenceFragmentCompat.java"
+ line="549"
+ column="18"/>
</issue>
<issue
@@ -538,7 +613,9 @@
errorLine1=" public static SharedPreferences getDefaultSharedPreferences(@NonNull Context context) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceManager.java"/>
+ file="src/main/java/androidx/preference/PreferenceManager.java"
+ line="118"
+ column="19"/>
</issue>
<issue
@@ -547,7 +624,9 @@
errorLine1=" public static void setDefaultValues(@NonNull Context context, String sharedPreferencesName,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceManager.java"/>
+ file="src/main/java/androidx/preference/PreferenceManager.java"
+ line="179"
+ column="67"/>
</issue>
<issue
@@ -556,7 +635,9 @@
errorLine1=" public String getSharedPreferencesName() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceManager.java"/>
+ file="src/main/java/androidx/preference/PreferenceManager.java"
+ line="251"
+ column="12"/>
</issue>
<issue
@@ -565,7 +646,9 @@
errorLine1=" public void setSharedPreferencesName(String sharedPreferencesName) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceManager.java"/>
+ file="src/main/java/androidx/preference/PreferenceManager.java"
+ line="265"
+ column="42"/>
</issue>
<issue
@@ -574,7 +657,9 @@
errorLine1=" public PreferenceScreen getPreferenceScreen() {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceManager.java"/>
+ file="src/main/java/androidx/preference/PreferenceManager.java"
+ line="421"
+ column="12"/>
</issue>
<issue
@@ -583,7 +668,9 @@
errorLine1=" public boolean setPreferences(PreferenceScreen preferenceScreen) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceManager.java"/>
+ file="src/main/java/androidx/preference/PreferenceManager.java"
+ line="431"
+ column="35"/>
</issue>
<issue
@@ -592,7 +679,9 @@
errorLine1=" public View findViewById(@IdRes int id) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/preference/PreferenceViewHolder.java"/>
+ file="src/main/java/androidx/preference/PreferenceViewHolder.java"
+ line="77"
+ column="12"/>
</issue>
<issue
@@ -601,7 +690,9 @@
errorLine1=" protected void onSetInitialValue(Object defaultValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/SeekBarPreference.java"/>
+ file="src/main/java/androidx/preference/SeekBarPreference.java"
+ line="203"
+ column="38"/>
</issue>
<issue
@@ -610,7 +701,9 @@
errorLine1=" protected void onSetInitialValue(Object defaultValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/preference/TwoStatePreference.java"/>
+ file="src/main/java/androidx/preference/TwoStatePreference.java"
+ line="203"
+ column="38"/>
</issue>
<issue
@@ -619,7 +712,9 @@
errorLine1=" protected void syncSummaryView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/preference/TwoStatePreference.java"/>
+ file="src/main/java/androidx/preference/TwoStatePreference.java"
+ line="225"
+ column="36"/>
</issue>
</issues>
diff --git a/preference/preference/src/main/java/androidx/preference/Preference.java b/preference/preference/src/main/java/androidx/preference/Preference.java
index 8872612..79d8a2d 100644
--- a/preference/preference/src/main/java/androidx/preference/Preference.java
+++ b/preference/preference/src/main/java/androidx/preference/Preference.java
@@ -25,6 +25,7 @@
import android.content.SharedPreferences;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
+import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -2274,10 +2275,13 @@
CharSequence summary = mPreference.getSummary();
ClipData clip = ClipData.newPlainText(CLIPBOARD_ID, summary);
clipboard.setPrimaryClip(clip);
- Toast.makeText(mPreference.getContext(),
- mPreference.getContext().getString(R.string.preference_copied,
- summary),
- Toast.LENGTH_SHORT).show();
+ // T has a clipboard overlay that automatically shows copied text, so only show a Toast
+ // below T.
+ if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
+ Toast.makeText(mPreference.getContext(),
+ mPreference.getContext().getString(R.string.preference_copied, summary),
+ Toast.LENGTH_SHORT).show();
+ }
return true;
}
}
diff --git a/print/print/lint-baseline.xml b/print/print/lint-baseline.xml
index 64de3a4..4f280a4 100644
--- a/print/print/lint-baseline.xml
+++ b/print/print/lint-baseline.xml
@@ -115,7 +115,9 @@
errorLine1=" .setMediaSize(other.getMediaSize())"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="561"
+ column="18"/>
</issue>
<issue
@@ -124,7 +126,9 @@
errorLine1=" .setMediaSize(other.getMediaSize())"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="561"
+ column="37"/>
</issue>
<issue
@@ -133,7 +137,9 @@
errorLine1=" .setResolution(other.getResolution())"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="562"
+ column="18"/>
</issue>
<issue
@@ -142,7 +148,9 @@
errorLine1=" .setResolution(other.getResolution())"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="562"
+ column="38"/>
</issue>
<issue
@@ -151,7 +159,9 @@
errorLine1=" .setMinMargins(other.getMinMargins());"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="563"
+ column="18"/>
</issue>
<issue
@@ -160,7 +170,9 @@
errorLine1=" .setMinMargins(other.getMinMargins());"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="563"
+ column="38"/>
</issue>
<issue
@@ -169,7 +181,9 @@
errorLine1=" if (other.getColorMode() != 0) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="565"
+ column="19"/>
</issue>
<issue
@@ -178,7 +192,9 @@
errorLine1=" b.setColorMode(other.getColorMode());"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="566"
+ column="15"/>
</issue>
<issue
@@ -187,7 +203,9 @@
errorLine1=" b.setColorMode(other.getColorMode());"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="566"
+ column="34"/>
</issue>
<issue
@@ -196,7 +214,9 @@
errorLine1=" if (other.getDuplexMode() != 0) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="570"
+ column="23"/>
</issue>
<issue
@@ -205,7 +225,9 @@
errorLine1=" b.setDuplexMode(other.getDuplexMode());"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="571"
+ column="19"/>
</issue>
<issue
@@ -214,7 +236,9 @@
errorLine1=" b.setDuplexMode(other.getDuplexMode());"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="571"
+ column="39"/>
</issue>
<issue
@@ -223,7 +247,9 @@
errorLine1=" .setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0)).build();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="634"
+ column="22"/>
</issue>
<issue
@@ -232,7 +258,9 @@
errorLine1=" .setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0)).build();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="634"
+ column="36"/>
</issue>
<issue
@@ -241,7 +269,9 @@
errorLine1=" .setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0)).build();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="634"
+ column="77"/>
</issue>
<issue
@@ -250,7 +280,9 @@
errorLine1=" if (cancellationSignal.isCanceled()) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="641"
+ column="44"/>
</issue>
<issue
@@ -259,7 +291,9 @@
errorLine1=" PrintedPdfDocument pdfDocument = new PrintedPdfDocument(mContext,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="645"
+ column="54"/>
</issue>
<issue
@@ -268,7 +302,9 @@
errorLine1=" pdfAttributes.getColorMode());"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="649"
+ column="43"/>
</issue>
<issue
@@ -277,7 +313,9 @@
errorLine1=" if (cancellationSignal.isCanceled()) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="651"
+ column="44"/>
</issue>
<issue
@@ -286,7 +324,9 @@
errorLine1=" PdfDocument.Page page = pdfDocument.startPage(1);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="656"
+ column="61"/>
</issue>
<issue
@@ -295,7 +335,9 @@
errorLine1=" contentRect = new RectF(page.getInfo().getContentRect());"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="660"
+ column="58"/>
</issue>
<issue
@@ -304,7 +346,9 @@
errorLine1=" contentRect = new RectF(page.getInfo().getContentRect());"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="660"
+ column="68"/>
</issue>
<issue
@@ -313,7 +357,9 @@
errorLine1=" PrintedPdfDocument dummyDocument = new PrintedPdfDocument(mContext,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="664"
+ column="64"/>
</issue>
<issue
@@ -322,7 +368,9 @@
errorLine1=" PdfDocument.Page dummyPage = dummyDocument.startPage(1);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="666"
+ column="72"/>
</issue>
<issue
@@ -331,7 +379,9 @@
errorLine1=" contentRect = new RectF(dummyPage.getInfo().getContentRect());"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="667"
+ column="63"/>
</issue>
<issue
@@ -340,7 +390,9 @@
errorLine1=" contentRect = new RectF(dummyPage.getInfo().getContentRect());"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="667"
+ column="73"/>
</issue>
<issue
@@ -349,7 +401,9 @@
errorLine1=" dummyDocument.finishPage(dummyPage);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="668"
+ column="43"/>
</issue>
<issue
@@ -358,7 +412,9 @@
errorLine1=" dummyDocument.close();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="669"
+ column="43"/>
</issue>
<issue
@@ -367,7 +423,9 @@
errorLine1=" page.getCanvas().clipRect(contentRect);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="684"
+ column="34"/>
</issue>
<issue
@@ -376,7 +434,9 @@
errorLine1=" page.getCanvas().drawBitmap(maybeGrayscale, matrix, null);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="688"
+ column="30"/>
</issue>
<issue
@@ -385,7 +445,9 @@
errorLine1=" pdfDocument.finishPage(page);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="691"
+ column="37"/>
</issue>
<issue
@@ -394,7 +456,9 @@
errorLine1=" if (cancellationSignal.isCanceled()) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="693"
+ column="48"/>
</issue>
<issue
@@ -403,7 +467,9 @@
errorLine1=" pdfDocument.writeTo("
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="698"
+ column="37"/>
</issue>
<issue
@@ -412,7 +478,9 @@
errorLine1=" pdfDocument.close();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="702"
+ column="37"/>
</issue>
<issue
@@ -421,7 +489,9 @@
errorLine1=" if (cancellationSignal.isCanceled()) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="723"
+ column="40"/>
</issue>
<issue
@@ -430,7 +500,9 @@
errorLine1=" writeResultCallback.onWriteCancelled();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="725"
+ column="41"/>
</issue>
<issue
@@ -439,7 +511,9 @@
errorLine1=" writeResultCallback.onWriteFinished("
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="728"
+ column="41"/>
</issue>
<issue
@@ -448,7 +522,9 @@
errorLine1=" writeResultCallback.onWriteFailed(null);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="733"
+ column="41"/>
</issue>
<issue
@@ -457,7 +533,9 @@
errorLine1=" mDecodeOptions.inPreferredColorSpace = ColorSpace.get(ColorSpace.Named.SRGB);"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/print/PrintHelper.java"/>
+ file="src/main/java/androidx/print/PrintHelper.java"
+ line="783"
+ column="67"/>
</issue>
</issues>
diff --git a/profileinstaller/profileinstaller/src/main/java/androidx/profileinstaller/DeviceProfileWriter.java b/profileinstaller/profileinstaller/src/main/java/androidx/profileinstaller/DeviceProfileWriter.java
index 694d2c1..0bcb376 100644
--- a/profileinstaller/profileinstaller/src/main/java/androidx/profileinstaller/DeviceProfileWriter.java
+++ b/profileinstaller/profileinstaller/src/main/java/androidx/profileinstaller/DeviceProfileWriter.java
@@ -307,6 +307,8 @@
return ProfileVersion.V010_P;
case Build.VERSION_CODES.S:
+ case Build.VERSION_CODES.S_V2:
+ case Build.VERSION_CODES.TIRAMISU:
return ProfileVersion.V015_S;
default:
@@ -339,6 +341,8 @@
// The profiles for S require a typeIdCount. Therefore metadata is required.
case Build.VERSION_CODES.S:
+ case Build.VERSION_CODES.S_V2:
+ case Build.VERSION_CODES.TIRAMISU:
return true;
default:
diff --git a/recommendation/recommendation/lint-baseline.xml b/recommendation/recommendation/lint-baseline.xml
index f8813c0..8b3d44e 100644
--- a/recommendation/recommendation/lint-baseline.xml
+++ b/recommendation/recommendation/lint-baseline.xml
@@ -259,7 +259,9 @@
errorLine1=" public Builder setColor(@ColorInt int color) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="836"
+ column="16"/>
</issue>
<issue
@@ -268,7 +270,9 @@
errorLine1=" public Builder setGroup(@Nullable String groupTag) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="853"
+ column="16"/>
</issue>
<issue
@@ -277,7 +281,9 @@
errorLine1=" public Builder setSortKey(@Nullable String sortKey) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="869"
+ column="16"/>
</issue>
<issue
@@ -286,7 +292,9 @@
errorLine1=" public Builder setProgress(int max, int progress) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="881"
+ column="16"/>
</issue>
<issue
@@ -295,7 +303,9 @@
errorLine1=" public Builder setAutoDismiss(boolean autoDismiss) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="900"
+ column="16"/>
</issue>
<issue
@@ -304,7 +314,9 @@
errorLine1=" public Builder setContentIntentData(@IntentType int intentType, Intent intent,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="923"
+ column="16"/>
</issue>
<issue
@@ -313,7 +325,9 @@
errorLine1=" public Builder setContentIntentData(@IntentType int intentType, Intent intent,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="923"
+ column="73"/>
</issue>
<issue
@@ -322,7 +336,9 @@
errorLine1=" public Builder setDismissIntentData(@IntentType int intentType, @Nullable Intent intent,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="959"
+ column="16"/>
</issue>
<issue
@@ -331,7 +347,9 @@
errorLine1=" public Builder setContentTypes(String[] types) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="988"
+ column="16"/>
</issue>
<issue
@@ -340,7 +358,9 @@
errorLine1=" public Builder setContentTypes(String[] types) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="988"
+ column="40"/>
</issue>
<issue
@@ -349,7 +369,9 @@
errorLine1=" public Builder setGenres(String[] genres) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="1001"
+ column="16"/>
</issue>
<issue
@@ -358,7 +380,9 @@
errorLine1=" public Builder setGenres(String[] genres) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="1001"
+ column="34"/>
</issue>
<issue
@@ -367,7 +391,9 @@
errorLine1=" public Builder setPricingInformation(@ContentPricing String priceType,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="1016"
+ column="16"/>
</issue>
<issue
@@ -376,7 +402,9 @@
errorLine1=" public Builder setPricingInformation(@ContentPricing String priceType,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="1016"
+ column="62"/>
</issue>
<issue
@@ -385,7 +413,9 @@
errorLine1=" public Builder setStatus(@ContentStatus int contentStatus) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="1031"
+ column="16"/>
</issue>
<issue
@@ -394,7 +424,9 @@
errorLine1=" public Builder setMaturityRating(@ContentMaturity String maturityRating) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="1043"
+ column="16"/>
</issue>
<issue
@@ -403,7 +435,9 @@
errorLine1=" public Builder setMaturityRating(@ContentMaturity String maturityRating) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="1043"
+ column="59"/>
</issue>
<issue
@@ -412,7 +446,9 @@
errorLine1=" public Builder setRunningTime(long length) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="1053"
+ column="16"/>
</issue>
<issue
@@ -421,7 +457,9 @@
errorLine1=" public ContentRecommendation build() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="1065"
+ column="16"/>
</issue>
<issue
@@ -430,7 +468,9 @@
errorLine1=" public Notification getNotificationObject(Context context) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="1081"
+ column="12"/>
</issue>
<issue
@@ -439,7 +479,9 @@
errorLine1=" public Notification getNotificationObject(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"/>
+ file="src/main/java/androidx/recommendation/app/ContentRecommendation.java"
+ line="1081"
+ column="47"/>
</issue>
<issue
@@ -448,7 +490,9 @@
errorLine1=" public RecommendationExtender(Notification notif) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="83"
+ column="35"/>
</issue>
<issue
@@ -457,7 +501,9 @@
errorLine1=" public RecommendationExtender setContentTypes(String[] types) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="140"
+ column="12"/>
</issue>
<issue
@@ -466,7 +512,9 @@
errorLine1=" public RecommendationExtender setContentTypes(String[] types) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="140"
+ column="51"/>
</issue>
<issue
@@ -475,7 +523,9 @@
errorLine1=" public String[] getContentTypes() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="154"
+ column="12"/>
</issue>
<issue
@@ -484,7 +534,9 @@
errorLine1=" public String getPrimaryContentType() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="165"
+ column="12"/>
</issue>
<issue
@@ -493,7 +545,9 @@
errorLine1=" public RecommendationExtender setGenres(String[] genres) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="181"
+ column="12"/>
</issue>
<issue
@@ -502,7 +556,9 @@
errorLine1=" public RecommendationExtender setGenres(String[] genres) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="181"
+ column="45"/>
</issue>
<issue
@@ -511,7 +567,9 @@
errorLine1=" public String[] getGenres() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="193"
+ column="12"/>
</issue>
<issue
@@ -520,7 +578,9 @@
errorLine1=" public RecommendationExtender setPricingInformation("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="208"
+ column="12"/>
</issue>
<issue
@@ -529,7 +589,9 @@
errorLine1=" @ContentRecommendation.ContentPricing String priceType, String priceValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="209"
+ column="51"/>
</issue>
<issue
@@ -538,7 +600,9 @@
errorLine1=" @ContentRecommendation.ContentPricing String priceType, String priceValue) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="209"
+ column="69"/>
</issue>
<issue
@@ -547,7 +611,9 @@
errorLine1=" public String getPricingType() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="222"
+ column="12"/>
</issue>
<issue
@@ -556,7 +622,9 @@
errorLine1=" public String getPricingValue() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="235"
+ column="12"/>
</issue>
<issue
@@ -565,7 +633,9 @@
errorLine1=" public RecommendationExtender setStatus("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="250"
+ column="12"/>
</issue>
<issue
@@ -574,7 +644,9 @@
errorLine1=" public RecommendationExtender setMaturityRating("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="276"
+ column="12"/>
</issue>
<issue
@@ -583,7 +655,9 @@
errorLine1=" @ContentRecommendation.ContentMaturity String maturityRating) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="277"
+ column="52"/>
</issue>
<issue
@@ -592,7 +666,9 @@
errorLine1=" public String getMaturityRating() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="289"
+ column="12"/>
</issue>
<issue
@@ -601,7 +677,9 @@
errorLine1=" public RecommendationExtender setRunningTime(long length) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"/>
+ file="src/main/java/androidx/recommendation/app/RecommendationExtender.java"
+ line="298"
+ column="12"/>
</issue>
</issues>
diff --git a/recyclerview/recyclerview-selection/src/androidTest/java/androidx/recyclerview/selection/testing/TestData.java b/recyclerview/recyclerview-selection/src/androidTest/java/androidx/recyclerview/selection/testing/TestData.java
index 14e27aa..5fcd73a 100644
--- a/recyclerview/recyclerview-selection/src/androidTest/java/androidx/recyclerview/selection/testing/TestData.java
+++ b/recyclerview/recyclerview-selection/src/androidTest/java/androidx/recyclerview/selection/testing/TestData.java
@@ -31,8 +31,8 @@
public static List<Long> createLongData(int num) {
List<Long> items = new ArrayList<>(num);
- for (int i = 0; i < num; ++i) {
- items.add(new Long(i));
+ for (long i = 0; i < num; ++i) {
+ items.add(i);
}
return items;
}
diff --git a/room/room-rxjava2/lint-baseline.xml b/room/room-rxjava2/lint-baseline.xml
index beacd64..334fe31 100644
--- a/room/room-rxjava2/lint-baseline.xml
+++ b/room/room-rxjava2/lint-baseline.xml
@@ -25,7 +25,9 @@
errorLine1=" public static Flowable<Object> createFlowable(final RoomDatabase database,"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="68"
+ column="19"/>
</issue>
<issue
@@ -34,7 +36,9 @@
errorLine1=" public static Flowable<Object> createFlowable(final RoomDatabase database,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="68"
+ column="57"/>
</issue>
<issue
@@ -43,7 +47,9 @@
errorLine1=" final String... tableNames) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="69"
+ column="19"/>
</issue>
<issue
@@ -52,7 +58,9 @@
errorLine1=" public static <T> Flowable<T> createFlowable(final RoomDatabase database,"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="122"
+ column="23"/>
</issue>
<issue
@@ -61,7 +69,9 @@
errorLine1=" public static <T> Flowable<T> createFlowable(final RoomDatabase database,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="122"
+ column="56"/>
</issue>
<issue
@@ -70,7 +80,9 @@
errorLine1=" final boolean inTransaction, final String[] tableNames, final Callable<T> callable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="123"
+ column="48"/>
</issue>
<issue
@@ -79,7 +91,9 @@
errorLine1=" final boolean inTransaction, final String[] tableNames, final Callable<T> callable) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="123"
+ column="75"/>
</issue>
<issue
@@ -88,7 +102,9 @@
errorLine1=" public static Observable<Object> createObservable(final RoomDatabase database,"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="153"
+ column="19"/>
</issue>
<issue
@@ -97,7 +113,9 @@
errorLine1=" public static Observable<Object> createObservable(final RoomDatabase database,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="153"
+ column="61"/>
</issue>
<issue
@@ -106,7 +124,9 @@
errorLine1=" final String... tableNames) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="154"
+ column="19"/>
</issue>
<issue
@@ -115,7 +135,9 @@
errorLine1=" public static <T> Observable<T> createObservable(final RoomDatabase database,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="201"
+ column="23"/>
</issue>
<issue
@@ -124,7 +146,9 @@
errorLine1=" public static <T> Observable<T> createObservable(final RoomDatabase database,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="201"
+ column="60"/>
</issue>
<issue
@@ -133,7 +157,9 @@
errorLine1=" final boolean inTransaction, final String[] tableNames, final Callable<T> callable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="202"
+ column="48"/>
</issue>
<issue
@@ -142,7 +168,9 @@
errorLine1=" final boolean inTransaction, final String[] tableNames, final Callable<T> callable) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="202"
+ column="75"/>
</issue>
<issue
@@ -151,7 +179,9 @@
errorLine1=" public static <T> Single<T> createSingle(final Callable<T> callable) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="224"
+ column="23"/>
</issue>
<issue
@@ -160,7 +190,9 @@
errorLine1=" public static <T> Single<T> createSingle(final Callable<T> callable) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/room/RxRoom.java"/>
+ file="src/main/java/androidx/room/RxRoom.java"
+ line="224"
+ column="52"/>
</issue>
</issues>
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaButtonReceiver.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaButtonReceiver.java
index 77e5126..3ad4b36 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaButtonReceiver.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaButtonReceiver.java
@@ -28,6 +28,7 @@
* remote route volume in lock screen. It routes media key events back
* to main app activity SampleMediaRouterActivity.
*/
+@SuppressWarnings("deprecation")
public class SampleMediaButtonReceiver extends BroadcastReceiver {
private static final String TAG = "SampleMediaButtonReceiver";
private static SampleMediaRouterActivity mActivity;
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java
index e695d7d..afe07ed9 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouteProvider.java
@@ -51,6 +51,7 @@
*
* @see SampleMediaRouteProviderService
*/
+@SuppressWarnings("deprecation")
class SampleMediaRouteProvider extends MediaRouteProvider {
private static final String TAG = "SampleMrp";
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java
index 6f72b20..507d14e 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java
@@ -78,6 +78,7 @@
* targets.
* </p>
*/
+@SuppressWarnings("deprecation")
public class SampleMediaRouterActivity extends AppCompatActivity {
private static final String TAG = "SampleMediaRouter";
private static final String DISCOVERY_FRAGMENT_TAG = "DiscoveryFragment";
diff --git a/samples/SupportLeanbackDemos/lint-baseline.xml b/samples/SupportLeanbackDemos/lint-baseline.xml
index 2cec5b7..2579349 100644
--- a/samples/SupportLeanbackDemos/lint-baseline.xml
+++ b/samples/SupportLeanbackDemos/lint-baseline.xml
@@ -241,7 +241,9 @@
errorLine1=" Log.i(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="59"
+ column="15"/>
</issue>
<issue
@@ -250,7 +252,9 @@
errorLine1=" Log.i(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="69"
+ column="15"/>
</issue>
<issue
@@ -259,7 +263,9 @@
errorLine1=" Log.i(TAG, "onItemSelected: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="92"
+ column="23"/>
</issue>
<issue
@@ -268,7 +274,9 @@
errorLine1=" Log.i(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="69"
+ column="15"/>
</issue>
<issue
@@ -277,7 +285,9 @@
errorLine1=" Log.i(TAG, "onItemClicked: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="136"
+ column="23"/>
</issue>
<issue
@@ -286,7 +296,9 @@
errorLine1=" Log.i(TAG, "onItemSelected: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="153"
+ column="23"/>
</issue>
<issue
@@ -295,7 +307,9 @@
errorLine1=" Log.i(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="72"
+ column="15"/>
</issue>
<issue
@@ -304,7 +318,9 @@
errorLine1=" Log.i(TAG, "onItemClicked: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="139"
+ column="23"/>
</issue>
<issue
@@ -313,7 +329,9 @@
errorLine1=" Log.i(TAG, "onItemSelected: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="156"
+ column="23"/>
</issue>
<issue
@@ -322,7 +340,9 @@
errorLine1=" Log.i(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/ErrorSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/ErrorSupportFragment.java"
+ line="32"
+ column="15"/>
</issue>
<issue
@@ -331,7 +351,9 @@
errorLine1=" Log.i(TAG, "button clicked");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/ErrorSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/ErrorSupportFragment.java"
+ line="46"
+ column="23"/>
</issue>
<issue
@@ -340,7 +362,9 @@
errorLine1=" Log.v(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="43"
+ column="15"/>
</issue>
<issue
@@ -349,7 +373,9 @@
errorLine1=" Log.v(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="46"
+ column="15"/>
</issue>
<issue
@@ -358,7 +384,9 @@
errorLine1=" Log.v(TAG, "onScrollStateChanged ""
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+ file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+ line="48"
+ column="23"/>
</issue>
<issue
@@ -367,7 +395,9 @@
errorLine1=" if (DEBUG) Log.d(TAG, "onChildSelected position=" + position);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+ file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+ line="66"
+ column="42"/>
</issue>
<issue
@@ -376,7 +406,9 @@
errorLine1=" if (DEBUG) Log.v(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+ file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+ line="77"
+ column="26"/>
</issue>
<issue
@@ -385,7 +417,9 @@
errorLine1=" if (DEBUG) Log.v(TAG, "onNewIntent " + intent);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+ file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+ line="89"
+ column="26"/>
</issue>
<issue
@@ -394,7 +428,9 @@
errorLine1=" if (DEBUG) Log.v(TAG, "createViewHolder " + viewType);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+ file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+ line="131"
+ column="30"/>
</issue>
<issue
@@ -403,7 +439,9 @@
errorLine1=" if (DEBUG) Log.v(TAG, "bindViewHolder " + position + " " + baseHolder);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+ file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+ line="143"
+ column="30"/>
</issue>
<issue
@@ -412,7 +450,9 @@
errorLine1=" Log.i(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="116"
+ column="15"/>
</issue>
<issue
@@ -421,7 +461,9 @@
errorLine1=" Log.i(TAG, "onItemClicked: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="217"
+ column="23"/>
</issue>
<issue
@@ -430,7 +472,9 @@
errorLine1=" Log.i(TAG, "onItemSelected: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="234"
+ column="23"/>
</issue>
<issue
@@ -439,7 +483,9 @@
errorLine1=" Log.i(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="119"
+ column="15"/>
</issue>
<issue
@@ -448,7 +494,9 @@
errorLine1=" Log.i(TAG, "onItemClicked: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="220"
+ column="23"/>
</issue>
<issue
@@ -457,7 +505,9 @@
errorLine1=" Log.i(TAG, "onItemSelected: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="237"
+ column="23"/>
</issue>
<issue
@@ -466,7 +516,9 @@
errorLine1=" Log.i(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackFragment.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackFragment.java"
+ line="67"
+ column="15"/>
</issue>
<issue
@@ -475,7 +527,9 @@
errorLine1=" Log.i(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackSupportFragment.java"
+ line="70"
+ column="15"/>
</issue>
<issue
@@ -484,7 +538,9 @@
errorLine1=" Log.e(TAG, "disconnectToMediaSession: Media session disconnected");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java"
+ line="156"
+ column="19"/>
</issue>
<issue
@@ -493,7 +549,9 @@
errorLine1=" Log.i(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+ line="56"
+ column="15"/>
</issue>
<issue
@@ -502,7 +560,9 @@
errorLine1=" Log.i(TAG, "onItemSelected: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+ line="64"
+ column="23"/>
</issue>
<issue
@@ -511,7 +571,9 @@
errorLine1=" Log.i(TAG, String.format("Search Query Text Change %s", newQuery));"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+ line="111"
+ column="15"/>
</issue>
<issue
@@ -520,7 +582,9 @@
errorLine1=" Log.i(TAG, String.format("Search Query Text Submit %s", query));"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+ line="119"
+ column="15"/>
</issue>
<issue
@@ -529,7 +593,9 @@
errorLine1=" Log.i(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"
+ line="51"
+ column="15"/>
</issue>
<issue
@@ -538,7 +604,9 @@
errorLine1=" Log.i(TAG, "onItemSelected: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"
+ line="94"
+ column="23"/>
</issue>
<issue
@@ -547,7 +615,9 @@
errorLine1=" Log.i(TAG, "onItemClicked: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"
+ line="102"
+ column="23"/>
</issue>
<issue
@@ -556,7 +626,9 @@
errorLine1=" Log.i(TAG, "onCreate");"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"
+ line="54"
+ column="15"/>
</issue>
<issue
@@ -565,7 +637,9 @@
errorLine1=" Log.i(TAG, "onItemSelected: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"
+ line="97"
+ column="23"/>
</issue>
<issue
@@ -574,7 +648,9 @@
errorLine1=" Log.i(TAG, "onItemClicked: " + item + " row " + row);"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"
+ line="105"
+ column="23"/>
</issue>
<issue
@@ -583,7 +659,9 @@
errorLine1=" setOnItemViewClickedListener(new ItemViewClickedListener());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="76"
+ column="38"/>
</issue>
<issue
@@ -592,7 +670,9 @@
errorLine1=" int count = sRand.nextInt(4) + 1;"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="181"
+ column="45"/>
</issue>
<issue
@@ -601,7 +681,9 @@
errorLine1=" int count = sRand.nextInt(4) + 1;"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="198"
+ column="45"/>
</issue>
<issue
@@ -610,7 +692,9 @@
errorLine1=" int index = mRowsAdapter.indexOf(row);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="211"
+ column="33"/>
</issue>
<issue
@@ -619,7 +703,9 @@
errorLine1=" int headerId = sRand.nextInt();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="213"
+ column="40"/>
</issue>
<issue
@@ -628,7 +714,9 @@
errorLine1=" mRowsAdapter.add(index, createRandomRow(new HeaderItem("
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="214"
+ column="25"/>
</issue>
<issue
@@ -637,7 +725,9 @@
errorLine1=" int index = mRowsAdapter.indexOf(row);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="224"
+ column="33"/>
</issue>
<issue
@@ -646,7 +736,9 @@
errorLine1=" int headerId = sRand.nextInt();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="226"
+ column="40"/>
</issue>
<issue
@@ -655,7 +747,9 @@
errorLine1=" mRowsAdapter.add("
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="227"
+ column="25"/>
</issue>
<issue
@@ -664,7 +758,9 @@
errorLine1=" mRowsAdapter.remove(row);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="238"
+ column="21"/>
</issue>
<issue
@@ -673,7 +769,9 @@
errorLine1=" int index = mRowsAdapter.indexOf(row);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="246"
+ column="33"/>
</issue>
<issue
@@ -682,7 +780,9 @@
errorLine1=" mRowsAdapter.removeItems(index - 1, 1);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="248"
+ column="25"/>
</issue>
<issue
@@ -691,7 +791,9 @@
errorLine1=" int index = mRowsAdapter.indexOf(row);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="257"
+ column="33"/>
</issue>
<issue
@@ -700,7 +802,9 @@
errorLine1=" if (index < mRowsAdapter.size() - 1) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="258"
+ column="33"/>
</issue>
<issue
@@ -709,7 +813,9 @@
errorLine1=" mRowsAdapter.removeItems(index + 1, 1);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="259"
+ column="25"/>
</issue>
<issue
@@ -718,7 +824,9 @@
errorLine1=" setOnItemViewClickedListener(new ItemViewClickedListener());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="84"
+ column="38"/>
</issue>
<issue
@@ -727,7 +835,9 @@
errorLine1=" setupRows();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="111"
+ column="17"/>
</issue>
<issue
@@ -736,7 +846,9 @@
errorLine1=" loadData();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="112"
+ column="17"/>
</issue>
<issue
@@ -745,7 +857,9 @@
errorLine1=" setOnItemViewClickedListener(new ItemViewClickedListener());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="87"
+ column="38"/>
</issue>
<issue
@@ -754,7 +868,9 @@
errorLine1=" setupRows();"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="114"
+ column="17"/>
</issue>
<issue
@@ -763,7 +879,9 @@
errorLine1=" loadData();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="115"
+ column="17"/>
</issue>
<issue
@@ -772,7 +890,9 @@
errorLine1=" DetailsOverviewRow dor = (DetailsOverviewRow) mRowsAdapter.get(0);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="101"
+ column="63"/>
</issue>
<issue
@@ -781,7 +901,9 @@
errorLine1=" actions.set(ACTION_PLAY, mActionPlay);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="106"
+ column="46"/>
</issue>
<issue
@@ -790,7 +912,9 @@
errorLine1=" dor.setItem(mPhotoItem.getTitle() + "(Owned)");"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="109"
+ column="33"/>
</issue>
<issue
@@ -799,7 +923,9 @@
errorLine1=" actions.set(ACTION_PLAY, mActionPlay);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="116"
+ column="46"/>
</issue>
<issue
@@ -808,7 +934,9 @@
errorLine1=" dor.setItem(mPhotoItem.getTitle() + "(Rented)");"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="118"
+ column="33"/>
</issue>
<issue
@@ -817,7 +945,9 @@
errorLine1=" DetailsOverviewRow dor = new DetailsOverviewRow(mPhotoItem.getTitle());"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="190"
+ column="65"/>
</issue>
<issue
@@ -826,7 +956,9 @@
errorLine1=" mPhotoItem.getImageResourceId(), context.getTheme()));"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="192"
+ column="25"/>
</issue>
<issue
@@ -835,7 +967,9 @@
errorLine1=" adapter.set(ACTION_RENT, mActionRent);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="194"
+ column="42"/>
</issue>
<issue
@@ -844,7 +978,9 @@
errorLine1=" adapter.set(ACTION_BUY, mActionBuy);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="195"
+ column="41"/>
</issue>
<issue
@@ -853,7 +989,9 @@
errorLine1=" mRowsAdapter.add(0, dor);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="197"
+ column="17"/>
</issue>
<issue
@@ -862,7 +1000,9 @@
errorLine1=" mRowsAdapter.add(new ListRow(header, listRowAdapter));"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="212"
+ column="21"/>
</issue>
<issue
@@ -871,7 +1011,9 @@
errorLine1=" for (int i = 0; i < OPTION_NAMES.length; i++) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="90"
+ column="33"/>
</issue>
<issue
@@ -880,7 +1022,9 @@
errorLine1=" if (OPTION_IDS[i] == ACTION_ID_SWITCH_LEGACY_ON) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="92"
+ column="21"/>
</issue>
<issue
@@ -889,7 +1033,9 @@
errorLine1=" } else if (OPTION_IDS[i] == ACTION_ID_SWITCH_LEGACY_OFF) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="96"
+ column="28"/>
</issue>
<issue
@@ -898,7 +1044,9 @@
errorLine1=" addCheckedAction(actions, OPTION_IDS[i], OPTION_NAMES[i],"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="101"
+ column="43"/>
</issue>
<issue
@@ -907,7 +1055,9 @@
errorLine1=" addCheckedAction(actions, OPTION_IDS[i], OPTION_NAMES[i],"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="101"
+ column="58"/>
</issue>
<issue
@@ -916,7 +1066,9 @@
errorLine1=" addCheckedAction(actions, OPTION_IDS[i], OPTION_NAMES[i],"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="101"
+ column="17"/>
</issue>
<issue
@@ -925,7 +1077,9 @@
errorLine1=" OPTION_DESCRIPTIONS[i], checked);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="102"
+ column="25"/>
</issue>
<issue
@@ -934,7 +1088,9 @@
errorLine1=" DetailsOverviewRow dor = (DetailsOverviewRow) mRowsAdapter.get(0);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="104"
+ column="63"/>
</issue>
<issue
@@ -943,7 +1099,9 @@
errorLine1=" actions.set(ACTION_PLAY, mActionPlay);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="109"
+ column="46"/>
</issue>
<issue
@@ -952,7 +1110,9 @@
errorLine1=" dor.setItem(mPhotoItem.getTitle() + "(Owned)");"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="112"
+ column="33"/>
</issue>
<issue
@@ -961,7 +1121,9 @@
errorLine1=" actions.set(ACTION_PLAY, mActionPlay);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="119"
+ column="46"/>
</issue>
<issue
@@ -970,7 +1132,9 @@
errorLine1=" dor.setItem(mPhotoItem.getTitle() + "(Rented)");"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="121"
+ column="33"/>
</issue>
<issue
@@ -979,7 +1143,9 @@
errorLine1=" DetailsOverviewRow dor = new DetailsOverviewRow(mPhotoItem.getTitle());"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="193"
+ column="65"/>
</issue>
<issue
@@ -988,7 +1154,9 @@
errorLine1=" mPhotoItem.getImageResourceId(), context.getTheme()));"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="195"
+ column="25"/>
</issue>
<issue
@@ -997,7 +1165,9 @@
errorLine1=" adapter.set(ACTION_RENT, mActionRent);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="197"
+ column="42"/>
</issue>
<issue
@@ -1006,7 +1176,9 @@
errorLine1=" adapter.set(ACTION_BUY, mActionBuy);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="198"
+ column="41"/>
</issue>
<issue
@@ -1015,7 +1187,9 @@
errorLine1=" mRowsAdapter.add(0, dor);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="200"
+ column="17"/>
</issue>
<issue
@@ -1024,7 +1198,9 @@
errorLine1=" mRowsAdapter.add(new ListRow(header, listRowAdapter));"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="215"
+ column="21"/>
</issue>
<issue
@@ -1033,7 +1209,9 @@
errorLine1=" addEditableAction(actions, NEW_PAYMENT, "Input credit card number", "","
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="292"
+ column="13"/>
</issue>
<issue
@@ -1042,7 +1220,9 @@
errorLine1=" addDatePickerAction(actions, PAYMENT_EXPIRE, "Exp:");"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="295"
+ column="13"/>
</issue>
<issue
@@ -1051,7 +1231,9 @@
errorLine1=" addEditableAction(getActivity(), actions, FIRST_NAME, "Pat", "Your first name");"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="420"
+ column="13"/>
</issue>
<issue
@@ -1060,7 +1242,9 @@
errorLine1=" addEditableAction(getActivity(), actions, LAST_NAME, "Smith", "Your last name");"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="421"
+ column="13"/>
</issue>
<issue
@@ -1069,7 +1253,9 @@
errorLine1=" updatePaymentAction(addAction(actions, PAYMENT, "Select Payment", "", subActions));"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="423"
+ column="33"/>
</issue>
<issue
@@ -1078,7 +1264,9 @@
errorLine1=" addEditableDescriptionAction(actions, PASSWORD, "Password", "", "","
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="424"
+ column="13"/>
</issue>
<issue
@@ -1087,7 +1275,9 @@
errorLine1=" addCheckedAction(subActions, -1, sCards.get(i), "","
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="449"
+ column="17"/>
</issue>
<issue
@@ -1096,7 +1286,9 @@
errorLine1=" addAction(subActions, NEW_PAYMENT, "Add New Card", "");"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="455"
+ column="13"/>
</issue>
<issue
@@ -1105,7 +1297,9 @@
errorLine1=" for (int i = 0; i < OPTION_NAMES.length; i++) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="570"
+ column="33"/>
</issue>
<issue
@@ -1114,7 +1308,9 @@
errorLine1=" addCheckedAction(actions, RADIO_ID_BASE + i, OPTION_NAMES[i],"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="571"
+ column="62"/>
</issue>
<issue
@@ -1123,7 +1319,9 @@
errorLine1=" addCheckedAction(actions, RADIO_ID_BASE + i, OPTION_NAMES[i],"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="571"
+ column="17"/>
</issue>
<issue
@@ -1132,7 +1330,9 @@
errorLine1=" OPTION_DESCRIPTIONS[i], GuidedAction.DEFAULT_CHECK_SET_ID);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="572"
+ column="25"/>
</issue>
<issue
@@ -1141,7 +1341,9 @@
errorLine1=" for (int i = 0; i < OPTION_NAMES.length; i++) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="577"
+ column="33"/>
</issue>
<issue
@@ -1150,7 +1352,9 @@
errorLine1=" addCheckedAction(actions, CHECKBOX_ID_BASE + i, OPTION_NAMES[i],"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="578"
+ column="65"/>
</issue>
<issue
@@ -1159,7 +1363,9 @@
errorLine1=" addCheckedAction(actions, CHECKBOX_ID_BASE + i, OPTION_NAMES[i],"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="578"
+ column="17"/>
</issue>
<issue
@@ -1168,7 +1374,9 @@
errorLine1=" OPTION_DESCRIPTIONS[i], GuidedAction.CHECKBOX_CHECK_SET_ID);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="579"
+ column="25"/>
</issue>
<issue
@@ -1177,7 +1385,9 @@
errorLine1=" String description = "You chose: " + OPTION_NAMES[(int) getOption()];"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="622"
+ column="50"/>
</issue>
<issue
@@ -1186,7 +1396,9 @@
errorLine1=" addAction(actions, BACK, "Start Over", "Let's try this again...");"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="635"
+ column="13"/>
</issue>
<issue
@@ -1195,7 +1407,9 @@
errorLine1=" addEditableAction(actions, NEW_PAYMENT, "Input credit card number", "","
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="294"
+ column="13"/>
</issue>
<issue
@@ -1204,7 +1418,9 @@
errorLine1=" addDatePickerAction(actions, PAYMENT_EXPIRE, "Exp:");"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="297"
+ column="13"/>
</issue>
<issue
@@ -1213,7 +1429,9 @@
errorLine1=" addEditableAction(getActivity(), actions, FIRST_NAME, "Pat", "Your first name");"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="422"
+ column="13"/>
</issue>
<issue
@@ -1222,7 +1440,9 @@
errorLine1=" addEditableAction(getActivity(), actions, LAST_NAME, "Smith", "Your last name");"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="423"
+ column="13"/>
</issue>
<issue
@@ -1231,7 +1451,9 @@
errorLine1=" updatePaymentAction(addAction(actions, PAYMENT, "Select Payment", "", subActions));"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="425"
+ column="33"/>
</issue>
<issue
@@ -1240,7 +1462,9 @@
errorLine1=" addEditableDescriptionAction(actions, PASSWORD, "Password", "", "","
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="426"
+ column="13"/>
</issue>
<issue
@@ -1249,7 +1473,9 @@
errorLine1=" addCheckedAction(subActions, -1, sCards.get(i), "","
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="451"
+ column="17"/>
</issue>
<issue
@@ -1258,7 +1484,9 @@
errorLine1=" addAction(subActions, NEW_PAYMENT, "Add New Card", "");"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="457"
+ column="13"/>
</issue>
<issue
@@ -1267,7 +1495,9 @@
errorLine1=" for (int i = 0; i < OPTION_NAMES.length; i++) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="572"
+ column="33"/>
</issue>
<issue
@@ -1276,7 +1506,9 @@
errorLine1=" addCheckedAction(actions, RADIO_ID_BASE + i, OPTION_NAMES[i],"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="573"
+ column="62"/>
</issue>
<issue
@@ -1285,7 +1517,9 @@
errorLine1=" addCheckedAction(actions, RADIO_ID_BASE + i, OPTION_NAMES[i],"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="573"
+ column="17"/>
</issue>
<issue
@@ -1294,7 +1528,9 @@
errorLine1=" OPTION_DESCRIPTIONS[i], GuidedAction.DEFAULT_CHECK_SET_ID);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="574"
+ column="25"/>
</issue>
<issue
@@ -1303,7 +1539,9 @@
errorLine1=" for (int i = 0; i < OPTION_NAMES.length; i++) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="579"
+ column="33"/>
</issue>
<issue
@@ -1312,7 +1550,9 @@
errorLine1=" addCheckedAction(actions, CHECKBOX_ID_BASE + i, OPTION_NAMES[i],"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="580"
+ column="65"/>
</issue>
<issue
@@ -1321,7 +1561,9 @@
errorLine1=" addCheckedAction(actions, CHECKBOX_ID_BASE + i, OPTION_NAMES[i],"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="580"
+ column="17"/>
</issue>
<issue
@@ -1330,7 +1572,9 @@
errorLine1=" OPTION_DESCRIPTIONS[i], GuidedAction.CHECKBOX_CHECK_SET_ID);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="581"
+ column="25"/>
</issue>
<issue
@@ -1339,7 +1583,9 @@
errorLine1=" String description = "You chose: " + OPTION_NAMES[(int) getOption()];"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="624"
+ column="50"/>
</issue>
<issue
@@ -1348,7 +1594,9 @@
errorLine1=" addAction(actions, BACK, "Start Over", "Let's try this again...");"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="637"
+ column="13"/>
</issue>
<issue
@@ -1357,7 +1605,9 @@
errorLine1=" mHorizontalGridView.getAdapter().notifyDataSetChanged();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+ file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+ line="114"
+ column="13"/>
</issue>
<issue
@@ -1366,7 +1616,9 @@
errorLine1=" textView.setOnFocusChangeListener(mItemFocusChangeListener);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+ file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+ line="136"
+ column="47"/>
</issue>
<issue
@@ -1375,7 +1627,9 @@
errorLine1=" textView.setOnClickListener(mItemClickListener);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+ file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+ line="137"
+ column="41"/>
</issue>
<issue
@@ -1384,7 +1638,9 @@
errorLine1=" if (isPlaying()) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="95"
+ column="33"/>
</issue>
<issue
@@ -1393,7 +1649,9 @@
errorLine1=" audioFocusLossHandler();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="96"
+ column="33"/>
</issue>
<issue
@@ -1402,7 +1660,9 @@
errorLine1=" if (isPlaying()) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="100"
+ column="33"/>
</issue>
<issue
@@ -1411,7 +1671,9 @@
errorLine1=" audioLossFocusTransientHandler();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="101"
+ column="33"/>
</issue>
<issue
@@ -1420,7 +1682,9 @@
errorLine1=" if (isPlaying()) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="105"
+ column="33"/>
</issue>
<issue
@@ -1429,7 +1693,9 @@
errorLine1=" audioLossFocusTransientCanDuckHanlder();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="106"
+ column="33"/>
</issue>
<issue
@@ -1438,7 +1704,9 @@
errorLine1=" if (!isPlaying()) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="110"
+ column="34"/>
</issue>
<issue
@@ -1447,7 +1715,9 @@
errorLine1=" audioFocusGainHandler();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="111"
+ column="33"/>
</issue>
<issue
@@ -1456,7 +1726,9 @@
errorLine1=" private Handler mMediaPlayerHandler = new MediaPlayerAudioHandler();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="156"
+ column="43"/>
</issue>
<issue
@@ -1465,7 +1737,9 @@
errorLine1=" mPlayer.stop();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="177"
+ column="13"/>
</issue>
<issue
@@ -1474,7 +1748,9 @@
errorLine1=" mMediaSession.setPlaybackState(createPlaybackStateBuilder("
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="178"
+ column="13"/>
</issue>
<issue
@@ -1483,7 +1759,9 @@
errorLine1=" mMediaSession.setPlaybackState(createPlaybackStateBuilder("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="178"
+ column="44"/>
</issue>
<issue
@@ -1492,7 +1770,9 @@
errorLine1=" mMediaPlayerHandler.obtainMessage(FOCUS_CHANGE, focusChange, 0).sendToTarget();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="191"
+ column="21"/>
</issue>
<issue
@@ -1501,7 +1781,9 @@
errorLine1=" mMediaSession.setCallback(new MediaSessionCallback());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="220"
+ column="39"/>
</issue>
<issue
@@ -1510,7 +1792,9 @@
errorLine1=" mInitialized = true;"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="341"
+ column="17"/>
</issue>
<issue
@@ -1519,7 +1803,9 @@
errorLine1=" notifyUiWhenPlayerIsPrepared();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="344"
+ column="17"/>
</issue>
<issue
@@ -1528,7 +1814,9 @@
errorLine1=" onMediaSessionMetaDataChanged();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="348"
+ column="17"/>
</issue>
<issue
@@ -1537,7 +1825,9 @@
errorLine1=" mMediaSession.setPlaybackState(createPlaybackStateBuilder("
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="349"
+ column="17"/>
</issue>
<issue
@@ -1546,7 +1836,9 @@
errorLine1=" mMediaSession.setPlaybackState(createPlaybackStateBuilder("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="349"
+ column="48"/>
</issue>
<issue
@@ -1555,7 +1847,9 @@
errorLine1=" PlaybackStateCompat.Builder builder = createPlaybackStateBuilder("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="359"
+ column="59"/>
</issue>
<issue
@@ -1564,7 +1858,9 @@
errorLine1=" mMediaSession.setPlaybackState(builder.build());"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="363"
+ column="21"/>
</issue>
<issue
@@ -1573,7 +1869,9 @@
errorLine1=" mFastForwardSpeedFactorIndex = 0;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="416"
+ column="17"/>
</issue>
<issue
@@ -1582,7 +1880,9 @@
errorLine1=" mRewindSpeedFactorIndex = 0;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="417"
+ column="17"/>
</issue>
<issue
@@ -1591,7 +1891,9 @@
errorLine1=" mPlayer.setPlaybackParams(mPlayer.getPlaybackParams().setSpeed("
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="419"
+ column="17"/>
</issue>
<issue
@@ -1600,7 +1902,9 @@
errorLine1=" mPlayer.setPlaybackParams(mPlayer.getPlaybackParams().setSpeed("
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="419"
+ column="43"/>
</issue>
<issue
@@ -1609,7 +1913,9 @@
errorLine1=" mFastForwardSpeedFactors[mFastForwardSpeedFactorIndex]));"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="420"
+ column="50"/>
</issue>
<issue
@@ -1618,7 +1924,9 @@
errorLine1=" mFastForwardSpeedFactors[mFastForwardSpeedFactorIndex]));"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="420"
+ column="25"/>
</issue>
<issue
@@ -1627,7 +1935,9 @@
errorLine1=" mPlayer.pause();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="422"
+ column="17"/>
</issue>
<issue
@@ -1636,7 +1946,9 @@
errorLine1=" mMediaSession.setPlaybackState(createPlaybackStateBuilder("
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="423"
+ column="17"/>
</issue>
<issue
@@ -1645,7 +1957,9 @@
errorLine1=" mMediaSession.setPlaybackState(createPlaybackStateBuilder("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="423"
+ column="48"/>
</issue>
<issue
@@ -1654,7 +1968,9 @@
errorLine1=" if (mRepeatState == MEDIA_ACTION_REPEAT_ALL"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="426"
+ column="21"/>
</issue>
<issue
@@ -1663,7 +1979,9 @@
errorLine1=" && mCurrentIndex == mMediaItemList.size() - 1) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="427"
+ column="28"/>
</issue>
<issue
@@ -1672,7 +1990,9 @@
errorLine1=" if (mShuffleMode == PlaybackStateCompat.SHUFFLE_MODE_NONE) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="430"
+ column="25"/>
</issue>
<issue
@@ -1681,7 +2001,9 @@
errorLine1=" mCurrentIndex = 0;"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="431"
+ column="25"/>
</issue>
<issue
@@ -1690,7 +2012,9 @@
errorLine1=" mCurrentIndex = generateMediaItemIndex();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="434"
+ column="25"/>
</issue>
<issue
@@ -1699,7 +2023,9 @@
errorLine1=" mCurrentIndex = generateMediaItemIndex();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="434"
+ column="41"/>
</issue>
<issue
@@ -1708,7 +2034,9 @@
errorLine1=" mCurrentMediaItem = mMediaItemList.get(mCurrentIndex);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="436"
+ column="60"/>
</issue>
<issue
@@ -1717,7 +2045,9 @@
errorLine1=" mCurrentMediaItem = mMediaItemList.get(mCurrentIndex);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="436"
+ column="21"/>
</issue>
<issue
@@ -1726,7 +2056,9 @@
errorLine1=" setDataSource();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="439"
+ column="21"/>
</issue>
<issue
@@ -1735,7 +2067,9 @@
errorLine1=" } else if (mRepeatState == MEDIA_ACTION_REPEAT_ONE) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="440"
+ column="28"/>
</issue>
<issue
@@ -1744,7 +2078,9 @@
errorLine1=" mPlayer.start();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="444"
+ column="21"/>
</issue>
<issue
@@ -1753,7 +2089,9 @@
errorLine1=" mMediaSession.setPlaybackState(createPlaybackStateBuilder("
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="445"
+ column="21"/>
</issue>
<issue
@@ -1762,7 +2100,9 @@
errorLine1=" mMediaSession.setPlaybackState(createPlaybackStateBuilder("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="445"
+ column="52"/>
</issue>
<issue
@@ -1771,7 +2111,9 @@
errorLine1=" } else if (mCurrentIndex < mMediaItemList.size() - 1) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="447"
+ column="28"/>
</issue>
<issue
@@ -1780,7 +2122,9 @@
errorLine1=" if (mShuffleMode == PlaybackStateCompat.SHUFFLE_MODE_NONE) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="448"
+ column="25"/>
</issue>
<issue
@@ -1789,7 +2133,9 @@
errorLine1=" mCurrentIndex++;"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="449"
+ column="25"/>
</issue>
<issue
@@ -1798,7 +2144,9 @@
errorLine1=" mCurrentIndex = generateMediaItemIndex();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="451"
+ column="25"/>
</issue>
<issue
@@ -1807,7 +2155,9 @@
errorLine1=" mCurrentIndex = generateMediaItemIndex();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="451"
+ column="41"/>
</issue>
<issue
@@ -1816,7 +2166,9 @@
errorLine1=" mCurrentMediaItem = mMediaItemList.get(mCurrentIndex);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="453"
+ column="60"/>
</issue>
<issue
@@ -1825,7 +2177,9 @@
errorLine1=" mCurrentMediaItem = mMediaItemList.get(mCurrentIndex);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="453"
+ column="21"/>
</issue>
<issue
@@ -1834,7 +2188,9 @@
errorLine1=" setDataSource();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="456"
+ column="21"/>
</issue>
<issue
@@ -1843,7 +2199,9 @@
errorLine1=" mMediaSession.setPlaybackState(createPlaybackStateBuilder("
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="461"
+ column="21"/>
</issue>
<issue
@@ -1852,7 +2210,9 @@
errorLine1=" mMediaSession.setPlaybackState(createPlaybackStateBuilder("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="461"
+ column="52"/>
</issue>
<issue
@@ -1861,7 +2221,9 @@
errorLine1=" mBufferedProgress = (long) getDuration() * percent / 100;"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="472"
+ column="25"/>
</issue>
<issue
@@ -1870,7 +2232,9 @@
errorLine1=" mBufferedProgress = (long) getDuration() * percent / 100;"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="472"
+ column="52"/>
</issue>
<issue
@@ -1879,7 +2243,9 @@
errorLine1=" PlaybackStateCompat.Builder builder = createPlaybackStateBuilder("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="473"
+ column="63"/>
</issue>
<issue
@@ -1888,7 +2254,9 @@
errorLine1=" builder.setBufferedPosition(mBufferedProgress);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="475"
+ column="53"/>
</issue>
<issue
@@ -1897,7 +2265,9 @@
errorLine1=" mMediaSession.setPlaybackState(builder.build());"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="476"
+ column="25"/>
</issue>
<issue
@@ -1906,7 +2276,9 @@
errorLine1=" play();"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="518"
+ column="13"/>
</issue>
<issue
@@ -1915,7 +2287,9 @@
errorLine1=" pause();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="523"
+ column="13"/>
</issue>
<issue
@@ -1924,7 +2298,9 @@
errorLine1=" next();"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="528"
+ column="13"/>
</issue>
<issue
@@ -1933,7 +2309,9 @@
errorLine1=" previous();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="533"
+ column="13"/>
</issue>
<issue
@@ -1942,7 +2320,9 @@
errorLine1=" stop();"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="538"
+ column="13"/>
</issue>
<issue
@@ -1951,7 +2331,9 @@
errorLine1=" seekTo((int) pos);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="545"
+ column="13"/>
</issue>
<issue
@@ -1960,7 +2342,9 @@
errorLine1=" fastForward();"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="550"
+ column="13"/>
</issue>
<issue
@@ -1969,7 +2353,9 @@
errorLine1=" rewind();"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="555"
+ column="13"/>
</issue>
<issue
@@ -1978,7 +2364,9 @@
errorLine1=" setShuffleMode(shuffleMode);"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="565"
+ column="13"/>
</issue>
<issue
@@ -1987,7 +2375,9 @@
errorLine1=" mPlaybackService = binder.getService();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="188"
+ column="13"/>
</issue>
<issue
@@ -1996,7 +2386,9 @@
errorLine1=" mPlaybackService.registerCallback(MusicPlayerFragment.this);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="191"
+ column="13"/>
</issue>
<issue
@@ -2005,7 +2397,9 @@
errorLine1=" mPlaybackService.setMediaList(mSongMetaDataList, false);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="197"
+ column="13"/>
</issue>
<issue
@@ -2014,7 +2408,9 @@
errorLine1=" mPlaybackService.setMediaList(mSongMetaDataList, false);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="197"
+ column="43"/>
</issue>
<issue
@@ -2023,7 +2419,9 @@
errorLine1=" mPlaybackService.setFastForwardSpeedFactors(fastForwardSpeed);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="200"
+ column="13"/>
</issue>
<issue
@@ -2032,7 +2430,9 @@
errorLine1=" mPlaybackService.setRewindSpeedFactors(rewindSpeed);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="201"
+ column="13"/>
</issue>
<issue
@@ -2041,7 +2441,9 @@
errorLine1=" mMediaSession = mPlaybackService.getMediaSession();"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="204"
+ column="13"/>
</issue>
<issue
@@ -2050,7 +2452,9 @@
errorLine1=" mMediaSession = mPlaybackService.getMediaSession();"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="204"
+ column="29"/>
</issue>
<issue
@@ -2059,7 +2463,9 @@
errorLine1=" mController = new MediaControllerCompat(MusicPlayerFragment.this.getActivity(),"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="206"
+ column="13"/>
</issue>
<issue
@@ -2068,7 +2474,9 @@
errorLine1=" mMediaSession);"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="207"
+ column="21"/>
</issue>
<issue
@@ -2077,7 +2485,9 @@
errorLine1=" mAdapter = new MediaControllerAdapter(mController);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="208"
+ column="13"/>
</issue>
<issue
@@ -2086,7 +2496,9 @@
errorLine1=" mAdapter = new MediaControllerAdapter(mController);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="208"
+ column="51"/>
</issue>
<issue
@@ -2095,7 +2507,9 @@
errorLine1=" mGlue = new PlaybackBannerMusicPlayerControlGlue<>(getActivity(), fastForwardSpeed,"
errorLine2=" ^">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="209"
+ column="21"/>
</issue>
<issue
@@ -2104,7 +2518,9 @@
errorLine1=" mGlue = new PlaybackBannerMusicPlayerControlGlue<>(getActivity(), fastForwardSpeed,"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="209"
+ column="13"/>
</issue>
<issue
@@ -2113,7 +2529,9 @@
errorLine1=" mAdapter);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="211"
+ column="21"/>
</issue>
<issue
@@ -2122,7 +2540,9 @@
errorLine1=" mGlue.setHost(new PlaybackFragmentGlueHost(MusicPlayerFragment.this));"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="215"
+ column="13"/>
</issue>
<issue
@@ -2131,7 +2551,9 @@
errorLine1=" mPlaybackService = null;"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="220"
+ column="13"/>
</issue>
<issue
@@ -2140,7 +2562,9 @@
errorLine1=" DetailsOverviewRow dor = (DetailsOverviewRow) mRowsAdapter.get(0);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="159"
+ column="63"/>
</issue>
<issue
@@ -2149,7 +2573,9 @@
errorLine1=" actions.set(ACTION_PLAY, mActionPlay);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="164"
+ column="46"/>
</issue>
<issue
@@ -2158,7 +2584,9 @@
errorLine1=" dor.setItem(getDisplayTitle(mPhotoItem.getTitle()));"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="169"
+ column="49"/>
</issue>
<issue
@@ -2167,7 +2595,9 @@
errorLine1=" if (TEST_BACKGROUND_PLAYER) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="172"
+ column="25"/>
</issue>
<issue
@@ -2176,7 +2606,9 @@
errorLine1=" mDetailsBackground.switchToVideo();"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="175"
+ column="29"/>
</issue>
<issue
@@ -2185,7 +2617,9 @@
errorLine1=" actions.set(ACTION_PLAY, mActionPlay);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="185"
+ column="46"/>
</issue>
<issue
@@ -2194,7 +2628,9 @@
errorLine1=" dor.setItem(getDisplayTitle(mPhotoItem.getTitle()));"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="188"
+ column="49"/>
</issue>
<issue
@@ -2203,7 +2639,9 @@
errorLine1=" if (TEST_BACKGROUND_PLAYER) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="189"
+ column="25"/>
</issue>
<issue
@@ -2212,7 +2650,9 @@
errorLine1=" mDetailsBackground.switchToVideo();"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="191"
+ column="25"/>
</issue>
<issue
@@ -2221,7 +2661,9 @@
errorLine1=" if (TEST_BACKGROUND_PLAYER) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="197"
+ column="25"/>
</issue>
<issue
@@ -2230,7 +2672,9 @@
errorLine1=" mDetailsBackground.switchToVideo();"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="198"
+ column="25"/>
</issue>
<issue
@@ -2239,7 +2683,9 @@
errorLine1=" getDisplayTitle(mPhotoItem.getTitle()));"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="293"
+ column="41"/>
</issue>
<issue
@@ -2248,7 +2694,9 @@
errorLine1=" mPhotoItem.getImageResourceId(), context.getTheme()));"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="295"
+ column="25"/>
</issue>
<issue
@@ -2257,7 +2705,9 @@
errorLine1=" adapter.set(ACTION_RENT, mActionRent);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="299"
+ column="50"/>
</issue>
<issue
@@ -2266,7 +2716,9 @@
errorLine1=" adapter.set(ACTION_BUY, mActionBuy);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="300"
+ column="49"/>
</issue>
<issue
@@ -2275,7 +2727,9 @@
errorLine1=" adapter.set(ACTION_PLAY, mActionPlay);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="303"
+ column="50"/>
</issue>
<issue
@@ -2284,7 +2738,9 @@
errorLine1=" adapter.set(ACTION_PLAY, mActionPlay);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="306"
+ column="50"/>
</issue>
<issue
@@ -2293,7 +2749,9 @@
errorLine1=" adapter.set(ACTION_BUY, mActionBuy);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="307"
+ column="49"/>
</issue>
<issue
@@ -2302,7 +2760,9 @@
errorLine1=" mRowsAdapter.add(0, dor);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="315"
+ column="17"/>
</issue>
<issue
@@ -2311,7 +2771,9 @@
errorLine1=" if (TEST_SHARED_ELEMENT_TRANSITION) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="317"
+ column="21"/>
</issue>
<issue
@@ -2320,7 +2782,9 @@
errorLine1=" if (mHelper != null && !mHelper.getAutoStartSharedElementTransition()) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="318"
+ column="25"/>
</issue>
<issue
@@ -2329,7 +2793,9 @@
errorLine1=" if (mHelper != null && !mHelper.getAutoStartSharedElementTransition()) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="318"
+ column="45"/>
</issue>
<issue
@@ -2338,7 +2804,9 @@
errorLine1=" mHelper.startPostponedEnterTransition();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="319"
+ column="25"/>
</issue>
<issue
@@ -2347,7 +2815,9 @@
errorLine1=" mRowsAdapter.add(new ListRow(header, listRowAdapter));"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="338"
+ column="21"/>
</issue>
<issue
@@ -2356,7 +2826,9 @@
errorLine1=" mDetailsBackground.setCoverBitmap(bitmap);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="354"
+ column="25"/>
</issue>
<issue
@@ -2365,7 +2837,9 @@
errorLine1=" DetailsOverviewRow dor = (DetailsOverviewRow) mRowsAdapter.get(0);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="162"
+ column="63"/>
</issue>
<issue
@@ -2374,7 +2848,9 @@
errorLine1=" actions.set(ACTION_PLAY, mActionPlay);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="167"
+ column="46"/>
</issue>
<issue
@@ -2383,7 +2859,9 @@
errorLine1=" dor.setItem(getDisplayTitle(mPhotoItem.getTitle()));"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="172"
+ column="49"/>
</issue>
<issue
@@ -2392,7 +2870,9 @@
errorLine1=" if (TEST_BACKGROUND_PLAYER) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="175"
+ column="25"/>
</issue>
<issue
@@ -2401,7 +2881,9 @@
errorLine1=" mDetailsBackground.switchToVideo();"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="178"
+ column="29"/>
</issue>
<issue
@@ -2410,7 +2892,9 @@
errorLine1=" actions.set(ACTION_PLAY, mActionPlay);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="188"
+ column="46"/>
</issue>
<issue
@@ -2419,7 +2903,9 @@
errorLine1=" dor.setItem(getDisplayTitle(mPhotoItem.getTitle()));"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="191"
+ column="49"/>
</issue>
<issue
@@ -2428,7 +2914,9 @@
errorLine1=" if (TEST_BACKGROUND_PLAYER) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="192"
+ column="25"/>
</issue>
<issue
@@ -2437,7 +2925,9 @@
errorLine1=" mDetailsBackground.switchToVideo();"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="194"
+ column="25"/>
</issue>
<issue
@@ -2446,7 +2936,9 @@
errorLine1=" if (TEST_BACKGROUND_PLAYER) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="200"
+ column="25"/>
</issue>
<issue
@@ -2455,7 +2947,9 @@
errorLine1=" mDetailsBackground.switchToVideo();"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="201"
+ column="25"/>
</issue>
<issue
@@ -2464,7 +2958,9 @@
errorLine1=" getDisplayTitle(mPhotoItem.getTitle()));"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="296"
+ column="41"/>
</issue>
<issue
@@ -2473,7 +2969,9 @@
errorLine1=" mPhotoItem.getImageResourceId(), context.getTheme()));"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="298"
+ column="25"/>
</issue>
<issue
@@ -2482,7 +2980,9 @@
errorLine1=" adapter.set(ACTION_RENT, mActionRent);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="302"
+ column="50"/>
</issue>
<issue
@@ -2491,7 +2991,9 @@
errorLine1=" adapter.set(ACTION_BUY, mActionBuy);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="303"
+ column="49"/>
</issue>
<issue
@@ -2500,7 +3002,9 @@
errorLine1=" adapter.set(ACTION_PLAY, mActionPlay);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="306"
+ column="50"/>
</issue>
<issue
@@ -2509,7 +3013,9 @@
errorLine1=" adapter.set(ACTION_PLAY, mActionPlay);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="309"
+ column="50"/>
</issue>
<issue
@@ -2518,7 +3024,9 @@
errorLine1=" adapter.set(ACTION_BUY, mActionBuy);"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="310"
+ column="49"/>
</issue>
<issue
@@ -2527,7 +3035,9 @@
errorLine1=" mRowsAdapter.add(0, dor);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="318"
+ column="17"/>
</issue>
<issue
@@ -2536,7 +3046,9 @@
errorLine1=" if (TEST_SHARED_ELEMENT_TRANSITION) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="320"
+ column="21"/>
</issue>
<issue
@@ -2545,7 +3057,9 @@
errorLine1=" if (mHelper != null && !mHelper.getAutoStartSharedElementTransition()) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="321"
+ column="25"/>
</issue>
<issue
@@ -2554,7 +3068,9 @@
errorLine1=" if (mHelper != null && !mHelper.getAutoStartSharedElementTransition()) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="321"
+ column="45"/>
</issue>
<issue
@@ -2563,7 +3079,9 @@
errorLine1=" mHelper.startPostponedEnterTransition();"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="322"
+ column="25"/>
</issue>
<issue
@@ -2572,7 +3090,9 @@
errorLine1=" mRowsAdapter.add(new ListRow(header, listRowAdapter));"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="341"
+ column="21"/>
</issue>
<issue
@@ -2581,7 +3101,9 @@
errorLine1=" mDetailsBackground.setCoverBitmap(bitmap);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="357"
+ column="25"/>
</issue>
<issue
@@ -2590,7 +3112,9 @@
errorLine1=" ((AnimationDrawable) mContentAnimationView.getDrawable()).start();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="111"
+ column="38"/>
</issue>
<issue
@@ -2599,7 +3123,9 @@
errorLine1=" mContentBackgroundView.setImageResource(CONTENT_BACKGROUNDS[newPage]);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="127"
+ column="57"/>
</issue>
<issue
@@ -2608,7 +3134,9 @@
errorLine1=" mContentBackgroundView.setImageResource(CONTENT_BACKGROUNDS[newPage]);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="127"
+ column="17"/>
</issue>
<issue
@@ -2617,7 +3145,9 @@
errorLine1=" mContentAnimationView.setImageResource(CONTENT_ANIMATIONS[newPage]);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="128"
+ column="56"/>
</issue>
<issue
@@ -2626,7 +3156,9 @@
errorLine1=" mContentAnimationView.setImageResource(CONTENT_ANIMATIONS[newPage]);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="128"
+ column="17"/>
</issue>
<issue
@@ -2635,7 +3167,9 @@
errorLine1=" ((AnimationDrawable) mContentAnimationView.getDrawable()).start();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="135"
+ column="38"/>
</issue>
<issue
@@ -2644,7 +3178,9 @@
errorLine1=" ((AnimationDrawable) mContentAnimationView.getDrawable()).start();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="114"
+ column="38"/>
</issue>
<issue
@@ -2653,7 +3189,9 @@
errorLine1=" mContentBackgroundView.setImageResource(CONTENT_BACKGROUNDS[newPage]);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="130"
+ column="57"/>
</issue>
<issue
@@ -2662,7 +3200,9 @@
errorLine1=" mContentBackgroundView.setImageResource(CONTENT_BACKGROUNDS[newPage]);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="130"
+ column="17"/>
</issue>
<issue
@@ -2671,7 +3211,9 @@
errorLine1=" mContentAnimationView.setImageResource(CONTENT_ANIMATIONS[newPage]);"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="131"
+ column="56"/>
</issue>
<issue
@@ -2680,7 +3222,9 @@
errorLine1=" mContentAnimationView.setImageResource(CONTENT_ANIMATIONS[newPage]);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="131"
+ column="17"/>
</issue>
<issue
@@ -2689,7 +3233,9 @@
errorLine1=" ((AnimationDrawable) mContentAnimationView.getDrawable()).start();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="138"
+ column="38"/>
</issue>
<issue
@@ -2698,7 +3244,9 @@
errorLine1=" for (int i = 0; i < sData.length; ++i) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"/>
+ file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"
+ line="48"
+ column="49"/>
</issue>
<issue
@@ -2707,7 +3255,9 @@
errorLine1=" PhotoItem dataItem = sData[i];"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"/>
+ file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"
+ line="49"
+ column="54"/>
</issue>
<issue
@@ -2716,7 +3266,9 @@
errorLine1=" return new PhotoItem(in);"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+ file="src/main/java/com/example/android/leanback/PhotoItem.java"
+ line="84"
+ column="20"/>
</issue>
<issue
@@ -2725,7 +3277,9 @@
errorLine1=" mHandler.postDelayed(this, getUpdatePeriod());"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackControlGlue.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackControlGlue.java"
+ line="59"
+ column="13"/>
</issue>
<issue
@@ -2734,7 +3288,9 @@
errorLine1=" if (mRepeatAction.getIndex() == PlaybackControlsRow.RepeatAction.INDEX_NONE) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackControlGlue.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackControlGlue.java"
+ line="221"
+ column="21"/>
</issue>
<issue
@@ -2743,7 +3299,9 @@
errorLine1=" mStartPosition = 0;"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackControlGlue.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackControlGlue.java"
+ line="226"
+ column="17"/>
</issue>
<issue
@@ -2752,7 +3310,9 @@
errorLine1=" mMediaSessionCompat.setCallback(new MediaSessionCallback());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java"
+ line="147"
+ column="41"/>
</issue>
<issue
@@ -2761,7 +3321,9 @@
errorLine1=" if (mRepeatAction.getIndex() != PlaybackControlsRow.RepeatAction.INDEX_NONE) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackTransportControlGlueSample.java"
+ line="212"
+ column="21"/>
</issue>
<issue
@@ -2770,7 +3332,9 @@
errorLine1=" mHandler.postDelayed(this, 16);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlayerAdapter.java"/>
+ file="src/main/java/com/example/android/leanback/PlayerAdapter.java"
+ line="34"
+ column="13"/>
</issue>
<issue
@@ -2779,7 +3343,9 @@
errorLine1=" mStartPosition = 0;"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlayerAdapter.java"/>
+ file="src/main/java/com/example/android/leanback/PlayerAdapter.java"
+ line="78"
+ column="17"/>
</issue>
<issue
@@ -2788,7 +3354,9 @@
errorLine1=" mIsPlaying = false;"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlayerAdapter.java"/>
+ file="src/main/java/com/example/android/leanback/PlayerAdapter.java"
+ line="79"
+ column="17"/>
</issue>
<issue
@@ -2797,7 +3365,9 @@
errorLine1=" setOnItemViewClickedListener(new ItemViewClickedListener());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/RowsFragment.java"
+ line="53"
+ column="38"/>
</issue>
<issue
@@ -2806,7 +3376,9 @@
errorLine1=" if (mTitleHelper != null) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/RowsFragment.java"
+ line="59"
+ column="21"/>
</issue>
<issue
@@ -2815,7 +3387,9 @@
errorLine1=" mTitleHelper.showTitle(getAdapter() == null || getAdapter().size() == 0 ||"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/RowsFragment.java"
+ line="60"
+ column="21"/>
</issue>
<issue
@@ -2824,7 +3398,9 @@
errorLine1=" setOnItemViewClickedListener(new ItemViewClickedListener());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+ line="59"
+ column="38"/>
</issue>
<issue
@@ -2833,7 +3409,9 @@
errorLine1=" if (mTitleHelper != null) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+ line="65"
+ column="21"/>
</issue>
<issue
@@ -2842,7 +3420,9 @@
errorLine1=" mTitleHelper.showTitle(getAdapter() == null || getAdapter().size() == 0 ||"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+ line="66"
+ column="21"/>
</issue>
<issue
@@ -2851,7 +3431,9 @@
errorLine1=" mMediaPlayerGlue.setSubtitle("Leanback artist Changed!");"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+ line="119"
+ column="21"/>
</issue>
<issue
@@ -2860,7 +3442,9 @@
errorLine1=" mMediaPlayerGlue.setTitle("Leanback team at work");"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+ line="120"
+ column="21"/>
</issue>
<issue
@@ -2869,7 +3453,9 @@
errorLine1=" mMediaPlayerGlue.getPlayerAdapter().setDataSource(Uri.parse(uriPath));"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+ line="123"
+ column="21"/>
</issue>
<issue
@@ -2878,7 +3464,9 @@
errorLine1=" loadSeekData(mMediaPlayerGlue);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+ line="124"
+ column="34"/>
</issue>
<issue
@@ -2887,7 +3475,9 @@
errorLine1=" playWhenReady(mMediaPlayerGlue);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+ line="125"
+ column="35"/>
</issue>
<issue
@@ -2896,7 +3486,9 @@
errorLine1=" mMediaPlayerGlue.removePlayerCallback(this);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+ line="127"
+ column="21"/>
</issue>
<issue
@@ -2905,7 +3497,9 @@
errorLine1=" mMediaPlayerGlue.setSubtitle("Leanback artist Changed!");"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+ line="122"
+ column="21"/>
</issue>
<issue
@@ -2914,7 +3508,9 @@
errorLine1=" mMediaPlayerGlue.setTitle("Leanback team at work");"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+ line="123"
+ column="21"/>
</issue>
<issue
@@ -2923,7 +3519,9 @@
errorLine1=" mMediaPlayerGlue.getPlayerAdapter().setDataSource(Uri.parse(uriPath));"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+ line="126"
+ column="21"/>
</issue>
<issue
@@ -2932,7 +3530,9 @@
errorLine1=" loadSeekData(mMediaPlayerGlue);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+ line="127"
+ column="34"/>
</issue>
<issue
@@ -2941,7 +3541,9 @@
errorLine1=" playWhenReady(mMediaPlayerGlue);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+ line="128"
+ column="35"/>
</issue>
<issue
@@ -2950,7 +3552,9 @@
errorLine1=" mMediaPlayerGlue.removePlayerCallback(this);"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+ line="130"
+ column="21"/>
</issue>
<issue
@@ -2959,7 +3563,9 @@
errorLine1=" if (DEBUG) Log.v(TAG, "recognizeSpeech");"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchActivity.java"/>
+ file="src/main/java/com/example/android/leanback/SearchActivity.java"
+ line="49"
+ column="25"/>
</issue>
<issue
@@ -2968,7 +3574,9 @@
errorLine1=" startActivityForResult(mFragment.getRecognizerIntent(), REQUEST_SPEECH);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchActivity.java"/>
+ file="src/main/java/com/example/android/leanback/SearchActivity.java"
+ line="50"
+ column="44"/>
</issue>
<issue
@@ -2977,7 +3585,9 @@
errorLine1=" setOnItemViewClickedListener(new ItemViewClickedListener());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchFragment.java"
+ line="98"
+ column="38"/>
</issue>
<issue
@@ -2986,7 +3596,9 @@
errorLine1=" loadRows();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchFragment.java"
+ line="161"
+ column="13"/>
</issue>
<issue
@@ -2995,7 +3607,9 @@
errorLine1=" if (DEBUG) Log.v(TAG, "recognizeSpeech");"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"
+ line="52"
+ column="25"/>
</issue>
<issue
@@ -3004,7 +3618,9 @@
errorLine1=" startActivityForResult(mFragment.getRecognizerIntent(), REQUEST_SPEECH);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"
+ line="53"
+ column="44"/>
</issue>
<issue
@@ -3013,7 +3629,9 @@
errorLine1=" setOnItemViewClickedListener(new ItemViewClickedListener());"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+ line="101"
+ column="38"/>
</issue>
<issue
@@ -3022,7 +3640,9 @@
errorLine1=" loadRows();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+ line="164"
+ column="13"/>
</issue>
<issue
@@ -3031,7 +3651,9 @@
errorLine1=" loadData();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"
+ line="70"
+ column="17"/>
</issue>
<issue
@@ -3040,7 +3662,9 @@
errorLine1=" mAdapter.callNotifyChanged();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"
+ line="103"
+ column="17"/>
</issue>
<issue
@@ -3049,7 +3673,9 @@
errorLine1=" loadData();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"
+ line="73"
+ column="17"/>
</issue>
<issue
@@ -3058,7 +3684,9 @@
errorLine1=" mAdapter.callNotifyChanged();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"
+ line="106"
+ column="17"/>
</issue>
<issue
@@ -3067,7 +3695,9 @@
errorLine1=" public Bitmap getCache(Object token) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+ file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+ line="62"
+ column="16"/>
</issue>
<issue
@@ -3076,7 +3706,9 @@
errorLine1=" public Bitmap getCache(Object token) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+ file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+ line="62"
+ column="32"/>
</issue>
<issue
@@ -3085,7 +3717,9 @@
errorLine1=" public void putCache(Object token, Bitmap bitmap) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+ file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+ line="74"
+ column="30"/>
</issue>
<issue
@@ -3094,7 +3728,9 @@
errorLine1=" public void putCache(Object token, Bitmap bitmap) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+ file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+ line="74"
+ column="44"/>
</issue>
<issue
@@ -3103,7 +3739,9 @@
errorLine1=" public static BitmapCache getInstance() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+ file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+ line="83"
+ column="23"/>
</issue>
<issue
@@ -3112,7 +3750,9 @@
errorLine1=" public abstract void onBitmapLoaded(Bitmap bitmap);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+ file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+ line="95"
+ column="45"/>
</issue>
<issue
@@ -3121,7 +3761,9 @@
errorLine1=" public BackgroundHelper(Activity activity) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+ file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+ line="107"
+ column="29"/>
</issue>
<issue
@@ -3130,7 +3772,9 @@
errorLine1=" public void attachToView(View backgroundView) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+ file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+ line="217"
+ column="30"/>
</issue>
<issue
@@ -3139,7 +3783,9 @@
errorLine1=" public void setBackground(Object imageToken) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+ file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+ line="230"
+ column="31"/>
</issue>
<issue
@@ -3148,7 +3794,9 @@
errorLine1=" public void setDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+ file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+ line="267"
+ column="29"/>
</issue>
<issue
@@ -3157,7 +3805,9 @@
errorLine1=" public void loadBitmap(Object imageToken, BitmapLoadCallback callback) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+ file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+ line="279"
+ column="28"/>
</issue>
<issue
@@ -3166,7 +3816,9 @@
errorLine1=" public void loadBitmap(Object imageToken, BitmapLoadCallback callback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BackgroundHelper.java"/>
+ file="src/main/java/com/example/android/leanback/BackgroundHelper.java"
+ line="279"
+ column="47"/>
</issue>
<issue
@@ -3175,7 +3827,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseActivity.java"
+ line="22"
+ column="26"/>
</issue>
<issue
@@ -3184,7 +3838,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState)"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationActivity.java"
+ line="23"
+ column="26"/>
</issue>
<issue
@@ -3193,7 +3849,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseAnimationFragment.java"
+ line="58"
+ column="26"/>
</issue>
<issue
@@ -3202,7 +3860,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState)"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"
+ line="31"
+ column="26"/>
</issue>
<issue
@@ -3211,7 +3871,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"
+ line="55"
+ column="16"/>
</issue>
<issue
@@ -3220,7 +3882,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"
+ line="55"
+ column="34"/>
</issue>
<issue
@@ -3229,7 +3893,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"
+ line="55"
+ column="59"/>
</issue>
<issue
@@ -3238,7 +3904,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseErrorActivity.java"
+ line="56"
+ column="21"/>
</issue>
<issue
@@ -3247,7 +3915,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState)"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"
+ line="35"
+ column="26"/>
</issue>
<issue
@@ -3256,7 +3926,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"
+ line="59"
+ column="16"/>
</issue>
<issue
@@ -3265,7 +3937,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"
+ line="59"
+ column="34"/>
</issue>
<issue
@@ -3274,7 +3948,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"
+ line="59"
+ column="59"/>
</issue>
<issue
@@ -3283,7 +3959,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseErrorSupportActivity.java"
+ line="60"
+ column="21"/>
</issue>
<issue
@@ -3292,7 +3970,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="65"
+ column="26"/>
</issue>
<issue
@@ -3301,7 +3981,9 @@
errorLine1=" public View onCreateView("
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="139"
+ column="12"/>
</issue>
<issue
@@ -3310,7 +3992,9 @@
errorLine1=" LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="140"
+ column="13"/>
</issue>
<issue
@@ -3319,7 +4003,9 @@
errorLine1=" LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="140"
+ column="38"/>
</issue>
<issue
@@ -3328,7 +4014,9 @@
errorLine1=" LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="140"
+ column="59"/>
</issue>
<issue
@@ -3337,7 +4025,9 @@
errorLine1=" public Fragment createFragment(Object rowObj) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="258"
+ column="16"/>
</issue>
<issue
@@ -3346,7 +4036,9 @@
errorLine1=" public Fragment createFragment(Object rowObj) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="258"
+ column="40"/>
</issue>
<issue
@@ -3355,7 +4047,9 @@
errorLine1=" public PageFragmentAdapterImpl(SampleFragment fragment) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="375"
+ column="40"/>
</issue>
<issue
@@ -3364,7 +4058,9 @@
errorLine1=" public View onCreateView("
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="399"
+ column="16"/>
</issue>
<issue
@@ -3373,7 +4069,9 @@
errorLine1=" final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="400"
+ column="23"/>
</issue>
<issue
@@ -3382,7 +4080,9 @@
errorLine1=" final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="400"
+ column="48"/>
</issue>
<issue
@@ -3391,7 +4091,9 @@
errorLine1=" final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="400"
+ column="69"/>
</issue>
<issue
@@ -3400,7 +4102,9 @@
errorLine1=" public void onViewCreated(View view, Bundle savedInstanceState) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="414"
+ column="35"/>
</issue>
<issue
@@ -3409,7 +4113,9 @@
errorLine1=" public void onViewCreated(View view, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="414"
+ column="46"/>
</issue>
<issue
@@ -3418,7 +4124,9 @@
errorLine1=" public MainFragmentAdapter getMainFragmentAdapter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseFragment.java"
+ line="421"
+ column="16"/>
</issue>
<issue
@@ -3427,7 +4135,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportActivity.java"
+ line="26"
+ column="26"/>
</issue>
<issue
@@ -3436,7 +4146,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportAppCompatActivity.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportAppCompatActivity.java"
+ line="29"
+ column="26"/>
</issue>
<issue
@@ -3445,7 +4157,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="68"
+ column="26"/>
</issue>
<issue
@@ -3454,7 +4168,9 @@
errorLine1=" public View onCreateView("
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="142"
+ column="12"/>
</issue>
<issue
@@ -3463,7 +4179,9 @@
errorLine1=" LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="143"
+ column="13"/>
</issue>
<issue
@@ -3472,7 +4190,9 @@
errorLine1=" LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="143"
+ column="38"/>
</issue>
<issue
@@ -3481,7 +4201,9 @@
errorLine1=" LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="143"
+ column="59"/>
</issue>
<issue
@@ -3490,7 +4212,9 @@
errorLine1=" public Fragment createFragment(Object rowObj) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="261"
+ column="16"/>
</issue>
<issue
@@ -3499,7 +4223,9 @@
errorLine1=" public Fragment createFragment(Object rowObj) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="261"
+ column="40"/>
</issue>
<issue
@@ -3508,7 +4234,9 @@
errorLine1=" public PageFragmentAdapterImpl(SampleFragment fragment) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="378"
+ column="40"/>
</issue>
<issue
@@ -3517,7 +4245,9 @@
errorLine1=" public View onCreateView("
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="402"
+ column="16"/>
</issue>
<issue
@@ -3526,7 +4256,9 @@
errorLine1=" final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="403"
+ column="23"/>
</issue>
<issue
@@ -3535,7 +4267,9 @@
errorLine1=" final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="403"
+ column="48"/>
</issue>
<issue
@@ -3544,7 +4278,9 @@
errorLine1=" final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="403"
+ column="69"/>
</issue>
<issue
@@ -3553,7 +4289,9 @@
errorLine1=" public void onViewCreated(View view, Bundle savedInstanceState) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="417"
+ column="35"/>
</issue>
<issue
@@ -3562,7 +4300,9 @@
errorLine1=" public void onViewCreated(View view, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="417"
+ column="46"/>
</issue>
<issue
@@ -3571,7 +4311,9 @@
errorLine1=" public MainFragmentAdapter getMainFragmentAdapter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/BrowseSupportFragment.java"
+ line="424"
+ column="16"/>
</issue>
<issue
@@ -3580,7 +4322,9 @@
errorLine1=" public int getRowHeight(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/CardPresenter.java"
+ line="73"
+ column="29"/>
</issue>
<issue
@@ -3589,7 +4333,9 @@
errorLine1=" public int getExpandedRowHeight(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/CardPresenter.java"
+ line="78"
+ column="37"/>
</issue>
<issue
@@ -3598,7 +4344,9 @@
errorLine1=" public ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/CardPresenter.java"
+ line="84"
+ column="12"/>
</issue>
<issue
@@ -3607,7 +4355,9 @@
errorLine1=" public ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/CardPresenter.java"
+ line="84"
+ column="42"/>
</issue>
<issue
@@ -3616,7 +4366,9 @@
errorLine1=" public void onBindViewHolder(ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/CardPresenter.java"
+ line="111"
+ column="34"/>
</issue>
<issue
@@ -3625,7 +4377,9 @@
errorLine1=" public void onBindViewHolder(ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/CardPresenter.java"
+ line="111"
+ column="57"/>
</issue>
<issue
@@ -3634,7 +4388,9 @@
errorLine1=" public void onBindViewHolder(ViewHolder viewHolder, Object item, List<Object> payloads) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/CardPresenter.java"
+ line="125"
+ column="34"/>
</issue>
<issue
@@ -3643,7 +4399,9 @@
errorLine1=" public void onBindViewHolder(ViewHolder viewHolder, Object item, List<Object> payloads) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/CardPresenter.java"
+ line="125"
+ column="57"/>
</issue>
<issue
@@ -3652,7 +4410,9 @@
errorLine1=" public void onBindViewHolder(ViewHolder viewHolder, Object item, List<Object> payloads) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/CardPresenter.java"
+ line="125"
+ column="70"/>
</issue>
<issue
@@ -3661,7 +4421,9 @@
errorLine1=" public void onUnbindViewHolder(ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CardPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/CardPresenter.java"
+ line="149"
+ column="36"/>
</issue>
<issue
@@ -3670,7 +4432,9 @@
errorLine1=" public CustomTitleView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CustomTitleView.java"/>
+ file="src/main/java/com/example/android/leanback/CustomTitleView.java"
+ line="73"
+ column="28"/>
</issue>
<issue
@@ -3679,7 +4443,9 @@
errorLine1=" public CustomTitleView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CustomTitleView.java"/>
+ file="src/main/java/com/example/android/leanback/CustomTitleView.java"
+ line="77"
+ column="28"/>
</issue>
<issue
@@ -3688,7 +4454,9 @@
errorLine1=" public CustomTitleView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CustomTitleView.java"/>
+ file="src/main/java/com/example/android/leanback/CustomTitleView.java"
+ line="77"
+ column="45"/>
</issue>
<issue
@@ -3697,7 +4465,9 @@
errorLine1=" public CustomTitleView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CustomTitleView.java"/>
+ file="src/main/java/com/example/android/leanback/CustomTitleView.java"
+ line="81"
+ column="28"/>
</issue>
<issue
@@ -3706,7 +4476,9 @@
errorLine1=" public CustomTitleView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CustomTitleView.java"/>
+ file="src/main/java/com/example/android/leanback/CustomTitleView.java"
+ line="81"
+ column="45"/>
</issue>
<issue
@@ -3715,7 +4487,9 @@
errorLine1=" public TitleViewAdapter getTitleViewAdapter() {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/CustomTitleView.java"/>
+ file="src/main/java/com/example/android/leanback/CustomTitleView.java"
+ line="86"
+ column="12"/>
</issue>
<issue
@@ -3724,7 +4498,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DatePickerActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DatePickerActivity.java"
+ line="33"
+ column="29"/>
</issue>
<issue
@@ -3733,7 +4509,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DatePickerAppCompatActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DatePickerAppCompatActivity.java"
+ line="33"
+ column="29"/>
</issue>
<issue
@@ -3742,7 +4520,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState)"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsActivity.java"
+ line="35"
+ column="26"/>
</issue>
<issue
@@ -3751,7 +4531,9 @@
errorLine1=" protected void onBindDescription(ViewHolder vh, Object item) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsDescriptionPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsDescriptionPresenter.java"
+ line="21"
+ column="38"/>
</issue>
<issue
@@ -3760,7 +4542,9 @@
errorLine1=" protected void onBindDescription(ViewHolder vh, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsDescriptionPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsDescriptionPresenter.java"
+ line="21"
+ column="53"/>
</issue>
<issue
@@ -3769,7 +4553,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="68"
+ column="26"/>
</issue>
<issue
@@ -3778,7 +4564,9 @@
errorLine1=" public void onSaveInstanceState(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="171"
+ column="37"/>
</issue>
<issue
@@ -3787,7 +4575,9 @@
errorLine1=" public void setItem(PhotoItem photoItem) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsFragment.java"
+ line="176"
+ column="25"/>
</issue>
<issue
@@ -3796,7 +4586,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="48"
+ column="29"/>
</issue>
<issue
@@ -3805,7 +4597,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="70"
+ column="16"/>
</issue>
<issue
@@ -3814,7 +4608,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="70"
+ column="42"/>
</issue>
<issue
@@ -3823,7 +4619,9 @@
errorLine1=" public GuidanceStylist onCreateGuidanceStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="79"
+ column="16"/>
</issue>
<issue
@@ -3832,7 +4630,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="89"
+ column="37"/>
</issue>
<issue
@@ -3841,7 +4641,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="89"
+ column="65"/>
</issue>
<issue
@@ -3850,7 +4652,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsPresenterSelectionActivity.java"
+ line="107"
+ column="43"/>
</issue>
<issue
@@ -3859,7 +4663,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState)"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportActivity.java"
+ line="39"
+ column="26"/>
</issue>
<issue
@@ -3868,7 +4674,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="71"
+ column="26"/>
</issue>
<issue
@@ -3877,7 +4685,9 @@
errorLine1=" public void onSaveInstanceState(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="174"
+ column="37"/>
</issue>
<issue
@@ -3886,7 +4696,9 @@
errorLine1=" public void setItem(PhotoItem photoItem) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/DetailsSupportFragment.java"
+ line="179"
+ column="25"/>
</issue>
<issue
@@ -3895,7 +4707,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/ErrorFragment.java"/>
+ file="src/main/java/com/example/android/leanback/ErrorFragment.java"
+ line="28"
+ column="26"/>
</issue>
<issue
@@ -3904,7 +4718,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/ErrorSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/ErrorSupportFragment.java"
+ line="31"
+ column="26"/>
</issue>
<issue
@@ -3913,7 +4729,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="73"
+ column="29"/>
</issue>
<issue
@@ -3922,7 +4740,9 @@
errorLine1=" public void onConfigurationChanged(Configuration newConfig) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="84"
+ column="40"/>
</issue>
<issue
@@ -3931,7 +4751,9 @@
errorLine1=" protected void onSaveInstanceState(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="90"
+ column="40"/>
</issue>
<issue
@@ -3940,7 +4762,9 @@
errorLine1=" protected void onRestoreInstanceState(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="96"
+ column="43"/>
</issue>
<issue
@@ -3949,7 +4773,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="197"
+ column="16"/>
</issue>
<issue
@@ -3958,7 +4784,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="197"
+ column="42"/>
</issue>
<issue
@@ -3967,7 +4795,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="208"
+ column="37"/>
</issue>
<issue
@@ -3976,7 +4806,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="208"
+ column="65"/>
</issue>
<issue
@@ -3985,7 +4817,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="225"
+ column="43"/>
</issue>
<issue
@@ -3994,7 +4828,9 @@
errorLine1=" public void onCreate(Bundle savedInstance) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="270"
+ column="30"/>
</issue>
<issue
@@ -4003,7 +4839,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="280"
+ column="16"/>
</issue>
<issue
@@ -4012,7 +4850,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="280"
+ column="42"/>
</issue>
<issue
@@ -4021,7 +4861,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="291"
+ column="37"/>
</issue>
<issue
@@ -4030,7 +4872,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="291"
+ column="65"/>
</issue>
<issue
@@ -4039,7 +4883,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="299"
+ column="43"/>
</issue>
<issue
@@ -4048,7 +4894,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="299"
+ column="71"/>
</issue>
<issue
@@ -4057,7 +4905,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="307"
+ column="43"/>
</issue>
<issue
@@ -4066,7 +4916,9 @@
errorLine1=" public long onGuidedActionEditedAndProceed(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="328"
+ column="52"/>
</issue>
<issue
@@ -4075,7 +4927,9 @@
errorLine1=" public GuidedActionsStylist onCreateActionsStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="392"
+ column="16"/>
</issue>
<issue
@@ -4084,7 +4938,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="408"
+ column="16"/>
</issue>
<issue
@@ -4093,7 +4949,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="408"
+ column="42"/>
</issue>
<issue
@@ -4102,7 +4960,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="419"
+ column="37"/>
</issue>
<issue
@@ -4111,7 +4971,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="419"
+ column="65"/>
</issue>
<issue
@@ -4120,7 +4982,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="429"
+ column="43"/>
</issue>
<issue
@@ -4129,7 +4993,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="429"
+ column="71"/>
</issue>
<issue
@@ -4138,7 +5004,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="438"
+ column="43"/>
</issue>
<issue
@@ -4147,7 +5015,9 @@
errorLine1=" public long onGuidedActionEditedAndProceed(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="460"
+ column="52"/>
</issue>
<issue
@@ -4156,7 +5026,9 @@
errorLine1=" public boolean onSubGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="480"
+ column="49"/>
</issue>
<issue
@@ -4165,7 +5037,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="503"
+ column="16"/>
</issue>
<issue
@@ -4174,7 +5048,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="503"
+ column="34"/>
</issue>
<issue
@@ -4183,7 +5059,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="503"
+ column="59"/>
</issue>
<issue
@@ -4192,7 +5070,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="504"
+ column="17"/>
</issue>
<issue
@@ -4201,7 +5081,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="536"
+ column="16"/>
</issue>
<issue
@@ -4210,7 +5092,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="536"
+ column="42"/>
</issue>
<issue
@@ -4219,7 +5103,9 @@
errorLine1=" public GuidanceStylist onCreateGuidanceStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="547"
+ column="16"/>
</issue>
<issue
@@ -4228,7 +5114,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="557"
+ column="37"/>
</issue>
<issue
@@ -4237,7 +5125,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="557"
+ column="65"/>
</issue>
<issue
@@ -4246,7 +5136,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="584"
+ column="43"/>
</issue>
<issue
@@ -4255,7 +5147,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="584"
+ column="71"/>
</issue>
<issue
@@ -4264,7 +5158,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="591"
+ column="43"/>
</issue>
<issue
@@ -4273,7 +5169,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="619"
+ column="16"/>
</issue>
<issue
@@ -4282,7 +5180,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="619"
+ column="42"/>
</issue>
<issue
@@ -4291,7 +5191,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="630"
+ column="37"/>
</issue>
<issue
@@ -4300,7 +5202,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="630"
+ column="65"/>
</issue>
<issue
@@ -4309,7 +5213,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
+ line="639"
+ column="43"/>
</issue>
<issue
@@ -4318,7 +5224,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="42"
+ column="29"/>
</issue>
<issue
@@ -4327,7 +5235,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="52"
+ column="16"/>
</issue>
<issue
@@ -4336,7 +5246,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="52"
+ column="42"/>
</issue>
<issue
@@ -4345,7 +5257,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="63"
+ column="37"/>
</issue>
<issue
@@ -4354,7 +5268,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="63"
+ column="65"/>
</issue>
<issue
@@ -4363,7 +5279,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="91"
+ column="43"/>
</issue>
<issue
@@ -4372,7 +5290,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="109"
+ column="16"/>
</issue>
<issue
@@ -4381,7 +5301,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="109"
+ column="42"/>
</issue>
<issue
@@ -4390,7 +5312,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="120"
+ column="37"/>
</issue>
<issue
@@ -4399,7 +5323,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="120"
+ column="65"/>
</issue>
<issue
@@ -4408,7 +5334,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="133"
+ column="43"/>
</issue>
<issue
@@ -4417,7 +5345,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="133"
+ column="71"/>
</issue>
<issue
@@ -4426,7 +5356,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepHalfScreenActivity.java"
+ line="141"
+ column="43"/>
</issue>
<issue
@@ -4435,7 +5367,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="76"
+ column="29"/>
</issue>
<issue
@@ -4444,7 +5378,9 @@
errorLine1=" public void onConfigurationChanged(Configuration newConfig) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="86"
+ column="40"/>
</issue>
<issue
@@ -4453,7 +5389,9 @@
errorLine1=" protected void onSaveInstanceState(Bundle outState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="92"
+ column="40"/>
</issue>
<issue
@@ -4462,7 +5400,9 @@
errorLine1=" protected void onRestoreInstanceState(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="98"
+ column="43"/>
</issue>
<issue
@@ -4471,7 +5411,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="199"
+ column="16"/>
</issue>
<issue
@@ -4480,7 +5422,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="199"
+ column="42"/>
</issue>
<issue
@@ -4489,7 +5433,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="210"
+ column="37"/>
</issue>
<issue
@@ -4498,7 +5444,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="210"
+ column="65"/>
</issue>
<issue
@@ -4507,7 +5455,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="227"
+ column="43"/>
</issue>
<issue
@@ -4516,7 +5466,9 @@
errorLine1=" public void onCreate(Bundle savedInstance) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="272"
+ column="30"/>
</issue>
<issue
@@ -4525,7 +5477,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="282"
+ column="16"/>
</issue>
<issue
@@ -4534,7 +5488,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="282"
+ column="42"/>
</issue>
<issue
@@ -4543,7 +5499,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="293"
+ column="37"/>
</issue>
<issue
@@ -4552,7 +5510,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="293"
+ column="65"/>
</issue>
<issue
@@ -4561,7 +5521,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="301"
+ column="43"/>
</issue>
<issue
@@ -4570,7 +5532,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="301"
+ column="71"/>
</issue>
<issue
@@ -4579,7 +5543,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="309"
+ column="43"/>
</issue>
<issue
@@ -4588,7 +5554,9 @@
errorLine1=" public long onGuidedActionEditedAndProceed(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="330"
+ column="52"/>
</issue>
<issue
@@ -4597,7 +5565,9 @@
errorLine1=" public GuidedActionsStylist onCreateActionsStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="394"
+ column="16"/>
</issue>
<issue
@@ -4606,7 +5576,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="410"
+ column="16"/>
</issue>
<issue
@@ -4615,7 +5587,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="410"
+ column="42"/>
</issue>
<issue
@@ -4624,7 +5598,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="421"
+ column="37"/>
</issue>
<issue
@@ -4633,7 +5609,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="421"
+ column="65"/>
</issue>
<issue
@@ -4642,7 +5620,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="431"
+ column="43"/>
</issue>
<issue
@@ -4651,7 +5631,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="431"
+ column="71"/>
</issue>
<issue
@@ -4660,7 +5642,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="440"
+ column="43"/>
</issue>
<issue
@@ -4669,7 +5653,9 @@
errorLine1=" public long onGuidedActionEditedAndProceed(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="462"
+ column="52"/>
</issue>
<issue
@@ -4678,7 +5664,9 @@
errorLine1=" public boolean onSubGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="482"
+ column="49"/>
</issue>
<issue
@@ -4687,7 +5675,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="505"
+ column="16"/>
</issue>
<issue
@@ -4696,7 +5686,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="505"
+ column="34"/>
</issue>
<issue
@@ -4705,7 +5697,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="505"
+ column="59"/>
</issue>
<issue
@@ -4714,7 +5708,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="506"
+ column="17"/>
</issue>
<issue
@@ -4723,7 +5719,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="538"
+ column="16"/>
</issue>
<issue
@@ -4732,7 +5730,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="538"
+ column="42"/>
</issue>
<issue
@@ -4741,7 +5741,9 @@
errorLine1=" public GuidanceStylist onCreateGuidanceStylist() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="549"
+ column="16"/>
</issue>
<issue
@@ -4750,7 +5752,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="559"
+ column="37"/>
</issue>
<issue
@@ -4759,7 +5763,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="559"
+ column="65"/>
</issue>
<issue
@@ -4768,7 +5774,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="586"
+ column="43"/>
</issue>
<issue
@@ -4777,7 +5785,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="586"
+ column="71"/>
</issue>
<issue
@@ -4786,7 +5796,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="593"
+ column="43"/>
</issue>
<issue
@@ -4795,7 +5807,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="621"
+ column="16"/>
</issue>
<issue
@@ -4804,7 +5818,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="621"
+ column="42"/>
</issue>
<issue
@@ -4813,7 +5829,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="632"
+ column="37"/>
</issue>
<issue
@@ -4822,7 +5840,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="632"
+ column="65"/>
</issue>
<issue
@@ -4831,7 +5851,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportActivity.java"
+ line="641"
+ column="43"/>
</issue>
<issue
@@ -4840,7 +5862,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="45"
+ column="29"/>
</issue>
<issue
@@ -4849,7 +5873,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="55"
+ column="16"/>
</issue>
<issue
@@ -4858,7 +5884,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="55"
+ column="42"/>
</issue>
<issue
@@ -4867,7 +5895,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="66"
+ column="37"/>
</issue>
<issue
@@ -4876,7 +5906,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="66"
+ column="65"/>
</issue>
<issue
@@ -4885,7 +5917,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="94"
+ column="43"/>
</issue>
<issue
@@ -4894,7 +5928,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="112"
+ column="16"/>
</issue>
<issue
@@ -4903,7 +5939,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="112"
+ column="42"/>
</issue>
<issue
@@ -4912,7 +5950,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="123"
+ column="37"/>
</issue>
<issue
@@ -4921,7 +5961,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="123"
+ column="65"/>
</issue>
<issue
@@ -4930,7 +5972,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="136"
+ column="43"/>
</issue>
<issue
@@ -4939,7 +5983,9 @@
errorLine1=" public void onCreateButtonActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="136"
+ column="71"/>
</issue>
<issue
@@ -4948,7 +5994,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"/>
+ file="src/main/java/com/example/android/leanback/GuidedStepSupportHalfScreenActivity.java"
+ line="144"
+ column="43"/>
</issue>
<issue
@@ -4957,7 +6005,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+ file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+ line="74"
+ column="29"/>
</issue>
<issue
@@ -4966,7 +6016,9 @@
errorLine1=" protected void onNewIntent(Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"/>
+ file="src/main/java/com/example/android/leanback/HorizontalGridTestActivity.java"
+ line="88"
+ column="32"/>
</issue>
<issue
@@ -4975,7 +6027,9 @@
errorLine1=" public LiveDataListRow(HeaderItem header,"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/LiveDataListRow.java"/>
+ file="src/main/java/com/example/android/leanback/LiveDataListRow.java"
+ line="24"
+ column="28"/>
</issue>
<issue
@@ -4984,7 +6038,9 @@
errorLine1=" ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/LiveDataListRow.java"/>
+ file="src/main/java/com/example/android/leanback/LiveDataListRow.java"
+ line="25"
+ column="13"/>
</issue>
<issue
@@ -4993,7 +6049,9 @@
errorLine1=" public LiveDataListRow(long id, HeaderItem header, ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/LiveDataListRow.java"/>
+ file="src/main/java/com/example/android/leanback/LiveDataListRow.java"
+ line="28"
+ column="37"/>
</issue>
<issue
@@ -5002,7 +6060,9 @@
errorLine1=" public LiveDataListRow(long id, HeaderItem header, ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/LiveDataListRow.java"/>
+ file="src/main/java/com/example/android/leanback/LiveDataListRow.java"
+ line="28"
+ column="56"/>
</issue>
<issue
@@ -5011,7 +6071,9 @@
errorLine1=" public LiveDataListRow(ObjectAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/LiveDataListRow.java"/>
+ file="src/main/java/com/example/android/leanback/LiveDataListRow.java"
+ line="31"
+ column="28"/>
</issue>
<issue
@@ -5020,7 +6082,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MainActivity.java"/>
+ file="src/main/java/com/example/android/leanback/MainActivity.java"
+ line="39"
+ column="29"/>
</issue>
<issue
@@ -5029,7 +6093,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MainActivity.java"/>
+ file="src/main/java/com/example/android/leanback/MainActivity.java"
+ line="48"
+ column="16"/>
</issue>
<issue
@@ -5038,7 +6104,9 @@
errorLine1=" public Guidance onCreateGuidance(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MainActivity.java"/>
+ file="src/main/java/com/example/android/leanback/MainActivity.java"
+ line="48"
+ column="42"/>
</issue>
<issue
@@ -5047,7 +6115,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MainActivity.java"/>
+ file="src/main/java/com/example/android/leanback/MainActivity.java"
+ line="59"
+ column="37"/>
</issue>
<issue
@@ -5056,7 +6126,9 @@
errorLine1=" public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MainActivity.java"/>
+ file="src/main/java/com/example/android/leanback/MainActivity.java"
+ line="59"
+ column="65"/>
</issue>
<issue
@@ -5065,7 +6137,9 @@
errorLine1=" public void onGuidedActionClicked(GuidedAction action) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MainActivity.java"/>
+ file="src/main/java/com/example/android/leanback/MainActivity.java"
+ line="190"
+ column="43"/>
</issue>
<issue
@@ -5074,7 +6148,9 @@
errorLine1=" public MediaSessionCompat getMediaSession() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="202"
+ column="12"/>
</issue>
<issue
@@ -5083,7 +6159,9 @@
errorLine1=" public IBinder onBind(Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="208"
+ column="27"/>
</issue>
<issue
@@ -5092,7 +6170,9 @@
errorLine1=" public void setMediaList(List<MusicItem> mediaItemList, boolean isQueue) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="261"
+ column="30"/>
</issue>
<issue
@@ -5101,7 +6181,9 @@
errorLine1=" public void setFastForwardSpeedFactors(int[] fastForwardSpeeds) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="291"
+ column="44"/>
</issue>
<issue
@@ -5110,7 +6192,9 @@
errorLine1=" public void setRewindSpeedFactors(int[] rewindSpeeds) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="307"
+ column="39"/>
</issue>
<issue
@@ -5119,7 +6203,9 @@
errorLine1=" public void registerCallback(MediaPlayerListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MediaSessionService.java"/>
+ file="src/main/java/com/example/android/leanback/MediaSessionService.java"
+ line="488"
+ column="34"/>
</issue>
<issue
@@ -5128,7 +6214,9 @@
errorLine1=" @Override public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicExampleActivity.java"/>
+ file="src/main/java/com/example/android/leanback/MusicExampleActivity.java"
+ line="26"
+ column="36"/>
</issue>
<issue
@@ -5137,7 +6225,9 @@
errorLine1=" public Uri getMediaSourceUri(Context context) {"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+ file="src/main/java/com/example/android/leanback/MusicItem.java"
+ line="56"
+ column="12"/>
</issue>
<issue
@@ -5146,7 +6236,9 @@
errorLine1=" public Uri getMediaSourceUri(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+ file="src/main/java/com/example/android/leanback/MusicItem.java"
+ line="56"
+ column="34"/>
</issue>
<issue
@@ -5155,7 +6247,9 @@
errorLine1=" public String getMediaTitle() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+ file="src/main/java/com/example/android/leanback/MusicItem.java"
+ line="66"
+ column="12"/>
</issue>
<issue
@@ -5164,7 +6258,9 @@
errorLine1=" public String getMediaDescription() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+ file="src/main/java/com/example/android/leanback/MusicItem.java"
+ line="75"
+ column="12"/>
</issue>
<issue
@@ -5173,7 +6269,9 @@
errorLine1=" public int getMediaAlbumArtResId(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+ file="src/main/java/com/example/android/leanback/MusicItem.java"
+ line="85"
+ column="38"/>
</issue>
<issue
@@ -5182,7 +6280,9 @@
errorLine1=" public static Uri getResourceUri(Context context, int resID) {"
errorLine2=" ~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+ file="src/main/java/com/example/android/leanback/MusicItem.java"
+ line="97"
+ column="19"/>
</issue>
<issue
@@ -5191,7 +6291,9 @@
errorLine1=" public static Uri getResourceUri(Context context, int resID) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicItem.java"/>
+ file="src/main/java/com/example/android/leanback/MusicItem.java"
+ line="97"
+ column="38"/>
</issue>
<issue
@@ -5200,7 +6302,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"/>
+ file="src/main/java/com/example/android/leanback/MusicPlayerFragment.java"
+ line="225"
+ column="26"/>
</issue>
<issue
@@ -5209,7 +6313,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="115"
+ column="26"/>
</issue>
<issue
@@ -5218,7 +6324,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="250"
+ column="12"/>
</issue>
<issue
@@ -5227,7 +6335,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="250"
+ column="30"/>
</issue>
<issue
@@ -5236,7 +6346,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="250"
+ column="55"/>
</issue>
<issue
@@ -5245,7 +6357,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="251"
+ column="13"/>
</issue>
<issue
@@ -5254,7 +6368,9 @@
errorLine1=" public void setItem(PhotoItem photoItem) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsFragment.java"
+ line="260"
+ column="25"/>
</issue>
<issue
@@ -5263,7 +6379,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="118"
+ column="26"/>
</issue>
<issue
@@ -5272,7 +6390,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="253"
+ column="12"/>
</issue>
<issue
@@ -5281,7 +6401,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="253"
+ column="30"/>
</issue>
<issue
@@ -5290,7 +6412,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="253"
+ column="55"/>
</issue>
<issue
@@ -5299,7 +6423,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="254"
+ column="13"/>
</issue>
<issue
@@ -5308,7 +6434,9 @@
errorLine1=" public void setItem(PhotoItem photoItem) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/NewDetailsSupportFragment.java"
+ line="263"
+ column="25"/>
</issue>
<issue
@@ -5317,7 +6445,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingActivity.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingActivity.java"
+ line="21"
+ column="26"/>
</issue>
<issue
@@ -5326,7 +6456,9 @@
errorLine1=" public void onAttach(android.app.Activity activity) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="57"
+ column="26"/>
</issue>
<issue
@@ -5335,7 +6467,9 @@
errorLine1=" protected CharSequence getPageTitle(int i) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="70"
+ column="15"/>
</issue>
<issue
@@ -5344,7 +6478,9 @@
errorLine1=" protected CharSequence getPageDescription(int i) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="75"
+ column="15"/>
</issue>
<issue
@@ -5353,7 +6489,9 @@
errorLine1=" protected View onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="80"
+ column="15"/>
</issue>
<issue
@@ -5362,7 +6500,9 @@
errorLine1=" protected View onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="80"
+ column="43"/>
</issue>
<issue
@@ -5371,7 +6511,9 @@
errorLine1=" protected View onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="80"
+ column="74"/>
</issue>
<issue
@@ -5380,7 +6522,9 @@
errorLine1=" protected View onCreateContentView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="86"
+ column="15"/>
</issue>
<issue
@@ -5389,7 +6533,9 @@
errorLine1=" protected View onCreateContentView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="86"
+ column="40"/>
</issue>
<issue
@@ -5398,7 +6544,9 @@
errorLine1=" protected View onCreateContentView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="86"
+ column="71"/>
</issue>
<issue
@@ -5407,7 +6555,9 @@
errorLine1=" protected View onCreateForegroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="94"
+ column="15"/>
</issue>
<issue
@@ -5416,7 +6566,9 @@
errorLine1=" protected View onCreateForegroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="94"
+ column="43"/>
</issue>
<issue
@@ -5425,7 +6577,9 @@
errorLine1=" protected View onCreateForegroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="94"
+ column="74"/>
</issue>
<issue
@@ -5434,7 +6588,9 @@
errorLine1=" protected Animator onCreateEnterAnimation() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoFragment.java"
+ line="99"
+ column="15"/>
</issue>
<issue
@@ -5443,7 +6599,9 @@
errorLine1=" public void onAttach(android.app.Activity activity) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="60"
+ column="26"/>
</issue>
<issue
@@ -5452,7 +6610,9 @@
errorLine1=" protected CharSequence getPageTitle(int i) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="73"
+ column="15"/>
</issue>
<issue
@@ -5461,7 +6621,9 @@
errorLine1=" protected CharSequence getPageDescription(int i) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="78"
+ column="15"/>
</issue>
<issue
@@ -5470,7 +6632,9 @@
errorLine1=" protected View onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="83"
+ column="15"/>
</issue>
<issue
@@ -5479,7 +6643,9 @@
errorLine1=" protected View onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="83"
+ column="43"/>
</issue>
<issue
@@ -5488,7 +6654,9 @@
errorLine1=" protected View onCreateBackgroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="83"
+ column="74"/>
</issue>
<issue
@@ -5497,7 +6665,9 @@
errorLine1=" protected View onCreateContentView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="89"
+ column="15"/>
</issue>
<issue
@@ -5506,7 +6676,9 @@
errorLine1=" protected View onCreateContentView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="89"
+ column="40"/>
</issue>
<issue
@@ -5515,7 +6687,9 @@
errorLine1=" protected View onCreateContentView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="89"
+ column="71"/>
</issue>
<issue
@@ -5524,7 +6698,9 @@
errorLine1=" protected View onCreateForegroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="97"
+ column="15"/>
</issue>
<issue
@@ -5533,7 +6709,9 @@
errorLine1=" protected View onCreateForegroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="97"
+ column="43"/>
</issue>
<issue
@@ -5542,7 +6720,9 @@
errorLine1=" protected View onCreateForegroundView(LayoutInflater layoutInflater, ViewGroup viewGroup) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="97"
+ column="74"/>
</issue>
<issue
@@ -5551,7 +6731,9 @@
errorLine1=" protected Animator onCreateEnterAnimation() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingDemoSupportFragment.java"
+ line="102"
+ column="15"/>
</issue>
<issue
@@ -5560,7 +6742,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingSupportActivity.java"
+ line="25"
+ column="26"/>
</issue>
<issue
@@ -5569,7 +6753,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/OnboardingSupportAppCompatActivity.java"/>
+ file="src/main/java/com/example/android/leanback/OnboardingSupportAppCompatActivity.java"
+ line="28"
+ column="26"/>
</issue>
<issue
@@ -5578,7 +6764,9 @@
errorLine1=" protected LiveDataRowPresenterViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"
+ line="39"
+ column="15"/>
</issue>
<issue
@@ -5587,7 +6775,9 @@
errorLine1=" protected LiveDataRowPresenterViewHolder createRowViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"
+ line="39"
+ column="66"/>
</issue>
<issue
@@ -5596,7 +6786,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"
+ line="48"
+ column="40"/>
</issue>
<issue
@@ -5605,7 +6797,9 @@
errorLine1=" protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/PagedRowPresenter.java"
+ line="48"
+ column="72"/>
</issue>
<issue
@@ -5614,7 +6808,9 @@
errorLine1=" public PagerAdapter(FragmentManager fm, int numOfTabs) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PagerAdapter.java"/>
+ file="src/main/java/com/example/android/leanback/PagerAdapter.java"
+ line="30"
+ column="25"/>
</issue>
<issue
@@ -5623,7 +6819,9 @@
errorLine1=" public CharSequence getPageTitle(int position) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PagerAdapter.java"/>
+ file="src/main/java/com/example/android/leanback/PagerAdapter.java"
+ line="47"
+ column="12"/>
</issue>
<issue
@@ -5632,7 +6830,9 @@
errorLine1=" public String getTitle() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/room/Photo.java"/>
+ file="src/main/java/com/example/android/leanback/room/Photo.java"
+ line="42"
+ column="12"/>
</issue>
<issue
@@ -5641,7 +6841,9 @@
errorLine1=" PagingSource<Integer, Photo> fetchPhotos();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/room/PhotoDao.java"/>
+ file="src/main/java/com/example/android/leanback/room/PhotoDao.java"
+ line="32"
+ column="5"/>
</issue>
<issue
@@ -5650,7 +6852,9 @@
errorLine1=" public static synchronized PhotoDatabase getInstance("
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"/>
+ file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"
+ line="40"
+ column="32"/>
</issue>
<issue
@@ -5659,7 +6863,9 @@
errorLine1=" Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"/>
+ file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"
+ line="41"
+ column="13"/>
</issue>
<issue
@@ -5668,7 +6874,9 @@
errorLine1=" public abstract PhotoDao photoDao();"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"/>
+ file="src/main/java/com/example/android/leanback/room/PhotoDatabase.java"
+ line="85"
+ column="21"/>
</issue>
<issue
@@ -5677,7 +6885,9 @@
errorLine1=" public PhotoItem(String title, int imageResourceId) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+ file="src/main/java/com/example/android/leanback/PhotoItem.java"
+ line="30"
+ column="22"/>
</issue>
<issue
@@ -5686,7 +6896,9 @@
errorLine1=" public PhotoItem(String title, int imageResourceId, int id) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+ file="src/main/java/com/example/android/leanback/PhotoItem.java"
+ line="34"
+ column="22"/>
</issue>
<issue
@@ -5695,7 +6907,9 @@
errorLine1=" public PhotoItem(String title, String content, int imageResourceId) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+ file="src/main/java/com/example/android/leanback/PhotoItem.java"
+ line="39"
+ column="22"/>
</issue>
<issue
@@ -5704,7 +6918,9 @@
errorLine1=" public PhotoItem(String title, String content, int imageResourceId) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+ file="src/main/java/com/example/android/leanback/PhotoItem.java"
+ line="39"
+ column="36"/>
</issue>
<issue
@@ -5713,7 +6929,9 @@
errorLine1=" public PhotoItem(String title, String content, int imageResourceId, int id) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+ file="src/main/java/com/example/android/leanback/PhotoItem.java"
+ line="47"
+ column="22"/>
</issue>
<issue
@@ -5722,7 +6940,9 @@
errorLine1=" public PhotoItem(String title, String content, int imageResourceId, int id) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+ file="src/main/java/com/example/android/leanback/PhotoItem.java"
+ line="47"
+ column="36"/>
</issue>
<issue
@@ -5731,7 +6951,9 @@
errorLine1=" public String getTitle() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+ file="src/main/java/com/example/android/leanback/PhotoItem.java"
+ line="56"
+ column="12"/>
</issue>
<issue
@@ -5740,7 +6962,9 @@
errorLine1=" public String getContent() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+ file="src/main/java/com/example/android/leanback/PhotoItem.java"
+ line="60"
+ column="12"/>
</issue>
<issue
@@ -5749,7 +6973,9 @@
errorLine1=" public void writeToParcel(Parcel dest, int flags) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PhotoItem.java"/>
+ file="src/main/java/com/example/android/leanback/PhotoItem.java"
+ line="75"
+ column="31"/>
</issue>
<issue
@@ -5758,7 +6984,9 @@
errorLine1=" public PhotoViewModel(Application application) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PhotoViewModel.java"/>
+ file="src/main/java/com/example/android/leanback/PhotoViewModel.java"
+ line="44"
+ column="27"/>
</issue>
<issue
@@ -5767,7 +6995,9 @@
errorLine1=" public LiveData<PagingData<PhotoItem>> getPagingDataLiveData() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PhotoViewModel.java"/>
+ file="src/main/java/com/example/android/leanback/PhotoViewModel.java"
+ line="64"
+ column="12"/>
</issue>
<issue
@@ -5776,7 +7006,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PinPickerActivity.java"/>
+ file="src/main/java/com/example/android/leanback/PinPickerActivity.java"
+ line="30"
+ column="29"/>
</issue>
<issue
@@ -5785,7 +7017,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackActivity.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackActivity.java"
+ line="33"
+ column="26"/>
</issue>
<issue
@@ -5794,7 +7028,9 @@
errorLine1=" public void registerPictureInPictureListener(PictureInPictureListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackActivity.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackActivity.java"
+ line="48"
+ column="50"/>
</issue>
<issue
@@ -5803,7 +7039,9 @@
errorLine1=" public void unregisterPictureInPictureListener(PictureInPictureListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackActivity.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackActivity.java"
+ line="55"
+ column="52"/>
</issue>
<issue
@@ -5812,7 +7050,9 @@
errorLine1=" public SparseArrayObjectAdapter getAdapter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackFragment.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackFragment.java"
+ line="61"
+ column="12"/>
</issue>
<issue
@@ -5821,7 +7061,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackFragment.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackFragment.java"
+ line="66"
+ column="26"/>
</issue>
<issue
@@ -5830,7 +7072,9 @@
errorLine1=" protected boolean isCancelled(Object task) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"
+ line="48"
+ column="35"/>
</issue>
<issue
@@ -5839,7 +7083,9 @@
errorLine1=" protected abstract Bitmap doInBackground(Object task, int index, long position);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"
+ line="52"
+ column="24"/>
</issue>
<issue
@@ -5848,7 +7094,9 @@
errorLine1=" protected abstract Bitmap doInBackground(Object task, int index, long position);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"
+ line="52"
+ column="46"/>
</issue>
<issue
@@ -5857,7 +7105,9 @@
errorLine1=" public void setSeekPositions(long[] positions) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"
+ line="93"
+ column="34"/>
</issue>
<issue
@@ -5866,7 +7116,9 @@
errorLine1=" public long[] getSeekPositions() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"
+ line="98"
+ column="12"/>
</issue>
<issue
@@ -5875,7 +7127,9 @@
errorLine1=" public void getThumbnail(int index, ResultCallback callback) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackSeekAsyncDataProvider.java"
+ line="104"
+ column="41"/>
</issue>
<issue
@@ -5884,7 +7138,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackSupportActivity.java"
+ line="37"
+ column="26"/>
</issue>
<issue
@@ -5893,7 +7149,9 @@
errorLine1=" public void registerPictureInPictureListener(PictureInPictureListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackSupportActivity.java"
+ line="52"
+ column="50"/>
</issue>
<issue
@@ -5902,7 +7160,9 @@
errorLine1=" public void unregisterPictureInPictureListener(PictureInPictureListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackSupportActivity.java"
+ line="59"
+ column="52"/>
</issue>
<issue
@@ -5911,7 +7171,9 @@
errorLine1=" public SparseArrayObjectAdapter getAdapter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackSupportFragment.java"
+ line="64"
+ column="12"/>
</issue>
<issue
@@ -5920,7 +7182,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackSupportFragment.java"
+ line="69"
+ column="26"/>
</issue>
<issue
@@ -5929,7 +7193,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java"
+ line="33"
+ column="26"/>
</issue>
<issue
@@ -5938,7 +7204,9 @@
errorLine1=" public void registerPictureInPictureListener(PictureInPictureListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java"
+ line="48"
+ column="50"/>
</issue>
<issue
@@ -5947,7 +7215,9 @@
errorLine1=" public void unregisterPictureInPictureListener(PictureInPictureListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackTransportControlActivity.java"
+ line="55"
+ column="52"/>
</issue>
<issue
@@ -5956,7 +7226,9 @@
errorLine1=" public SparseArrayObjectAdapter getAdapter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackTransportControlFragment.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackTransportControlFragment.java"
+ line="56"
+ column="12"/>
</issue>
<issue
@@ -5965,7 +7237,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackTransportControlFragment.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackTransportControlFragment.java"
+ line="61"
+ column="26"/>
</issue>
<issue
@@ -5974,7 +7248,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java"
+ line="37"
+ column="26"/>
</issue>
<issue
@@ -5983,7 +7259,9 @@
errorLine1=" public void registerPictureInPictureListener(PictureInPictureListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java"
+ line="52"
+ column="50"/>
</issue>
<issue
@@ -5992,7 +7270,9 @@
errorLine1=" public void unregisterPictureInPictureListener(PictureInPictureListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportActivity.java"
+ line="59"
+ column="52"/>
</issue>
<issue
@@ -6001,7 +7281,9 @@
errorLine1=" public SparseArrayObjectAdapter getAdapter() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportFragment.java"
+ line="59"
+ column="12"/>
</issue>
<issue
@@ -6010,7 +7292,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/PlaybackTransportControlSupportFragment.java"
+ line="64"
+ column="26"/>
</issue>
<issue
@@ -6019,7 +7303,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsActivity.java"/>
+ file="src/main/java/com/example/android/leanback/RowsActivity.java"
+ line="31"
+ column="26"/>
</issue>
<issue
@@ -6028,7 +7314,9 @@
errorLine1=" public void setTitleHelper(TitleHelper titleHelper) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/RowsFragment.java"
+ line="43"
+ column="32"/>
</issue>
<issue
@@ -6037,7 +7325,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/RowsFragment.java"
+ line="48"
+ column="26"/>
</issue>
<issue
@@ -6046,7 +7336,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/RowsSupportActivity.java"
+ line="34"
+ column="26"/>
</issue>
<issue
@@ -6055,7 +7347,9 @@
errorLine1=" public void setTitleHelper(TitleHelper titleHelper) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+ line="50"
+ column="32"/>
</issue>
<issue
@@ -6064,7 +7358,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/RowsSupportFragment.java"
+ line="55"
+ column="26"/>
</issue>
<issue
@@ -6073,7 +7369,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoFragment.java"
+ line="100"
+ column="26"/>
</issue>
<issue
@@ -6082,7 +7380,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SampleVideoSupportFragment.java"
+ line="103"
+ column="26"/>
</issue>
<issue
@@ -6091,7 +7391,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState)"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchActivity.java"/>
+ file="src/main/java/com/example/android/leanback/SearchActivity.java"
+ line="38"
+ column="26"/>
</issue>
<issue
@@ -6100,7 +7402,9 @@
errorLine1=" protected void onActivityResult(int requestCode, int resultCode, Intent data) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchActivity.java"/>
+ file="src/main/java/com/example/android/leanback/SearchActivity.java"
+ line="58"
+ column="70"/>
</issue>
<issue
@@ -6109,7 +7413,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchFragment.java"
+ line="88"
+ column="26"/>
</issue>
<issue
@@ -6118,7 +7424,9 @@
errorLine1=" public ObjectAdapter getResultsAdapter() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchFragment.java"
+ line="102"
+ column="12"/>
</issue>
<issue
@@ -6127,7 +7435,9 @@
errorLine1=" public boolean onQueryTextChange(String newQuery) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchFragment.java"
+ line="107"
+ column="38"/>
</issue>
<issue
@@ -6136,7 +7446,9 @@
errorLine1=" public boolean onQueryTextSubmit(String query) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchFragment.java"
+ line="115"
+ column="38"/>
</issue>
<issue
@@ -6145,7 +7457,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState)"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"
+ line="41"
+ column="26"/>
</issue>
<issue
@@ -6154,7 +7468,9 @@
errorLine1=" protected void onActivityResult(int requestCode, int resultCode, Intent data) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/SearchSupportActivity.java"
+ line="61"
+ column="70"/>
</issue>
<issue
@@ -6163,7 +7479,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+ line="91"
+ column="26"/>
</issue>
<issue
@@ -6172,7 +7490,9 @@
errorLine1=" public ObjectAdapter getResultsAdapter() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+ line="105"
+ column="12"/>
</issue>
<issue
@@ -6181,7 +7501,9 @@
errorLine1=" public boolean onQueryTextChange(String newQuery) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+ line="110"
+ column="38"/>
</issue>
<issue
@@ -6190,7 +7512,9 @@
errorLine1=" public boolean onQueryTextSubmit(String query) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SearchSupportFragment.java"
+ line="118"
+ column="38"/>
</issue>
<issue
@@ -6199,7 +7523,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SettingsActivity.java"/>
+ file="src/main/java/com/example/android/leanback/SettingsActivity.java"
+ line="27"
+ column="26"/>
</issue>
<issue
@@ -6208,7 +7534,9 @@
errorLine1=" public boolean onPreferenceStartFragment(PreferenceFragmentCompat preferenceFragment,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+ line="44"
+ column="46"/>
</issue>
<issue
@@ -6217,7 +7545,9 @@
errorLine1=" Preference preference) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+ line="45"
+ column="46"/>
</issue>
<issue
@@ -6226,7 +7556,9 @@
errorLine1=" public boolean onPreferenceStartScreen(PreferenceFragmentCompat preferenceFragment,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+ line="50"
+ column="44"/>
</issue>
<issue
@@ -6235,7 +7567,9 @@
errorLine1=" PreferenceScreen preferenceScreen) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+ line="51"
+ column="44"/>
</issue>
<issue
@@ -6244,7 +7578,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+ line="70"
+ column="30"/>
</issue>
<issue
@@ -6253,7 +7589,9 @@
errorLine1=" public void onCreatePreferences(Bundle bundle, String rootKey) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+ line="75"
+ column="41"/>
</issue>
<issue
@@ -6262,7 +7600,9 @@
errorLine1=" public void onCreatePreferences(Bundle bundle, String rootKey) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+ line="75"
+ column="56"/>
</issue>
<issue
@@ -6271,7 +7611,9 @@
errorLine1=" public boolean onPreferenceTreeClick(Preference preference) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/SettingsFragment.java"/>
+ file="src/main/java/com/example/android/leanback/SettingsFragment.java"
+ line="80"
+ column="46"/>
</issue>
<issue
@@ -6280,7 +7622,9 @@
errorLine1=" public ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/StringPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/StringPresenter.java"
+ line="28"
+ column="12"/>
</issue>
<issue
@@ -6289,7 +7633,9 @@
errorLine1=" public ViewHolder onCreateViewHolder(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/StringPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/StringPresenter.java"
+ line="28"
+ column="42"/>
</issue>
<issue
@@ -6298,7 +7644,9 @@
errorLine1=" public void onBindViewHolder(ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/StringPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/StringPresenter.java"
+ line="40"
+ column="34"/>
</issue>
<issue
@@ -6307,7 +7655,9 @@
errorLine1=" public void onBindViewHolder(ViewHolder viewHolder, Object item) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/StringPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/StringPresenter.java"
+ line="40"
+ column="57"/>
</issue>
<issue
@@ -6316,7 +7666,9 @@
errorLine1=" public void onUnbindViewHolder(ViewHolder viewHolder) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/StringPresenter.java"/>
+ file="src/main/java/com/example/android/leanback/StringPresenter.java"
+ line="46"
+ column="36"/>
</issue>
<issue
@@ -6325,7 +7677,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~">
<location
- file="src/main/java/com/example/android/leanback/TabFragment.java"/>
+ file="src/main/java/com/example/android/leanback/TabFragment.java"
+ line="37"
+ column="12"/>
</issue>
<issue
@@ -6334,7 +7688,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/TabFragment.java"/>
+ file="src/main/java/com/example/android/leanback/TabFragment.java"
+ line="37"
+ column="30"/>
</issue>
<issue
@@ -6343,7 +7699,9 @@
errorLine1=" public View onCreateView(LayoutInflater inflater, ViewGroup container,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/TabFragment.java"/>
+ file="src/main/java/com/example/android/leanback/TabFragment.java"
+ line="37"
+ column="55"/>
</issue>
<issue
@@ -6352,7 +7710,9 @@
errorLine1=" Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/TabFragment.java"/>
+ file="src/main/java/com/example/android/leanback/TabFragment.java"
+ line="38"
+ column="13"/>
</issue>
<issue
@@ -6361,7 +7721,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/TabLayoutActivity.java"/>
+ file="src/main/java/com/example/android/leanback/TabLayoutActivity.java"
+ line="32"
+ column="29"/>
</issue>
<issue
@@ -6370,7 +7732,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/TimePickerActivity.java"/>
+ file="src/main/java/com/example/android/leanback/TimePickerActivity.java"
+ line="34"
+ column="29"/>
</issue>
<issue
@@ -6379,7 +7743,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState)"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridActivity.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridActivity.java"
+ line="23"
+ column="26"/>
</issue>
<issue
@@ -6388,7 +7754,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridFragment.java"
+ line="50"
+ column="26"/>
</issue>
<issue
@@ -6397,7 +7765,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState)"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridSupportActivity.java"
+ line="27"
+ column="26"/>
</issue>
<issue
@@ -6406,7 +7776,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridSupportAppCompatActivity.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridSupportAppCompatActivity.java"
+ line="29"
+ column="26"/>
</issue>
<issue
@@ -6415,7 +7787,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"/>
+ file="src/main/java/com/example/android/leanback/VerticalGridSupportFragment.java"
+ line="53"
+ column="26"/>
</issue>
<issue
@@ -6424,7 +7798,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VideoActivity.java"/>
+ file="src/main/java/com/example/android/leanback/VideoActivity.java"
+ line="25"
+ column="29"/>
</issue>
<issue
@@ -6433,7 +7809,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java"/>
+ file="src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java"
+ line="37"
+ column="26"/>
</issue>
<issue
@@ -6442,7 +7820,9 @@
errorLine1=" protected void onNewIntent(Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java"/>
+ file="src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java"
+ line="50"
+ column="32"/>
</issue>
<issue
@@ -6451,7 +7831,9 @@
errorLine1=" public static boolean supportsPictureInPicture(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java"/>
+ file="src/main/java/com/example/android/leanback/VideoActivityWithDetailedCard.java"
+ line="65"
+ column="52"/>
</issue>
<issue
@@ -6460,7 +7842,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VideoConsumptionWithDetailCardFragment.java"/>
+ file="src/main/java/com/example/android/leanback/VideoConsumptionWithDetailCardFragment.java"
+ line="66"
+ column="26"/>
</issue>
<issue
@@ -6469,7 +7853,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VideoSupportActivity.java"/>
+ file="src/main/java/com/example/android/leanback/VideoSupportActivity.java"
+ line="29"
+ column="29"/>
</issue>
<issue
@@ -6478,7 +7864,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/leanback/VideoSupportAppCompatActivity.java"/>
+ file="src/main/java/com/example/android/leanback/VideoSupportAppCompatActivity.java"
+ line="29"
+ column="29"/>
</issue>
</issues>
diff --git a/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsActivity.java
index 6e2cbb4d..3f218ab 100644
--- a/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsActivity.java
+++ b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsActivity.java
@@ -16,6 +16,7 @@
import android.app.Activity;
import android.os.Bundle;
+@SuppressWarnings("deprecation")
public class DetailsActivity extends Activity
{
public static final String EXTRA_ITEM = "item";
diff --git a/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsSupportActivity.java b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsSupportActivity.java
index f1a5ceb..8930028 100644
--- a/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsSupportActivity.java
+++ b/samples/SupportLeanbackDemos/src/main/java/com/example/android/leanback/DetailsSupportActivity.java
@@ -20,6 +20,7 @@
import androidx.fragment.app.FragmentActivity;
+@SuppressWarnings("deprecation")
public class DetailsSupportActivity extends FragmentActivity
{
public static final String EXTRA_ITEM = "item";
diff --git a/savedstate/savedstate-ktx/api/1.2.0-beta01.txt b/savedstate/savedstate-ktx/api/1.2.0-beta01.txt
index b01f511..13e3138 100644
--- a/savedstate/savedstate-ktx/api/1.2.0-beta01.txt
+++ b/savedstate/savedstate-ktx/api/1.2.0-beta01.txt
@@ -2,7 +2,7 @@
package androidx.savedstate {
public final class ViewKt {
- method @Deprecated public static androidx.savedstate.SavedStateRegistryOwner! findViewTreeSavedStateRegistryOwner(android.view.View);
+ method public static androidx.savedstate.SavedStateRegistryOwner? findViewTreeSavedStateRegistryOwner(android.view.View);
}
}
diff --git a/savedstate/savedstate-ktx/api/public_plus_experimental_1.2.0-beta01.txt b/savedstate/savedstate-ktx/api/public_plus_experimental_1.2.0-beta01.txt
index b01f511..13e3138 100644
--- a/savedstate/savedstate-ktx/api/public_plus_experimental_1.2.0-beta01.txt
+++ b/savedstate/savedstate-ktx/api/public_plus_experimental_1.2.0-beta01.txt
@@ -2,7 +2,7 @@
package androidx.savedstate {
public final class ViewKt {
- method @Deprecated public static androidx.savedstate.SavedStateRegistryOwner! findViewTreeSavedStateRegistryOwner(android.view.View);
+ method public static androidx.savedstate.SavedStateRegistryOwner? findViewTreeSavedStateRegistryOwner(android.view.View);
}
}
diff --git a/savedstate/savedstate-ktx/api/restricted_1.2.0-beta01.txt b/savedstate/savedstate-ktx/api/restricted_1.2.0-beta01.txt
index b01f511..13e3138 100644
--- a/savedstate/savedstate-ktx/api/restricted_1.2.0-beta01.txt
+++ b/savedstate/savedstate-ktx/api/restricted_1.2.0-beta01.txt
@@ -2,7 +2,7 @@
package androidx.savedstate {
public final class ViewKt {
- method @Deprecated public static androidx.savedstate.SavedStateRegistryOwner! findViewTreeSavedStateRegistryOwner(android.view.View);
+ method public static androidx.savedstate.SavedStateRegistryOwner? findViewTreeSavedStateRegistryOwner(android.view.View);
}
}
diff --git a/savedstate/savedstate/api/1.2.0-beta01.txt b/savedstate/savedstate/api/1.2.0-beta01.txt
index 6fe1a0d..45d2b1f9 100644
--- a/savedstate/savedstate/api/1.2.0-beta01.txt
+++ b/savedstate/savedstate/api/1.2.0-beta01.txt
@@ -2,8 +2,8 @@
package androidx.savedstate {
public final class SavedStateRegistry {
- method @MainThread public android.os.Bundle? consumeRestoredStateForKey(String key);
- method public androidx.savedstate.SavedStateRegistry.SavedStateProvider? getSavedStateProvider(String key);
+ method @MainThread public android.os.Bundle? consumeRestoredStateForKey(String);
+ method public androidx.savedstate.SavedStateRegistry.SavedStateProvider? getSavedStateProvider(String);
method @MainThread public boolean isRestored();
method @MainThread public void registerSavedStateProvider(String key, androidx.savedstate.SavedStateRegistry.SavedStateProvider provider);
method @MainThread public void runOnNextRecreation(Class<? extends androidx.savedstate.SavedStateRegistry.AutoRecreated> clazz);
@@ -12,10 +12,10 @@
}
public static interface SavedStateRegistry.AutoRecreated {
- method public void onRecreated(androidx.savedstate.SavedStateRegistryOwner owner);
+ method public void onRecreated(androidx.savedstate.SavedStateRegistryOwner);
}
- public static fun interface SavedStateRegistry.SavedStateProvider {
+ public static interface SavedStateRegistry.SavedStateProvider {
method public android.os.Bundle saveState();
}
@@ -35,12 +35,11 @@
public interface SavedStateRegistryOwner extends androidx.lifecycle.LifecycleOwner {
method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
- property public abstract androidx.savedstate.SavedStateRegistry savedStateRegistry;
}
public final class ViewTreeSavedStateRegistryOwner {
method public static androidx.savedstate.SavedStateRegistryOwner? get(android.view.View);
- method public static void set(android.view.View, androidx.savedstate.SavedStateRegistryOwner? owner);
+ method public static void set(android.view.View, androidx.savedstate.SavedStateRegistryOwner?);
}
}
diff --git a/savedstate/savedstate/api/public_plus_experimental_1.2.0-beta01.txt b/savedstate/savedstate/api/public_plus_experimental_1.2.0-beta01.txt
index 6fe1a0d..45d2b1f9 100644
--- a/savedstate/savedstate/api/public_plus_experimental_1.2.0-beta01.txt
+++ b/savedstate/savedstate/api/public_plus_experimental_1.2.0-beta01.txt
@@ -2,8 +2,8 @@
package androidx.savedstate {
public final class SavedStateRegistry {
- method @MainThread public android.os.Bundle? consumeRestoredStateForKey(String key);
- method public androidx.savedstate.SavedStateRegistry.SavedStateProvider? getSavedStateProvider(String key);
+ method @MainThread public android.os.Bundle? consumeRestoredStateForKey(String);
+ method public androidx.savedstate.SavedStateRegistry.SavedStateProvider? getSavedStateProvider(String);
method @MainThread public boolean isRestored();
method @MainThread public void registerSavedStateProvider(String key, androidx.savedstate.SavedStateRegistry.SavedStateProvider provider);
method @MainThread public void runOnNextRecreation(Class<? extends androidx.savedstate.SavedStateRegistry.AutoRecreated> clazz);
@@ -12,10 +12,10 @@
}
public static interface SavedStateRegistry.AutoRecreated {
- method public void onRecreated(androidx.savedstate.SavedStateRegistryOwner owner);
+ method public void onRecreated(androidx.savedstate.SavedStateRegistryOwner);
}
- public static fun interface SavedStateRegistry.SavedStateProvider {
+ public static interface SavedStateRegistry.SavedStateProvider {
method public android.os.Bundle saveState();
}
@@ -35,12 +35,11 @@
public interface SavedStateRegistryOwner extends androidx.lifecycle.LifecycleOwner {
method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
- property public abstract androidx.savedstate.SavedStateRegistry savedStateRegistry;
}
public final class ViewTreeSavedStateRegistryOwner {
method public static androidx.savedstate.SavedStateRegistryOwner? get(android.view.View);
- method public static void set(android.view.View, androidx.savedstate.SavedStateRegistryOwner? owner);
+ method public static void set(android.view.View, androidx.savedstate.SavedStateRegistryOwner?);
}
}
diff --git a/savedstate/savedstate/api/restricted_1.2.0-beta01.txt b/savedstate/savedstate/api/restricted_1.2.0-beta01.txt
index 6fe1a0d..45d2b1f9 100644
--- a/savedstate/savedstate/api/restricted_1.2.0-beta01.txt
+++ b/savedstate/savedstate/api/restricted_1.2.0-beta01.txt
@@ -2,8 +2,8 @@
package androidx.savedstate {
public final class SavedStateRegistry {
- method @MainThread public android.os.Bundle? consumeRestoredStateForKey(String key);
- method public androidx.savedstate.SavedStateRegistry.SavedStateProvider? getSavedStateProvider(String key);
+ method @MainThread public android.os.Bundle? consumeRestoredStateForKey(String);
+ method public androidx.savedstate.SavedStateRegistry.SavedStateProvider? getSavedStateProvider(String);
method @MainThread public boolean isRestored();
method @MainThread public void registerSavedStateProvider(String key, androidx.savedstate.SavedStateRegistry.SavedStateProvider provider);
method @MainThread public void runOnNextRecreation(Class<? extends androidx.savedstate.SavedStateRegistry.AutoRecreated> clazz);
@@ -12,10 +12,10 @@
}
public static interface SavedStateRegistry.AutoRecreated {
- method public void onRecreated(androidx.savedstate.SavedStateRegistryOwner owner);
+ method public void onRecreated(androidx.savedstate.SavedStateRegistryOwner);
}
- public static fun interface SavedStateRegistry.SavedStateProvider {
+ public static interface SavedStateRegistry.SavedStateProvider {
method public android.os.Bundle saveState();
}
@@ -35,12 +35,11 @@
public interface SavedStateRegistryOwner extends androidx.lifecycle.LifecycleOwner {
method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
- property public abstract androidx.savedstate.SavedStateRegistry savedStateRegistry;
}
public final class ViewTreeSavedStateRegistryOwner {
method public static androidx.savedstate.SavedStateRegistryOwner? get(android.view.View);
- method public static void set(android.view.View, androidx.savedstate.SavedStateRegistryOwner? owner);
+ method public static void set(android.view.View, androidx.savedstate.SavedStateRegistryOwner?);
}
}
diff --git a/settings.gradle b/settings.gradle
index 58fa787..faf095a 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -93,8 +93,9 @@
value("androidx.useMaxDepVersions", providers.gradleProperty("androidx.useMaxDepVersions").isPresent().toString())
value("androidx.disallowTaskExecution", providers.environmentVariable("DISALLOW_TASK_EXECUTION").isPresent().toString())
- publishAlways()
- publishIfAuthenticated()
+ // Do not publish scan for androidx-platform-dev
+ // publishAlways()
+ // publishIfAuthenticated()
}
}
@@ -653,6 +654,7 @@
includeProject(":health:health-connect-client-samples", "health/health-connect-client/samples", [BuildType.MAIN])
includeProject(":health:health-services-client", [BuildType.MAIN])
includeProject(":heifwriter:heifwriter", [BuildType.MAIN])
+includeProject(":graphics:graphics-core", [BuildType.MAIN])
includeProject(":hilt:hilt-common", [BuildType.MAIN])
includeProject(":hilt:hilt-compiler", [BuildType.MAIN])
includeProject(":hilt:hilt-navigation", [BuildType.MAIN, BuildType.COMPOSE])
@@ -905,7 +907,7 @@
includeProject(":window:extensions:extensions", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
includeProject(":window:integration-tests:configuration-change-tests", [BuildType.MAIN])
includeProject(":window:sidecar:sidecar", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
-includeProject(":window:window-java", [BuildType.MAIN, BuildType.CAMERA])
+includeProject(":window:window-java", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
includeProject(":window:window-rxjava2", [BuildType.MAIN])
includeProject(":window:window-rxjava3", [BuildType.MAIN])
includeProject(":window:window-samples", [BuildType.MAIN, BuildType.COMPOSE, BuildType.FLAN, BuildType.CAMERA])
diff --git a/sharetarget/integration-tests/testapp/lint-baseline.xml b/sharetarget/integration-tests/testapp/lint-baseline.xml
index f77cc90..1e71b3e 100644
--- a/sharetarget/integration-tests/testapp/lint-baseline.xml
+++ b/sharetarget/integration-tests/testapp/lint-baseline.xml
@@ -16,7 +16,9 @@
errorLine1=" removeAllDirectShareTargets();"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/sharetarget/testapp/MainActivity.java"/>
+ file="src/main/java/androidx/sharetarget/testapp/MainActivity.java"
+ line="61"
+ column="21"/>
</issue>
<issue
@@ -25,7 +27,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/sharetarget/testapp/MainActivity.java"/>
+ file="src/main/java/androidx/sharetarget/testapp/MainActivity.java"
+ line="45"
+ column="29"/>
</issue>
<issue
@@ -34,7 +38,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/sharetarget/testapp/OtherTextConsumerActivity.java"/>
+ file="src/main/java/androidx/sharetarget/testapp/OtherTextConsumerActivity.java"
+ line="30"
+ column="29"/>
</issue>
<issue
@@ -43,7 +49,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/sharetarget/testapp/TextConsumerActivity.java"/>
+ file="src/main/java/androidx/sharetarget/testapp/TextConsumerActivity.java"
+ line="30"
+ column="29"/>
</issue>
</issues>
diff --git a/slice/slice-core/lint-baseline.xml b/slice/slice-core/lint-baseline.xml
index 3d75719..6b16971 100644
--- a/slice/slice-core/lint-baseline.xml
+++ b/slice/slice-core/lint-baseline.xml
@@ -187,7 +187,9 @@
errorLine1=" /**"
errorLine2=" ^">
<location
- file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+ line="160"
+ column="5"/>
</issue>
<issue
@@ -196,7 +198,9 @@
errorLine1=" return (int) h.getClass().getDeclaredMethod("getIdentifier").invoke(h);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceManagerWrapper.java"/>
+ file="src/main/java/androidx/slice/SliceManagerWrapper.java"
+ line="93"
+ column="26"/>
</issue>
<issue
@@ -205,7 +209,9 @@
errorLine1=" return SliceConvert.wrap(context.getSystemService(SliceManager.class)"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="644"
+ column="42"/>
</issue>
<issue
@@ -214,7 +220,9 @@
errorLine1=" .bindSlice(uri, unwrap(supportedSpecs)), context);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="645"
+ column="18"/>
</issue>
<issue
@@ -223,7 +231,9 @@
errorLine1=" mProvider.close();"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/compat/SliceProviderCompat.java"/>
+ file="src/main/java/androidx/slice/compat/SliceProviderCompat.java"
+ line="714"
+ column="27"/>
</issue>
<issue
@@ -232,7 +242,9 @@
errorLine1=" @NonNull Slice s, @Nullable String subType) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="403"
+ column="35"/>
</issue>
<issue
@@ -241,7 +253,9 @@
errorLine1=" @Slice.SliceHint String[] hints) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="171"
+ column="13"/>
</issue>
<issue
@@ -250,7 +264,9 @@
errorLine1=" public CompatPermissionManager(Context context, String prefsName, int myUid,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+ line="53"
+ column="36"/>
</issue>
<issue
@@ -259,7 +275,9 @@
errorLine1=" public CompatPermissionManager(Context context, String prefsName, int myUid,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+ line="53"
+ column="53"/>
</issue>
<issue
@@ -268,7 +286,9 @@
errorLine1=" String[] autoGrantPermissions) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+ line="54"
+ column="13"/>
</issue>
<issue
@@ -277,7 +297,9 @@
errorLine1=" public int checkSlicePermission(Uri uri, int pid, int uid) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+ line="66"
+ column="37"/>
</issue>
<issue
@@ -286,7 +308,9 @@
errorLine1=" public void grantSlicePermission(Uri uri, String toPkg) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+ line="93"
+ column="38"/>
</issue>
<issue
@@ -295,7 +319,9 @@
errorLine1=" public void grantSlicePermission(Uri uri, String toPkg) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+ line="93"
+ column="47"/>
</issue>
<issue
@@ -304,7 +330,9 @@
errorLine1=" public void revokeSlicePermission(Uri uri, String toPkg) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+ line="100"
+ column="39"/>
</issue>
<issue
@@ -313,7 +341,9 @@
errorLine1=" public void revokeSlicePermission(Uri uri, String toPkg) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+ line="100"
+ column="48"/>
</issue>
<issue
@@ -322,7 +352,9 @@
errorLine1=" public String getKey() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+ line="141"
+ column="16"/>
</issue>
<issue
@@ -331,7 +363,9 @@
errorLine1=" public Set<String> toPersistable() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+ line="145"
+ column="16"/>
</issue>
<issue
@@ -340,7 +374,9 @@
errorLine1=" public boolean hasAccess(List<String> path) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPermissionManager.java"
+ line="153"
+ column="34"/>
</issue>
<issue
@@ -349,7 +385,9 @@
errorLine1=" public CompatPinnedList(Context context, String prefsName) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+ line="59"
+ column="29"/>
</issue>
<issue
@@ -358,7 +396,9 @@
errorLine1=" public CompatPinnedList(Context context, String prefsName) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+ line="59"
+ column="46"/>
</issue>
<issue
@@ -367,7 +407,9 @@
errorLine1=" public List<Uri> getPinnedSlices() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+ line="80"
+ column="12"/>
</issue>
<issue
@@ -376,7 +418,9 @@
errorLine1=" public synchronized ArraySet<SliceSpec> getSpecs(Uri uri) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+ line="100"
+ column="25"/>
</issue>
<issue
@@ -385,7 +429,9 @@
errorLine1=" public synchronized ArraySet<SliceSpec> getSpecs(Uri uri) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+ line="100"
+ column="54"/>
</issue>
<issue
@@ -394,7 +440,9 @@
errorLine1=" public synchronized boolean addPin(Uri uri, String pkg, Set<SliceSpec> specs) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+ line="147"
+ column="40"/>
</issue>
<issue
@@ -403,7 +451,9 @@
errorLine1=" public synchronized boolean addPin(Uri uri, String pkg, Set<SliceSpec> specs) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+ line="147"
+ column="49"/>
</issue>
<issue
@@ -412,7 +462,9 @@
errorLine1=" public synchronized boolean addPin(Uri uri, String pkg, Set<SliceSpec> specs) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+ line="147"
+ column="61"/>
</issue>
<issue
@@ -421,7 +473,9 @@
errorLine1=" public synchronized boolean removePin(Uri uri, String pkg) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+ line="164"
+ column="43"/>
</issue>
<issue
@@ -430,7 +484,9 @@
errorLine1=" public synchronized boolean removePin(Uri uri, String pkg) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/CompatPinnedList.java"/>
+ file="src/main/java/androidx/slice/compat/CompatPinnedList.java"
+ line="164"
+ column="52"/>
</issue>
<issue
@@ -439,7 +495,9 @@
errorLine1=" public Slice(Bundle in) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="189"
+ column="18"/>
</issue>
<issue
@@ -448,7 +506,9 @@
errorLine1=" public Bundle toBundle() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="208"
+ column="12"/>
</issue>
<issue
@@ -457,7 +517,9 @@
errorLine1=" public Uri getUri() {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="236"
+ column="12"/>
</issue>
<issue
@@ -466,7 +528,9 @@
errorLine1=" public List<SliceItem> getItems() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="243"
+ column="12"/>
</issue>
<issue
@@ -475,7 +539,9 @@
errorLine1=" public SliceItem[] getItemArray() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="252"
+ column="12"/>
</issue>
<issue
@@ -484,7 +550,9 @@
errorLine1=" public @SliceHint List<String> getHints() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="259"
+ column="23"/>
</issue>
<issue
@@ -493,7 +561,9 @@
errorLine1=" public @SliceHint String[] getHintArray() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="267"
+ column="23"/>
</issue>
<issue
@@ -502,7 +572,9 @@
errorLine1=" public boolean hasHint(@SliceHint String hint) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="275"
+ column="39"/>
</issue>
<issue
@@ -511,7 +583,9 @@
errorLine1=" public Builder setSpec(SliceSpec spec) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="343"
+ column="16"/>
</issue>
<issue
@@ -520,7 +594,9 @@
errorLine1=" public Builder setSpec(SliceSpec spec) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="343"
+ column="32"/>
</issue>
<issue
@@ -529,7 +605,9 @@
errorLine1=" public Builder addHints(@SliceHint String... hints) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="351"
+ column="16"/>
</issue>
<issue
@@ -538,7 +616,9 @@
errorLine1=" public Builder addHints(@SliceHint String... hints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="351"
+ column="44"/>
</issue>
<issue
@@ -547,7 +627,9 @@
errorLine1=" public Builder addHints(@SliceHint List<String> hints) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="359"
+ column="16"/>
</issue>
<issue
@@ -556,7 +638,9 @@
errorLine1=" public Builder addHints(@SliceHint List<String> hints) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="359"
+ column="44"/>
</issue>
<issue
@@ -565,7 +649,9 @@
errorLine1=" public Builder addSubSlice(@NonNull Slice slice) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="366"
+ column="16"/>
</issue>
<issue
@@ -574,7 +660,9 @@
errorLine1=" public Builder addSubSlice(@NonNull Slice slice, String subType) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="376"
+ column="16"/>
</issue>
<issue
@@ -583,7 +671,9 @@
errorLine1=" public Builder addSubSlice(@NonNull Slice slice, String subType) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="376"
+ column="58"/>
</issue>
<issue
@@ -592,7 +682,9 @@
errorLine1=" public Slice.Builder addAction(@NonNull PendingIntent action,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="387"
+ column="16"/>
</issue>
<issue
@@ -601,7 +693,9 @@
errorLine1=" public Slice.Builder addAction(@NonNull SliceItem.ActionHandler action,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="402"
+ column="16"/>
</issue>
<issue
@@ -610,7 +704,9 @@
errorLine1=" public Builder addText(CharSequence text, @Nullable String subType,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="415"
+ column="16"/>
</issue>
<issue
@@ -619,7 +715,9 @@
errorLine1=" public Builder addText(CharSequence text, @Nullable String subType,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="415"
+ column="32"/>
</issue>
<issue
@@ -628,7 +726,9 @@
errorLine1=" @SliceHint String... hints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="416"
+ column="28"/>
</issue>
<issue
@@ -637,7 +737,9 @@
errorLine1=" public Builder addText(CharSequence text, @Nullable String subType,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="426"
+ column="16"/>
</issue>
<issue
@@ -646,7 +748,9 @@
errorLine1=" public Builder addText(CharSequence text, @Nullable String subType,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="426"
+ column="32"/>
</issue>
<issue
@@ -655,7 +759,9 @@
errorLine1=" @SliceHint List<String> hints) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="427"
+ column="28"/>
</issue>
<issue
@@ -664,7 +770,9 @@
errorLine1=" public Builder addIcon(IconCompat icon, @Nullable String subType,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="436"
+ column="16"/>
</issue>
<issue
@@ -673,7 +781,9 @@
errorLine1=" public Builder addIcon(IconCompat icon, @Nullable String subType,"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="436"
+ column="32"/>
</issue>
<issue
@@ -682,7 +792,9 @@
errorLine1=" @SliceHint String... hints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="437"
+ column="28"/>
</issue>
<issue
@@ -691,7 +803,9 @@
errorLine1=" public Builder addIcon(IconCompat icon, @Nullable String subType,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="450"
+ column="16"/>
</issue>
<issue
@@ -700,7 +814,9 @@
errorLine1=" public Builder addIcon(IconCompat icon, @Nullable String subType,"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="450"
+ column="32"/>
</issue>
<issue
@@ -709,7 +825,9 @@
errorLine1=" @SliceHint List<String> hints) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="451"
+ column="28"/>
</issue>
<issue
@@ -718,7 +836,9 @@
errorLine1=" public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="466"
+ column="16"/>
</issue>
<issue
@@ -727,7 +847,9 @@
errorLine1=" public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="466"
+ column="45"/>
</issue>
<issue
@@ -736,7 +858,9 @@
errorLine1=" @SliceHint List<String> hints) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="467"
+ column="28"/>
</issue>
<issue
@@ -745,7 +869,9 @@
errorLine1=" public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="479"
+ column="16"/>
</issue>
<issue
@@ -754,7 +880,9 @@
errorLine1=" public Slice.Builder addRemoteInput(RemoteInput remoteInput, @Nullable String subType,"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="479"
+ column="45"/>
</issue>
<issue
@@ -763,7 +891,9 @@
errorLine1=" @SliceHint String... hints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="480"
+ column="28"/>
</issue>
<issue
@@ -772,7 +902,9 @@
errorLine1=" public Builder addInt(int value, @Nullable String subType,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="491"
+ column="16"/>
</issue>
<issue
@@ -781,7 +913,9 @@
errorLine1=" @SliceHint String... hints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="492"
+ column="28"/>
</issue>
<issue
@@ -790,7 +924,9 @@
errorLine1=" public Builder addInt(int value, @Nullable String subType,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="503"
+ column="16"/>
</issue>
<issue
@@ -799,7 +935,9 @@
errorLine1=" @SliceHint List<String> hints) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="504"
+ column="28"/>
</issue>
<issue
@@ -808,7 +946,9 @@
errorLine1=" public Slice.Builder addLong(long time, @Nullable String subType,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="513"
+ column="16"/>
</issue>
<issue
@@ -817,7 +957,9 @@
errorLine1=" @SliceHint String... hints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="514"
+ column="28"/>
</issue>
<issue
@@ -826,7 +968,9 @@
errorLine1=" public Slice.Builder addLong(long time, @Nullable String subType,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="524"
+ column="16"/>
</issue>
<issue
@@ -835,7 +979,9 @@
errorLine1=" @SliceHint List<String> hints) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="525"
+ column="28"/>
</issue>
<issue
@@ -844,7 +990,9 @@
errorLine1=" public Slice.Builder addTimestamp(long time, @Nullable String subType,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="547"
+ column="16"/>
</issue>
<issue
@@ -853,7 +1001,9 @@
errorLine1=" @SliceHint List<String> hints) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="548"
+ column="28"/>
</issue>
<issue
@@ -862,7 +1012,9 @@
errorLine1=" public Slice.Builder addItem(SliceItem item) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="557"
+ column="16"/>
</issue>
<issue
@@ -871,7 +1023,9 @@
errorLine1=" public Slice.Builder addItem(SliceItem item) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="557"
+ column="38"/>
</issue>
<issue
@@ -880,7 +1034,9 @@
errorLine1=" public Slice build() {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="565"
+ column="16"/>
</issue>
<issue
@@ -889,7 +1045,9 @@
errorLine1=" public String toString(String indent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="583"
+ column="12"/>
</issue>
<issue
@@ -898,7 +1056,9 @@
errorLine1=" public String toString(String indent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="583"
+ column="28"/>
</issue>
<issue
@@ -907,7 +1067,9 @@
errorLine1=" public static void appendHints(StringBuilder sb, String[] hints) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="608"
+ column="36"/>
</issue>
<issue
@@ -916,7 +1078,9 @@
errorLine1=" public static void appendHints(StringBuilder sb, String[] hints) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="608"
+ column="54"/>
</issue>
<issue
@@ -925,7 +1089,9 @@
errorLine1=" public static Slice bindSlice(Context context, @NonNull Uri uri,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="632"
+ column="35"/>
</issue>
<issue
@@ -934,7 +1100,9 @@
errorLine1=" Set<SliceSpec> supportedSpecs) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/Slice.java"/>
+ file="src/main/java/androidx/slice/Slice.java"
+ line="633"
+ column="13"/>
</issue>
<issue
@@ -943,7 +1111,9 @@
errorLine1=" SliceAction setChecked(boolean isChecked);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceAction.java"/>
+ file="src/main/java/androidx/slice/core/SliceAction.java"
+ line="43"
+ column="5"/>
</issue>
<issue
@@ -952,7 +1122,9 @@
errorLine1=" SliceAction setPriority(@IntRange(from = 0) int priority);"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceAction.java"/>
+ file="src/main/java/androidx/slice/core/SliceAction.java"
+ line="48"
+ column="5"/>
</issue>
<issue
@@ -961,7 +1133,9 @@
errorLine1=" public SliceActionImpl(SliceItem slice) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
+ file="src/main/java/androidx/slice/core/SliceActionImpl.java"
+ line="188"
+ column="28"/>
</issue>
<issue
@@ -970,7 +1144,9 @@
errorLine1=" public SliceActionImpl setChecked(boolean isChecked) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
+ file="src/main/java/androidx/slice/core/SliceActionImpl.java"
+ line="266"
+ column="12"/>
</issue>
<issue
@@ -979,7 +1155,9 @@
errorLine1=" public SliceActionImpl setPriority(@IntRange(from = 0) int priority) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
+ file="src/main/java/androidx/slice/core/SliceActionImpl.java"
+ line="275"
+ column="12"/>
</issue>
<issue
@@ -988,7 +1166,9 @@
errorLine1=" public SliceItem getActionItem() {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceActionImpl.java"/>
+ file="src/main/java/androidx/slice/core/SliceActionImpl.java"
+ line="303"
+ column="12"/>
</issue>
<issue
@@ -997,7 +1177,9 @@
errorLine1=" public static android.app.slice.Slice unwrap(androidx.slice.Slice slice) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceConvert.java"/>
+ file="src/main/java/androidx/slice/SliceConvert.java"
+ line="53"
+ column="19"/>
</issue>
<issue
@@ -1006,7 +1188,9 @@
errorLine1=" public static android.app.slice.Slice unwrap(androidx.slice.Slice slice) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceConvert.java"/>
+ file="src/main/java/androidx/slice/SliceConvert.java"
+ line="53"
+ column="50"/>
</issue>
<issue
@@ -1015,7 +1199,9 @@
errorLine1=" public static androidx.slice.Slice wrap(android.app.slice.Slice slice, Context context) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceConvert.java"/>
+ file="src/main/java/androidx/slice/SliceConvert.java"
+ line="110"
+ column="19"/>
</issue>
<issue
@@ -1024,7 +1210,9 @@
errorLine1=" public static androidx.slice.Slice wrap(android.app.slice.Slice slice, Context context) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceConvert.java"/>
+ file="src/main/java/androidx/slice/SliceConvert.java"
+ line="110"
+ column="45"/>
</issue>
<issue
@@ -1033,7 +1221,9 @@
errorLine1=" public static androidx.slice.Slice wrap(android.app.slice.Slice slice, Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceConvert.java"/>
+ file="src/main/java/androidx/slice/SliceConvert.java"
+ line="110"
+ column="76"/>
</issue>
<issue
@@ -1042,7 +1232,9 @@
errorLine1=" public static Set<androidx.slice.SliceSpec> wrap("
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceConvert.java"/>
+ file="src/main/java/androidx/slice/SliceConvert.java"
+ line="166"
+ column="19"/>
</issue>
<issue
@@ -1051,7 +1243,9 @@
errorLine1=" Set<android.app.slice.SliceSpec> supportedSpecs) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceConvert.java"/>
+ file="src/main/java/androidx/slice/SliceConvert.java"
+ line="167"
+ column="13"/>
</issue>
<issue
@@ -1060,7 +1254,9 @@
errorLine1=" protected @Slice.SliceHint String[] mHints = Slice.NO_HINTS;"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="115"
+ column="32"/>
</issue>
<issue
@@ -1069,7 +1265,9 @@
errorLine1=" public SliceItem(Object obj, @SliceType String format, String subType,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="132"
+ column="22"/>
</issue>
<issue
@@ -1078,7 +1276,9 @@
errorLine1=" public SliceItem(Object obj, @SliceType String format, String subType,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="132"
+ column="45"/>
</issue>
<issue
@@ -1087,7 +1287,9 @@
errorLine1=" public SliceItem(Object obj, @SliceType String format, String subType,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="132"
+ column="60"/>
</issue>
<issue
@@ -1096,7 +1298,9 @@
errorLine1=" @Slice.SliceHint String[] hints) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="133"
+ column="30"/>
</issue>
<issue
@@ -1105,7 +1309,9 @@
errorLine1=" public SliceItem(Object obj, @SliceType String format, String subType,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="144"
+ column="22"/>
</issue>
<issue
@@ -1114,7 +1320,9 @@
errorLine1=" public SliceItem(Object obj, @SliceType String format, String subType,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="144"
+ column="45"/>
</issue>
<issue
@@ -1123,7 +1331,9 @@
errorLine1=" public SliceItem(Object obj, @SliceType String format, String subType,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="144"
+ column="60"/>
</issue>
<issue
@@ -1132,7 +1342,9 @@
errorLine1=" @Slice.SliceHint List<String> hints) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="145"
+ column="30"/>
</issue>
<issue
@@ -1141,7 +1353,9 @@
errorLine1=" public SliceItem(PendingIntent intent, Slice slice, String format, String subType,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="161"
+ column="22"/>
</issue>
<issue
@@ -1150,7 +1364,9 @@
errorLine1=" public SliceItem(PendingIntent intent, Slice slice, String format, String subType,"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="161"
+ column="44"/>
</issue>
<issue
@@ -1159,7 +1375,9 @@
errorLine1=" public SliceItem(PendingIntent intent, Slice slice, String format, String subType,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="161"
+ column="57"/>
</issue>
<issue
@@ -1168,7 +1386,9 @@
errorLine1=" public SliceItem(PendingIntent intent, Slice slice, String format, String subType,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="161"
+ column="72"/>
</issue>
<issue
@@ -1177,7 +1397,9 @@
errorLine1=" @Slice.SliceHint String[] hints) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="162"
+ column="30"/>
</issue>
<issue
@@ -1186,7 +1408,9 @@
errorLine1=" public SliceItem(ActionHandler action, Slice slice, String format, String subType,"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="170"
+ column="22"/>
</issue>
<issue
@@ -1195,7 +1419,9 @@
errorLine1=" public SliceItem(ActionHandler action, Slice slice, String format, String subType,"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="170"
+ column="44"/>
</issue>
<issue
@@ -1204,7 +1430,9 @@
errorLine1=" public SliceItem(ActionHandler action, Slice slice, String format, String subType,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="170"
+ column="57"/>
</issue>
<issue
@@ -1213,7 +1441,9 @@
errorLine1=" public SliceItem(ActionHandler action, Slice slice, String format, String subType,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="170"
+ column="72"/>
</issue>
<issue
@@ -1222,7 +1452,9 @@
errorLine1=" @Slice.SliceHint String[] hints) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="171"
+ column="30"/>
</issue>
<issue
@@ -1231,7 +1463,9 @@
errorLine1=" public void addHint(@Slice.SliceHint String hint) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="196"
+ column="42"/>
</issue>
<issue
@@ -1240,7 +1474,9 @@
errorLine1=" public @SliceType String getFormat() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="215"
+ column="23"/>
</issue>
<issue
@@ -1249,7 +1485,9 @@
errorLine1=" public String getSubType() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="228"
+ column="12"/>
</issue>
<issue
@@ -1258,7 +1496,9 @@
errorLine1=" public CharSequence getText() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="235"
+ column="12"/>
</issue>
<issue
@@ -1267,7 +1507,9 @@
errorLine1=" public CharSequence getSanitizedText() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="245"
+ column="12"/>
</issue>
<issue
@@ -1276,7 +1518,9 @@
errorLine1=" public IconCompat getIcon() {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="264"
+ column="12"/>
</issue>
<issue
@@ -1285,7 +1529,9 @@
errorLine1=" public PendingIntent getAction() {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="273"
+ column="12"/>
</issue>
<issue
@@ -1294,7 +1540,9 @@
errorLine1=" public RemoteInput getRemoteInput() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="315"
+ column="12"/>
</issue>
<issue
@@ -1303,7 +1551,9 @@
errorLine1=" public Slice getSlice() {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="331"
+ column="12"/>
</issue>
<issue
@@ -1312,7 +1562,9 @@
errorLine1=" public boolean hasHint(@Slice.SliceHint String hint) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="350"
+ column="45"/>
</issue>
<issue
@@ -1321,7 +1573,9 @@
errorLine1=" public SliceItem(Bundle in) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="358"
+ column="22"/>
</issue>
<issue
@@ -1330,7 +1584,9 @@
errorLine1=" public Bundle toBundle() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="370"
+ column="12"/>
</issue>
<issue
@@ -1339,7 +1595,9 @@
errorLine1=" public boolean hasHints(@Slice.SliceHint String[] hints) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="383"
+ column="46"/>
</issue>
<issue
@@ -1348,7 +1606,9 @@
errorLine1=" public boolean hasAnyHints(@Slice.SliceHint String... hints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="397"
+ column="49"/>
</issue>
<issue
@@ -1357,7 +1617,9 @@
errorLine1=" public static String typeToString(String format) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="466"
+ column="19"/>
</issue>
<issue
@@ -1366,7 +1628,9 @@
errorLine1=" public static String typeToString(String format) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="466"
+ column="39"/>
</issue>
<issue
@@ -1375,7 +1639,9 @@
errorLine1=" public String toString(String indent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="500"
+ column="12"/>
</issue>
<issue
@@ -1384,7 +1650,9 @@
errorLine1=" public String toString(String indent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="500"
+ column="28"/>
</issue>
<issue
@@ -1393,7 +1661,9 @@
errorLine1=" void onAction(SliceItem item, Context context, Intent intent);"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="715"
+ column="23"/>
</issue>
<issue
@@ -1402,7 +1672,9 @@
errorLine1=" void onAction(SliceItem item, Context context, Intent intent);"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="715"
+ column="39"/>
</issue>
<issue
@@ -1411,7 +1683,9 @@
errorLine1=" void onAction(SliceItem item, Context context, Intent intent);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItem.java"/>
+ file="src/main/java/androidx/slice/SliceItem.java"
+ line="715"
+ column="56"/>
</issue>
<issue
@@ -1420,7 +1694,9 @@
errorLine1=" public static HolderHandler sHandler;"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+ file="src/main/java/androidx/slice/SliceItemHolder.java"
+ line="54"
+ column="19"/>
</issue>
<issue
@@ -1429,7 +1705,9 @@
errorLine1=" public VersionedParcelable mVersionedParcelable = null;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+ file="src/main/java/androidx/slice/SliceItemHolder.java"
+ line="58"
+ column="12"/>
</issue>
<issue
@@ -1438,7 +1716,9 @@
errorLine1=" public SliceItemHolder(String format, Object mObj, boolean isStream) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+ file="src/main/java/androidx/slice/SliceItemHolder.java"
+ line="89"
+ column="28"/>
</issue>
<issue
@@ -1447,7 +1727,9 @@
errorLine1=" public SliceItemHolder(String format, Object mObj, boolean isStream) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+ file="src/main/java/androidx/slice/SliceItemHolder.java"
+ line="89"
+ column="43"/>
</issue>
<issue
@@ -1456,7 +1738,9 @@
errorLine1=" public Object getObj(String format) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+ file="src/main/java/androidx/slice/SliceItemHolder.java"
+ line="128"
+ column="12"/>
</issue>
<issue
@@ -1465,7 +1749,9 @@
errorLine1=" public Object getObj(String format) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+ file="src/main/java/androidx/slice/SliceItemHolder.java"
+ line="128"
+ column="26"/>
</issue>
<issue
@@ -1474,7 +1760,9 @@
errorLine1=" void handle(SliceItemHolder holder, String format);"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+ file="src/main/java/androidx/slice/SliceItemHolder.java"
+ line="162"
+ column="21"/>
</issue>
<issue
@@ -1483,7 +1771,9 @@
errorLine1=" void handle(SliceItemHolder holder, String format);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+ file="src/main/java/androidx/slice/SliceItemHolder.java"
+ line="162"
+ column="45"/>
</issue>
<issue
@@ -1492,7 +1782,9 @@
errorLine1=" public SliceItemHolder get() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+ file="src/main/java/androidx/slice/SliceItemHolder.java"
+ line="175"
+ column="16"/>
</issue>
<issue
@@ -1501,7 +1793,9 @@
errorLine1=" public void release(SliceItemHolder sliceItemHolder) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceItemHolder.java"/>
+ file="src/main/java/androidx/slice/SliceItemHolder.java"
+ line="185"
+ column="29"/>
</issue>
<issue
@@ -1510,7 +1804,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/SlicePermissionActivity.java"/>
+ file="src/main/java/androidx/slice/compat/SlicePermissionActivity.java"
+ line="60"
+ column="29"/>
</issue>
<issue
@@ -1519,7 +1815,9 @@
errorLine1=" public SliceProviderWrapper(androidx.slice.SliceProvider provider,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+ file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+ line="64"
+ column="37"/>
</issue>
<issue
@@ -1528,7 +1826,9 @@
errorLine1=" String[] autoGrantPermissions) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+ file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+ line="65"
+ column="17"/>
</issue>
<issue
@@ -1537,7 +1837,9 @@
errorLine1=" public PendingIntent onCreatePermissionRequest(Uri sliceUri) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+ file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+ line="85"
+ column="16"/>
</issue>
<issue
@@ -1546,7 +1848,9 @@
errorLine1=" public Bundle call(String method, String arg, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+ file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+ line="99"
+ column="16"/>
</issue>
<issue
@@ -1555,7 +1859,9 @@
errorLine1=" public Bundle call(String method, String arg, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+ file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+ line="99"
+ column="28"/>
</issue>
<issue
@@ -1564,7 +1870,9 @@
errorLine1=" public Bundle call(String method, String arg, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+ file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+ line="99"
+ column="43"/>
</issue>
<issue
@@ -1573,7 +1881,9 @@
errorLine1=" public Bundle call(String method, String arg, Bundle extras) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+ file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+ line="99"
+ column="55"/>
</issue>
<issue
@@ -1582,7 +1892,9 @@
errorLine1=" public Collection<Uri> onGetSliceDescendants(Uri uri) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+ file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+ line="165"
+ column="16"/>
</issue>
<issue
@@ -1591,7 +1903,9 @@
errorLine1=" public Collection<Uri> onGetSliceDescendants(Uri uri) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"/>
+ file="src/main/java/androidx/slice/compat/SliceProviderWrapperContainer.java"
+ line="165"
+ column="54"/>
</issue>
<issue
@@ -1600,7 +1914,9 @@
errorLine1=" public static boolean hasAnyHints(SliceItem item, String... hints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="46"
+ column="39"/>
</issue>
<issue
@@ -1609,7 +1925,9 @@
errorLine1=" public static boolean hasAnyHints(SliceItem item, String... hints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="46"
+ column="55"/>
</issue>
<issue
@@ -1618,7 +1936,9 @@
errorLine1=" public static boolean hasHints(SliceItem item, String... hints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="58"
+ column="36"/>
</issue>
<issue
@@ -1627,7 +1947,9 @@
errorLine1=" public static boolean hasHints(SliceItem item, String... hints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="58"
+ column="52"/>
</issue>
<issue
@@ -1636,7 +1958,9 @@
errorLine1=" public static boolean hasHints(Slice item, String... hints) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="70"
+ column="36"/>
</issue>
<issue
@@ -1645,7 +1969,9 @@
errorLine1=" public static boolean hasHints(Slice item, String... hints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="70"
+ column="48"/>
</issue>
<issue
@@ -1654,7 +1980,9 @@
errorLine1=" public static SliceItem findNotContaining(SliceItem container, List<SliceItem> list) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="82"
+ column="19"/>
</issue>
<issue
@@ -1663,7 +1991,9 @@
errorLine1=" public static SliceItem findNotContaining(SliceItem container, List<SliceItem> list) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="82"
+ column="47"/>
</issue>
<issue
@@ -1672,7 +2002,9 @@
errorLine1=" public static SliceItem findNotContaining(SliceItem container, List<SliceItem> list) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="82"
+ column="68"/>
</issue>
<issue
@@ -1681,7 +2013,9 @@
errorLine1=" public static List<SliceItem> findAll(SliceItem s, String format) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="107"
+ column="19"/>
</issue>
<issue
@@ -1690,7 +2024,9 @@
errorLine1=" public static List<SliceItem> findAll(SliceItem s, String format) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="107"
+ column="43"/>
</issue>
<issue
@@ -1699,7 +2035,9 @@
errorLine1=" public static List<SliceItem> findAll(SliceItem s, String format) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="107"
+ column="56"/>
</issue>
<issue
@@ -1708,7 +2046,9 @@
errorLine1=" public static List<SliceItem> findAll(Slice s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="113"
+ column="19"/>
</issue>
<issue
@@ -1717,7 +2057,9 @@
errorLine1=" public static List<SliceItem> findAll(Slice s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="113"
+ column="43"/>
</issue>
<issue
@@ -1726,7 +2068,9 @@
errorLine1=" public static List<SliceItem> findAll(Slice s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="113"
+ column="52"/>
</issue>
<issue
@@ -1735,7 +2079,9 @@
errorLine1=" public static List<SliceItem> findAll(Slice s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="113"
+ column="67"/>
</issue>
<issue
@@ -1744,7 +2090,9 @@
errorLine1=" public static List<SliceItem> findAll(Slice s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="113"
+ column="81"/>
</issue>
<issue
@@ -1753,7 +2101,9 @@
errorLine1=" public static List<SliceItem> findAll(SliceItem s, String format, String hints,"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="119"
+ column="19"/>
</issue>
<issue
@@ -1762,7 +2112,9 @@
errorLine1=" public static List<SliceItem> findAll(SliceItem s, String format, String hints,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="119"
+ column="43"/>
</issue>
<issue
@@ -1771,7 +2123,9 @@
errorLine1=" public static List<SliceItem> findAll(SliceItem s, String format, String hints,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="119"
+ column="56"/>
</issue>
<issue
@@ -1780,7 +2134,9 @@
errorLine1=" public static List<SliceItem> findAll(SliceItem s, String format, String hints,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="119"
+ column="71"/>
</issue>
<issue
@@ -1789,7 +2145,9 @@
errorLine1=" String nonHints) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="120"
+ column="13"/>
</issue>
<issue
@@ -1798,7 +2156,9 @@
errorLine1=" public static List<SliceItem> findAll(Slice s, final String format, final String[] hints,"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="126"
+ column="19"/>
</issue>
<issue
@@ -1807,7 +2167,9 @@
errorLine1=" public static List<SliceItem> findAll(Slice s, final String format, final String[] hints,"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="126"
+ column="43"/>
</issue>
<issue
@@ -1816,7 +2178,9 @@
errorLine1=" public static List<SliceItem> findAll(Slice s, final String format, final String[] hints,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="126"
+ column="58"/>
</issue>
<issue
@@ -1825,7 +2189,9 @@
errorLine1=" public static List<SliceItem> findAll(Slice s, final String format, final String[] hints,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="126"
+ column="79"/>
</issue>
<issue
@@ -1834,7 +2200,9 @@
errorLine1=" final String[] nonHints) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="127"
+ column="19"/>
</issue>
<issue
@@ -1843,7 +2211,9 @@
errorLine1=" public static List<SliceItem> findAll(SliceItem s, final String format, final String[] hints,"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="141"
+ column="19"/>
</issue>
<issue
@@ -1852,7 +2222,9 @@
errorLine1=" public static List<SliceItem> findAll(SliceItem s, final String format, final String[] hints,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="141"
+ column="43"/>
</issue>
<issue
@@ -1861,7 +2233,9 @@
errorLine1=" public static List<SliceItem> findAll(SliceItem s, final String format, final String[] hints,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="141"
+ column="62"/>
</issue>
<issue
@@ -1870,7 +2244,9 @@
errorLine1=" public static List<SliceItem> findAll(SliceItem s, final String format, final String[] hints,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="141"
+ column="83"/>
</issue>
<issue
@@ -1879,7 +2255,9 @@
errorLine1=" final String[] nonHints) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="142"
+ column="19"/>
</issue>
<issue
@@ -1888,7 +2266,9 @@
errorLine1=" public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="156"
+ column="19"/>
</issue>
<issue
@@ -1897,7 +2277,9 @@
errorLine1=" public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="156"
+ column="34"/>
</issue>
<issue
@@ -1906,7 +2288,9 @@
errorLine1=" public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="156"
+ column="43"/>
</issue>
<issue
@@ -1915,7 +2299,9 @@
errorLine1=" public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="156"
+ column="58"/>
</issue>
<issue
@@ -1924,7 +2310,9 @@
errorLine1=" public static SliceItem find(Slice s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="156"
+ column="72"/>
</issue>
<issue
@@ -1933,7 +2321,9 @@
errorLine1=" public static SliceItem find(Slice s, String format) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="162"
+ column="19"/>
</issue>
<issue
@@ -1942,7 +2332,9 @@
errorLine1=" public static SliceItem find(Slice s, String format) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="162"
+ column="34"/>
</issue>
<issue
@@ -1951,7 +2343,9 @@
errorLine1=" public static SliceItem find(Slice s, String format) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="162"
+ column="43"/>
</issue>
<issue
@@ -1960,7 +2354,9 @@
errorLine1=" public static SliceItem find(SliceItem s, String format) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="168"
+ column="19"/>
</issue>
<issue
@@ -1969,7 +2365,9 @@
errorLine1=" public static SliceItem find(SliceItem s, String format) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="168"
+ column="34"/>
</issue>
<issue
@@ -1978,7 +2376,9 @@
errorLine1=" public static SliceItem find(SliceItem s, String format) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="168"
+ column="47"/>
</issue>
<issue
@@ -1987,7 +2387,9 @@
errorLine1=" public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="174"
+ column="19"/>
</issue>
<issue
@@ -1996,7 +2398,9 @@
errorLine1=" public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="174"
+ column="34"/>
</issue>
<issue
@@ -2005,7 +2409,9 @@
errorLine1=" public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="174"
+ column="47"/>
</issue>
<issue
@@ -2014,7 +2420,9 @@
errorLine1=" public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="174"
+ column="62"/>
</issue>
<issue
@@ -2023,7 +2431,9 @@
errorLine1=" public static SliceItem find(SliceItem s, String format, String hints, String nonHints) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="174"
+ column="76"/>
</issue>
<issue
@@ -2032,7 +2442,9 @@
errorLine1=" public static SliceItem find(Slice s, final String format, final String[] hints,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="180"
+ column="19"/>
</issue>
<issue
@@ -2041,7 +2453,9 @@
errorLine1=" public static SliceItem find(Slice s, final String format, final String[] hints,"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="180"
+ column="34"/>
</issue>
<issue
@@ -2050,7 +2464,9 @@
errorLine1=" public static SliceItem find(Slice s, final String format, final String[] hints,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="180"
+ column="49"/>
</issue>
<issue
@@ -2059,7 +2475,9 @@
errorLine1=" public static SliceItem find(Slice s, final String format, final String[] hints,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="180"
+ column="70"/>
</issue>
<issue
@@ -2068,7 +2486,9 @@
errorLine1=" final String[] nonHints) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="181"
+ column="19"/>
</issue>
<issue
@@ -2077,7 +2497,9 @@
errorLine1=" public static SliceItem findSubtype(Slice s, final String format, final String subtype) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="194"
+ column="19"/>
</issue>
<issue
@@ -2086,7 +2508,9 @@
errorLine1=" public static SliceItem findSubtype(Slice s, final String format, final String subtype) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="194"
+ column="41"/>
</issue>
<issue
@@ -2095,7 +2519,9 @@
errorLine1=" public static SliceItem findSubtype(Slice s, final String format, final String subtype) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="194"
+ column="56"/>
</issue>
<issue
@@ -2104,7 +2530,9 @@
errorLine1=" public static SliceItem findSubtype(Slice s, final String format, final String subtype) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="194"
+ column="77"/>
</issue>
<issue
@@ -2113,7 +2541,9 @@
errorLine1=" public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="206"
+ column="19"/>
</issue>
<issue
@@ -2122,7 +2552,9 @@
errorLine1=" public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="206"
+ column="41"/>
</issue>
<issue
@@ -2131,7 +2563,9 @@
errorLine1=" public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="206"
+ column="60"/>
</issue>
<issue
@@ -2140,7 +2574,9 @@
errorLine1=" public static SliceItem findSubtype(SliceItem s, final String format, final String subtype) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="206"
+ column="81"/>
</issue>
<issue
@@ -2149,7 +2585,9 @@
errorLine1=" public static SliceItem find(SliceItem s, final String format, final String[] hints,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="218"
+ column="19"/>
</issue>
<issue
@@ -2158,7 +2596,9 @@
errorLine1=" public static SliceItem find(SliceItem s, final String format, final String[] hints,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="218"
+ column="34"/>
</issue>
<issue
@@ -2167,7 +2607,9 @@
errorLine1=" public static SliceItem find(SliceItem s, final String format, final String[] hints,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="218"
+ column="53"/>
</issue>
<issue
@@ -2176,7 +2618,9 @@
errorLine1=" public static SliceItem find(SliceItem s, final String format, final String[] hints,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="218"
+ column="74"/>
</issue>
<issue
@@ -2185,7 +2629,9 @@
errorLine1=" final String[] nonHints) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="219"
+ column="19"/>
</issue>
<issue
@@ -2194,7 +2640,9 @@
errorLine1=" public static SliceItem findTopLevelItem(Slice s, final String format, final String subtype,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="283"
+ column="19"/>
</issue>
<issue
@@ -2203,7 +2651,9 @@
errorLine1=" public static SliceItem findTopLevelItem(Slice s, final String format, final String subtype,"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="283"
+ column="46"/>
</issue>
<issue
@@ -2212,7 +2662,9 @@
errorLine1=" public static SliceItem findTopLevelItem(Slice s, final String format, final String subtype,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="283"
+ column="61"/>
</issue>
<issue
@@ -2221,7 +2673,9 @@
errorLine1=" public static SliceItem findTopLevelItem(Slice s, final String format, final String subtype,"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="283"
+ column="82"/>
</issue>
<issue
@@ -2230,7 +2684,9 @@
errorLine1=" final String[] hints, final String[] nonHints) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="284"
+ column="19"/>
</issue>
<issue
@@ -2239,7 +2695,9 @@
errorLine1=" final String[] hints, final String[] nonHints) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="284"
+ column="41"/>
</issue>
<issue
@@ -2248,7 +2706,9 @@
errorLine1=" public static SliceItem findItem(Slice s, final Uri uri) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="302"
+ column="19"/>
</issue>
<issue
@@ -2257,7 +2717,9 @@
errorLine1=" public static SliceItem findItem(Slice s, final Uri uri) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="302"
+ column="38"/>
</issue>
<issue
@@ -2266,7 +2728,9 @@
errorLine1=" public static SliceItem findItem(Slice s, final Uri uri) {"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/slice/core/SliceQuery.java"/>
+ file="src/main/java/androidx/slice/core/SliceQuery.java"
+ line="302"
+ column="53"/>
</issue>
<issue
@@ -2275,7 +2739,9 @@
errorLine1=" public String getType() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceSpec.java"/>
+ file="src/main/java/androidx/slice/SliceSpec.java"
+ line="72"
+ column="12"/>
</issue>
</issues>
diff --git a/slice/slice-view/lint-baseline.xml b/slice/slice-view/lint-baseline.xml
index fc94cc9..6a92e7c 100644
--- a/slice/slice-view/lint-baseline.xml
+++ b/slice/slice-view/lint-baseline.xml
@@ -241,7 +241,9 @@
errorLine1=" public static void trackInputFocused(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
+ file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"
+ line="116"
+ column="42"/>
</issue>
<issue
@@ -250,7 +252,9 @@
errorLine1=" public static void trackA11yFocus(ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"/>
+ file="src/main/java/androidx/slice/widget/LocationBasedViewTracker.java"
+ line="128"
+ column="39"/>
</issue>
<issue
@@ -259,7 +263,9 @@
errorLine1=" public MessageView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/MessageView.java"/>
+ file="src/main/java/androidx/slice/widget/MessageView.java"
+ line="49"
+ column="24"/>
</issue>
<issue
@@ -268,7 +274,9 @@
errorLine1=" public void setSliceItem(SliceContent content, boolean isHeader, int index,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/MessageView.java"/>
+ file="src/main/java/androidx/slice/widget/MessageView.java"
+ line="71"
+ column="30"/>
</issue>
<issue
@@ -277,7 +285,9 @@
errorLine1=" int rowCount, SliceView.OnSliceActionListener observer) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/MessageView.java"/>
+ file="src/main/java/androidx/slice/widget/MessageView.java"
+ line="72"
+ column="27"/>
</issue>
<issue
@@ -286,7 +296,9 @@
errorLine1=" public RemoteInputView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+ file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+ line="88"
+ column="28"/>
</issue>
<issue
@@ -295,7 +307,9 @@
errorLine1=" public RemoteInputView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+ file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+ line="88"
+ column="45"/>
</issue>
<issue
@@ -304,7 +318,9 @@
errorLine1=" public static RemoteInputView inflate(Context context, ViewGroup root) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+ file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+ line="163"
+ column="19"/>
</issue>
<issue
@@ -313,7 +329,9 @@
errorLine1=" public static RemoteInputView inflate(Context context, ViewGroup root) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+ file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+ line="163"
+ column="43"/>
</issue>
<issue
@@ -322,7 +340,9 @@
errorLine1=" public static RemoteInputView inflate(Context context, ViewGroup root) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+ file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+ line="163"
+ column="60"/>
</issue>
<issue
@@ -331,7 +351,9 @@
errorLine1=" public void setAction(SliceItem action) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+ file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+ line="192"
+ column="27"/>
</issue>
<issue
@@ -340,7 +362,9 @@
errorLine1=" public void setRemoteInput(RemoteInput[] remoteInputs, RemoteInput remoteInput) {"
errorLine2=" ~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+ file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+ line="199"
+ column="32"/>
</issue>
<issue
@@ -349,7 +373,9 @@
errorLine1=" public void setRemoteInput(RemoteInput[] remoteInputs, RemoteInput remoteInput) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+ file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+ line="199"
+ column="60"/>
</issue>
<issue
@@ -358,7 +384,9 @@
errorLine1=" public RemoteEditText(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+ file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+ line="306"
+ column="31"/>
</issue>
<issue
@@ -367,7 +395,9 @@
errorLine1=" public RemoteEditText(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+ file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+ line="306"
+ column="48"/>
</issue>
<issue
@@ -376,7 +406,9 @@
errorLine1=" protected void onVisibilityChanged(View changedView, int visibility) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+ file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+ line="336"
+ column="44"/>
</issue>
<issue
@@ -385,7 +417,9 @@
errorLine1=" protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/slice/widget/RemoteInputView.java"/>
+ file="src/main/java/androidx/slice/widget/RemoteInputView.java"
+ line="345"
+ column="71"/>
</issue>
<issue
@@ -394,7 +428,9 @@
errorLine1=" public RowContent(SliceItem rowSlice, int position) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RowContent.java"/>
+ file="src/main/java/androidx/slice/widget/RowContent.java"
+ line="82"
+ column="23"/>
</issue>
<issue
@@ -403,7 +439,9 @@
errorLine1=" public List<SliceItem> getEndItems() {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RowContent.java"/>
+ file="src/main/java/androidx/slice/widget/RowContent.java"
+ line="337"
+ column="12"/>
</issue>
<issue
@@ -412,7 +450,9 @@
errorLine1=" public List<SliceAction> getToggleItems() {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RowContent.java"/>
+ file="src/main/java/androidx/slice/widget/RowContent.java"
+ line="344"
+ column="12"/>
</issue>
<issue
@@ -421,7 +461,9 @@
errorLine1=" public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RowContent.java"/>
+ file="src/main/java/androidx/slice/widget/RowContent.java"
+ line="360"
+ column="26"/>
</issue>
<issue
@@ -430,7 +472,9 @@
errorLine1=" public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RowContent.java"/>
+ file="src/main/java/androidx/slice/widget/RowContent.java"
+ line="360"
+ column="44"/>
</issue>
<issue
@@ -439,7 +483,9 @@
errorLine1=" public RowStyle(Context context, int resId, @NonNull SliceStyle sliceStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RowStyle.java"/>
+ file="src/main/java/androidx/slice/widget/RowStyle.java"
+ line="74"
+ column="21"/>
</issue>
<issue
@@ -448,7 +494,9 @@
errorLine1=" protected Set<SliceItem> mLoadingActions = new HashSet<>();"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
+ file="src/main/java/androidx/slice/widget/RowView.java"
+ line="165"
+ column="15"/>
</issue>
<issue
@@ -457,7 +505,9 @@
errorLine1=" public void setStyle(SliceStyle styles, RowStyle rowStyle) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
+ file="src/main/java/androidx/slice/widget/RowView.java"
+ line="243"
+ column="26"/>
</issue>
<issue
@@ -466,7 +516,9 @@
errorLine1=" public void setStyle(SliceStyle styles, RowStyle rowStyle) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
+ file="src/main/java/androidx/slice/widget/RowView.java"
+ line="243"
+ column="45"/>
</issue>
<issue
@@ -475,7 +527,9 @@
errorLine1=" public void setSliceActions(List<SliceAction> actions) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
+ file="src/main/java/androidx/slice/widget/RowView.java"
+ line="409"
+ column="33"/>
</issue>
<issue
@@ -484,7 +538,9 @@
errorLine1=" public void setLoadingActions(Set<SliceItem> actions) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/RowView.java"/>
+ file="src/main/java/androidx/slice/widget/RowView.java"
+ line="1155"
+ column="35"/>
</issue>
<issue
@@ -493,7 +549,9 @@
errorLine1=" public ShortcutView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/ShortcutView.java"/>
+ file="src/main/java/androidx/slice/widget/ShortcutView.java"
+ line="58"
+ column="25"/>
</issue>
<issue
@@ -502,7 +560,9 @@
errorLine1=" public void setSliceContent(ListContent sliceContent) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/ShortcutView.java"/>
+ file="src/main/java/androidx/slice/widget/ShortcutView.java"
+ line="66"
+ column="33"/>
</issue>
<issue
@@ -511,7 +571,9 @@
errorLine1=" public void setLoadingActions(Set<SliceItem> actions) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/ShortcutView.java"/>
+ file="src/main/java/androidx/slice/widget/ShortcutView.java"
+ line="133"
+ column="35"/>
</issue>
<issue
@@ -520,7 +582,9 @@
errorLine1=" public Set<SliceItem> getLoadingActions() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/ShortcutView.java"/>
+ file="src/main/java/androidx/slice/widget/ShortcutView.java"
+ line="138"
+ column="12"/>
</issue>
<issue
@@ -529,7 +593,9 @@
errorLine1=" public SliceActionView(Context context, SliceStyle style, RowStyle rowStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceActionView.java"
+ line="86"
+ column="28"/>
</issue>
<issue
@@ -538,7 +604,9 @@
errorLine1=" public SliceActionView(Context context, SliceStyle style, RowStyle rowStyle) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceActionView.java"
+ line="86"
+ column="45"/>
</issue>
<issue
@@ -547,7 +615,9 @@
errorLine1=" public SliceActionView(Context context, SliceStyle style, RowStyle rowStyle) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceActionView.java"
+ line="86"
+ column="63"/>
</issue>
<issue
@@ -556,7 +626,9 @@
errorLine1=" public void setAction(@NonNull SliceActionImpl action, EventInfo info,"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceActionView.java"
+ line="102"
+ column="60"/>
</issue>
<issue
@@ -565,7 +637,9 @@
errorLine1=" SliceView.OnSliceActionListener listener, int color,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceActionView.java"
+ line="103"
+ column="13"/>
</issue>
<issue
@@ -574,7 +648,9 @@
errorLine1=" SliceActionLoadingListener loadingListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceActionView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceActionView.java"
+ line="104"
+ column="13"/>
</issue>
<issue
@@ -583,7 +659,9 @@
errorLine1=" public void setParents(SliceView parent, TemplateView templateView) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+ file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+ line="107"
+ column="28"/>
</issue>
<issue
@@ -592,7 +670,9 @@
errorLine1=" public void setParents(SliceView parent, TemplateView templateView) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+ file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+ line="107"
+ column="46"/>
</issue>
<issue
@@ -601,7 +681,9 @@
errorLine1=" public void setSliceObserver(SliceView.OnSliceActionListener observer) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+ file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+ line="129"
+ column="34"/>
</issue>
<issue
@@ -610,7 +692,9 @@
errorLine1=" public void setSliceActions(List<SliceAction> actions) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+ file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+ line="137"
+ column="33"/>
</issue>
<issue
@@ -619,7 +703,9 @@
errorLine1=" public void setSliceItems(List<SliceContent> slices, int color, int mode) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+ file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+ line="146"
+ column="31"/>
</issue>
<issue
@@ -628,7 +714,9 @@
errorLine1=" public void setStyle(SliceStyle style) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+ file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+ line="165"
+ column="26"/>
</issue>
<issue
@@ -637,7 +725,9 @@
errorLine1=" public void setPolicy(SliceViewPolicy p) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+ file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+ line="174"
+ column="27"/>
</issue>
<issue
@@ -646,7 +736,9 @@
errorLine1=" public void setLoadingActions(Set<SliceItem> actions) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+ file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+ line="204"
+ column="35"/>
</issue>
<issue
@@ -655,7 +747,9 @@
errorLine1=" public Set<SliceItem> getLoadingActions() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+ file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+ line="217"
+ column="12"/>
</issue>
<issue
@@ -664,7 +758,9 @@
errorLine1=" public void onSliceActionLoading(SliceItem actionItem, int position) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+ file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+ line="225"
+ column="38"/>
</issue>
<issue
@@ -673,7 +769,9 @@
errorLine1=" public SliceViewHolder(View itemView) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceAdapter.java"/>
+ file="src/main/java/androidx/slice/widget/SliceAdapter.java"
+ line="363"
+ column="32"/>
</issue>
<issue
@@ -682,7 +780,9 @@
errorLine1=" protected SliceView.OnSliceActionListener mObserver;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceChildView.java"
+ line="45"
+ column="15"/>
</issue>
<issue
@@ -691,7 +791,9 @@
errorLine1=" protected SliceActionView.SliceActionLoadingListener mLoadingListener;"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceChildView.java"
+ line="81"
+ column="15"/>
</issue>
<issue
@@ -700,7 +802,9 @@
errorLine1=" protected SliceStyle mSliceStyle;"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceChildView.java"
+ line="85"
+ column="15"/>
</issue>
<issue
@@ -709,7 +813,9 @@
errorLine1=" protected RowStyle mRowStyle;"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceChildView.java"
+ line="89"
+ column="15"/>
</issue>
<issue
@@ -718,7 +824,9 @@
errorLine1=" protected SliceViewPolicy mViewPolicy;"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceChildView.java"
+ line="93"
+ column="15"/>
</issue>
<issue
@@ -727,7 +835,9 @@
errorLine1=" public void setSliceContent(ListContent content) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceChildView.java"
+ line="113"
+ column="33"/>
</issue>
<issue
@@ -736,7 +846,9 @@
errorLine1=" public void setSliceActions(List<SliceAction> actions) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceChildView.java"
+ line="142"
+ column="33"/>
</issue>
<issue
@@ -745,7 +857,9 @@
errorLine1=" public void setSliceActionListener(SliceView.OnSliceActionListener observer) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceChildView.java"
+ line="186"
+ column="40"/>
</issue>
<issue
@@ -754,7 +868,9 @@
errorLine1=" public void setSliceActionLoadingListener(SliceActionView.SliceActionLoadingListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceChildView.java"
+ line="194"
+ column="47"/>
</issue>
<issue
@@ -763,7 +879,9 @@
errorLine1=" public void setActionLoading(SliceItem item) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceChildView.java"
+ line="203"
+ column="34"/>
</issue>
<issue
@@ -772,7 +890,9 @@
errorLine1=" public void setLoadingActions(Set<SliceItem> loadingActions) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceChildView.java"
+ line="211"
+ column="35"/>
</issue>
<issue
@@ -781,7 +901,9 @@
errorLine1=" public Set<SliceItem> getLoadingActions() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceChildView.java"
+ line="227"
+ column="12"/>
</issue>
<issue
@@ -790,7 +912,9 @@
errorLine1=" public void setStyle(SliceStyle styles, @NonNull RowStyle rowStyle) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceChildView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceChildView.java"
+ line="236"
+ column="26"/>
</issue>
<issue
@@ -799,7 +923,9 @@
errorLine1=" protected SliceItem mSliceItem;"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
+ file="src/main/java/androidx/slice/widget/SliceContent.java"
+ line="63"
+ column="15"/>
</issue>
<issue
@@ -808,7 +934,9 @@
errorLine1=" protected SliceItem mColorItem;"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
+ file="src/main/java/androidx/slice/widget/SliceContent.java"
+ line="67"
+ column="15"/>
</issue>
<issue
@@ -817,7 +945,9 @@
errorLine1=" protected SliceItem mLayoutDirItem;"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
+ file="src/main/java/androidx/slice/widget/SliceContent.java"
+ line="71"
+ column="15"/>
</issue>
<issue
@@ -826,7 +956,9 @@
errorLine1=" protected SliceItem mContentDescr;"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
+ file="src/main/java/androidx/slice/widget/SliceContent.java"
+ line="75"
+ column="15"/>
</issue>
<issue
@@ -835,7 +967,9 @@
errorLine1=" public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
+ file="src/main/java/androidx/slice/widget/SliceContent.java"
+ line="154"
+ column="26"/>
</issue>
<issue
@@ -844,7 +978,9 @@
errorLine1=" public int getHeight(SliceStyle style, SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceContent.java"/>
+ file="src/main/java/androidx/slice/widget/SliceContent.java"
+ line="154"
+ column="44"/>
</issue>
<issue
@@ -853,7 +989,9 @@
errorLine1=" @NonNull InputStream input, OnErrorListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
+ file="src/main/java/androidx/slice/widget/SliceLiveData.java"
+ line="127"
+ column="41"/>
</issue>
<issue
@@ -862,7 +1000,9 @@
errorLine1=" @NonNull InputStream input, OnErrorListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
+ file="src/main/java/androidx/slice/widget/SliceLiveData.java"
+ line="136"
+ column="41"/>
</issue>
<issue
@@ -871,7 +1011,9 @@
errorLine1=" SliceViewManager manager, @NonNull InputStream input, OnErrorListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
+ file="src/main/java/androidx/slice/widget/SliceLiveData.java"
+ line="147"
+ column="13"/>
</issue>
<issue
@@ -880,7 +1022,9 @@
errorLine1=" SliceViewManager manager, @NonNull InputStream input, OnErrorListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceLiveData.java"/>
+ file="src/main/java/androidx/slice/widget/SliceLiveData.java"
+ line="147"
+ column="67"/>
</issue>
<issue
@@ -889,7 +1033,9 @@
errorLine1=" public List<SliceAction> getToggles() {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceMetadata.java"/>
+ file="src/main/java/androidx/slice/SliceMetadata.java"
+ line="246"
+ column="12"/>
</issue>
<issue
@@ -898,7 +1044,9 @@
errorLine1=" public boolean sendToggleAction(SliceAction toggleAction, boolean toggleValue)"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceMetadata.java"/>
+ file="src/main/java/androidx/slice/SliceMetadata.java"
+ line="276"
+ column="37"/>
</issue>
<issue
@@ -907,7 +1055,9 @@
errorLine1=" public ListContent getListContent() {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceMetadata.java"/>
+ file="src/main/java/androidx/slice/SliceMetadata.java"
+ line="523"
+ column="12"/>
</issue>
<issue
@@ -916,7 +1066,9 @@
errorLine1=" public SliceStructure(Slice s) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/SliceStructure.java"/>
+ file="src/main/java/androidx/slice/SliceStructure.java"
+ line="50"
+ column="27"/>
</issue>
<issue
@@ -925,7 +1077,9 @@
errorLine1=" public SliceStructure(SliceItem s) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceStructure.java"/>
+ file="src/main/java/androidx/slice/SliceStructure.java"
+ line="62"
+ column="27"/>
</issue>
<issue
@@ -934,7 +1088,9 @@
errorLine1=" public SliceStyle(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+ file="src/main/java/androidx/slice/widget/SliceStyle.java"
+ line="96"
+ column="23"/>
</issue>
<issue
@@ -943,7 +1099,9 @@
errorLine1=" public SliceStyle(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+ file="src/main/java/androidx/slice/widget/SliceStyle.java"
+ line="96"
+ column="40"/>
</issue>
<issue
@@ -952,7 +1110,9 @@
errorLine1=" public int getRowHeight(RowContent row, SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+ file="src/main/java/androidx/slice/widget/SliceStyle.java"
+ line="323"
+ column="29"/>
</issue>
<issue
@@ -961,7 +1121,9 @@
errorLine1=" public int getRowHeight(RowContent row, SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+ file="src/main/java/androidx/slice/widget/SliceStyle.java"
+ line="323"
+ column="45"/>
</issue>
<issue
@@ -970,7 +1132,9 @@
errorLine1=" public int getGridHeight(GridContent grid, SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+ file="src/main/java/androidx/slice/widget/SliceStyle.java"
+ line="361"
+ column="30"/>
</issue>
<issue
@@ -979,7 +1143,9 @@
errorLine1=" public int getGridHeight(GridContent grid, SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+ file="src/main/java/androidx/slice/widget/SliceStyle.java"
+ line="361"
+ column="48"/>
</issue>
<issue
@@ -988,7 +1154,9 @@
errorLine1=" public int getListHeight(ListContent list, SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+ file="src/main/java/androidx/slice/widget/SliceStyle.java"
+ line="401"
+ column="30"/>
</issue>
<issue
@@ -997,7 +1165,9 @@
errorLine1=" public int getListHeight(ListContent list, SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+ file="src/main/java/androidx/slice/widget/SliceStyle.java"
+ line="401"
+ column="48"/>
</issue>
<issue
@@ -1006,7 +1176,9 @@
errorLine1=" public int getListItemsHeight(List<SliceContent> listItems, SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+ file="src/main/java/androidx/slice/widget/SliceStyle.java"
+ line="432"
+ column="35"/>
</issue>
<issue
@@ -1015,7 +1187,9 @@
errorLine1=" public int getListItemsHeight(List<SliceContent> listItems, SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+ file="src/main/java/androidx/slice/widget/SliceStyle.java"
+ line="432"
+ column="65"/>
</issue>
<issue
@@ -1024,7 +1198,9 @@
errorLine1=" public DisplayedListItems getListItemsForNonScrollingList(ListContent list,"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+ file="src/main/java/androidx/slice/widget/SliceStyle.java"
+ line="459"
+ column="63"/>
</issue>
<issue
@@ -1033,7 +1209,9 @@
errorLine1=" SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceStyle.java"/>
+ file="src/main/java/androidx/slice/widget/SliceStyle.java"
+ line="461"
+ column="62"/>
</issue>
<issue
@@ -1042,7 +1220,9 @@
errorLine1=" public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="245"
+ column="19"/>
</issue>
<issue
@@ -1051,7 +1231,9 @@
errorLine1=" public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="245"
+ column="38"/>
</issue>
<issue
@@ -1060,7 +1242,9 @@
errorLine1=" public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="245"
+ column="55"/>
</issue>
<issue
@@ -1069,7 +1253,9 @@
errorLine1=" public static IconCompat convert(Context context, IconCompat icon, SerializeOptions options) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="245"
+ column="72"/>
</issue>
<issue
@@ -1078,7 +1264,9 @@
errorLine1=" public void checkThrow(String format) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="383"
+ column="32"/>
</issue>
<issue
@@ -1087,7 +1275,9 @@
errorLine1=" public Bitmap.CompressFormat getFormat() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="434"
+ column="16"/>
</issue>
<issue
@@ -1096,7 +1286,9 @@
errorLine1=" public SerializeOptions setActionMode(@FormatMode int mode) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="453"
+ column="16"/>
</issue>
<issue
@@ -1105,7 +1297,9 @@
errorLine1=" public SerializeOptions setImageMode(@FormatMode int mode) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="465"
+ column="16"/>
</issue>
<issue
@@ -1114,7 +1308,9 @@
errorLine1=" public SerializeOptions setMaxImageWidth(int width) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="477"
+ column="16"/>
</issue>
<issue
@@ -1123,7 +1319,9 @@
errorLine1=" public SerializeOptions setMaxImageHeight(int height) {"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="489"
+ column="16"/>
</issue>
<issue
@@ -1132,7 +1330,9 @@
errorLine1=" public SerializeOptions setImageConversionFormat(Bitmap.CompressFormat format,"
errorLine2=" ~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="502"
+ column="16"/>
</issue>
<issue
@@ -1141,7 +1341,9 @@
errorLine1=" public SerializeOptions setImageConversionFormat(Bitmap.CompressFormat format,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="502"
+ column="58"/>
</issue>
<issue
@@ -1150,7 +1352,9 @@
errorLine1=" void onSliceAction(Uri actionUri, Context context, Intent intent);"
errorLine2=" ~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="523"
+ column="28"/>
</issue>
<issue
@@ -1159,7 +1363,9 @@
errorLine1=" void onSliceAction(Uri actionUri, Context context, Intent intent);"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="523"
+ column="43"/>
</issue>
<issue
@@ -1168,7 +1374,9 @@
errorLine1=" void onSliceAction(Uri actionUri, Context context, Intent intent);"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="523"
+ column="60"/>
</issue>
<issue
@@ -1177,7 +1385,9 @@
errorLine1=" public SliceParseException(String s, Throwable e) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="535"
+ column="36"/>
</issue>
<issue
@@ -1186,7 +1396,9 @@
errorLine1=" public SliceParseException(String s, Throwable e) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="535"
+ column="46"/>
</issue>
<issue
@@ -1195,7 +1407,9 @@
errorLine1=" public SliceParseException(String s) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/SliceUtils.java"/>
+ file="src/main/java/androidx/slice/SliceUtils.java"
+ line="543"
+ column="36"/>
</issue>
<issue
@@ -1204,7 +1418,9 @@
errorLine1=" public SliceView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceView.java"
+ line="188"
+ column="22"/>
</issue>
<issue
@@ -1213,7 +1429,9 @@
errorLine1=" public SliceView(Context context, @Nullable AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceView.java"
+ line="192"
+ column="22"/>
</issue>
<issue
@@ -1222,7 +1440,9 @@
errorLine1=" public SliceView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceView.java"
+ line="196"
+ column="22"/>
</issue>
<issue
@@ -1231,7 +1451,9 @@
errorLine1=" public SliceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceView.java"
+ line="202"
+ column="22"/>
</issue>
<issue
@@ -1240,7 +1462,9 @@
errorLine1=" public SliceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceView.java"
+ line="202"
+ column="39"/>
</issue>
<issue
@@ -1249,7 +1473,9 @@
errorLine1=" public void setClickInfo(int[] info) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceView.java"
+ line="269"
+ column="30"/>
</issue>
<issue
@@ -1258,7 +1484,9 @@
errorLine1=" public void setOnClickListener(View.OnClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceView.java"
+ line="300"
+ column="36"/>
</issue>
<issue
@@ -1267,7 +1495,9 @@
errorLine1=" public void setOnLongClickListener(View.OnLongClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceView.java"
+ line="305"
+ column="40"/>
</issue>
<issue
@@ -1276,7 +1506,9 @@
errorLine1=" public static String modeToString(@SliceMode int mode) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceView.java"
+ line="859"
+ column="19"/>
</issue>
<issue
@@ -1285,7 +1517,9 @@
errorLine1=" protected void onVisibilityChanged(View changedView, int visibility) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceView.java"/>
+ file="src/main/java/androidx/slice/widget/SliceView.java"
+ line="900"
+ column="40"/>
</issue>
<issue
@@ -1294,7 +1528,9 @@
errorLine1=" public void setListener(PolicyChangeListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceViewPolicy.java"/>
+ file="src/main/java/androidx/slice/widget/SliceViewPolicy.java"
+ line="64"
+ column="29"/>
</issue>
<issue
@@ -1303,7 +1539,9 @@
errorLine1=" public static Drawable getDrawable(@NonNull Context context, @AttrRes int attr) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+ file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+ line="135"
+ column="19"/>
</issue>
<issue
@@ -1312,7 +1550,9 @@
errorLine1=" public static IconCompat createIconFromDrawable(Drawable d) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+ file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+ line="146"
+ column="19"/>
</issue>
<issue
@@ -1321,7 +1561,9 @@
errorLine1=" public static IconCompat createIconFromDrawable(Drawable d) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+ file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+ line="146"
+ column="53"/>
</issue>
<issue
@@ -1330,7 +1572,9 @@
errorLine1=" IconCompat icon, boolean isLarge, ViewGroup parent) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+ file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+ line="161"
+ column="13"/>
</issue>
<issue
@@ -1339,7 +1583,9 @@
errorLine1=" IconCompat icon, boolean isLarge, ViewGroup parent) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+ file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+ line="161"
+ column="47"/>
</issue>
<issue
@@ -1348,7 +1594,9 @@
errorLine1=" public static @NonNull Bitmap getCircularBitmap(Bitmap bitmap) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+ file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+ line="185"
+ column="53"/>
</issue>
<issue
@@ -1357,7 +1605,9 @@
errorLine1=" public static CharSequence getTimestampString(Context context, long time) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+ file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+ line="202"
+ column="19"/>
</issue>
<issue
@@ -1366,7 +1616,9 @@
errorLine1=" public static CharSequence getTimestampString(Context context, long time) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+ file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+ line="202"
+ column="51"/>
</issue>
<issue
@@ -1375,7 +1627,9 @@
errorLine1=" public static void tintIndeterminateProgressBar(Context context, ProgressBar bar) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+ file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+ line="229"
+ column="53"/>
</issue>
<issue
@@ -1384,7 +1638,9 @@
errorLine1=" public static void tintIndeterminateProgressBar(Context context, ProgressBar bar) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/SliceViewUtil.java"/>
+ file="src/main/java/androidx/slice/widget/SliceViewUtil.java"
+ line="229"
+ column="70"/>
</issue>
<issue
@@ -1393,7 +1649,9 @@
errorLine1=" public void onForegroundActivated(MotionEvent event) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+ file="src/main/java/androidx/slice/widget/TemplateView.java"
+ line="116"
+ column="39"/>
</issue>
<issue
@@ -1402,7 +1660,9 @@
errorLine1=" public void setPolicy(SliceViewPolicy policy) {"
errorLine2=" ~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+ file="src/main/java/androidx/slice/widget/TemplateView.java"
+ line="143"
+ column="27"/>
</issue>
<issue
@@ -1411,7 +1671,9 @@
errorLine1=" public void setActionLoading(SliceItem item) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+ file="src/main/java/androidx/slice/widget/TemplateView.java"
+ line="154"
+ column="34"/>
</issue>
<issue
@@ -1420,7 +1682,9 @@
errorLine1=" public void setLoadingActions(Set<SliceItem> loadingActions) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+ file="src/main/java/androidx/slice/widget/TemplateView.java"
+ line="163"
+ column="35"/>
</issue>
<issue
@@ -1429,7 +1693,9 @@
errorLine1=" public Set<SliceItem> getLoadingActions() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+ file="src/main/java/androidx/slice/widget/TemplateView.java"
+ line="172"
+ column="12"/>
</issue>
<issue
@@ -1438,7 +1704,9 @@
errorLine1=" public void setSliceActionListener(SliceView.OnSliceActionListener observer) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+ file="src/main/java/androidx/slice/widget/TemplateView.java"
+ line="190"
+ column="40"/>
</issue>
<issue
@@ -1447,7 +1715,9 @@
errorLine1=" public void setSliceActions(List<SliceAction> actions) {"
errorLine2=" ~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+ file="src/main/java/androidx/slice/widget/TemplateView.java"
+ line="202"
+ column="33"/>
</issue>
<issue
@@ -1456,7 +1726,9 @@
errorLine1=" public void setSliceContent(ListContent sliceContent) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+ file="src/main/java/androidx/slice/widget/TemplateView.java"
+ line="211"
+ column="33"/>
</issue>
<issue
@@ -1465,7 +1737,9 @@
errorLine1=" public void setStyle(SliceStyle style, @NonNull RowStyle rowStyle) {"
errorLine2=" ~~~~~~~~~~">
<location
- file="src/main/java/androidx/slice/widget/TemplateView.java"/>
+ file="src/main/java/androidx/slice/widget/TemplateView.java"
+ line="222"
+ column="26"/>
</issue>
</issues>
diff --git a/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml b/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml
index 47e64c7..1a8c9f9 100644
--- a/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml
+++ b/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml
@@ -208,7 +208,8 @@
errorLine1=" public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+ file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+ column="64"/>
</issue>
<issue
@@ -217,7 +218,9 @@
errorLine1=" public void onStopNestedScroll(View target) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+ file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+ line="1000"
+ column="36"/>
</issue>
<issue
@@ -226,7 +229,9 @@
errorLine1=" public void onNestedScroll(final View target, final int dxConsumed, final int dyConsumed,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+ file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+ line="1019"
+ column="38"/>
</issue>
<issue
@@ -235,7 +240,9 @@
errorLine1=" public boolean onNestedPreFling(View target, float velocityX,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+ file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+ line="1026"
+ column="37"/>
</issue>
<issue
@@ -244,7 +251,9 @@
errorLine1=" public boolean onNestedFling(View target, float velocityX, float velocityY,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+ file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+ line="1032"
+ column="34"/>
</issue>
<issue
@@ -253,7 +262,9 @@
errorLine1=" int dyUnconsumed, int[] offsetInWindow, int type) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+ file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+ line="1070"
+ column="31"/>
</issue>
<issue
@@ -262,7 +273,9 @@
errorLine1=" public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow,"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+ file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+ line="1076"
+ column="60"/>
</issue>
<issue
@@ -271,7 +284,9 @@
errorLine1=" public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow,"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+ file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+ line="1076"
+ column="76"/>
</issue>
<issue
@@ -280,7 +295,9 @@
errorLine1=" int dyUnconsumed, int[] offsetInWindow) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+ file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+ line="1111"
+ column="31"/>
</issue>
<issue
@@ -289,7 +306,9 @@
errorLine1=" public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+ file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+ line="1117"
+ column="60"/>
</issue>
<issue
@@ -298,7 +317,9 @@
errorLine1=" public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+ file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+ line="1117"
+ column="76"/>
</issue>
<issue
@@ -307,7 +328,9 @@
errorLine1=" public boolean onTouchEvent(MotionEvent ev) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"/>
+ file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
+ line="1222"
+ column="33"/>
</issue>
</issues>
diff --git a/text/text/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt b/text/text/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt
index e4a4227..fba9e8f 100644
--- a/text/text/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt
+++ b/text/text/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt
@@ -74,12 +74,42 @@
}
@Test
- fun create_returnsGivenValues() {
+ fun create_returnsGivenValues_includePadding_false() {
val text = "abc"
val paint = TextPaint()
val width = 100
val metrics = BoringLayout.isBoring(text, paint)
- val boringLayout = create(text, paint, width, metrics)
+ val boringLayout = create(
+ text = text,
+ paint = paint,
+ width = width,
+ metrics = metrics,
+ includePadding = false
+ )
+
+ assertThat(boringLayout.text).isEqualTo(text)
+ assertThat(boringLayout.paint).isEqualTo(paint)
+ // The width and height of the boringLayout is the same in metrics, indicating metrics is
+ // passed correctly.
+ assertThat(boringLayout.getLineWidth(0).toInt()).isEqualTo(metrics.width)
+ assertThat(boringLayout.getLineBottom(0) - boringLayout.getLineTop(0))
+ .isEqualTo(metrics.descent - metrics.ascent)
+ assertThat(boringLayout.width).isEqualTo(width)
+ }
+
+ @Test
+ fun create_returnsGivenValues_includePadding_true() {
+ val text = "abc"
+ val paint = TextPaint()
+ val width = 100
+ val metrics = BoringLayout.isBoring(text, paint)
+ val boringLayout = create(
+ text = text,
+ paint = paint,
+ width = width,
+ metrics = metrics,
+ includePadding = true
+ )
assertThat(boringLayout.text).isEqualTo(text)
assertThat(boringLayout.paint).isEqualTo(paint)
@@ -137,7 +167,7 @@
}
@Test
- fun create_defaultIncludePad_isTrue() {
+ fun create_defaultIncludePad_isFalse() {
val text: CharSequence = "abcdefghijk"
val paint = TextPaint()
val metrics = BoringLayout.isBoring(text, paint)
@@ -150,8 +180,8 @@
val topPad = boringLayout.topPadding
val bottomPad = boringLayout.bottomPadding
- // Top and bottom padding are not 0 at the same time, indicating includePad is true.
- assertThat(topPad * topPad + bottomPad * bottomPad).isGreaterThan(0)
+ // Top and bottom padding are 0 at the same time, indicating includePad is false
+ assertThat(topPad + bottomPad).isEqualTo(0)
}
@Test(expected = IllegalArgumentException::class)
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutConstructor33.java b/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutConstructor33.java
new file mode 100644
index 0000000..b1379e8
--- /dev/null
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutConstructor33.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.ui.text.android;
+
+import android.text.BoringLayout;
+import android.text.Layout;
+import android.text.TextPaint;
+import android.text.TextUtils;
+
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+
+/**
+ * Platform BoringLayout constructor has marked TextUtils.TruncateAt as NonNull even though it is
+ * nullable, and have to be nullable.
+ *
+ * This class has the same signature of the BoringLayout constructor with only difference of
+ * ellipsize is marked as Nullable.
+ *
+ * This was the only way to prevent compilation failure for nullability of TruncateAt ellipsize.
+ *
+ * See b/225695033
+ */
+@RequiresApi(33)
+class BoringLayoutConstructor33 {
+
+ private BoringLayoutConstructor33() {}
+
+ @NonNull
+ public static BoringLayout create(
+ @NonNull CharSequence text,
+ @NonNull TextPaint paint,
+ @IntRange(from = 0) int width,
+ @NonNull Layout.Alignment alignment,
+ float lineSpacingMultiplier,
+ float lineSpacingExtra,
+ @NonNull BoringLayout.Metrics metrics,
+ boolean includePadding,
+ @Nullable TextUtils.TruncateAt ellipsize,
+ @IntRange(from = 0) int ellipsizedWidth,
+ boolean useFallbackLineSpacing
+ ) {
+ return new BoringLayout(
+ text,
+ paint,
+ width,
+ alignment,
+ lineSpacingMultiplier,
+ lineSpacingExtra,
+ metrics,
+ includePadding,
+ ellipsize,
+ ellipsizedWidth,
+ useFallbackLineSpacing
+ );
+ }
+}
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutFactory.kt b/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutFactory.kt
index f4300cb..f9116ac 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutFactory.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/BoringLayoutFactory.kt
@@ -18,9 +18,13 @@
import android.text.BoringLayout
import android.text.BoringLayout.Metrics
import android.text.Layout.Alignment
+import android.text.StaticLayout
import android.text.TextDirectionHeuristic
import android.text.TextPaint
import android.text.TextUtils.TruncateAt
+import androidx.annotation.DoNotInline
+import androidx.annotation.RequiresApi
+import androidx.core.os.BuildCompat
/**
* Factory Class for BoringLayout
@@ -28,7 +32,7 @@
@OptIn(InternalPlatformTextApi::class)
internal object BoringLayoutFactory {
/**
- * Try to lay out text by BoringLayout with provided paint and text direction.
+ * Try to layout text by BoringLayout with provided paint and text direction.
*
* @param text the text to analyze.
* @param paint TextPaint which carries text style parameters such as size, weight, font e.g.
@@ -36,15 +40,16 @@
* @return null if not boring; the width, ascent, and descent in a BoringLayout.Metrics
* object.
*/
+ @androidx.annotation.OptIn(markerClass = [BuildCompat.PrereleaseSdkCheck::class])
fun measure(
text: CharSequence,
- paint: TextPaint?,
+ paint: TextPaint,
textDir: TextDirectionHeuristic
): Metrics? {
- return if (!textDir.isRtl(text, 0, text.length)) {
- BoringLayout.isBoring(text, paint, null /* metrics */)
+ return if (BuildCompat.isAtLeastT()) {
+ BoringLayoutFactory33.isBoring(text, paint, textDir)
} else {
- null
+ BoringLayoutFactoryDefault.isBoring(text, paint, textDir)
}
}
@@ -58,23 +63,33 @@
* @param alignment To which edge the text is aligned.
* @param includePadding Whether to add extra space beyond font ascent and descent (which is
* needed to avoid clipping in some languages, such as Arabic and Kannada). Default is true.
+ * @param useFallbackLineSpacing Sets Android TextView#setFallbackLineSpacing. This value should
+ * be set to true in most cases and it is the default on platform; otherwise tall scripts such
+ * as Burmese or Tibetan result in clippings on top and bottom sometimes making the text
+ * not-readable.
* @param ellipsize The ellipsize option specifying how the overflowed text is handled.
* @param ellipsizedWidth The width where the exceeding text will be ellipsized, in pixel.
+ *
+ * @see BoringLayout.isFallbackLineSpacingEnabled
+ * @see StaticLayout.Builder.setUseLineSpacingFromFallbacks
**/
+ @androidx.annotation.OptIn(markerClass = [BuildCompat.PrereleaseSdkCheck::class])
fun create(
text: CharSequence,
paint: TextPaint,
width: Int,
metrics: Metrics,
alignment: Alignment = Alignment.ALIGN_NORMAL,
- includePadding: Boolean = true,
+ includePadding: Boolean = LayoutCompat.DEFAULT_INCLUDE_PADDING,
+ useFallbackLineSpacing: Boolean = LayoutCompat.DEFAULT_FALLBACK_LINE_SPACING,
ellipsize: TruncateAt? = null,
- ellipsizedWidth: Int = width
+ ellipsizedWidth: Int = width,
): BoringLayout {
require(width >= 0)
require(ellipsizedWidth >= 0)
- return if (ellipsize == null) {
- BoringLayout(
+
+ return if (BuildCompat.isAtLeastT()) {
+ BoringLayoutFactory33.create(
text,
paint,
width,
@@ -82,10 +97,13 @@
LayoutCompat.DEFAULT_LINESPACING_MULTIPLIER,
LayoutCompat.DEFAULT_LINESPACING_EXTRA,
metrics,
- includePadding
+ includePadding,
+ useFallbackLineSpacing,
+ ellipsize,
+ ellipsizedWidth
)
} else {
- BoringLayout(
+ BoringLayoutFactoryDefault.create(
text,
paint,
width,
@@ -99,4 +117,107 @@
)
}
}
+
+ /**
+ * Returns whether fallbackLineSpacing is enabled for the given layout.
+ */
+ @androidx.annotation.OptIn(markerClass = [BuildCompat.PrereleaseSdkCheck::class])
+ fun isFallbackLineSpacingEnabled(layout: BoringLayout): Boolean {
+ return if (BuildCompat.isAtLeastT()) {
+ BoringLayoutFactory33.isFallbackLineSpacingEnabled(layout)
+ } else {
+ return false
+ }
+ }
+}
+
+@RequiresApi(33)
+@OptIn(InternalPlatformTextApi::class)
+private object BoringLayoutFactory33 {
+
+ @JvmStatic
+ @DoNotInline
+ fun isBoring(text: CharSequence, paint: TextPaint, textDir: TextDirectionHeuristic): Metrics? {
+ return BoringLayout.isBoring(
+ text,
+ paint,
+ textDir,
+ LayoutCompat.DEFAULT_FALLBACK_LINE_SPACING,
+ null /* metrics */
+ )
+ }
+
+ @JvmStatic
+ @DoNotInline
+ fun create(
+ text: CharSequence,
+ paint: TextPaint,
+ width: Int,
+ alignment: Alignment,
+ lineSpacingMultiplier: Float,
+ lineSpacingExtra: Float,
+ metrics: Metrics,
+ includePadding: Boolean,
+ useFallbackLineSpacing: Boolean,
+ ellipsize: TruncateAt? = null,
+ ellipsizedWidth: Int = width
+ ): BoringLayout {
+ return BoringLayoutConstructor33.create(
+ text,
+ paint,
+ width,
+ alignment,
+ lineSpacingMultiplier,
+ lineSpacingExtra,
+ metrics,
+ includePadding,
+ ellipsize,
+ ellipsizedWidth,
+ useFallbackLineSpacing
+ )
+ }
+
+ fun isFallbackLineSpacingEnabled(layout: BoringLayout): Boolean {
+ return layout.isFallbackLineSpacingEnabled
+ }
+}
+
+private object BoringLayoutFactoryDefault {
+ @JvmStatic
+ @DoNotInline
+ fun isBoring(text: CharSequence, paint: TextPaint, textDir: TextDirectionHeuristic): Metrics? {
+ return if (!textDir.isRtl(text, 0, text.length)) {
+ return BoringLayout.isBoring(text, paint, null /* metrics */)
+ } else {
+ null
+ }
+ }
+
+ @JvmStatic
+ @DoNotInline
+ fun create(
+ text: CharSequence,
+ paint: TextPaint,
+ width: Int,
+ alignment: Alignment,
+ lineSpacingMultiplier: Float,
+ lineSpacingExtra: Float,
+ metrics: Metrics,
+ includePadding: Boolean,
+ ellipsize: TruncateAt? = null,
+ ellipsizedWidth: Int = width
+ ): BoringLayout {
+ return BoringLayout(
+ text,
+ paint,
+ width,
+ alignment,
+ lineSpacingMultiplier,
+ lineSpacingExtra,
+ metrics,
+ includePadding,
+ ellipsize,
+ ellipsizedWidth
+ )
+ }
}
\ No newline at end of file
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt b/text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt
index ef17dfb..e2c9747 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt
@@ -30,6 +30,7 @@
import androidx.compose.ui.text.android.LayoutCompat.BreakStrategy
import androidx.compose.ui.text.android.LayoutCompat.HyphenationFrequency
import androidx.compose.ui.text.android.LayoutCompat.JustificationMode
+import androidx.core.os.BuildCompat
import java.lang.reflect.Constructor
import java.lang.reflect.InvocationTargetException
@@ -41,7 +42,7 @@
private val delegate: StaticLayoutFactoryImpl = if (Build.VERSION.SDK_INT >= 23) {
StaticLayoutFactory23()
} else {
- StaticLayoutFactoryPre21()
+ StaticLayoutFactoryDefault()
}
/**
@@ -98,6 +99,20 @@
)
)
}
+
+ /**
+ * Returns whether fallbackLineSpacing is enabled for the given layout.
+ *
+ * @param layout StaticLayout instance
+ * @param useFallbackLineSpacing fallbackLineSpacing canfiguration passed while creating the
+ * StaticLayout.
+ */
+ fun isFallbackLineSpacingEnabled(
+ layout: StaticLayout,
+ useFallbackLineSpacing: Boolean
+ ): Boolean {
+ return delegate.isFallbackLineSpacingEnabled(layout, useFallbackLineSpacing)
+ }
}
@OptIn(InternalPlatformTextApi::class)
@@ -136,6 +151,8 @@
@DoNotInline // API level specific, do not inline to prevent ART class verification breakages
fun create(params: StaticLayoutParams): StaticLayout
+
+ fun isFallbackLineSpacingEnabled(layout: StaticLayout, useFallbackLineSpacing: Boolean): Boolean
}
@RequiresApi(23)
@@ -166,10 +183,25 @@
}
}.build()
}
+
+ @androidx.annotation.OptIn(markerClass = [BuildCompat.PrereleaseSdkCheck::class])
+ override fun isFallbackLineSpacingEnabled(
+ layout: StaticLayout,
+ useFallbackLineSpacing: Boolean
+ ): Boolean {
+ return if (BuildCompat.isAtLeastT()) {
+ StaticLayoutFactory33.isFallbackLineSpacingEnabled(layout)
+ } else if (Build.VERSION.SDK_INT >= 28) {
+ useFallbackLineSpacing
+ } else {
+ false
+ }
+ }
}
@RequiresApi(26)
private object StaticLayoutFactory26 {
+ @JvmStatic
@DoNotInline
fun setJustificationMode(builder: Builder, justificationMode: Int) {
builder.setJustificationMode(justificationMode)
@@ -178,13 +210,23 @@
@RequiresApi(28)
private object StaticLayoutFactory28 {
+ @JvmStatic
@DoNotInline
fun setUseLineSpacingFromFallbacks(builder: Builder, useFallbackLineSpacing: Boolean) {
builder.setUseLineSpacingFromFallbacks(useFallbackLineSpacing)
}
}
-private class StaticLayoutFactoryPre21 : StaticLayoutFactoryImpl {
+@RequiresApi(33)
+private object StaticLayoutFactory33 {
+ @JvmStatic
+ @DoNotInline
+ fun isFallbackLineSpacingEnabled(layout: StaticLayout): Boolean {
+ return layout.isFallbackLineSpacingEnabled
+ }
+}
+
+private class StaticLayoutFactoryDefault : StaticLayoutFactoryImpl {
companion object {
private var isInitialized = false
@@ -274,4 +316,11 @@
params.ellipsizedWidth
)
}
+
+ override fun isFallbackLineSpacingEnabled(
+ layout: StaticLayout,
+ useFallbackLineSpacing: Boolean
+ ): Boolean {
+ return false
+ }
}
diff --git a/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt b/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
index 7a645c1..a0c1bdb 100644
--- a/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
+++ b/text/text/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
@@ -17,9 +17,10 @@
import android.graphics.Canvas
import android.graphics.Path
-import android.os.Build
+import android.text.BoringLayout
import android.text.Layout
import android.text.Spanned
+import android.text.StaticLayout
import android.text.TextDirectionHeuristic
import android.text.TextDirectionHeuristics
import android.text.TextPaint
@@ -70,7 +71,11 @@
* @param lineSpacingMultiplier the multiplier to be applied to each line of the text.
* @param lineSpacingExtra the extra height to be added to each line of the text.
* @param includePadding defines whether the extra space to be applied beyond font ascent and
- * descent,
+ * descent
+ * @param fallbackLineSpacing Sets Android TextView#setFallbackLineSpacing. This value should
+ * be set to true in most cases and it is the default on platform; otherwise tall scripts such
+ * as Burmese or Tibetan result in clippings on top and bottom sometimes making the text
+ * not-readable.
* @param maxLines the maximum number of lines to be laid out.
* @param breakStrategy the strategy to be used for line breaking
* @param hyphenationFrequency set the frequency to control the amount of automatic hyphenation
@@ -83,7 +88,9 @@
* element in the array is applied to the corresponding line. For lines past the last element in
* array, the last element repeats.
* @param layoutIntrinsics previously calculated [LayoutIntrinsics] for this text
+ *
* @see StaticLayoutFactory
+ * @see BoringLayoutFactory
*
* @suppress
*/
@@ -176,6 +183,7 @@
metrics = boringMetrics,
alignment = frameworkAlignment,
includePadding = includePadding,
+ useFallbackLineSpacing = fallbackLineSpacing,
ellipsize = ellipsize,
ellipsizedWidth = widthInt
)
@@ -458,7 +466,14 @@
}
internal fun isFallbackLinespacingApplied(): Boolean {
- return fallbackLineSpacing && !isBoringLayout && Build.VERSION.SDK_INT >= 28
+ return if (isBoringLayout) {
+ BoringLayoutFactory.isFallbackLineSpacingEnabled(layout as BoringLayout)
+ } else {
+ StaticLayoutFactory.isFallbackLineSpacingEnabled(
+ layout as StaticLayout,
+ fallbackLineSpacing
+ )
+ }
}
}
diff --git a/vectordrawable/integration-tests/testapp/lint-baseline.xml b/vectordrawable/integration-tests/testapp/lint-baseline.xml
index 2cc2c55..6c79993 100644
--- a/vectordrawable/integration-tests/testapp/lint-baseline.xml
+++ b/vectordrawable/integration-tests/testapp/lint-baseline.xml
@@ -142,7 +142,9 @@
errorLine1=" m-.001, 0"
errorLine2=" ~~~~">
<location
- file="src/main/res/drawable/vector_drawable04.xml"/>
+ file="src/main/res/drawable/vector_drawable04.xml"
+ line="27"
+ column="13"/>
</issue>
<issue
@@ -151,7 +153,9 @@
errorLine1=" m-.001, 0"
errorLine2=" ^">
<location
- file="src/main/res/drawable/vector_drawable04.xml"/>
+ file="src/main/res/drawable/vector_drawable04.xml"
+ line="27"
+ column="24"/>
</issue>
<issue
@@ -160,7 +164,9 @@
errorLine1=" a .001,.001 0 1,0 .002,0"
errorLine2=" ^">
<location
- file="src/main/res/drawable/vector_drawable04.xml"/>
+ file="src/main/res/drawable/vector_drawable04.xml"
+ line="28"
+ column="38"/>
</issue>
<issue
@@ -169,7 +175,9 @@
errorLine1=" a .001,.001 0 1,0 .002,0"
errorLine2=" ~~~~">
<location
- file="src/main/res/drawable/vector_drawable04.xml"/>
+ file="src/main/res/drawable/vector_drawable04.xml"
+ line="28"
+ column="23"/>
</issue>
<issue
@@ -178,7 +186,9 @@
errorLine1=" a .001,.001 0 1,0 .002,0"
errorLine2=" ~~~~">
<location
- file="src/main/res/drawable/vector_drawable04.xml"/>
+ file="src/main/res/drawable/vector_drawable04.xml"
+ line="28"
+ column="28"/>
</issue>
<issue
@@ -187,7 +197,9 @@
errorLine1=" android:pathData="l0.0.0.5.0.0.5-0.5.0.0-.5z""
errorLine2=" ~~~">
<location
- file="src/main/res/drawable/vector_drawable29.xml"/>
+ file="src/main/res/drawable/vector_drawable29.xml"
+ line="25"
+ column="53"/>
</issue>
<issue
@@ -196,7 +208,9 @@
errorLine1=" android:pathData="l0.0.0.5.0.0.5-0.5.0.0-.5z""
errorLine2=" ~~">
<location
- file="src/main/res/drawable/vector_drawable29.xml"/>
+ file="src/main/res/drawable/vector_drawable29.xml"
+ line="25"
+ column="35"/>
</issue>
<issue
@@ -205,7 +219,9 @@
errorLine1=" android:pathData="l0.0.0.5.0.0.5-0.5.0.0-.5z""
errorLine2=" ~~">
<location
- file="src/main/res/drawable/vector_drawable29.xml"/>
+ file="src/main/res/drawable/vector_drawable29.xml"
+ line="25"
+ column="39"/>
</issue>
<issue
@@ -214,7 +230,9 @@
errorLine1=" android:pathData="l0.0.0.5.0.0.5-0.5.0.0-.5z""
errorLine2=" ~~">
<location
- file="src/main/res/drawable/vector_drawable29.xml"/>
+ file="src/main/res/drawable/vector_drawable29.xml"
+ line="25"
+ column="41"/>
</issue>
<issue
@@ -223,7 +241,9 @@
errorLine1=" android:pathData="l0.0.0.5.0.0.5-0.5.0.0-.5z""
errorLine2=" ~~">
<location
- file="src/main/res/drawable/vector_drawable29.xml"/>
+ file="src/main/res/drawable/vector_drawable29.xml"
+ line="25"
+ column="49"/>
</issue>
<issue
@@ -232,7 +252,9 @@
errorLine1=" android:pathData="l0.0.0.5.0.0.5-0.5.0.0-.5z""
errorLine2=" ~~">
<location
- file="src/main/res/drawable/vector_drawable29.xml"/>
+ file="src/main/res/drawable/vector_drawable29.xml"
+ line="25"
+ column="51"/>
</issue>
<issue
@@ -241,7 +263,9 @@
errorLine1=" android:pathData="l0.0.0.5.0.0.5-0.5.0.0-.5z""
errorLine2=" ~~">
<location
- file="src/main/res/drawable/vector_drawable29.xml"/>
+ file="src/main/res/drawable/vector_drawable29.xml"
+ line="25"
+ column="37"/>
</issue>
<issue
@@ -250,7 +274,9 @@
errorLine1=" android:pathData="l0.0.0.5.0.0.5-0.5.0.0-.5z""
errorLine2=" ~~">
<location
- file="src/main/res/drawable/vector_drawable29.xml"/>
+ file="src/main/res/drawable/vector_drawable29.xml"
+ line="25"
+ column="43"/>
</issue>
<issue
@@ -259,7 +285,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/AVDCListenerDemo.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/AVDCListenerDemo.java"
+ line="39"
+ column="29"/>
</issue>
<issue
@@ -268,7 +296,9 @@
errorLine1=" protected int[] mIcons = {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SimpleAnimatedVectorDrawable.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SimpleAnimatedVectorDrawable.java"
+ line="38"
+ column="15"/>
</issue>
<issue
@@ -277,7 +307,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SimpleAnimatedVectorDrawable.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SimpleAnimatedVectorDrawable.java"
+ line="51"
+ column="29"/>
</issue>
<issue
@@ -286,7 +318,9 @@
errorLine1=" protected int[] mIcons = {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java"
+ line="39"
+ column="15"/>
</issue>
<issue
@@ -295,7 +329,9 @@
errorLine1=" protected void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java"
+ line="85"
+ column="29"/>
</issue>
<issue
@@ -304,7 +340,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+ line="42"
+ column="26"/>
</issue>
<issue
@@ -313,7 +351,9 @@
errorLine1=" protected List<Map<String, Object>> getData(String prefix) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+ line="59"
+ column="15"/>
</issue>
<issue
@@ -322,7 +362,9 @@
errorLine1=" protected List<Map<String, Object>> getData(String prefix) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+ line="59"
+ column="49"/>
</issue>
<issue
@@ -331,7 +373,9 @@
errorLine1=" protected Intent activityIntent(String pkg, String componentName) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+ line="128"
+ column="15"/>
</issue>
<issue
@@ -340,7 +384,9 @@
errorLine1=" protected Intent activityIntent(String pkg, String componentName) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+ line="128"
+ column="37"/>
</issue>
<issue
@@ -349,7 +395,9 @@
errorLine1=" protected Intent activityIntent(String pkg, String componentName) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+ line="128"
+ column="49"/>
</issue>
<issue
@@ -358,7 +406,9 @@
errorLine1=" protected Intent browseIntent(String path) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+ line="134"
+ column="15"/>
</issue>
<issue
@@ -367,7 +417,9 @@
errorLine1=" protected Intent browseIntent(String path) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+ line="134"
+ column="35"/>
</issue>
<issue
@@ -376,7 +428,9 @@
errorLine1=" protected void addItem(List<Map<String, Object>> data, String name, Intent intent) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+ line="141"
+ column="28"/>
</issue>
<issue
@@ -385,7 +439,9 @@
errorLine1=" protected void addItem(List<Map<String, Object>> data, String name, Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+ line="141"
+ column="60"/>
</issue>
<issue
@@ -394,7 +450,9 @@
errorLine1=" protected void addItem(List<Map<String, Object>> data, String name, Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"/>
+ file="src/main/java/com/example/android/support/vectordrawable/app/SupportVectorDrawableDemos.java"
+ line="141"
+ column="73"/>
</issue>
</issues>
diff --git a/viewpager/viewpager/lint-baseline.xml b/viewpager/viewpager/lint-baseline.xml
index 062254e..ff70f907 100644
--- a/viewpager/viewpager/lint-baseline.xml
+++ b/viewpager/viewpager/lint-baseline.xml
@@ -250,7 +250,9 @@
errorLine1=" public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
+ file="src/main/java/androidx/viewpager/widget/ViewPager.java"
+ line="3090"
+ column="56"/>
</issue>
<issue
@@ -259,7 +261,9 @@
errorLine1=" public LayoutParams(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
+ file="src/main/java/androidx/viewpager/widget/ViewPager.java"
+ line="3205"
+ column="29"/>
</issue>
<issue
@@ -268,7 +272,9 @@
errorLine1=" public LayoutParams(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/viewpager/widget/ViewPager.java"/>
+ file="src/main/java/androidx/viewpager/widget/ViewPager.java"
+ line="3205"
+ column="46"/>
</issue>
</issues>
diff --git a/wear/watchface/watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditorSessionTest.kt b/wear/watchface/watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditorSessionTest.kt
index 8aa1a85..255b3d8 100644
--- a/wear/watchface/watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditorSessionTest.kt
+++ b/wear/watchface/watchface-editor/src/androidTest/java/androidx/wear/watchface/editor/EditorSessionTest.kt
@@ -1117,6 +1117,7 @@
}
}
+ @Suppress("DEPRECATION")
@Test
public fun launchComplicationDataSourceChooser() {
ComplicationDataSourceChooserContract.useTestComplicationHelperActivity = true
diff --git a/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt b/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt
index 2e81b76..253728e 100644
--- a/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt
+++ b/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt
@@ -277,6 +277,7 @@
}
// Used by tests.
+ @Suppress("DEPRECATION")
@Throws(TimeoutCancellationException::class)
internal suspend fun createOnWatchEditorSessionImpl(
activity: ComponentActivity,
@@ -1083,6 +1084,7 @@
return intent
}
+ @Suppress("DEPRECATION")
override fun parseResult(resultCode: Int, intent: Intent?) = intent?.let {
val extras = intent.extras?.let { extras ->
Bundle(extras).apply { remove(EXTRA_PROVIDER_INFO) }
diff --git a/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/WatchFaceEditorContract.kt b/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/WatchFaceEditorContract.kt
index a266048..4ece658 100644
--- a/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/WatchFaceEditorContract.kt
+++ b/wear/watchface/watchface-editor/src/main/java/androidx/wear/watchface/editor/WatchFaceEditorContract.kt
@@ -138,6 +138,7 @@
* if there is one or `null` otherwise. Intended for use by the watch face editor activity.
* @throws [TimeoutCancellationException] in case of en error.
*/
+ @Suppress("DEPRECATION")
@SuppressLint("NewApi")
@JvmStatic
@Throws(TimeoutCancellationException::class)
diff --git a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/ComplicationHelperActivityTest.kt b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/ComplicationHelperActivityTest.kt
index 55aafa0..b2f2811 100644
--- a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/ComplicationHelperActivityTest.kt
+++ b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/ComplicationHelperActivityTest.kt
@@ -316,6 +316,7 @@
}
/** The watch face component name encoded in the intent. */
+@Suppress("DEPRECATION")
private val Intent.watchFaceComponentName
get() = getParcelableExtra<ComponentName>(
ComplicationDataSourceChooserIntent.EXTRA_WATCH_FACE_COMPONENT_NAME
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationHelperActivity.java b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationHelperActivity.java
index f0a97aa..bf2a9f7 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationHelperActivity.java
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/ComplicationHelperActivity.java
@@ -191,6 +191,7 @@
}
@Override
+ @SuppressWarnings("deprecation")
public void launchComplicationDeniedActivity() {
Intent complicationDeniedIntent =
mActivity.getIntent().getParcelableExtra(
@@ -243,6 +244,7 @@
start(true);
}
+ @SuppressWarnings("deprecation")
void start(boolean shouldShowRequestPermissionRationale) {
if (shouldShowRequestPermissionRationale
&& mDelegate.shouldShowRequestPermissionRationale()) {
diff --git a/wear/wear-input/src/main/java/androidx/wear/input/RemoteInputIntentHelper.kt b/wear/wear-input/src/main/java/androidx/wear/input/RemoteInputIntentHelper.kt
index 4d8d6fc..87ded0e 100644
--- a/wear/wear-input/src/main/java/androidx/wear/input/RemoteInputIntentHelper.kt
+++ b/wear/wear-input/src/main/java/androidx/wear/input/RemoteInputIntentHelper.kt
@@ -100,6 +100,7 @@
* @return The array of [RemoteInput] previously added with [putRemoteInputsExtra] or null
* which means no user input required.
*/
+ @Suppress("DEPRECATION")
@JvmStatic
@Nullable
public fun getRemoteInputsExtra(intent: Intent): List<RemoteInput>? =
diff --git a/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/RemoteActivityHelper.kt b/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/RemoteActivityHelper.kt
index 47c4577..3c9f8ba 100644
--- a/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/RemoteActivityHelper.kt
+++ b/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/RemoteActivityHelper.kt
@@ -97,6 +97,7 @@
* @param intent The intent holding configuration.
* @return The remote intent, or null if none was set.
*/
+ @Suppress("DEPRECATION")
@JvmStatic
public fun getTargetIntent(intent: Intent): Intent? =
intent.getParcelableExtra(EXTRA_INTENT)
@@ -117,6 +118,7 @@
* @param intent The intent holding configuration.
* @return The result receiver, or null if none was set.
*/
+ @Suppress("DEPRECATION")
@JvmStatic
internal fun getRemoteIntentResultReceiver(intent: Intent): ResultReceiver? =
intent.getParcelableExtra(EXTRA_RESULT_RECEIVER)
diff --git a/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/WatchFaceConfigIntentHelper.kt b/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/WatchFaceConfigIntentHelper.kt
index 99aa404..54eefab 100644
--- a/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/WatchFaceConfigIntentHelper.kt
+++ b/wear/wear-remote-interactions/src/main/java/androidx/wear/remote/interactions/WatchFaceConfigIntentHelper.kt
@@ -85,6 +85,7 @@
* @return the value of an item previously added with [putWatchFaceComponentExtra], or
* null if no value was found.
*/
+ @Suppress("DEPRECATION")
@JvmStatic
@Nullable
public fun getWatchFaceComponentExtra(watchFaceIntent: Intent): ComponentName? =
diff --git a/wear/wear/lint-baseline.xml b/wear/wear/lint-baseline.xml
index 3aea4c8..3ab685b 100644
--- a/wear/wear/lint-baseline.xml
+++ b/wear/wear/lint-baseline.xml
@@ -235,7 +235,9 @@
errorLine1=" public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/ambient/AmbientModeSupport.java"/>
+ file="src/main/java/androidx/wear/ambient/AmbientModeSupport.java"
+ line="296"
+ column="76"/>
</issue>
<issue
@@ -244,7 +246,9 @@
errorLine1=" public void setForeground(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
+ file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"
+ line="114"
+ column="31"/>
</issue>
<issue
@@ -253,7 +257,9 @@
errorLine1=" public LayoutParams generateLayoutParams(AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
+ file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"
+ line="126"
+ column="12"/>
</issue>
<issue
@@ -262,7 +268,9 @@
errorLine1=" public LayoutParams generateLayoutParams(AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
+ file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"
+ line="126"
+ column="46"/>
</issue>
<issue
@@ -271,7 +279,9 @@
errorLine1=" protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
+ file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"
+ line="291"
+ column="41"/>
</issue>
<issue
@@ -280,7 +290,9 @@
errorLine1=" protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
+ file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"
+ line="296"
+ column="15"/>
</issue>
<issue
@@ -289,7 +301,9 @@
errorLine1=" protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"/>
+ file="src/main/java/androidx/wear/widget/BoxInsetLayout.java"
+ line="296"
+ column="59"/>
</issue>
<issue
@@ -298,7 +312,9 @@
errorLine1=" public CircledImageView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+ file="src/main/java/androidx/wear/widget/CircledImageView.java"
+ line="119"
+ column="29"/>
</issue>
<issue
@@ -307,7 +323,9 @@
errorLine1=" public CircledImageView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+ file="src/main/java/androidx/wear/widget/CircledImageView.java"
+ line="123"
+ column="29"/>
</issue>
<issue
@@ -316,7 +334,9 @@
errorLine1=" public CircledImageView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+ file="src/main/java/androidx/wear/widget/CircledImageView.java"
+ line="123"
+ column="46"/>
</issue>
<issue
@@ -325,7 +345,9 @@
errorLine1=" public CircledImageView(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+ file="src/main/java/androidx/wear/widget/CircledImageView.java"
+ line="127"
+ column="29"/>
</issue>
<issue
@@ -334,7 +356,9 @@
errorLine1=" public CircledImageView(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+ file="src/main/java/androidx/wear/widget/CircledImageView.java"
+ line="127"
+ column="46"/>
</issue>
<issue
@@ -343,7 +367,9 @@
errorLine1=" protected void onDraw(Canvas canvas) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+ file="src/main/java/androidx/wear/widget/CircledImageView.java"
+ line="225"
+ column="27"/>
</issue>
<issue
@@ -352,7 +378,9 @@
errorLine1=" public ColorStateList getCircleColorStateList() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+ file="src/main/java/androidx/wear/widget/CircledImageView.java"
+ line="530"
+ column="12"/>
</issue>
<issue
@@ -361,7 +389,9 @@
errorLine1=" public void setCircleColorStateList(ColorStateList circleColor) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+ file="src/main/java/androidx/wear/widget/CircledImageView.java"
+ line="535"
+ column="41"/>
</issue>
<issue
@@ -370,7 +400,9 @@
errorLine1=" protected void onVisibilityChanged(View changedView, int visibility) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+ file="src/main/java/androidx/wear/widget/CircledImageView.java"
+ line="566"
+ column="40"/>
</issue>
<issue
@@ -379,7 +411,9 @@
errorLine1=" public void setCircleBorderCap(Paint.Cap circleBorderCap) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+ file="src/main/java/androidx/wear/widget/CircledImageView.java"
+ line="625"
+ column="36"/>
</issue>
<issue
@@ -388,7 +422,9 @@
errorLine1=" public Drawable getImageDrawable() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+ file="src/main/java/androidx/wear/widget/CircledImageView.java"
+ line="665"
+ column="12"/>
</issue>
<issue
@@ -397,7 +433,9 @@
errorLine1=" public void setImageDrawable(Drawable drawable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircledImageView.java"/>
+ file="src/main/java/androidx/wear/widget/CircledImageView.java"
+ line="670"
+ column="34"/>
</issue>
<issue
@@ -406,7 +444,9 @@
errorLine1=" void onTimerFinished(CircularProgressLayout layout);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+ file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+ line="95"
+ column="30"/>
</issue>
<issue
@@ -415,7 +455,9 @@
errorLine1=" public CircularProgressLayout(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+ file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+ line="98"
+ column="35"/>
</issue>
<issue
@@ -424,7 +466,9 @@
errorLine1=" public CircularProgressLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+ file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+ line="102"
+ column="35"/>
</issue>
<issue
@@ -433,7 +477,9 @@
errorLine1=" public CircularProgressLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+ file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+ line="102"
+ column="52"/>
</issue>
<issue
@@ -442,7 +488,9 @@
errorLine1=" public CircularProgressLayout(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+ file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+ line="106"
+ column="35"/>
</issue>
<issue
@@ -451,7 +499,9 @@
errorLine1=" public CircularProgressLayout(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+ file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+ line="106"
+ column="52"/>
</issue>
<issue
@@ -460,7 +510,9 @@
errorLine1=" public CircularProgressLayout(Context context, AttributeSet attrs, int defStyleAttr,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+ file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+ line="110"
+ column="35"/>
</issue>
<issue
@@ -469,7 +521,9 @@
errorLine1=" public CircularProgressLayout(Context context, AttributeSet attrs, int defStyleAttr,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+ file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+ line="110"
+ column="52"/>
</issue>
<issue
@@ -478,7 +532,9 @@
errorLine1=" public void setColorSchemeColors(int... colors) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+ file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+ line="339"
+ column="38"/>
</issue>
<issue
@@ -487,7 +543,9 @@
errorLine1=" public int[] getColorSchemeColors() {"
errorLine2=" ~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"/>
+ file="src/main/java/androidx/wear/widget/CircularProgressLayout.java"
+ line="348"
+ column="12"/>
</issue>
<issue
@@ -496,7 +554,9 @@
errorLine1=" public void onCreate(Bundle savedInstanceState) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/wear/activity/ConfirmationActivity.java"/>
+ file="src/main/java/androidx/wear/activity/ConfirmationActivity.java"
+ line="102"
+ column="26"/>
</issue>
<issue
@@ -505,7 +565,9 @@
errorLine1=" public CurvingLayoutCallback(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"/>
+ file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"
+ line="52"
+ column="34"/>
</issue>
<issue
@@ -514,7 +576,9 @@
errorLine1=" public void onLayoutFinished(View child, RecyclerView parent) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"/>
+ file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"
+ line="61"
+ column="34"/>
</issue>
<issue
@@ -523,7 +587,9 @@
errorLine1=" public void onLayoutFinished(View child, RecyclerView parent) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"/>
+ file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"
+ line="61"
+ column="46"/>
</issue>
<issue
@@ -532,7 +598,9 @@
errorLine1=" public void adjustAnchorOffsetXY(View child, float[] anchorOffsetXY) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"/>
+ file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"
+ line="115"
+ column="38"/>
</issue>
<issue
@@ -541,7 +609,9 @@
errorLine1=" public void adjustAnchorOffsetXY(View child, float[] anchorOffsetXY) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"/>
+ file="src/main/java/androidx/wear/widget/CurvingLayoutCallback.java"
+ line="115"
+ column="50"/>
</issue>
<issue
@@ -550,7 +620,9 @@
errorLine1=" public static boolean isStandalone(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/utils/MetadataConstants.java"/>
+ file="src/main/java/androidx/wear/utils/MetadataConstants.java"
+ line="133"
+ column="40"/>
</issue>
<issue
@@ -559,7 +631,9 @@
errorLine1=" public static boolean isNotificationBridgingEnabled(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/utils/MetadataConstants.java"/>
+ file="src/main/java/androidx/wear/utils/MetadataConstants.java"
+ line="153"
+ column="57"/>
</issue>
<issue
@@ -568,7 +642,9 @@
errorLine1=" public static int getPreviewDrawableResourceId(Context context, boolean circular) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/utils/MetadataConstants.java"/>
+ file="src/main/java/androidx/wear/utils/MetadataConstants.java"
+ line="176"
+ column="52"/>
</issue>
<issue
@@ -577,7 +653,9 @@
errorLine1=" void initialize(WearableNavigationDrawerView drawer,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"
+ line="47"
+ column="25"/>
</issue>
<issue
@@ -586,7 +664,9 @@
errorLine1=" WearableNavigationDrawerPresenter presenter);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"
+ line="48"
+ column="17"/>
</issue>
<issue
@@ -595,7 +675,9 @@
errorLine1=" void setNavigationPagerAdapter(WearableNavigationDrawerAdapter adapter);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"
+ line="63"
+ column="40"/>
</issue>
<issue
@@ -604,7 +686,9 @@
errorLine1=" public MultiPagePresenter(WearableNavigationDrawerView drawer, Ui ui,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"
+ line="71"
+ column="31"/>
</issue>
<issue
@@ -613,7 +697,9 @@
errorLine1=" public MultiPagePresenter(WearableNavigationDrawerView drawer, Ui ui,"
errorLine2=" ~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"
+ line="71"
+ column="68"/>
</issue>
<issue
@@ -622,7 +708,9 @@
errorLine1=" public void onNewAdapter(WearableNavigationDrawerAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/MultiPagePresenter.java"
+ line="92"
+ column="30"/>
</issue>
<issue
@@ -631,7 +719,9 @@
errorLine1=" WearableNavigationDrawerView drawer, WearableNavigationDrawerPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/MultiPageUi.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/MultiPageUi.java"
+ line="55"
+ column="13"/>
</issue>
<issue
@@ -640,7 +730,9 @@
errorLine1=" WearableNavigationDrawerView drawer, WearableNavigationDrawerPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/MultiPageUi.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/MultiPageUi.java"
+ line="55"
+ column="50"/>
</issue>
<issue
@@ -649,7 +741,9 @@
errorLine1=" public void setNavigationPagerAdapter(final WearableNavigationDrawerAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/MultiPageUi.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/MultiPageUi.java"
+ line="75"
+ column="49"/>
</issue>
<issue
@@ -658,7 +752,9 @@
errorLine1=" public PageIndicatorView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+ line="82"
+ column="30"/>
</issue>
<issue
@@ -667,7 +763,9 @@
errorLine1=" public PageIndicatorView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+ line="86"
+ column="30"/>
</issue>
<issue
@@ -676,7 +774,9 @@
errorLine1=" public PageIndicatorView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+ line="86"
+ column="47"/>
</issue>
<issue
@@ -685,7 +785,9 @@
errorLine1=" public PageIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+ line="90"
+ column="30"/>
</issue>
<issue
@@ -694,7 +796,9 @@
errorLine1=" public PageIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+ line="90"
+ column="47"/>
</issue>
<issue
@@ -703,7 +807,9 @@
errorLine1=" public void setPager(ViewPager pager) {"
errorLine2=" ~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+ line="194"
+ column="26"/>
</issue>
<issue
@@ -712,7 +818,9 @@
errorLine1=" public void setDotFadeOutDuration(int duration, TimeUnit unit) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+ line="345"
+ column="53"/>
</issue>
<issue
@@ -721,7 +829,9 @@
errorLine1=" public void setDotFadeInDuration(int duration, TimeUnit unit) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+ line="363"
+ column="52"/>
</issue>
<issue
@@ -730,7 +840,9 @@
errorLine1=" public void setPagerAdapter(PagerAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+ line="558"
+ column="33"/>
</issue>
<issue
@@ -739,7 +851,9 @@
errorLine1=" protected void onDraw(Canvas canvas) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/PageIndicatorView.java"
+ line="593"
+ column="27"/>
</issue>
<issue
@@ -748,7 +862,9 @@
errorLine1=" public static int getScreenWidthPx(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/ResourcesUtil.java"/>
+ file="src/main/java/androidx/wear/internal/widget/ResourcesUtil.java"
+ line="36"
+ column="40"/>
</issue>
<issue
@@ -757,7 +873,9 @@
errorLine1=" public static int getScreenHeightPx(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/ResourcesUtil.java"/>
+ file="src/main/java/androidx/wear/internal/widget/ResourcesUtil.java"
+ line="43"
+ column="41"/>
</issue>
<issue
@@ -766,7 +884,9 @@
errorLine1=" public static int getFractionOfScreenPx(Context context, int screenPx, @FractionRes int resId) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/ResourcesUtil.java"/>
+ file="src/main/java/androidx/wear/internal/widget/ResourcesUtil.java"
+ line="51"
+ column="45"/>
</issue>
<issue
@@ -775,7 +895,9 @@
errorLine1=" protected void onBoundsChange(Rect bounds) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/RoundedDrawable.java"/>
+ file="src/main/java/androidx/wear/widget/RoundedDrawable.java"
+ line="190"
+ column="35"/>
</issue>
<issue
@@ -784,7 +906,9 @@
errorLine1=" public void setColorFilter(ColorFilter cf) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/RoundedDrawable.java"/>
+ file="src/main/java/androidx/wear/widget/RoundedDrawable.java"
+ line="248"
+ column="32"/>
</issue>
<issue
@@ -793,7 +917,9 @@
errorLine1=" public void onAnimationCancel(Animator animator) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"/>
+ file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"
+ line="36"
+ column="35"/>
</issue>
<issue
@@ -802,7 +928,9 @@
errorLine1=" public void onAnimationEnd(Animator animator) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"/>
+ file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"
+ line="41"
+ column="32"/>
</issue>
<issue
@@ -811,7 +939,9 @@
errorLine1=" public void onAnimationRepeat(Animator animator) {}"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"/>
+ file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"
+ line="48"
+ column="35"/>
</issue>
<issue
@@ -820,7 +950,9 @@
errorLine1=" public void onAnimationStart(Animator animator) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"/>
+ file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"
+ line="51"
+ column="34"/>
</issue>
<issue
@@ -829,7 +961,9 @@
errorLine1=" public void onAnimationComplete(Animator animator) {}"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"/>
+ file="src/main/java/androidx/wear/widget/SimpleAnimatorListener.java"
+ line="58"
+ column="37"/>
</issue>
<issue
@@ -838,7 +972,9 @@
errorLine1=" void setPresenter(WearableNavigationDrawerPresenter presenter);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"
+ line="53"
+ column="27"/>
</issue>
<issue
@@ -847,7 +983,9 @@
errorLine1=" void setIcon(int index, Drawable drawable, CharSequence contentDescription);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"
+ line="63"
+ column="33"/>
</issue>
<issue
@@ -856,7 +994,9 @@
errorLine1=" void setIcon(int index, Drawable drawable, CharSequence contentDescription);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"
+ line="63"
+ column="52"/>
</issue>
<issue
@@ -865,7 +1005,9 @@
errorLine1=" void setText(CharSequence itemText, boolean showToastIfNoTextView);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"
+ line="70"
+ column="22"/>
</issue>
<issue
@@ -874,7 +1016,9 @@
errorLine1=" public SinglePagePresenter(Ui ui, boolean isAccessibilityEnabled) {"
errorLine2=" ~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"
+ line="93"
+ column="32"/>
</issue>
<issue
@@ -883,7 +1027,9 @@
errorLine1=" public void onNewAdapter(WearableNavigationDrawerAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/SinglePagePresenter.java"
+ line="124"
+ column="30"/>
</issue>
<issue
@@ -892,7 +1038,9 @@
errorLine1=" public SinglePageUi(WearableNavigationDrawerView navigationDrawer) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"
+ line="88"
+ column="25"/>
</issue>
<issue
@@ -901,7 +1049,9 @@
errorLine1=" public void setPresenter(WearableNavigationDrawerPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"
+ line="96"
+ column="30"/>
</issue>
<issue
@@ -910,7 +1060,9 @@
errorLine1=" public void setIcon(int index, Drawable drawable, CharSequence contentDescription) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"
+ line="129"
+ column="36"/>
</issue>
<issue
@@ -919,7 +1071,9 @@
errorLine1=" public void setIcon(int index, Drawable drawable, CharSequence contentDescription) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"
+ line="129"
+ column="55"/>
</issue>
<issue
@@ -928,7 +1082,9 @@
errorLine1=" public void setText(CharSequence itemText, boolean showToastIfNoTextView) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/SinglePageUi.java"
+ line="135"
+ column="25"/>
</issue>
<issue
@@ -937,7 +1093,9 @@
errorLine1=" public void onSwipeStarted(SwipeDismissFrameLayout layout) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+ file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+ line="54"
+ column="36"/>
</issue>
<issue
@@ -946,7 +1104,9 @@
errorLine1=" public void onSwipeCanceled(SwipeDismissFrameLayout layout) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+ file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+ line="62"
+ column="37"/>
</issue>
<issue
@@ -955,7 +1115,9 @@
errorLine1=" public void onDismissed(SwipeDismissFrameLayout layout) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+ file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+ line="69"
+ column="33"/>
</issue>
<issue
@@ -964,7 +1126,9 @@
errorLine1=" public SwipeDismissFrameLayout(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+ file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+ line="81"
+ column="36"/>
</issue>
<issue
@@ -973,7 +1137,9 @@
errorLine1=" public SwipeDismissFrameLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+ file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+ line="99"
+ column="36"/>
</issue>
<issue
@@ -982,7 +1148,9 @@
errorLine1=" public SwipeDismissFrameLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+ file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+ line="99"
+ column="53"/>
</issue>
<issue
@@ -991,7 +1159,9 @@
errorLine1=" public SwipeDismissFrameLayout(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+ file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+ line="114"
+ column="36"/>
</issue>
<issue
@@ -1000,7 +1170,9 @@
errorLine1=" public SwipeDismissFrameLayout(Context context, AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+ file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+ line="114"
+ column="53"/>
</issue>
<issue
@@ -1009,7 +1181,9 @@
errorLine1=" public SwipeDismissFrameLayout(Context context, AttributeSet attrs, int defStyle,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+ file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+ line="130"
+ column="36"/>
</issue>
<issue
@@ -1018,7 +1192,9 @@
errorLine1=" public SwipeDismissFrameLayout(Context context, AttributeSet attrs, int defStyle,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+ file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+ line="130"
+ column="53"/>
</issue>
<issue
@@ -1027,7 +1203,9 @@
errorLine1=" public void addCallback(Callback callback) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+ file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+ line="136"
+ column="29"/>
</issue>
<issue
@@ -1036,7 +1214,9 @@
errorLine1=" public void removeCallback(Callback callback) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"/>
+ file="src/main/java/androidx/wear/widget/SwipeDismissFrameLayout.java"
+ line="145"
+ column="32"/>
</issue>
<issue
@@ -1045,7 +1225,9 @@
errorLine1=" public MenuItem setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="252"
+ column="16"/>
</issue>
<issue
@@ -1054,7 +1236,9 @@
errorLine1=" public MenuItem setTitle(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="252"
+ column="34"/>
</issue>
<issue
@@ -1063,7 +1247,9 @@
errorLine1=" public MenuItem setTitle(int title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="261"
+ column="16"/>
</issue>
<issue
@@ -1072,7 +1258,9 @@
errorLine1=" public CharSequence getTitle() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="266"
+ column="16"/>
</issue>
<issue
@@ -1081,7 +1269,9 @@
errorLine1=" public MenuItem setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="271"
+ column="16"/>
</issue>
<issue
@@ -1090,7 +1280,9 @@
errorLine1=" public MenuItem setIcon(Drawable icon) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="271"
+ column="33"/>
</issue>
<issue
@@ -1099,7 +1291,9 @@
errorLine1=" public MenuItem setIcon(int iconRes) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="280"
+ column="16"/>
</issue>
<issue
@@ -1108,7 +1302,9 @@
errorLine1=" public Drawable getIcon() {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="285"
+ column="16"/>
</issue>
<issue
@@ -1117,7 +1313,9 @@
errorLine1=" public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="290"
+ column="16"/>
</issue>
<issue
@@ -1126,7 +1324,9 @@
errorLine1=" public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="290"
+ column="52"/>
</issue>
<issue
@@ -1135,7 +1335,9 @@
errorLine1=" public MenuItem setTitleCondensed(CharSequence title) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="306"
+ column="16"/>
</issue>
<issue
@@ -1144,7 +1346,9 @@
errorLine1=" public MenuItem setTitleCondensed(CharSequence title) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="306"
+ column="43"/>
</issue>
<issue
@@ -1153,7 +1357,9 @@
errorLine1=" public CharSequence getTitleCondensed() {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="311"
+ column="16"/>
</issue>
<issue
@@ -1162,7 +1368,9 @@
errorLine1=" public MenuItem setIntent(Intent intent) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="316"
+ column="16"/>
</issue>
<issue
@@ -1171,7 +1379,9 @@
errorLine1=" public MenuItem setIntent(Intent intent) {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="316"
+ column="35"/>
</issue>
<issue
@@ -1180,7 +1390,9 @@
errorLine1=" public Intent getIntent() {"
errorLine2=" ~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="321"
+ column="16"/>
</issue>
<issue
@@ -1189,7 +1401,9 @@
errorLine1=" public MenuItem setShortcut(char numericChar, char alphaChar) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="326"
+ column="16"/>
</issue>
<issue
@@ -1198,7 +1412,9 @@
errorLine1=" public MenuItem setNumericShortcut(char numericChar) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="331"
+ column="16"/>
</issue>
<issue
@@ -1207,7 +1423,9 @@
errorLine1=" public MenuItem setAlphabeticShortcut(char alphaChar) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="341"
+ column="16"/>
</issue>
<issue
@@ -1216,7 +1434,9 @@
errorLine1=" public MenuItem setCheckable(boolean checkable) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="351"
+ column="16"/>
</issue>
<issue
@@ -1225,7 +1445,9 @@
errorLine1=" public MenuItem setChecked(boolean checked) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="361"
+ column="16"/>
</issue>
<issue
@@ -1234,7 +1456,9 @@
errorLine1=" public MenuItem setVisible(boolean visible) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="371"
+ column="16"/>
</issue>
<issue
@@ -1243,7 +1467,9 @@
errorLine1=" public MenuItem setEnabled(boolean enabled) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="381"
+ column="16"/>
</issue>
<issue
@@ -1252,7 +1478,9 @@
errorLine1=" public SubMenu getSubMenu() {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="396"
+ column="16"/>
</issue>
<issue
@@ -1261,7 +1489,9 @@
errorLine1=" public ContextMenu.ContextMenuInfo getMenuInfo() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="401"
+ column="16"/>
</issue>
<issue
@@ -1270,7 +1500,9 @@
errorLine1=" public MenuItem setShowAsActionFlags(int actionEnum) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="411"
+ column="16"/>
</issue>
<issue
@@ -1279,7 +1511,9 @@
errorLine1=" public MenuItem setActionView(View view) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="416"
+ column="16"/>
</issue>
<issue
@@ -1288,7 +1522,9 @@
errorLine1=" public MenuItem setActionView(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="416"
+ column="39"/>
</issue>
<issue
@@ -1297,7 +1533,9 @@
errorLine1=" public MenuItem setActionView(int resId) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="421"
+ column="16"/>
</issue>
<issue
@@ -1306,7 +1544,9 @@
errorLine1=" public View getActionView() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="426"
+ column="16"/>
</issue>
<issue
@@ -1315,7 +1555,9 @@
errorLine1=" public MenuItem setActionProvider(ActionProvider actionProvider) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="431"
+ column="16"/>
</issue>
<issue
@@ -1324,7 +1566,9 @@
errorLine1=" public MenuItem setActionProvider(ActionProvider actionProvider) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="431"
+ column="43"/>
</issue>
<issue
@@ -1333,7 +1577,9 @@
errorLine1=" public ActionProvider getActionProvider() {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="436"
+ column="16"/>
</issue>
<issue
@@ -1342,7 +1588,9 @@
errorLine1=" public MenuItem setOnActionExpandListener(OnActionExpandListener listener) {"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="456"
+ column="16"/>
</issue>
<issue
@@ -1351,7 +1599,9 @@
errorLine1=" public MenuItem setOnActionExpandListener(OnActionExpandListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerMenu.java"
+ line="456"
+ column="51"/>
</issue>
<issue
@@ -1360,7 +1610,9 @@
errorLine1=" public WearableActionDrawerView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+ line="98"
+ column="37"/>
</issue>
<issue
@@ -1369,7 +1621,9 @@
errorLine1=" public WearableActionDrawerView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+ line="102"
+ column="37"/>
</issue>
<issue
@@ -1378,7 +1632,9 @@
errorLine1=" public WearableActionDrawerView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+ line="102"
+ column="54"/>
</issue>
<issue
@@ -1387,7 +1643,9 @@
errorLine1=" public WearableActionDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+ line="106"
+ column="37"/>
</issue>
<issue
@@ -1396,7 +1654,9 @@
errorLine1=" public WearableActionDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+ line="106"
+ column="54"/>
</issue>
<issue
@@ -1405,7 +1665,9 @@
errorLine1=" Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+ line="111"
+ column="13"/>
</issue>
<issue
@@ -1414,7 +1676,9 @@
errorLine1=" Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+ line="111"
+ column="30"/>
</issue>
<issue
@@ -1423,7 +1687,9 @@
errorLine1=" public void onPeekContainerClicked(View v) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+ line="222"
+ column="40"/>
</issue>
<issue
@@ -1432,7 +1698,9 @@
errorLine1=" public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+ line="238"
+ column="44"/>
</issue>
<issue
@@ -1441,7 +1709,9 @@
errorLine1=" public Menu getMenu() {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableActionDrawerView.java"
+ line="320"
+ column="12"/>
</issue>
<issue
@@ -1450,7 +1720,9 @@
errorLine1=" public WearableActivityController getWearableController(Activity activity,"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/ambient/WearableControllerProvider.java"/>
+ file="src/main/java/androidx/wear/ambient/WearableControllerProvider.java"
+ line="46"
+ column="12"/>
</issue>
<issue
@@ -1459,7 +1731,9 @@
errorLine1=" public WearableActivityController getWearableController(Activity activity,"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/ambient/WearableControllerProvider.java"/>
+ file="src/main/java/androidx/wear/ambient/WearableControllerProvider.java"
+ line="46"
+ column="61"/>
</issue>
<issue
@@ -1468,7 +1742,9 @@
errorLine1=" final AmbientDelegate.AmbientCallback callback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/ambient/WearableControllerProvider.java"/>
+ file="src/main/java/androidx/wear/ambient/WearableControllerProvider.java"
+ line="47"
+ column="19"/>
</issue>
<issue
@@ -1477,7 +1753,9 @@
errorLine1=" public WearableDrawerLayout(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="221"
+ column="33"/>
</issue>
<issue
@@ -1486,7 +1764,9 @@
errorLine1=" public WearableDrawerLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="225"
+ column="33"/>
</issue>
<issue
@@ -1495,7 +1775,9 @@
errorLine1=" public WearableDrawerLayout(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="225"
+ column="50"/>
</issue>
<issue
@@ -1504,7 +1786,9 @@
errorLine1=" public WearableDrawerLayout(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="229"
+ column="33"/>
</issue>
<issue
@@ -1513,7 +1797,9 @@
errorLine1=" public WearableDrawerLayout(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="229"
+ column="50"/>
</issue>
<issue
@@ -1522,7 +1808,9 @@
errorLine1=" Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="235"
+ column="13"/>
</issue>
<issue
@@ -1531,7 +1819,9 @@
errorLine1=" Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="235"
+ column="30"/>
</issue>
<issue
@@ -1540,7 +1830,9 @@
errorLine1=" public WindowInsets onApplyWindowInsets(WindowInsets insets) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="324"
+ column="12"/>
</issue>
<issue
@@ -1549,7 +1841,9 @@
errorLine1=" public WindowInsets onApplyWindowInsets(WindowInsets insets) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="324"
+ column="45"/>
</issue>
<issue
@@ -1558,7 +1852,9 @@
errorLine1=" public boolean onInterceptTouchEvent(MotionEvent ev) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="498"
+ column="42"/>
</issue>
<issue
@@ -1567,7 +1863,9 @@
errorLine1=" public boolean onTouchEvent(MotionEvent ev) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="517"
+ column="33"/>
</issue>
<issue
@@ -1576,7 +1874,9 @@
errorLine1=" public void addView(View child, int index, ViewGroup.LayoutParams params) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="540"
+ column="25"/>
</issue>
<issue
@@ -1585,7 +1885,9 @@
errorLine1=" public void addView(View child, int index, ViewGroup.LayoutParams params) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="540"
+ column="48"/>
</issue>
<issue
@@ -1594,7 +1896,9 @@
errorLine1=" View v,"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="574"
+ column="13"/>
</issue>
<issue
@@ -1603,7 +1907,9 @@
errorLine1=" public void setDrawerStateCallback(DrawerStateCallback callback) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="601"
+ column="40"/>
</issue>
<issue
@@ -1612,7 +1918,9 @@
errorLine1=" public void onFlingComplete(View view) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="639"
+ column="33"/>
</issue>
<issue
@@ -1621,7 +1929,9 @@
errorLine1=" public void onDrawerOpened(WearableDrawerLayout layout, WearableDrawerView drawerView) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="926"
+ column="36"/>
</issue>
<issue
@@ -1630,7 +1940,9 @@
errorLine1=" public void onDrawerOpened(WearableDrawerLayout layout, WearableDrawerView drawerView) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="926"
+ column="65"/>
</issue>
<issue
@@ -1639,7 +1951,9 @@
errorLine1=" public void onDrawerClosed(WearableDrawerLayout layout, WearableDrawerView drawerView) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="932"
+ column="36"/>
</issue>
<issue
@@ -1648,7 +1962,9 @@
errorLine1=" public void onDrawerClosed(WearableDrawerLayout layout, WearableDrawerView drawerView) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="932"
+ column="65"/>
</issue>
<issue
@@ -1657,7 +1973,9 @@
errorLine1=" public void onDrawerStateChanged(WearableDrawerLayout layout, @DrawerState int newState) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java"
+ line="940"
+ column="42"/>
</issue>
<issue
@@ -1666,7 +1984,9 @@
errorLine1=" public WearableDrawerView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+ line="136"
+ column="31"/>
</issue>
<issue
@@ -1675,7 +1995,9 @@
errorLine1=" public WearableDrawerView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+ line="140"
+ column="31"/>
</issue>
<issue
@@ -1684,7 +2006,9 @@
errorLine1=" public WearableDrawerView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+ line="140"
+ column="48"/>
</issue>
<issue
@@ -1693,7 +2017,9 @@
errorLine1=" public WearableDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+ line="144"
+ column="31"/>
</issue>
<issue
@@ -1702,7 +2028,9 @@
errorLine1=" public WearableDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+ line="144"
+ column="48"/>
</issue>
<issue
@@ -1711,7 +2039,9 @@
errorLine1=" Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+ line="149"
+ column="13"/>
</issue>
<issue
@@ -1720,7 +2050,9 @@
errorLine1=" Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+ line="149"
+ column="30"/>
</issue>
<issue
@@ -1729,7 +2061,9 @@
errorLine1=" public void onPeekContainerClicked(View v) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+ line="198"
+ column="40"/>
</issue>
<issue
@@ -1738,7 +2072,9 @@
errorLine1=" public void addView(View child, int index, ViewGroup.LayoutParams params) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+ line="228"
+ column="25"/>
</issue>
<issue
@@ -1747,7 +2083,9 @@
errorLine1=" public void addView(View child, int index, ViewGroup.LayoutParams params) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+ line="228"
+ column="48"/>
</issue>
<issue
@@ -1756,7 +2094,9 @@
errorLine1=" public void setPeekContent(View content) {"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+ line="280"
+ column="32"/>
</issue>
<issue
@@ -1765,7 +2105,9 @@
errorLine1=" public WearableDrawerController getController() {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableDrawerView.java"
+ line="435"
+ column="12"/>
</issue>
<issue
@@ -1774,7 +2116,9 @@
errorLine1=" public abstract void onLayoutFinished(View child, RecyclerView parent);"
errorLine2=" ~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+ file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+ line="52"
+ column="47"/>
</issue>
<issue
@@ -1783,7 +2127,9 @@
errorLine1=" public abstract void onLayoutFinished(View child, RecyclerView parent);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+ file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+ line="52"
+ column="59"/>
</issue>
<issue
@@ -1792,7 +2138,9 @@
errorLine1=" public WearableLinearLayoutManager(Context context, LayoutCallback layoutCallback) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+ file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+ line="61"
+ column="40"/>
</issue>
<issue
@@ -1801,7 +2149,9 @@
errorLine1=" public WearableLinearLayoutManager(Context context, LayoutCallback layoutCallback) {"
errorLine2=" ~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+ file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+ line="61"
+ column="57"/>
</issue>
<issue
@@ -1810,7 +2160,9 @@
errorLine1=" public WearableLinearLayoutManager(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+ file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+ line="71"
+ column="40"/>
</issue>
<issue
@@ -1819,7 +2171,9 @@
errorLine1=" int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+ file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+ line="96"
+ column="21"/>
</issue>
<issue
@@ -1828,7 +2182,9 @@
errorLine1=" int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+ file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+ line="96"
+ column="53"/>
</issue>
<issue
@@ -1837,7 +2193,9 @@
errorLine1=" public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+ file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+ line="104"
+ column="34"/>
</issue>
<issue
@@ -1846,7 +2204,9 @@
errorLine1=" public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"/>
+ file="src/main/java/androidx/wear/widget/WearableLinearLayoutManager.java"
+ line="104"
+ column="66"/>
</issue>
<issue
@@ -1855,7 +2215,9 @@
errorLine1=" public abstract void onNewAdapter(WearableNavigationDrawerAdapter adapter);"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java"
+ line="48"
+ column="39"/>
</issue>
<issue
@@ -1864,7 +2226,9 @@
errorLine1=" public void onItemSelectedListenerAdded(OnItemSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java"
+ line="74"
+ column="45"/>
</issue>
<issue
@@ -1873,7 +2237,9 @@
errorLine1=" public void onItemSelectedListenerRemoved(OnItemSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java"/>
+ file="src/main/java/androidx/wear/internal/widget/drawer/WearableNavigationDrawerPresenter.java"
+ line="82"
+ column="47"/>
</issue>
<issue
@@ -1882,7 +2248,9 @@
errorLine1=" public WearableNavigationDrawerView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="122"
+ column="41"/>
</issue>
<issue
@@ -1891,7 +2259,9 @@
errorLine1=" public WearableNavigationDrawerView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="125"
+ column="41"/>
</issue>
<issue
@@ -1900,7 +2270,9 @@
errorLine1=" public WearableNavigationDrawerView(Context context, AttributeSet attrs) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="125"
+ column="58"/>
</issue>
<issue
@@ -1909,7 +2281,9 @@
errorLine1=" public WearableNavigationDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="129"
+ column="41"/>
</issue>
<issue
@@ -1918,7 +2292,9 @@
errorLine1=" public WearableNavigationDrawerView(Context context, AttributeSet attrs, int defStyleAttr) {"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="129"
+ column="58"/>
</issue>
<issue
@@ -1927,7 +2303,9 @@
errorLine1=" public WearableNavigationDrawerView(Context context, AttributeSet attrs, int defStyleAttr,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="133"
+ column="41"/>
</issue>
<issue
@@ -1936,7 +2314,9 @@
errorLine1=" public WearableNavigationDrawerView(Context context, AttributeSet attrs, int defStyleAttr,"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="133"
+ column="58"/>
</issue>
<issue
@@ -1945,7 +2325,9 @@
errorLine1=" public void setAdapter(final WearableNavigationDrawerAdapter adapter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="177"
+ column="34"/>
</issue>
<issue
@@ -1954,7 +2336,9 @@
errorLine1=" public void addOnItemSelectedListener(OnItemSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="184"
+ column="43"/>
</issue>
<issue
@@ -1963,7 +2347,9 @@
errorLine1=" public void removeOnItemSelectedListener(OnItemSelectedListener listener) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="191"
+ column="46"/>
</issue>
<issue
@@ -1972,7 +2358,9 @@
errorLine1=" public boolean onInterceptTouchEvent(MotionEvent ev) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="213"
+ column="42"/>
</issue>
<issue
@@ -1981,7 +2369,9 @@
errorLine1=" public abstract CharSequence getItemText(int pos);"
errorLine2=" ~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="258"
+ column="25"/>
</issue>
<issue
@@ -1990,7 +2380,9 @@
errorLine1=" public abstract Drawable getItemDrawable(int pos);"
errorLine2=" ~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="263"
+ column="25"/>
</issue>
<issue
@@ -1999,7 +2391,9 @@
errorLine1=" public void setPresenter(WearableNavigationDrawerPresenter presenter) {"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"/>
+ file="src/main/java/androidx/wear/widget/drawer/WearableNavigationDrawerView.java"
+ line="289"
+ column="34"/>
</issue>
<issue
@@ -2008,7 +2402,9 @@
errorLine1=" public WearableRecyclerView(Context context) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"/>
+ file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"
+ line="64"
+ column="33"/>
</issue>
<issue
@@ -2017,7 +2413,9 @@
errorLine1=" public WearableRecyclerView(Context context, @Nullable AttributeSet attrs) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"/>
+ file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"
+ line="68"
+ column="33"/>
</issue>
<issue
@@ -2026,7 +2424,9 @@
errorLine1=" public WearableRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"/>
+ file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"
+ line="72"
+ column="33"/>
</issue>
<issue
@@ -2035,7 +2435,9 @@
errorLine1=" public WearableRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle,"
errorLine2=" ~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"/>
+ file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"
+ line="76"
+ column="33"/>
</issue>
<issue
@@ -2044,7 +2446,9 @@
errorLine1=" public boolean onTouchEvent(MotionEvent event) {"
errorLine2=" ~~~~~~~~~~~">
<location
- file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"/>
+ file="src/main/java/androidx/wear/widget/WearableRecyclerView.java"
+ line="144"
+ column="33"/>
</issue>
<issue
diff --git a/window/extensions/extensions/api/public_plus_experimental_current.txt b/window/extensions/extensions/api/public_plus_experimental_current.txt
index 6a28e00..ad88a4a 100644
--- a/window/extensions/extensions/api/public_plus_experimental_current.txt
+++ b/window/extensions/extensions/api/public_plus_experimental_current.txt
@@ -7,6 +7,7 @@
public interface WindowExtensions {
method @androidx.window.extensions.ExperimentalWindowExtensionsApi public androidx.window.extensions.embedding.ActivityEmbeddingComponent? getActivityEmbeddingComponent();
method public default int getVendorApiLevel();
+ method @androidx.window.extensions.ExperimentalWindowExtensionsApi public androidx.window.extensions.area.WindowAreaComponent? getWindowAreaComponent();
method public androidx.window.extensions.layout.WindowLayoutComponent? getWindowLayoutComponent();
}
@@ -16,6 +17,22 @@
}
+package androidx.window.extensions.area {
+
+ @androidx.window.extensions.ExperimentalWindowExtensionsApi public interface WindowAreaComponent {
+ method public void addRearDisplayStatusListener(java.util.function.Consumer<java.lang.Integer!>);
+ method public void endRearDisplaySession();
+ method public void removeRearDisplayStatusListener(java.util.function.Consumer<java.lang.Integer!>);
+ method public void startRearDisplaySession(android.app.Activity, java.util.function.Consumer<java.lang.Integer!>);
+ field public static final int SESSION_STATE_ACTIVE = 1; // 0x1
+ field public static final int SESSION_STATE_INACTIVE = 0; // 0x0
+ field public static final int STATUS_AVAILABLE = 2; // 0x2
+ field public static final int STATUS_UNAVAILABLE = 1; // 0x1
+ field public static final int STATUS_UNSUPPORTED = 0; // 0x0
+ }
+
+}
+
package androidx.window.extensions.embedding {
@androidx.window.extensions.ExperimentalWindowExtensionsApi public interface ActivityEmbeddingComponent {
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java
index 6ac25bd..ca3a882 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/WindowExtensions.java
@@ -17,6 +17,7 @@
package androidx.window.extensions;
import androidx.annotation.Nullable;
+import androidx.window.extensions.area.WindowAreaComponent;
import androidx.window.extensions.embedding.ActivityEmbeddingComponent;
import androidx.window.extensions.layout.WindowLayoutComponent;
@@ -60,4 +61,14 @@
@Nullable
@ExperimentalWindowExtensionsApi
ActivityEmbeddingComponent getActivityEmbeddingComponent();
+
+ /**
+ * Returns the OEM implementation of {@link WindowAreaComponent} if it is supported on
+ * the device, {@code null} otherwise. The implementation must match the API level reported in
+ * {@link WindowExtensions}.
+ * @return the OEM implementation of {@link WindowAreaComponent}
+ */
+ @Nullable
+ @ExperimentalWindowExtensionsApi
+ WindowAreaComponent getWindowAreaComponent();
}
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/area/WindowAreaComponent.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/area/WindowAreaComponent.java
new file mode 100644
index 0000000..a565eda
--- /dev/null
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/area/WindowAreaComponent.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window.extensions.area;
+
+import android.app.Activity;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.window.extensions.ExperimentalWindowExtensionsApi;
+import androidx.window.extensions.WindowExtensions;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.function.Consumer;
+
+/**
+ * The interface definition that will be used by the WindowManager library to get custom
+ * OEM-provided behavior around moving windows between displays or display areas on a device.
+ *
+ * Currently the only behavior supported is RearDisplay Mode, where the window
+ * is moved to the display that faces the same direction as the rear camera.
+ *
+ * <p>This interface should be implemented by OEM and deployed to the target devices.
+ * @see WindowExtensions#getWindowLayoutComponent()
+ */
+@ExperimentalWindowExtensionsApi
+public interface WindowAreaComponent {
+
+ /**
+ * WindowArea status constant to signify that the feature is
+ * unsupported on this device. Could be due to the device not supporting that
+ * specific feature.
+ */
+ int STATUS_UNSUPPORTED = 0;
+
+ /**
+ * WindowArea status constant to signify that the feature is
+ * currently unavailable but is supported on this device. This value could signify
+ * that the current device state does not support the specific feature or another
+ * process is currently enabled in that feature.
+ */
+ int STATUS_UNAVAILABLE = 1;
+
+ /**
+ * WindowArea status constant to signify that the feature is
+ * available to be entered or enabled.
+ */
+ int STATUS_AVAILABLE = 2;
+
+ /** @hide */
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({
+ STATUS_UNSUPPORTED,
+ STATUS_UNAVAILABLE,
+ STATUS_AVAILABLE
+ })
+ @interface WindowAreaStatus {}
+
+ /**
+ * Session state constant to represent there being no active session
+ * currently in progress. Used by the library to call the correct callbacks if
+ * a session is ended.
+ */
+ int SESSION_STATE_INACTIVE = 0;
+
+ /**
+ * Session state constant to represent that there is an
+ * active session currently in progress. Used by the library to
+ * know when to return the session object to the developer when the
+ * session is created and active.
+ */
+ int SESSION_STATE_ACTIVE = 1;
+
+ /** @hide */
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({
+ SESSION_STATE_ACTIVE,
+ SESSION_STATE_INACTIVE
+ })
+ @interface WindowAreaSessionState {}
+
+ /**
+ * Adds a listener interested in receiving updates on the RearDisplayStatus
+ * of the device. Because this is being called from the OEM provided
+ * extensions, the library will post the result of the listener on the executor
+ * provided by the developer.
+ *
+ * The listener provided will receive values that
+ * correspond to the [WindowAreaStatus] value that aligns with the current status
+ * of the rear display.
+ * @param consumer interested in receiving updates to WindowAreaStatus.
+ */
+ void addRearDisplayStatusListener(@NonNull Consumer<Integer> consumer);
+
+ /**
+ * Removes a listener no longer interested in receiving updates.
+ * @param consumer no longer interested in receiving updates to WindowAreaStatus
+ */
+ void removeRearDisplayStatusListener(@NonNull Consumer<Integer> consumer);
+
+
+ /**
+ * Creates and starts a rear display session and sends state updates to the
+ * consumer provided. This consumer will receive a constant represented by
+ * [WindowAreaSessionState] to represent the state of the current rear display
+ * session. We will translate to a more friendly interface in the library.
+ *
+ * Because this is being called from the OEM provided extensions, the library
+ * will post the result of the listener on the executor provided by the developer.
+ *
+ * @param activity to allow that the OEM implementation will use as a base
+ * context and to identify the source display area of the request.
+ * The reference to the activity instance must not be stored in the OEM
+ * implementation to prevent memory leaks.
+ * @param consumer to provide updates to the client on the status of the session
+ * @throws UnsupportedOperationException if this method is called when RearDisplay
+ * mode is not available. This could be to an incompatible device state or when
+ * another process is currently in this mode.
+ */
+ @SuppressWarnings("ExecutorRegistration") // Jetpack will post it on the app-provided executor.
+ void startRearDisplaySession(@NonNull Activity activity,
+ @NonNull Consumer<Integer> consumer);
+
+ /**
+ * Ends a RearDisplaySession and sends [STATE_INACTIVE] to the consumer
+ * provided in the {@code startRearDisplaySession} method. This method is only
+ * called through the {@code RearDisplaySession} provided to the developer.
+ */
+ void endRearDisplaySession();
+}
diff --git a/window/window-java/api/public_plus_experimental_current.txt b/window/window-java/api/public_plus_experimental_current.txt
index 709904b..a56988b 100644
--- a/window/window-java/api/public_plus_experimental_current.txt
+++ b/window/window-java/api/public_plus_experimental_current.txt
@@ -1,4 +1,15 @@
// Signature format: 4.0
+package androidx.window.java.area {
+
+ @androidx.window.core.ExperimentalWindowApi public final class WindowAreaControllerJavaAdapter implements androidx.window.area.WindowAreaController {
+ ctor public WindowAreaControllerJavaAdapter(androidx.window.area.WindowAreaController controller);
+ method public void addRearDisplayStatusListener(java.util.concurrent.Executor executor, androidx.core.util.Consumer<androidx.window.area.WindowAreaStatus> consumer);
+ method public void removeRearDisplayStatusListener(androidx.core.util.Consumer<androidx.window.area.WindowAreaStatus> consumer);
+ method public void startRearDisplayModeSession(android.app.Activity activity, java.util.concurrent.Executor executor, androidx.window.area.WindowAreaSessionCallback windowAreaSessionCallback);
+ }
+
+}
+
package androidx.window.java.layout {
public final class WindowInfoTrackerCallbackAdapter implements androidx.window.layout.WindowInfoTracker {
diff --git a/window/window-java/src/main/java/androidx/window/java/area/WindowAreaControllerJavaAdapter.kt b/window/window-java/src/main/java/androidx/window/java/area/WindowAreaControllerJavaAdapter.kt
new file mode 100644
index 0000000..584445f
--- /dev/null
+++ b/window/window-java/src/main/java/androidx/window/java/area/WindowAreaControllerJavaAdapter.kt
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window.java.area
+
+import android.app.Activity
+import androidx.core.util.Consumer
+import androidx.window.area.WindowAreaSessionCallback
+import androidx.window.area.WindowAreaStatus
+import androidx.window.area.WindowAreaController
+import androidx.window.core.ExperimentalWindowApi
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.asCoroutineDispatcher
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.launch
+import java.util.concurrent.Executor
+import java.util.concurrent.locks.ReentrantLock
+import kotlin.concurrent.withLock
+
+/**
+ * An adapted interface for [WindowAreaController] that provides the information and
+ * functionality around RearDisplay Mode via a callback shaped API.
+ */
+@ExperimentalWindowApi
+class WindowAreaControllerJavaAdapter(
+ private val controller: WindowAreaController
+) : WindowAreaController by controller {
+
+ /**
+ * A [ReentrantLock] to protect against concurrent access to [consumerToJobMap].
+ */
+ private val lock = ReentrantLock()
+ private val consumerToJobMap = mutableMapOf<Consumer<*>, Job>()
+
+ /**
+ * Registers a listener to consume [WindowAreaStatus] values defined as
+ * [WindowAreaStatus.UNSUPPORTED], [WindowAreaStatus.UNAVAILABLE], and
+ * [WindowAreaStatus.AVAILABLE]. The values provided through this listener should be used
+ * to determine if you are able to enable rear display Mode at that time. You can use these
+ * values to modify your UI to show/hide controls and determine when to enable features
+ * that use rear display Mode. You should only try and enter rear display mode when your
+ * [consumer] is provided a value of [WindowAreaStatus.AVAILABLE].
+ *
+ * The [consumer] will be provided an initial value on registration, as well as any change
+ * to the status as they occur. This could happen due to hardware device state changes, or if
+ * another process has enabled RearDisplay Mode.
+ *
+ * @see WindowAreaController.rearDisplayStatus
+ */
+ fun addRearDisplayStatusListener(
+ executor: Executor,
+ consumer: Consumer<WindowAreaStatus>
+ ) {
+ val statusFlow = controller.rearDisplayStatus()
+ lock.withLock {
+ if (consumerToJobMap[consumer] == null) {
+ val scope = CoroutineScope(executor.asCoroutineDispatcher())
+ consumerToJobMap[consumer] = scope.launch {
+ statusFlow.collect { consumer.accept(it) }
+ }
+ }
+ }
+ }
+
+ /**
+ * Removes a listener of [WindowAreaStatus] values
+ * @see WindowAreaController.rearDisplayStatus
+ */
+ fun removeRearDisplayStatusListener(consumer: Consumer<WindowAreaStatus>) {
+ lock.withLock {
+ consumerToJobMap[consumer]?.cancel()
+ consumerToJobMap.remove(consumer)
+ }
+ }
+
+ /**
+ * Starts a RearDisplay Mode session and provides updates through the
+ * [WindowAreaSessionCallback] provided. Due to the nature of moving your Activity to a
+ * different display, your Activity will likely go through a configuration change. Because of
+ * this, if your Activity does not override configuration changes, this method should be called
+ * from a component that outlives the Activity lifecycle such as a
+ * [androidx.lifecycle.ViewModel]. If your Activity does override
+ * configuration changes, it is safe to call this method inside your Activity.
+ *
+ * This method should only be called if you have received a [WindowAreaStatus.AVAILABLE]
+ * value from the listener provided through the [addRearDisplayStatusListener] method. If
+ * you try and enable RearDisplay mode without it being available, you will receive an
+ * [UnsupportedOperationException].
+ *
+ * The [windowAreaSessionCallback] provided will receive a call to
+ * [WindowAreaSessionCallback.onSessionStarted] after your Activity has been moved to the
+ * display corresponding to this mode. RearDisplay mode will stay active until the session
+ * provided through [WindowAreaSessionCallback.onSessionStarted] is closed, or there is a device
+ * state change that makes RearDisplay mode incompatible such as if the device is closed so the
+ * outer-display is no longer in line with the rear camera. When this occurs,
+ * [WindowAreaSessionCallback.onSessionEnded] is called to notify you the session has been
+ * ended.
+ *
+ * @see addRearDisplayStatusListener
+ * @throws UnsupportedOperationException if you try and start a RearDisplay session when
+ * your [WindowAreaController.rearDisplayStatus] does not return a value of
+ * [WindowAreaStatus.AVAILABLE]
+ */
+ fun startRearDisplayModeSession(
+ activity: Activity,
+ executor: Executor,
+ windowAreaSessionCallback: WindowAreaSessionCallback
+ ) {
+ controller.rearDisplayMode(activity, executor, windowAreaSessionCallback)
+ }
+}
\ No newline at end of file
diff --git a/window/window-samples/build.gradle b/window/window-samples/build.gradle
index 3259f09..0312e03 100644
--- a/window/window-samples/build.gradle
+++ b/window/window-samples/build.gradle
@@ -46,7 +46,7 @@
implementation "androidx.browser:browser:1.3.0"
implementation("androidx.startup:startup-runtime:1.1.0")
- implementation(project(":window:window"))
+ implementation(project(":window:window-java"))
debugImplementation(libs.leakcanary)
androidTestImplementation(libs.testCore)
diff --git a/window/window-samples/src/main/AndroidManifest.xml b/window/window-samples/src/main/AndroidManifest.xml
index e0fb58b..9deb2f37 100644
--- a/window/window-samples/src/main/AndroidManifest.xml
+++ b/window/window-samples/src/main/AndroidManifest.xml
@@ -49,6 +49,16 @@
android:exported="false"
android:configChanges="orientation|screenSize|screenLayout|screenSize"
android:label="@string/window_metrics"/>
+ <activity android:name=".RearDisplayActivityConfigChanges"
+ android:exported="true"
+ android:configChanges=
+ "orientation|screenLayout|screenSize|layoutDirection|smallestScreenSize"
+ android:label="@string/rear_display">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
<activity
android:name=".embedding.SplitActivityA"
android:exported="true"
diff --git a/window/window-samples/src/main/java/androidx/window/sample/RearDisplayActivityConfigChanges.kt b/window/window-samples/src/main/java/androidx/window/sample/RearDisplayActivityConfigChanges.kt
new file mode 100644
index 0000000..f7e839f
--- /dev/null
+++ b/window/window-samples/src/main/java/androidx/window/sample/RearDisplayActivityConfigChanges.kt
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window.sample
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContextCompat
+import androidx.core.util.Consumer
+import androidx.window.area.WindowAreaController
+import androidx.window.area.WindowAreaSessionCallback
+import androidx.window.area.WindowAreaSession
+import androidx.window.area.WindowAreaStatus
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.java.area.WindowAreaControllerJavaAdapter
+import androidx.window.sample.databinding.ActivityRearDisplayBinding
+import androidx.window.sample.infolog.InfoLogAdapter
+import java.text.SimpleDateFormat
+import java.util.Date
+import java.util.Locale
+import java.util.concurrent.Executor
+
+/**
+ * Demo Activity that showcases listening for RearDisplay Status
+ * as well as enabling/disabling RearDisplay mode. This Activity
+ * implements [WindowAreaSessionCallback] for simplicity.
+ *
+ * This Activity overrides configuration changes for simplicity.
+ */
+@OptIn(ExperimentalWindowApi::class)
+class RearDisplayActivityConfigChanges : AppCompatActivity(), WindowAreaSessionCallback {
+
+ private lateinit var windowAreaController: WindowAreaControllerJavaAdapter
+ private var rearDisplaySession: WindowAreaSession? = null
+ private val infoLogAdapter = InfoLogAdapter()
+ private lateinit var binding: ActivityRearDisplayBinding
+ private lateinit var executor: Executor
+
+ private val rearDisplayStatusListener = Consumer<WindowAreaStatus> { status ->
+ infoLogAdapter.append(getCurrentTimeString(), status.toString())
+ infoLogAdapter.notifyDataSetChanged()
+ updateRearDisplayButton(status)
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityRearDisplayBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ executor = ContextCompat.getMainExecutor(this)
+ windowAreaController = WindowAreaControllerJavaAdapter(WindowAreaController.getOrCreate())
+
+ binding.rearStatusRecyclerView.adapter = infoLogAdapter
+
+ binding.rearDisplayButton.setOnClickListener {
+ if (rearDisplaySession != null) {
+ rearDisplaySession?.close()
+ } else {
+ windowAreaController.startRearDisplayModeSession(
+ this,
+ executor,
+ this)
+ }
+ }
+ }
+
+ override fun onStart() {
+ super.onStart()
+ windowAreaController.addRearDisplayStatusListener(
+ executor,
+ rearDisplayStatusListener
+ )
+ }
+
+ override fun onStop() {
+ super.onStop()
+ windowAreaController.removeRearDisplayStatusListener(rearDisplayStatusListener)
+ }
+
+ override fun onSessionStarted(session: WindowAreaSession) {
+ rearDisplaySession = session
+ infoLogAdapter.append(getCurrentTimeString(), "RearDisplay Session has been started")
+ infoLogAdapter.notifyDataSetChanged()
+ }
+
+ override fun onSessionEnded() {
+ rearDisplaySession = null
+ infoLogAdapter.append(getCurrentTimeString(), "RearDisplay Session has ended")
+ infoLogAdapter.notifyDataSetChanged()
+ }
+
+ private fun updateRearDisplayButton(status: WindowAreaStatus) {
+ if (rearDisplaySession != null) {
+ binding.rearDisplayButton.isEnabled = true
+ binding.rearDisplayButton.text = "Disable RearDisplay Mode"
+ return
+ }
+ when (status) {
+ WindowAreaStatus.UNSUPPORTED -> {
+ binding.rearDisplayButton.isEnabled = false
+ binding.rearDisplayButton.text = "RearDisplay is not supported on this device"
+ }
+ WindowAreaStatus.UNAVAILABLE -> {
+ binding.rearDisplayButton.isEnabled = false
+ binding.rearDisplayButton.text = "RearDisplay is not currently available"
+ }
+ WindowAreaStatus.AVAILABLE -> {
+ binding.rearDisplayButton.isEnabled = true
+ binding.rearDisplayButton.text = "Enable RearDisplay Mode"
+ }
+ }
+ }
+
+ private fun getCurrentTimeString(): String {
+ val sdf = SimpleDateFormat("HH:mm:ss.SSS", Locale.getDefault())
+ val currentDate = sdf.format(Date())
+ return currentDate.toString()
+ }
+
+ private companion object {
+ private val TAG = RearDisplayActivityConfigChanges::class.java.simpleName
+ }
+}
\ No newline at end of file
diff --git a/window/window-samples/src/main/res/layout/activity_rear_display.xml b/window/window-samples/src/main/res/layout/activity_rear_display.xml
new file mode 100644
index 0000000..43bea60
--- /dev/null
+++ b/window/window-samples/src/main/res/layout/activity_rear_display.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Copyright 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/rearStatusRecyclerView"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"/>
+
+ <Button
+ android:id="@+id/rear_display_button"
+ android:text="Enable RearDisplay"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAlignment="center"
+ android:layout_marginBottom="32dp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/window/window-samples/src/main/res/values/strings.xml b/window/window-samples/src/main/res/values/strings.xml
index 5faaae6..25d5eef 100644
--- a/window/window-samples/src/main/res/values/strings.xml
+++ b/window/window-samples/src/main/res/values/strings.xml
@@ -51,4 +51,6 @@
<string name="occlusion_is_none">Occlusion is none</string>
<string name="window_metrics">Window metrics</string>
<string name="window_metrics_description">Demo of using WindowMetrics API with activity handling rotations.</string>
+ <string name="rear_display">Rear Display Mode</string>
+ <string name="rear_display_description">Demo of observing to WindowAreaStatus and enabling/disabling RearDisplay mode</string>
</resources>
diff --git a/window/window/api/public_plus_experimental_current.txt b/window/window/api/public_plus_experimental_current.txt
index 2602c31..d0abd6e 100644
--- a/window/window/api/public_plus_experimental_current.txt
+++ b/window/window/api/public_plus_experimental_current.txt
@@ -1,4 +1,36 @@
// Signature format: 4.0
+package androidx.window.area {
+
+ @androidx.window.core.ExperimentalWindowApi public interface WindowAreaController {
+ method public default static androidx.window.area.WindowAreaController getOrCreate();
+ field public static final androidx.window.area.WindowAreaController.Companion Companion;
+ }
+
+ public static final class WindowAreaController.Companion {
+ method public androidx.window.area.WindowAreaController getOrCreate();
+ }
+
+ @androidx.window.core.ExperimentalWindowApi public interface WindowAreaSession {
+ method public void close();
+ }
+
+ @androidx.window.core.ExperimentalWindowApi public interface WindowAreaSessionCallback {
+ method public void onSessionEnded();
+ method public void onSessionStarted(androidx.window.area.WindowAreaSession session);
+ }
+
+ @androidx.window.core.ExperimentalWindowApi public final class WindowAreaStatus {
+ field public static final androidx.window.area.WindowAreaStatus AVAILABLE;
+ field public static final androidx.window.area.WindowAreaStatus.Companion Companion;
+ field public static final androidx.window.area.WindowAreaStatus UNAVAILABLE;
+ field public static final androidx.window.area.WindowAreaStatus UNSUPPORTED;
+ }
+
+ public static final class WindowAreaStatus.Companion {
+ }
+
+}
+
package androidx.window.core {
@kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING) @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalWindowApi {
diff --git a/window/window/build.gradle b/window/window/build.gradle
index db48cf5..3f202c45 100644
--- a/window/window/build.gradle
+++ b/window/window/build.gradle
@@ -64,6 +64,7 @@
testImplementation(compileOnly(project(":window:extensions:extensions")))
androidTestImplementation(libs.testCore)
+ androidTestImplementation(libs.kotlinTestJunit)
androidTestImplementation(libs.testExtJunit)
androidTestImplementation(libs.testRunner)
androidTestImplementation(libs.testRules)
diff --git a/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt b/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt
new file mode 100644
index 0000000..a21185f
--- /dev/null
+++ b/window/window/src/androidTest/java/androidx/window/area/WindowAreaControllerImplTest.kt
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window.area
+
+import android.annotation.TargetApi
+import android.app.Activity
+import android.content.pm.ActivityInfo
+import android.os.Build
+import androidx.annotation.RequiresApi
+import androidx.test.ext.junit.rules.ActivityScenarioRule
+import androidx.window.TestActivity
+import androidx.window.TestConsumer
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.extensions.area.WindowAreaComponent
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.launch
+import org.junit.Assume.assumeTrue
+import org.junit.Rule
+import org.junit.Test
+import java.util.function.Consumer
+import kotlin.test.assertFailsWith
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.UnconfinedTestDispatcher
+import kotlinx.coroutines.test.runTest
+import org.junit.Ignore
+
+@OptIn(ExperimentalCoroutinesApi::class, ExperimentalWindowApi::class)
+class WindowAreaControllerImplTest {
+
+ @get:Rule
+ public val activityScenario: ActivityScenarioRule<TestActivity> =
+ ActivityScenarioRule(TestActivity::class.java)
+
+ private val testScope = TestScope(UnconfinedTestDispatcher())
+
+ @Ignore // todo(b/222407443)
+ @TargetApi(Build.VERSION_CODES.N)
+ @Test
+ public fun testRearDisplayStatus(): Unit = testScope.runTest {
+ assumeTrue(Build.VERSION.SDK_INT > Build.VERSION_CODES.N)
+ activityScenario.scenario.onActivity {
+ val extensionComponent = FakeWindowAreaComponent()
+ val repo = WindowAreaControllerImpl(extensionComponent)
+ val collector = TestConsumer<WindowAreaStatus>()
+ extensionComponent
+ .updateStatusListeners(WindowAreaComponent.STATUS_UNAVAILABLE)
+ testScope.launch {
+ repo.rearDisplayStatus().collect(collector::accept)
+ }
+ collector.assertValue(WindowAreaStatus.UNAVAILABLE)
+ extensionComponent
+ .updateStatusListeners(WindowAreaComponent.STATUS_AVAILABLE)
+ collector.assertValues(
+ WindowAreaStatus.UNAVAILABLE,
+ WindowAreaStatus.AVAILABLE
+ )
+ }
+ }
+
+ @Ignore // todo(b/222407443)
+ @Test
+ public fun testRearDisplayStatusNullComponent(): Unit = testScope.runTest {
+ activityScenario.scenario.onActivity {
+ val repo = EmptyWindowAreaControllerImpl()
+ val collector = TestConsumer<WindowAreaStatus>()
+ testScope.launch {
+ repo.rearDisplayStatus().collect(collector::accept)
+ }
+ collector.assertValue(WindowAreaStatus.UNSUPPORTED)
+ }
+ }
+
+ /**
+ * Tests the rear display mode flow works as expected. Tests the flow
+ * through WindowAreaControllerImpl with a fake extension. This fake extension
+ * changes the orientation of the activity to landscape when rear display mode is enabled
+ * and then returns it back to portrait when it's disabled.
+ */
+ @Ignore // todo(b/222407443)
+ @TargetApi(Build.VERSION_CODES.N)
+ @Test
+ public fun testRearDisplayMode(): Unit = testScope.runTest {
+ val extensions = FakeWindowAreaComponent()
+ val repo = WindowAreaControllerImpl(extensions)
+ extensions.currentStatus = WindowAreaComponent.STATUS_AVAILABLE
+ val callback = TestWindowAreaSessionCallback()
+ activityScenario.scenario.onActivity { testActivity ->
+ testActivity.resetLayoutCounter()
+ testActivity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
+ testActivity.waitForLayout()
+ }
+
+ activityScenario.scenario.onActivity { testActivity ->
+ assert(testActivity.requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
+ testActivity.resetLayoutCounter()
+ repo.rearDisplayMode(testActivity, Runnable::run, callback)
+ }
+
+ activityScenario.scenario.onActivity { testActivity ->
+ assert(testActivity.requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
+ assert(callback.currentSession != null)
+ testActivity.resetLayoutCounter()
+ callback.endSession()
+ }
+ activityScenario.scenario.onActivity { testActivity ->
+ assert(testActivity.requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
+ assert(callback.currentSession == null)
+ }
+ }
+
+ @Ignore // todo(b/222407443)
+ @TargetApi(Build.VERSION_CODES.N)
+ @Test
+ public fun testRearDisplayModeReturnsError(): Unit = testScope.runTest {
+ val extensionComponent = FakeWindowAreaComponent()
+ extensionComponent.currentStatus = WindowAreaComponent.STATUS_UNAVAILABLE
+ val repo = WindowAreaControllerImpl(extensionComponent)
+ val callback = TestWindowAreaSessionCallback()
+ activityScenario.scenario.onActivity { testActivity ->
+ assertFailsWith(
+ exceptionClass = UnsupportedOperationException::class,
+ block = { repo.rearDisplayMode(testActivity, Runnable::run, callback) }
+ )
+ }
+ }
+
+ @Ignore // todo(b/222407443)
+ @Test
+ public fun testRearDisplayModeNullComponent(): Unit = testScope.runTest {
+ val repo = EmptyWindowAreaControllerImpl()
+ val callback = TestWindowAreaSessionCallback()
+ activityScenario.scenario.onActivity { testActivity ->
+ assertFailsWith(
+ exceptionClass = UnsupportedOperationException::class,
+ block = { repo.rearDisplayMode(testActivity, Runnable::run, callback) }
+ )
+ }
+ }
+
+ private class FakeWindowAreaComponent : WindowAreaComponent {
+ val statusListeners = mutableListOf<Consumer<Int>>()
+ var currentStatus = WindowAreaComponent.STATUS_UNSUPPORTED
+ var testActivity: Activity? = null
+ var sessionConsumer: Consumer<Int>? = null
+
+ @RequiresApi(Build.VERSION_CODES.N)
+ override fun addRearDisplayStatusListener(consumer: Consumer<Int>) {
+ statusListeners.add(consumer)
+ consumer.accept(currentStatus)
+ }
+
+ override fun removeRearDisplayStatusListener(consumer: Consumer<Int>) {
+ statusListeners.remove(consumer)
+ }
+
+ // Fake WindowAreaComponent will change the orientation of the activity to signal
+ // entering rear display mode, as well as ending the session
+ @RequiresApi(Build.VERSION_CODES.N)
+ override fun startRearDisplaySession(
+ activity: Activity,
+ rearDisplaySessionConsumer: Consumer<Int>
+ ) {
+ if (currentStatus != WindowAreaComponent.STATUS_AVAILABLE) {
+ throw WindowAreaController.REAR_DISPLAY_ERROR
+ }
+ testActivity = activity
+ sessionConsumer = rearDisplaySessionConsumer
+ testActivity!!.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
+ rearDisplaySessionConsumer.accept(WindowAreaComponent.SESSION_STATE_ACTIVE)
+ }
+
+ @RequiresApi(Build.VERSION_CODES.N)
+ override fun endRearDisplaySession() {
+ testActivity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
+ sessionConsumer?.accept(WindowAreaComponent.SESSION_STATE_INACTIVE)
+ }
+
+ @RequiresApi(Build.VERSION_CODES.N)
+ fun updateStatusListeners(newStatus: Int) {
+ currentStatus = newStatus
+ for (consumer in statusListeners) {
+ consumer.accept(currentStatus)
+ }
+ }
+ }
+
+ private class TestWindowAreaSessionCallback : WindowAreaSessionCallback {
+
+ var currentSession: WindowAreaSession? = null
+ var error: Throwable? = null
+
+ override fun onSessionStarted(session: WindowAreaSession) {
+ currentSession = session
+ }
+
+ override fun onSessionEnded() {
+ currentSession = null
+ }
+
+ fun endSession() = currentSession?.close()
+ }
+}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/area/EmptyWindowAreaControllerImpl.kt b/window/window/src/main/java/androidx/window/area/EmptyWindowAreaControllerImpl.kt
new file mode 100644
index 0000000..996c7ad
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/EmptyWindowAreaControllerImpl.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window.area
+
+import android.app.Activity
+import androidx.window.core.ExperimentalWindowApi
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.flowOf
+import java.util.concurrent.Executor
+
+/**
+ * Empty Implementation for devices that do not
+ * support the [WindowAreaController] functionality
+ */
+@ExperimentalWindowApi
+internal class EmptyWindowAreaControllerImpl : WindowAreaController {
+ override fun rearDisplayStatus(): Flow<WindowAreaStatus> {
+ return flowOf(WindowAreaStatus.UNSUPPORTED)
+ }
+
+ override fun rearDisplayMode(
+ activity: Activity,
+ executor: Executor,
+ windowAreaSessionCallback: WindowAreaSessionCallback
+ ) {
+ throw WindowAreaController.REAR_DISPLAY_ERROR
+ }
+}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/area/RearDisplaySessionImpl.kt b/window/window/src/main/java/androidx/window/area/RearDisplaySessionImpl.kt
new file mode 100644
index 0000000..9a5bbd3
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/RearDisplaySessionImpl.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window.area
+
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.extensions.area.WindowAreaComponent
+
+@ExperimentalWindowApi
+internal class RearDisplaySessionImpl(
+ private val windowAreaComponent: WindowAreaComponent
+) : WindowAreaSession {
+
+ override fun close() {
+ windowAreaComponent.endRearDisplaySession()
+ }
+}
diff --git a/window/window/src/main/java/androidx/window/area/WindowAreaController.kt b/window/window/src/main/java/androidx/window/area/WindowAreaController.kt
new file mode 100644
index 0000000..05aa96e
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/WindowAreaController.kt
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window.area
+
+import android.app.Activity
+import android.os.Build
+import android.util.Log
+import androidx.annotation.RestrictTo
+import androidx.window.core.BuildConfig
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.core.SpecificationComputer
+import androidx.window.extensions.WindowExtensionsProvider
+import androidx.window.extensions.area.WindowAreaComponent
+import kotlinx.coroutines.flow.Flow
+import java.util.concurrent.Executor
+import kotlin.jvm.Throws
+
+/**
+ * An interface to provide the information and behavior around moving windows between
+ * displays or display areas on a device.
+ */
+@ExperimentalWindowApi
+interface WindowAreaController {
+
+ /*
+ Marked with RestrictTo as we iterate and define the
+ Kotlin API we want to provide.
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public fun rearDisplayStatus(): Flow<WindowAreaStatus>
+
+ /*
+ Marked with RestrictTo as we iterate and define the
+ Kotlin API we want to provide.
+ */
+ @Throws(UnsupportedOperationException::class)
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public fun rearDisplayMode(
+ activity: Activity,
+ executor: Executor,
+ windowAreaSessionCallback: WindowAreaSessionCallback
+ )
+
+ public companion object {
+ internal val REAR_DISPLAY_ERROR =
+ UnsupportedOperationException("Rear Display mode cannot be enabled currently")
+
+ private val TAG = WindowAreaController::class.simpleName
+
+ private var decorator: WindowAreaControllerDecorator = EmptyDecorator
+
+ /**
+ * Provides an instance of [WindowAreaController].
+ */
+ @JvmName("getOrCreate")
+ @JvmStatic
+ public fun getOrCreate(): WindowAreaController {
+ var windowAreaComponentExtensions: WindowAreaComponent?
+ try {
+ windowAreaComponentExtensions = WindowExtensionsProvider
+ .getWindowExtensions()
+ .windowAreaComponent
+ } catch (t: Throwable) {
+ if (BuildConfig.verificationMode == SpecificationComputer.VerificationMode.STRICT) {
+ Log.d(TAG, "Failed to load WindowExtensions")
+ }
+ windowAreaComponentExtensions = null
+ }
+ val controller =
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N ||
+ windowAreaComponentExtensions == null) {
+ EmptyWindowAreaControllerImpl()
+ } else {
+ WindowAreaControllerImpl(windowAreaComponentExtensions)
+ }
+ return decorator.decorate(controller)
+ }
+
+ @JvmStatic
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public fun overrideDecorator(overridingDecorator: WindowAreaControllerDecorator) {
+ decorator = overridingDecorator
+ }
+
+ @JvmStatic
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public fun reset() {
+ decorator = EmptyDecorator
+ }
+ }
+}
+
+/**
+ * Decorator that allows us to provide different functionality
+ * in our window-testing artifact.
+ */
+@ExperimentalWindowApi
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public interface WindowAreaControllerDecorator {
+ /**
+ * Returns an instance of [WindowAreaController] associated to the [Activity]
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public fun decorate(controller: WindowAreaController): WindowAreaController
+}
+
+@ExperimentalWindowApi
+private object EmptyDecorator : WindowAreaControllerDecorator {
+ override fun decorate(controller: WindowAreaController): WindowAreaController {
+ return controller
+ }
+}
diff --git a/window/window/src/main/java/androidx/window/area/WindowAreaControllerImpl.kt b/window/window/src/main/java/androidx/window/area/WindowAreaControllerImpl.kt
new file mode 100644
index 0000000..0e156818
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/WindowAreaControllerImpl.kt
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window.area
+
+import android.app.Activity
+import android.os.Build
+import android.util.Log
+import androidx.annotation.RequiresApi
+import androidx.window.core.BuildConfig
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.core.SpecificationComputer
+import androidx.window.extensions.area.WindowAreaComponent
+import kotlinx.coroutines.channels.BufferOverflow
+import kotlinx.coroutines.channels.Channel
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.flow
+import java.util.concurrent.Executor
+import java.util.function.Consumer
+
+/**
+ * Implementation of WindowAreaController for devices
+ * that do implement the WindowAreaComponent on device.
+ *
+ * Requires [Build.VERSION_CODES.N] due to the use of [Consumer].
+ * Will not be created though on API levels lower than
+ * [Build.VERSION_CODES.S] as that's the min level of support for
+ * this functionality.
+ */
+@ExperimentalWindowApi
+@RequiresApi(Build.VERSION_CODES.N)
+internal class WindowAreaControllerImpl(
+ private val windowAreaComponent: WindowAreaComponent
+) : WindowAreaController {
+
+ private lateinit var rearDisplaySessionConsumer: Consumer<Int>
+ private var currentStatus: WindowAreaStatus? = null
+
+ override fun rearDisplayStatus(): Flow<WindowAreaStatus> {
+ return flow {
+ val channel = Channel<WindowAreaStatus>(
+ capacity = BUFFER_CAPACITY,
+ onBufferOverflow = BufferOverflow.DROP_OLDEST
+ )
+ val listener = Consumer<Int> { status ->
+ currentStatus = WindowAreaStatus.translate(status)
+ channel.trySend(currentStatus ?: WindowAreaStatus.UNSUPPORTED)
+ }
+ windowAreaComponent.addRearDisplayStatusListener(listener)
+ try {
+ for (item in channel) {
+ emit(item)
+ }
+ } finally {
+ windowAreaComponent.removeRearDisplayStatusListener(listener)
+ }
+ }.distinctUntilChanged()
+ }
+
+ override fun rearDisplayMode(
+ activity: Activity,
+ executor: Executor,
+ windowAreaSessionCallback: WindowAreaSessionCallback
+ ) {
+ // If we already have a status value that is not [WindowAreaStatus.AVAILABLE]
+ // we should throw an exception quick to indicate they tried to enable
+ // RearDisplay mode when it was not available.
+ if (currentStatus != null && currentStatus != WindowAreaStatus.AVAILABLE) {
+ throw WindowAreaController.REAR_DISPLAY_ERROR
+ }
+ rearDisplaySessionConsumer =
+ RearDisplaySessionConsumer(windowAreaSessionCallback, windowAreaComponent)
+ windowAreaComponent.startRearDisplaySession(activity, rearDisplaySessionConsumer)
+ }
+
+ internal class RearDisplaySessionConsumer(
+ private val appCallback: WindowAreaSessionCallback,
+ private val extensionsComponent: WindowAreaComponent
+ ) : Consumer<Int> {
+
+ private var session: WindowAreaSession? = null
+
+ override fun accept(sessionStatus: Int) {
+ when (sessionStatus) {
+ WindowAreaComponent.SESSION_STATE_ACTIVE -> onSessionStarted()
+ WindowAreaComponent.SESSION_STATE_INACTIVE -> onSessionFinished()
+ else -> {
+ if (BuildConfig.verificationMode ==
+ SpecificationComputer.VerificationMode.STRICT) {
+ Log.d(TAG, "Received an unknown session status value: $sessionStatus")
+ }
+ onSessionFinished()
+ }
+ }
+ }
+
+ private fun onSessionStarted() {
+ session = RearDisplaySessionImpl(extensionsComponent)
+ session?.let { appCallback.onSessionStarted(it) }
+ }
+
+ private fun onSessionFinished() {
+ session = null
+ appCallback.onSessionEnded()
+ }
+ }
+
+ internal companion object {
+ private val TAG = WindowAreaControllerImpl::class.simpleName
+ /*
+ Chosen as 10 for a base default value. We shouldn't be receiving
+ many changes to window area status so this is enough capacity
+ to not end up blocking.
+ */
+ private const val BUFFER_CAPACITY = 10
+ }
+}
diff --git a/window/window/src/main/java/androidx/window/area/WindowAreaSession.kt b/window/window/src/main/java/androidx/window/area/WindowAreaSession.kt
new file mode 100644
index 0000000..6cdbd12
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/WindowAreaSession.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window.area
+
+import androidx.window.core.ExperimentalWindowApi
+
+/**
+ * Session interface to represent a long-standing
+ * WindowArea mode or feature that provides a handle
+ * to close the session.
+ */
+@ExperimentalWindowApi
+public interface WindowAreaSession {
+ fun close()
+}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/area/WindowAreaSessionCallback.kt b/window/window/src/main/java/androidx/window/area/WindowAreaSessionCallback.kt
new file mode 100644
index 0000000..80842c4
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/WindowAreaSessionCallback.kt
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window.area
+
+import androidx.window.core.ExperimentalWindowApi
+
+/** Callback to update the client on the WindowArea Session being
+ * started and ended.
+ * TODO(b/207720511) Move to window-java module when Kotlin API Finalized
+ */
+@ExperimentalWindowApi
+interface WindowAreaSessionCallback {
+
+ fun onSessionStarted(session: WindowAreaSession)
+
+ fun onSessionEnded()
+}
\ No newline at end of file
diff --git a/window/window/src/main/java/androidx/window/area/WindowAreaStatus.kt b/window/window/src/main/java/androidx/window/area/WindowAreaStatus.kt
new file mode 100644
index 0000000..f60d8f5
--- /dev/null
+++ b/window/window/src/main/java/androidx/window/area/WindowAreaStatus.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window.area
+
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.extensions.area.WindowAreaComponent
+
+/**
+ * Represents a window area status.
+ */
+@ExperimentalWindowApi
+class WindowAreaStatus private constructor(private val mDescription: String) {
+ override fun toString(): String {
+ return mDescription
+ }
+
+ companion object {
+ /**
+ * Status representing that the WindowArea feature is not a supported
+ * feature on the device.
+ */
+ @JvmField
+ val UNSUPPORTED = WindowAreaStatus("UNSUPPORTED")
+
+ /**
+ * Status representing that the WindowArea feature is currently not available
+ * to be enabled. This could be due to another process has enabled it, or that the
+ * current device configuration doesn't allow it.
+ */
+ @JvmField
+ val UNAVAILABLE = WindowAreaStatus("UNAVAILABLE")
+
+ /**
+ * Status representing that the WindowArea feature is available to be enabled.
+ */
+ @JvmField
+ val AVAILABLE = WindowAreaStatus("AVAILABLE")
+
+ @JvmStatic
+ internal fun translate(status: Int): WindowAreaStatus {
+ return when (status) {
+ WindowAreaComponent.STATUS_AVAILABLE -> AVAILABLE
+ WindowAreaComponent.STATUS_UNAVAILABLE -> UNAVAILABLE
+ else -> UNSUPPORTED
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/window/window/src/test/java/androidx/window/area/WindowAreaStatusUnitTest.kt b/window/window/src/test/java/androidx/window/area/WindowAreaStatusUnitTest.kt
new file mode 100644
index 0000000..04d3702
--- /dev/null
+++ b/window/window/src/test/java/androidx/window/area/WindowAreaStatusUnitTest.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.window.area
+
+import androidx.window.core.ExperimentalWindowApi
+import androidx.window.extensions.area.WindowAreaComponent
+import org.junit.Test
+
+/**
+ * Unit tests for [WindowAreaStatus] that run on the JVM.
+ */
+@OptIn(ExperimentalWindowApi::class)
+class WindowAreaStatusUnitTest {
+
+ @Test
+ fun testWindowAreaStatusTranslateValueAvailable() {
+ val expected = WindowAreaStatus.AVAILABLE
+ val translateValue = WindowAreaStatus.translate(WindowAreaComponent.STATUS_AVAILABLE)
+ assert(expected == translateValue)
+ }
+
+ @Test
+ fun testWindowAreaStatusTranslateValueUnavailable() {
+ val expected = WindowAreaStatus.UNAVAILABLE
+ val translateValue = WindowAreaStatus.translate(WindowAreaComponent.STATUS_UNAVAILABLE)
+ assert(expected == translateValue)
+ }
+
+ @Test
+ fun testWindowAreaStatusTranslateValueUnsupported() {
+ val expected = WindowAreaStatus.UNSUPPORTED
+ val translateValue = WindowAreaStatus.translate(WindowAreaComponent.STATUS_UNSUPPORTED)
+ assert(expected == translateValue)
+ }
+}
\ No newline at end of file
diff --git a/work/work-runtime-ktx/api/2.7.0-beta01.txt b/work/work-runtime-ktx/api/2.7.0-beta01.txt
index 8535d65..2c5f419 100644
--- a/work/work-runtime-ktx/api/2.7.0-beta01.txt
+++ b/work/work-runtime-ktx/api/2.7.0-beta01.txt
@@ -5,8 +5,6 @@
ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
method public abstract suspend Object? doWork(kotlin.coroutines.Continuation<? super androidx.work.ListenableWorker.Result> p);
method @Deprecated public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
- method public suspend Object? getForegroundInfo(kotlin.coroutines.Continuation<? super androidx.work.ForegroundInfo> p);
- method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo> getForegroundInfoAsync();
method public final void onStopped();
method public final suspend Object? setForeground(androidx.work.ForegroundInfo foregroundInfo, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
method public final suspend Object? setProgress(androidx.work.Data data, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
diff --git a/work/work-runtime-ktx/api/public_plus_experimental_2.7.0-beta01.txt b/work/work-runtime-ktx/api/public_plus_experimental_2.7.0-beta01.txt
index 8535d65..2d666e3 100644
--- a/work/work-runtime-ktx/api/public_plus_experimental_2.7.0-beta01.txt
+++ b/work/work-runtime-ktx/api/public_plus_experimental_2.7.0-beta01.txt
@@ -5,8 +5,8 @@
ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
method public abstract suspend Object? doWork(kotlin.coroutines.Continuation<? super androidx.work.ListenableWorker.Result> p);
method @Deprecated public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
- method public suspend Object? getForegroundInfo(kotlin.coroutines.Continuation<? super androidx.work.ForegroundInfo> p);
- method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo> getForegroundInfoAsync();
+ method @androidx.work.ExperimentalExpeditedWork public suspend Object? getForegroundInfo(kotlin.coroutines.Continuation<? super androidx.work.ForegroundInfo> p);
+ method @androidx.work.ExperimentalExpeditedWork public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo> getForegroundInfoAsync();
method public final void onStopped();
method public final suspend Object? setForeground(androidx.work.ForegroundInfo foregroundInfo, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
method public final suspend Object? setProgress(androidx.work.Data data, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
diff --git a/work/work-runtime-ktx/api/restricted_2.7.0-beta01.txt b/work/work-runtime-ktx/api/restricted_2.7.0-beta01.txt
index 8535d65..2c5f419 100644
--- a/work/work-runtime-ktx/api/restricted_2.7.0-beta01.txt
+++ b/work/work-runtime-ktx/api/restricted_2.7.0-beta01.txt
@@ -5,8 +5,6 @@
ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
method public abstract suspend Object? doWork(kotlin.coroutines.Continuation<? super androidx.work.ListenableWorker.Result> p);
method @Deprecated public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
- method public suspend Object? getForegroundInfo(kotlin.coroutines.Continuation<? super androidx.work.ForegroundInfo> p);
- method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo> getForegroundInfoAsync();
method public final void onStopped();
method public final suspend Object? setForeground(androidx.work.ForegroundInfo foregroundInfo, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
method public final suspend Object? setProgress(androidx.work.Data data, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
diff --git a/work/work-runtime/api/2.7.0-beta01.txt b/work/work-runtime/api/2.7.0-beta01.txt
index a6de624..54713f5 100644
--- a/work/work-runtime/api/2.7.0-beta01.txt
+++ b/work/work-runtime/api/2.7.0-beta01.txt
@@ -154,7 +154,6 @@
public abstract class ListenableWorker {
ctor @Keep public ListenableWorker(android.content.Context, androidx.work.WorkerParameters);
method public final android.content.Context getApplicationContext();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo!> getForegroundInfoAsync();
method public final java.util.UUID getId();
method public final androidx.work.Data getInputData();
method @RequiresApi(28) public final android.net.Network? getNetwork();
@@ -216,11 +215,6 @@
public static final class Operation.State.SUCCESS extends androidx.work.Operation.State {
}
- public enum OutOfQuotaPolicy {
- enum_constant public static final androidx.work.OutOfQuotaPolicy DROP_WORK_REQUEST;
- enum_constant public static final androidx.work.OutOfQuotaPolicy RUN_AS_NON_EXPEDITED_WORK_REQUEST;
- }
-
public final class OverwritingInputMerger extends androidx.work.InputMerger {
ctor public OverwritingInputMerger();
method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
@@ -347,7 +341,6 @@
method public final B setBackoffCriteria(androidx.work.BackoffPolicy, long, java.util.concurrent.TimeUnit);
method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy, java.time.Duration);
method public final B setConstraints(androidx.work.Constraints);
- method public B setExpedited(androidx.work.OutOfQuotaPolicy);
method public B setInitialDelay(long, java.util.concurrent.TimeUnit);
method @RequiresApi(26) public B setInitialDelay(java.time.Duration);
method public final B setInputData(androidx.work.Data);
diff --git a/work/work-runtime/api/public_plus_experimental_2.7.0-beta01.txt b/work/work-runtime/api/public_plus_experimental_2.7.0-beta01.txt
index a6de624..0c2f419 100644
--- a/work/work-runtime/api/public_plus_experimental_2.7.0-beta01.txt
+++ b/work/work-runtime/api/public_plus_experimental_2.7.0-beta01.txt
@@ -129,6 +129,9 @@
enum_constant public static final androidx.work.ExistingWorkPolicy REPLACE;
}
+ @experimental.Experimental(level=androidx.annotation.experimental.Experimental.Level.ERROR) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PACKAGE}) public @interface ExperimentalExpeditedWork {
+ }
+
public final class ForegroundInfo {
ctor public ForegroundInfo(int, android.app.Notification);
ctor public ForegroundInfo(int, android.app.Notification, int);
@@ -154,7 +157,7 @@
public abstract class ListenableWorker {
ctor @Keep public ListenableWorker(android.content.Context, androidx.work.WorkerParameters);
method public final android.content.Context getApplicationContext();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo!> getForegroundInfoAsync();
+ method @androidx.work.ExperimentalExpeditedWork public com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo!> getForegroundInfoAsync();
method public final java.util.UUID getId();
method public final androidx.work.Data getInputData();
method @RequiresApi(28) public final android.net.Network? getNetwork();
@@ -216,7 +219,7 @@
public static final class Operation.State.SUCCESS extends androidx.work.Operation.State {
}
- public enum OutOfQuotaPolicy {
+ @androidx.work.ExperimentalExpeditedWork public enum OutOfQuotaPolicy {
enum_constant public static final androidx.work.OutOfQuotaPolicy DROP_WORK_REQUEST;
enum_constant public static final androidx.work.OutOfQuotaPolicy RUN_AS_NON_EXPEDITED_WORK_REQUEST;
}
@@ -347,7 +350,7 @@
method public final B setBackoffCriteria(androidx.work.BackoffPolicy, long, java.util.concurrent.TimeUnit);
method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy, java.time.Duration);
method public final B setConstraints(androidx.work.Constraints);
- method public B setExpedited(androidx.work.OutOfQuotaPolicy);
+ method @androidx.work.ExperimentalExpeditedWork public B setExpedited(androidx.work.OutOfQuotaPolicy);
method public B setInitialDelay(long, java.util.concurrent.TimeUnit);
method @RequiresApi(26) public B setInitialDelay(java.time.Duration);
method public final B setInputData(androidx.work.Data);
diff --git a/work/work-runtime/api/restricted_2.7.0-beta01.txt b/work/work-runtime/api/restricted_2.7.0-beta01.txt
index a6de624..54713f5 100644
--- a/work/work-runtime/api/restricted_2.7.0-beta01.txt
+++ b/work/work-runtime/api/restricted_2.7.0-beta01.txt
@@ -154,7 +154,6 @@
public abstract class ListenableWorker {
ctor @Keep public ListenableWorker(android.content.Context, androidx.work.WorkerParameters);
method public final android.content.Context getApplicationContext();
- method public com.google.common.util.concurrent.ListenableFuture<androidx.work.ForegroundInfo!> getForegroundInfoAsync();
method public final java.util.UUID getId();
method public final androidx.work.Data getInputData();
method @RequiresApi(28) public final android.net.Network? getNetwork();
@@ -216,11 +215,6 @@
public static final class Operation.State.SUCCESS extends androidx.work.Operation.State {
}
- public enum OutOfQuotaPolicy {
- enum_constant public static final androidx.work.OutOfQuotaPolicy DROP_WORK_REQUEST;
- enum_constant public static final androidx.work.OutOfQuotaPolicy RUN_AS_NON_EXPEDITED_WORK_REQUEST;
- }
-
public final class OverwritingInputMerger extends androidx.work.InputMerger {
ctor public OverwritingInputMerger();
method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
@@ -347,7 +341,6 @@
method public final B setBackoffCriteria(androidx.work.BackoffPolicy, long, java.util.concurrent.TimeUnit);
method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy, java.time.Duration);
method public final B setConstraints(androidx.work.Constraints);
- method public B setExpedited(androidx.work.OutOfQuotaPolicy);
method public B setInitialDelay(long, java.util.concurrent.TimeUnit);
method @RequiresApi(26) public B setInitialDelay(java.time.Duration);
method public final B setInputData(androidx.work.Data);
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java b/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
index 4890888..db9546b 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/foreground/SystemForegroundDispatcher.java
@@ -255,6 +255,7 @@
});
}
+ @SuppressWarnings("deprecation")
@MainThread
private void handleNotify(@NonNull Intent intent) {
int notificationId = intent.getIntExtra(KEY_NOTIFICATION_ID, 0);