Merge "Check Intent.getPackage() for SplitPairFilter" into androidx-main
diff --git a/activity/activity-compose/api/1.6.0-beta02.txt b/activity/activity-compose/api/1.6.0-beta02.txt
new file mode 100644
index 0000000..66989c4
--- /dev/null
+++ b/activity/activity-compose/api/1.6.0-beta02.txt
@@ -0,0 +1,40 @@
+// Signature format: 4.0
+package androidx.activity.compose {
+
+ public final class ActivityComposeUtilsKt {
+ }
+
+ public final class ActivityResultRegistryKt {
+ method @androidx.compose.runtime.Composable public static <I, O> androidx.activity.compose.ManagedActivityResultLauncher<I,O> rememberLauncherForActivityResult(androidx.activity.result.contract.ActivityResultContract<I,O> contract, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> onResult);
+ }
+
+ public final class BackHandlerKt {
+ method @androidx.compose.runtime.Composable public static void BackHandler(optional boolean enabled, kotlin.jvm.functions.Function0<kotlin.Unit> onBack);
+ }
+
+ public final class ComponentActivityKt {
+ method public static void setContent(androidx.activity.ComponentActivity, optional androidx.compose.runtime.CompositionContext? parent, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class LocalActivityResultRegistryOwner {
+ method @androidx.compose.runtime.Composable public androidx.activity.result.ActivityResultRegistryOwner? getCurrent();
+ method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.result.ActivityResultRegistryOwner> provides(androidx.activity.result.ActivityResultRegistryOwner registryOwner);
+ property @androidx.compose.runtime.Composable public final androidx.activity.result.ActivityResultRegistryOwner? current;
+ field public static final androidx.activity.compose.LocalActivityResultRegistryOwner INSTANCE;
+ }
+
+ public final class LocalOnBackPressedDispatcherOwner {
+ method @androidx.compose.runtime.Composable public androidx.activity.OnBackPressedDispatcherOwner? getCurrent();
+ method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.OnBackPressedDispatcherOwner> provides(androidx.activity.OnBackPressedDispatcherOwner dispatcherOwner);
+ property @androidx.compose.runtime.Composable public final androidx.activity.OnBackPressedDispatcherOwner? current;
+ field public static final androidx.activity.compose.LocalOnBackPressedDispatcherOwner INSTANCE;
+ }
+
+ public final class ManagedActivityResultLauncher<I, O> extends androidx.activity.result.ActivityResultLauncher<I> {
+ method public androidx.activity.result.contract.ActivityResultContract<I,?> getContract();
+ method public void launch(I? input, androidx.core.app.ActivityOptionsCompat? options);
+ method @Deprecated public void unregister();
+ }
+
+}
+
diff --git a/activity/activity-compose/api/public_plus_experimental_1.6.0-beta02.txt b/activity/activity-compose/api/public_plus_experimental_1.6.0-beta02.txt
new file mode 100644
index 0000000..66989c4
--- /dev/null
+++ b/activity/activity-compose/api/public_plus_experimental_1.6.0-beta02.txt
@@ -0,0 +1,40 @@
+// Signature format: 4.0
+package androidx.activity.compose {
+
+ public final class ActivityComposeUtilsKt {
+ }
+
+ public final class ActivityResultRegistryKt {
+ method @androidx.compose.runtime.Composable public static <I, O> androidx.activity.compose.ManagedActivityResultLauncher<I,O> rememberLauncherForActivityResult(androidx.activity.result.contract.ActivityResultContract<I,O> contract, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> onResult);
+ }
+
+ public final class BackHandlerKt {
+ method @androidx.compose.runtime.Composable public static void BackHandler(optional boolean enabled, kotlin.jvm.functions.Function0<kotlin.Unit> onBack);
+ }
+
+ public final class ComponentActivityKt {
+ method public static void setContent(androidx.activity.ComponentActivity, optional androidx.compose.runtime.CompositionContext? parent, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class LocalActivityResultRegistryOwner {
+ method @androidx.compose.runtime.Composable public androidx.activity.result.ActivityResultRegistryOwner? getCurrent();
+ method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.result.ActivityResultRegistryOwner> provides(androidx.activity.result.ActivityResultRegistryOwner registryOwner);
+ property @androidx.compose.runtime.Composable public final androidx.activity.result.ActivityResultRegistryOwner? current;
+ field public static final androidx.activity.compose.LocalActivityResultRegistryOwner INSTANCE;
+ }
+
+ public final class LocalOnBackPressedDispatcherOwner {
+ method @androidx.compose.runtime.Composable public androidx.activity.OnBackPressedDispatcherOwner? getCurrent();
+ method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.OnBackPressedDispatcherOwner> provides(androidx.activity.OnBackPressedDispatcherOwner dispatcherOwner);
+ property @androidx.compose.runtime.Composable public final androidx.activity.OnBackPressedDispatcherOwner? current;
+ field public static final androidx.activity.compose.LocalOnBackPressedDispatcherOwner INSTANCE;
+ }
+
+ public final class ManagedActivityResultLauncher<I, O> extends androidx.activity.result.ActivityResultLauncher<I> {
+ method public androidx.activity.result.contract.ActivityResultContract<I,?> getContract();
+ method public void launch(I? input, androidx.core.app.ActivityOptionsCompat? options);
+ method @Deprecated public void unregister();
+ }
+
+}
+
diff --git a/activity/activity-compose/api/res-1.6.0-beta02.txt b/activity/activity-compose/api/res-1.6.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/activity/activity-compose/api/res-1.6.0-beta02.txt
diff --git a/activity/activity-compose/api/restricted_1.6.0-beta02.txt b/activity/activity-compose/api/restricted_1.6.0-beta02.txt
new file mode 100644
index 0000000..66989c4
--- /dev/null
+++ b/activity/activity-compose/api/restricted_1.6.0-beta02.txt
@@ -0,0 +1,40 @@
+// Signature format: 4.0
+package androidx.activity.compose {
+
+ public final class ActivityComposeUtilsKt {
+ }
+
+ public final class ActivityResultRegistryKt {
+ method @androidx.compose.runtime.Composable public static <I, O> androidx.activity.compose.ManagedActivityResultLauncher<I,O> rememberLauncherForActivityResult(androidx.activity.result.contract.ActivityResultContract<I,O> contract, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> onResult);
+ }
+
+ public final class BackHandlerKt {
+ method @androidx.compose.runtime.Composable public static void BackHandler(optional boolean enabled, kotlin.jvm.functions.Function0<kotlin.Unit> onBack);
+ }
+
+ public final class ComponentActivityKt {
+ method public static void setContent(androidx.activity.ComponentActivity, optional androidx.compose.runtime.CompositionContext? parent, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ }
+
+ public final class LocalActivityResultRegistryOwner {
+ method @androidx.compose.runtime.Composable public androidx.activity.result.ActivityResultRegistryOwner? getCurrent();
+ method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.result.ActivityResultRegistryOwner> provides(androidx.activity.result.ActivityResultRegistryOwner registryOwner);
+ property @androidx.compose.runtime.Composable public final androidx.activity.result.ActivityResultRegistryOwner? current;
+ field public static final androidx.activity.compose.LocalActivityResultRegistryOwner INSTANCE;
+ }
+
+ public final class LocalOnBackPressedDispatcherOwner {
+ method @androidx.compose.runtime.Composable public androidx.activity.OnBackPressedDispatcherOwner? getCurrent();
+ method public infix androidx.compose.runtime.ProvidedValue<androidx.activity.OnBackPressedDispatcherOwner> provides(androidx.activity.OnBackPressedDispatcherOwner dispatcherOwner);
+ property @androidx.compose.runtime.Composable public final androidx.activity.OnBackPressedDispatcherOwner? current;
+ field public static final androidx.activity.compose.LocalOnBackPressedDispatcherOwner INSTANCE;
+ }
+
+ public final class ManagedActivityResultLauncher<I, O> extends androidx.activity.result.ActivityResultLauncher<I> {
+ method public androidx.activity.result.contract.ActivityResultContract<I,?> getContract();
+ method public void launch(I? input, androidx.core.app.ActivityOptionsCompat? options);
+ method @Deprecated public void unregister();
+ }
+
+}
+
diff --git a/activity/activity-ktx/api/1.6.0-beta02.txt b/activity/activity-ktx/api/1.6.0-beta02.txt
new file mode 100644
index 0000000..822d245
--- /dev/null
+++ b/activity/activity-ktx/api/1.6.0-beta02.txt
@@ -0,0 +1,44 @@
+// Signature format: 4.0
+package androidx.activity {
+
+ public final class ActivityViewModelLazyKt {
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ }
+
+ public final class OnBackPressedDispatcherKt {
+ method public static androidx.activity.OnBackPressedCallback addCallback(androidx.activity.OnBackPressedDispatcher, optional androidx.lifecycle.LifecycleOwner? owner, optional boolean enabled, kotlin.jvm.functions.Function1<? super androidx.activity.OnBackPressedCallback,kotlin.Unit> onBackPressed);
+ }
+
+ public final class PipHintTrackerKt {
+ }
+
+}
+
+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>);
+ }
+
+}
+
+package androidx.activity.result {
+
+ public final class ActivityResultCallerKt {
+ method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I? input, androidx.activity.result.ActivityResultRegistry registry, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
+ method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I? input, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
+ }
+
+ public final class ActivityResultKt {
+ method public static operator int component1(androidx.activity.result.ActivityResult);
+ method public static operator android.content.Intent? component2(androidx.activity.result.ActivityResult);
+ }
+
+ public final class ActivityResultLauncherKt {
+ method public static void launch(androidx.activity.result.ActivityResultLauncher<java.lang.Void>, optional androidx.core.app.ActivityOptionsCompat? options);
+ method public static void launchUnit(androidx.activity.result.ActivityResultLauncher<kotlin.Unit>, optional androidx.core.app.ActivityOptionsCompat? options);
+ }
+
+}
+
diff --git a/activity/activity-ktx/api/public_plus_experimental_1.6.0-beta02.txt b/activity/activity-ktx/api/public_plus_experimental_1.6.0-beta02.txt
new file mode 100644
index 0000000..f690f03
--- /dev/null
+++ b/activity/activity-ktx/api/public_plus_experimental_1.6.0-beta02.txt
@@ -0,0 +1,45 @@
+// Signature format: 4.0
+package androidx.activity {
+
+ public final class ActivityViewModelLazyKt {
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ }
+
+ public final class OnBackPressedDispatcherKt {
+ method public static androidx.activity.OnBackPressedCallback addCallback(androidx.activity.OnBackPressedDispatcher, optional androidx.lifecycle.LifecycleOwner? owner, optional boolean enabled, kotlin.jvm.functions.Function1<? super androidx.activity.OnBackPressedCallback,kotlin.Unit> onBackPressed);
+ }
+
+ 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>);
+ }
+
+}
+
+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>);
+ }
+
+}
+
+package androidx.activity.result {
+
+ public final class ActivityResultCallerKt {
+ method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I? input, androidx.activity.result.ActivityResultRegistry registry, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
+ method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I? input, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
+ }
+
+ public final class ActivityResultKt {
+ method public static operator int component1(androidx.activity.result.ActivityResult);
+ method public static operator android.content.Intent? component2(androidx.activity.result.ActivityResult);
+ }
+
+ public final class ActivityResultLauncherKt {
+ method public static void launch(androidx.activity.result.ActivityResultLauncher<java.lang.Void>, optional androidx.core.app.ActivityOptionsCompat? options);
+ method public static void launchUnit(androidx.activity.result.ActivityResultLauncher<kotlin.Unit>, optional androidx.core.app.ActivityOptionsCompat? options);
+ }
+
+}
+
diff --git a/activity/activity-ktx/api/res-1.6.0-beta02.txt b/activity/activity-ktx/api/res-1.6.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/activity/activity-ktx/api/res-1.6.0-beta02.txt
diff --git a/activity/activity-ktx/api/restricted_1.6.0-beta02.txt b/activity/activity-ktx/api/restricted_1.6.0-beta02.txt
new file mode 100644
index 0000000..822d245
--- /dev/null
+++ b/activity/activity-ktx/api/restricted_1.6.0-beta02.txt
@@ -0,0 +1,44 @@
+// Signature format: 4.0
+package androidx.activity {
+
+ public final class ActivityViewModelLazyKt {
+ method @Deprecated @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ method @MainThread public static inline <reified VM extends androidx.lifecycle.ViewModel> kotlin.Lazy<? extends VM>! viewModels(androidx.activity.ComponentActivity, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.viewmodel.CreationExtras>? extrasProducer, optional kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer);
+ }
+
+ public final class OnBackPressedDispatcherKt {
+ method public static androidx.activity.OnBackPressedCallback addCallback(androidx.activity.OnBackPressedDispatcher, optional androidx.lifecycle.LifecycleOwner? owner, optional boolean enabled, kotlin.jvm.functions.Function1<? super androidx.activity.OnBackPressedCallback,kotlin.Unit> onBackPressed);
+ }
+
+ public final class PipHintTrackerKt {
+ }
+
+}
+
+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>);
+ }
+
+}
+
+package androidx.activity.result {
+
+ public final class ActivityResultCallerKt {
+ method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I? input, androidx.activity.result.ActivityResultRegistry registry, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
+ method public static <I, O> androidx.activity.result.ActivityResultLauncher<kotlin.Unit> registerForActivityResult(androidx.activity.result.ActivityResultCaller, androidx.activity.result.contract.ActivityResultContract<I,O> contract, I? input, kotlin.jvm.functions.Function1<? super O,kotlin.Unit> callback);
+ }
+
+ public final class ActivityResultKt {
+ method public static operator int component1(androidx.activity.result.ActivityResult);
+ method public static operator android.content.Intent? component2(androidx.activity.result.ActivityResult);
+ }
+
+ public final class ActivityResultLauncherKt {
+ method public static void launch(androidx.activity.result.ActivityResultLauncher<java.lang.Void>, optional androidx.core.app.ActivityOptionsCompat? options);
+ method public static void launchUnit(androidx.activity.result.ActivityResultLauncher<kotlin.Unit>, optional androidx.core.app.ActivityOptionsCompat? options);
+ }
+
+}
+
diff --git a/activity/activity/api/1.6.0-beta02.txt b/activity/activity/api/1.6.0-beta02.txt
new file mode 100644
index 0000000..08fffc8
--- /dev/null
+++ b/activity/activity/api/1.6.0-beta02.txt
@@ -0,0 +1,368 @@
+// Signature format: 4.0
+package androidx.activity {
+
+ public class ComponentActivity extends android.app.Activity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.activity.contextaware.ContextAware androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.core.view.MenuHost androidx.activity.OnBackPressedDispatcherOwner androidx.core.content.OnConfigurationChangedProvider androidx.core.app.OnMultiWindowModeChangedProvider androidx.core.app.OnNewIntentProvider androidx.core.app.OnPictureInPictureModeChangedProvider androidx.core.content.OnTrimMemoryProvider androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+ ctor public ComponentActivity();
+ ctor @ContentView public ComponentActivity(@LayoutRes int);
+ 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 final void addOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+ method public final void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ method public final void addOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+ method public final void addOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+ method public final void addOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+ method public final void addOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+ method public final androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
+ method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
+ method @Deprecated public Object? getLastCustomNonConfigurationInstance();
+ method public androidx.lifecycle.Lifecycle getLifecycle();
+ method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+ method public final androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
+ 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[]);
+ method @Deprecated public Object? onRetainCustomNonConfigurationInstance();
+ method public final Object? onRetainNonConfigurationInstance();
+ method public android.content.Context? peekAvailableContext();
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public void removeMenuProvider(androidx.core.view.MenuProvider);
+ method public final void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+ method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ method public final void removeOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+ method public final void removeOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+ method public final void removeOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+ method public final void removeOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+ 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) throws android.content.IntentSender.SendIntentException;
+ method @Deprecated public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+ }
+
+ public class ComponentDialog extends android.app.Dialog implements androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner {
+ ctor public ComponentDialog(android.content.Context context, optional @StyleRes int themeResId);
+ 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 {
+ ctor public OnBackPressedCallback(boolean);
+ method @MainThread public abstract void handleOnBackPressed();
+ method @MainThread public final boolean isEnabled();
+ method @MainThread public final void remove();
+ method @MainThread public final void setEnabled(boolean);
+ }
+
+ public final class OnBackPressedDispatcher {
+ ctor public OnBackPressedDispatcher();
+ ctor public OnBackPressedDispatcher(Runnable?);
+ method @MainThread public void addCallback(androidx.activity.OnBackPressedCallback);
+ 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 {
+ method public androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+ }
+
+ public final class ViewTreeOnBackPressedDispatcherOwner {
+ method public static androidx.activity.OnBackPressedDispatcherOwner? get(android.view.View);
+ method public static void set(android.view.View, androidx.activity.OnBackPressedDispatcherOwner onBackPressedDispatcherOwner);
+ }
+
+}
+
+package androidx.activity.contextaware {
+
+ public interface ContextAware {
+ method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ method public android.content.Context? peekAvailableContext();
+ method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ }
+
+ public final class ContextAwareHelper {
+ ctor public ContextAwareHelper();
+ method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ method public void clearAvailableContext();
+ method public void dispatchOnContextAvailable(android.content.Context);
+ method public android.content.Context? peekAvailableContext();
+ method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ }
+
+ public interface OnContextAvailableListener {
+ method public void onContextAvailable(android.content.Context);
+ }
+
+}
+
+package androidx.activity.result {
+
+ public final class ActivityResult implements android.os.Parcelable {
+ ctor public ActivityResult(int, android.content.Intent?);
+ method public int describeContents();
+ method public android.content.Intent? getData();
+ method public int getResultCode();
+ method public static String resultCodeToString(int);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<androidx.activity.result.ActivityResult!> CREATOR;
+ }
+
+ public interface ActivityResultCallback<O> {
+ method public void onActivityResult(O!);
+ }
+
+ public interface ActivityResultCaller {
+ method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
+ }
+
+ public abstract class ActivityResultLauncher<I> {
+ ctor public ActivityResultLauncher();
+ method public abstract androidx.activity.result.contract.ActivityResultContract<I!,?> getContract();
+ method public void launch(I!);
+ method public abstract void launch(I!, androidx.core.app.ActivityOptionsCompat?);
+ method @MainThread public abstract void unregister();
+ }
+
+ public abstract class ActivityResultRegistry {
+ ctor public ActivityResultRegistry();
+ method @MainThread public final boolean dispatchResult(int, int, android.content.Intent?);
+ method @MainThread public final <O> boolean dispatchResult(int, O!);
+ method @MainThread public abstract <I, O> void onLaunch(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!, androidx.core.app.ActivityOptionsCompat?);
+ method public final void onRestoreInstanceState(android.os.Bundle?);
+ method public final void onSaveInstanceState(android.os.Bundle);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ }
+
+ public interface ActivityResultRegistryOwner {
+ method public androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
+ }
+
+ public final class IntentSenderRequest implements android.os.Parcelable {
+ method public int describeContents();
+ method public android.content.Intent? getFillInIntent();
+ method public int getFlagsMask();
+ method public int getFlagsValues();
+ method public android.content.IntentSender getIntentSender();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<androidx.activity.result.IntentSenderRequest!> CREATOR;
+ }
+
+ public static final class IntentSenderRequest.Builder {
+ ctor public IntentSenderRequest.Builder(android.content.IntentSender);
+ ctor public IntentSenderRequest.Builder(android.app.PendingIntent);
+ method public androidx.activity.result.IntentSenderRequest build();
+ method public androidx.activity.result.IntentSenderRequest.Builder setFillInIntent(android.content.Intent?);
+ 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 {
+
+ public abstract class ActivityResultContract<I, O> {
+ ctor public ActivityResultContract();
+ method public abstract android.content.Intent createIntent(android.content.Context context, I? input);
+ method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<O>? getSynchronousResult(android.content.Context context, I? input);
+ method public abstract O! parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static final class ActivityResultContract.SynchronousResult<T> {
+ ctor public ActivityResultContract.SynchronousResult(T? value);
+ method public T! getValue();
+ property public final T! value;
+ }
+
+ public final class ActivityResultContracts {
+ }
+
+ public static class ActivityResultContracts.CaptureVideo extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,java.lang.Boolean> {
+ ctor public ActivityResultContracts.CaptureVideo();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+ method public final Boolean parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(19) public static class ActivityResultContracts.CreateDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
+ ctor public ActivityResultContracts.CreateDocument(String mimeType);
+ ctor @Deprecated public ActivityResultContracts.CreateDocument();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static class ActivityResultContracts.GetContent extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
+ ctor public ActivityResultContracts.GetContent();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(18) public static class ActivityResultContracts.GetMultipleContents extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,java.util.List<android.net.Uri>> {
+ ctor public ActivityResultContracts.GetMultipleContents();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, String input);
+ method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(19) public static class ActivityResultContracts.OpenDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],android.net.Uri> {
+ ctor public ActivityResultContracts.OpenDocument();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String![] input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String![] input);
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(21) public static class ActivityResultContracts.OpenDocumentTree extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,android.net.Uri> {
+ ctor public ActivityResultContracts.OpenDocumentTree();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri? input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, android.net.Uri? input);
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(19) public static class ActivityResultContracts.OpenMultipleDocuments extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.List<android.net.Uri>> {
+ ctor public ActivityResultContracts.OpenMultipleDocuments();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String![] input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, String![] input);
+ method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static final class ActivityResultContracts.PickContact extends androidx.activity.result.contract.ActivityResultContract<java.lang.Void,android.net.Uri> {
+ ctor public ActivityResultContracts.PickContact();
+ method public android.content.Intent createIntent(android.content.Context context, Void? input);
+ 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);
+ method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.Map<java.lang.String,java.lang.Boolean>>? getSynchronousResult(android.content.Context context, String![] input);
+ method public java.util.Map<java.lang.String,java.lang.Boolean> parseResult(int resultCode, android.content.Intent? intent);
+ field public static final String ACTION_REQUEST_PERMISSIONS = "androidx.activity.result.contract.action.REQUEST_PERMISSIONS";
+ field public static final androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions.Companion Companion;
+ field public static final String EXTRA_PERMISSIONS = "androidx.activity.result.contract.extra.PERMISSIONS";
+ field public static final String EXTRA_PERMISSION_GRANT_RESULTS = "androidx.activity.result.contract.extra.PERMISSION_GRANT_RESULTS";
+ }
+
+ public static final class ActivityResultContracts.RequestMultiplePermissions.Companion {
+ }
+
+ public static final class ActivityResultContracts.RequestPermission extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,java.lang.Boolean> {
+ ctor public ActivityResultContracts.RequestPermission();
+ method public android.content.Intent createIntent(android.content.Context context, String input);
+ method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, String input);
+ method public Boolean parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static final class ActivityResultContracts.StartActivityForResult extends androidx.activity.result.contract.ActivityResultContract<android.content.Intent,androidx.activity.result.ActivityResult> {
+ ctor public ActivityResultContracts.StartActivityForResult();
+ method public android.content.Intent createIntent(android.content.Context context, android.content.Intent input);
+ method public androidx.activity.result.ActivityResult parseResult(int resultCode, android.content.Intent? intent);
+ field public static final androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult.Companion Companion;
+ field public static final String EXTRA_ACTIVITY_OPTIONS_BUNDLE = "androidx.activity.result.contract.extra.ACTIVITY_OPTIONS_BUNDLE";
+ }
+
+ public static final class ActivityResultContracts.StartActivityForResult.Companion {
+ }
+
+ public static final class ActivityResultContracts.StartIntentSenderForResult extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.IntentSenderRequest,androidx.activity.result.ActivityResult> {
+ ctor public ActivityResultContracts.StartIntentSenderForResult();
+ method public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.IntentSenderRequest input);
+ method public androidx.activity.result.ActivityResult parseResult(int resultCode, android.content.Intent? intent);
+ field public static final String ACTION_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.action.INTENT_SENDER_REQUEST";
+ field public static final androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion Companion;
+ field public static final String EXTRA_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.extra.INTENT_SENDER_REQUEST";
+ field public static final String EXTRA_SEND_INTENT_EXCEPTION = "androidx.activity.result.contract.extra.SEND_INTENT_EXCEPTION";
+ }
+
+ public static final class ActivityResultContracts.StartIntentSenderForResult.Companion {
+ }
+
+ public static class ActivityResultContracts.TakePicture extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,java.lang.Boolean> {
+ ctor public ActivityResultContracts.TakePicture();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+ method public final Boolean parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static class ActivityResultContracts.TakePicturePreview extends androidx.activity.result.contract.ActivityResultContract<java.lang.Void,android.graphics.Bitmap> {
+ ctor public ActivityResultContracts.TakePicturePreview();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, Void? input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.graphics.Bitmap>? getSynchronousResult(android.content.Context context, Void? input);
+ method public final android.graphics.Bitmap? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @Deprecated public static class ActivityResultContracts.TakeVideo extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,android.graphics.Bitmap> {
+ ctor @Deprecated public ActivityResultContracts.TakeVideo();
+ method @Deprecated @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+ method @Deprecated public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.graphics.Bitmap>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+ method @Deprecated public final android.graphics.Bitmap? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+}
+
diff --git a/activity/activity/api/public_plus_experimental_1.6.0-beta02.txt b/activity/activity/api/public_plus_experimental_1.6.0-beta02.txt
new file mode 100644
index 0000000..08fffc8
--- /dev/null
+++ b/activity/activity/api/public_plus_experimental_1.6.0-beta02.txt
@@ -0,0 +1,368 @@
+// Signature format: 4.0
+package androidx.activity {
+
+ public class ComponentActivity extends android.app.Activity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.activity.contextaware.ContextAware androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.core.view.MenuHost androidx.activity.OnBackPressedDispatcherOwner androidx.core.content.OnConfigurationChangedProvider androidx.core.app.OnMultiWindowModeChangedProvider androidx.core.app.OnNewIntentProvider androidx.core.app.OnPictureInPictureModeChangedProvider androidx.core.content.OnTrimMemoryProvider androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+ ctor public ComponentActivity();
+ ctor @ContentView public ComponentActivity(@LayoutRes int);
+ 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 final void addOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+ method public final void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ method public final void addOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+ method public final void addOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+ method public final void addOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+ method public final void addOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+ method public final androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
+ method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
+ method @Deprecated public Object? getLastCustomNonConfigurationInstance();
+ method public androidx.lifecycle.Lifecycle getLifecycle();
+ method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+ method public final androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
+ 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[]);
+ method @Deprecated public Object? onRetainCustomNonConfigurationInstance();
+ method public final Object? onRetainNonConfigurationInstance();
+ method public android.content.Context? peekAvailableContext();
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public void removeMenuProvider(androidx.core.view.MenuProvider);
+ method public final void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+ method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ method public final void removeOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+ method public final void removeOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+ method public final void removeOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+ method public final void removeOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+ 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) throws android.content.IntentSender.SendIntentException;
+ method @Deprecated public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+ }
+
+ public class ComponentDialog extends android.app.Dialog implements androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner {
+ ctor public ComponentDialog(android.content.Context context, optional @StyleRes int themeResId);
+ 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 {
+ ctor public OnBackPressedCallback(boolean);
+ method @MainThread public abstract void handleOnBackPressed();
+ method @MainThread public final boolean isEnabled();
+ method @MainThread public final void remove();
+ method @MainThread public final void setEnabled(boolean);
+ }
+
+ public final class OnBackPressedDispatcher {
+ ctor public OnBackPressedDispatcher();
+ ctor public OnBackPressedDispatcher(Runnable?);
+ method @MainThread public void addCallback(androidx.activity.OnBackPressedCallback);
+ 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 {
+ method public androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+ }
+
+ public final class ViewTreeOnBackPressedDispatcherOwner {
+ method public static androidx.activity.OnBackPressedDispatcherOwner? get(android.view.View);
+ method public static void set(android.view.View, androidx.activity.OnBackPressedDispatcherOwner onBackPressedDispatcherOwner);
+ }
+
+}
+
+package androidx.activity.contextaware {
+
+ public interface ContextAware {
+ method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ method public android.content.Context? peekAvailableContext();
+ method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ }
+
+ public final class ContextAwareHelper {
+ ctor public ContextAwareHelper();
+ method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ method public void clearAvailableContext();
+ method public void dispatchOnContextAvailable(android.content.Context);
+ method public android.content.Context? peekAvailableContext();
+ method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ }
+
+ public interface OnContextAvailableListener {
+ method public void onContextAvailable(android.content.Context);
+ }
+
+}
+
+package androidx.activity.result {
+
+ public final class ActivityResult implements android.os.Parcelable {
+ ctor public ActivityResult(int, android.content.Intent?);
+ method public int describeContents();
+ method public android.content.Intent? getData();
+ method public int getResultCode();
+ method public static String resultCodeToString(int);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<androidx.activity.result.ActivityResult!> CREATOR;
+ }
+
+ public interface ActivityResultCallback<O> {
+ method public void onActivityResult(O!);
+ }
+
+ public interface ActivityResultCaller {
+ method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
+ }
+
+ public abstract class ActivityResultLauncher<I> {
+ ctor public ActivityResultLauncher();
+ method public abstract androidx.activity.result.contract.ActivityResultContract<I!,?> getContract();
+ method public void launch(I!);
+ method public abstract void launch(I!, androidx.core.app.ActivityOptionsCompat?);
+ method @MainThread public abstract void unregister();
+ }
+
+ public abstract class ActivityResultRegistry {
+ ctor public ActivityResultRegistry();
+ method @MainThread public final boolean dispatchResult(int, int, android.content.Intent?);
+ method @MainThread public final <O> boolean dispatchResult(int, O!);
+ method @MainThread public abstract <I, O> void onLaunch(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!, androidx.core.app.ActivityOptionsCompat?);
+ method public final void onRestoreInstanceState(android.os.Bundle?);
+ method public final void onSaveInstanceState(android.os.Bundle);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ }
+
+ public interface ActivityResultRegistryOwner {
+ method public androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
+ }
+
+ public final class IntentSenderRequest implements android.os.Parcelable {
+ method public int describeContents();
+ method public android.content.Intent? getFillInIntent();
+ method public int getFlagsMask();
+ method public int getFlagsValues();
+ method public android.content.IntentSender getIntentSender();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<androidx.activity.result.IntentSenderRequest!> CREATOR;
+ }
+
+ public static final class IntentSenderRequest.Builder {
+ ctor public IntentSenderRequest.Builder(android.content.IntentSender);
+ ctor public IntentSenderRequest.Builder(android.app.PendingIntent);
+ method public androidx.activity.result.IntentSenderRequest build();
+ method public androidx.activity.result.IntentSenderRequest.Builder setFillInIntent(android.content.Intent?);
+ 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 {
+
+ public abstract class ActivityResultContract<I, O> {
+ ctor public ActivityResultContract();
+ method public abstract android.content.Intent createIntent(android.content.Context context, I? input);
+ method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<O>? getSynchronousResult(android.content.Context context, I? input);
+ method public abstract O! parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static final class ActivityResultContract.SynchronousResult<T> {
+ ctor public ActivityResultContract.SynchronousResult(T? value);
+ method public T! getValue();
+ property public final T! value;
+ }
+
+ public final class ActivityResultContracts {
+ }
+
+ public static class ActivityResultContracts.CaptureVideo extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,java.lang.Boolean> {
+ ctor public ActivityResultContracts.CaptureVideo();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+ method public final Boolean parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(19) public static class ActivityResultContracts.CreateDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
+ ctor public ActivityResultContracts.CreateDocument(String mimeType);
+ ctor @Deprecated public ActivityResultContracts.CreateDocument();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static class ActivityResultContracts.GetContent extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
+ ctor public ActivityResultContracts.GetContent();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(18) public static class ActivityResultContracts.GetMultipleContents extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,java.util.List<android.net.Uri>> {
+ ctor public ActivityResultContracts.GetMultipleContents();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, String input);
+ method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(19) public static class ActivityResultContracts.OpenDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],android.net.Uri> {
+ ctor public ActivityResultContracts.OpenDocument();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String![] input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String![] input);
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(21) public static class ActivityResultContracts.OpenDocumentTree extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,android.net.Uri> {
+ ctor public ActivityResultContracts.OpenDocumentTree();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri? input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, android.net.Uri? input);
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(19) public static class ActivityResultContracts.OpenMultipleDocuments extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.List<android.net.Uri>> {
+ ctor public ActivityResultContracts.OpenMultipleDocuments();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String![] input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, String![] input);
+ method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static final class ActivityResultContracts.PickContact extends androidx.activity.result.contract.ActivityResultContract<java.lang.Void,android.net.Uri> {
+ ctor public ActivityResultContracts.PickContact();
+ method public android.content.Intent createIntent(android.content.Context context, Void? input);
+ 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);
+ method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.Map<java.lang.String,java.lang.Boolean>>? getSynchronousResult(android.content.Context context, String![] input);
+ method public java.util.Map<java.lang.String,java.lang.Boolean> parseResult(int resultCode, android.content.Intent? intent);
+ field public static final String ACTION_REQUEST_PERMISSIONS = "androidx.activity.result.contract.action.REQUEST_PERMISSIONS";
+ field public static final androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions.Companion Companion;
+ field public static final String EXTRA_PERMISSIONS = "androidx.activity.result.contract.extra.PERMISSIONS";
+ field public static final String EXTRA_PERMISSION_GRANT_RESULTS = "androidx.activity.result.contract.extra.PERMISSION_GRANT_RESULTS";
+ }
+
+ public static final class ActivityResultContracts.RequestMultiplePermissions.Companion {
+ }
+
+ public static final class ActivityResultContracts.RequestPermission extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,java.lang.Boolean> {
+ ctor public ActivityResultContracts.RequestPermission();
+ method public android.content.Intent createIntent(android.content.Context context, String input);
+ method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, String input);
+ method public Boolean parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static final class ActivityResultContracts.StartActivityForResult extends androidx.activity.result.contract.ActivityResultContract<android.content.Intent,androidx.activity.result.ActivityResult> {
+ ctor public ActivityResultContracts.StartActivityForResult();
+ method public android.content.Intent createIntent(android.content.Context context, android.content.Intent input);
+ method public androidx.activity.result.ActivityResult parseResult(int resultCode, android.content.Intent? intent);
+ field public static final androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult.Companion Companion;
+ field public static final String EXTRA_ACTIVITY_OPTIONS_BUNDLE = "androidx.activity.result.contract.extra.ACTIVITY_OPTIONS_BUNDLE";
+ }
+
+ public static final class ActivityResultContracts.StartActivityForResult.Companion {
+ }
+
+ public static final class ActivityResultContracts.StartIntentSenderForResult extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.IntentSenderRequest,androidx.activity.result.ActivityResult> {
+ ctor public ActivityResultContracts.StartIntentSenderForResult();
+ method public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.IntentSenderRequest input);
+ method public androidx.activity.result.ActivityResult parseResult(int resultCode, android.content.Intent? intent);
+ field public static final String ACTION_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.action.INTENT_SENDER_REQUEST";
+ field public static final androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion Companion;
+ field public static final String EXTRA_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.extra.INTENT_SENDER_REQUEST";
+ field public static final String EXTRA_SEND_INTENT_EXCEPTION = "androidx.activity.result.contract.extra.SEND_INTENT_EXCEPTION";
+ }
+
+ public static final class ActivityResultContracts.StartIntentSenderForResult.Companion {
+ }
+
+ public static class ActivityResultContracts.TakePicture extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,java.lang.Boolean> {
+ ctor public ActivityResultContracts.TakePicture();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+ method public final Boolean parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static class ActivityResultContracts.TakePicturePreview extends androidx.activity.result.contract.ActivityResultContract<java.lang.Void,android.graphics.Bitmap> {
+ ctor public ActivityResultContracts.TakePicturePreview();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, Void? input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.graphics.Bitmap>? getSynchronousResult(android.content.Context context, Void? input);
+ method public final android.graphics.Bitmap? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @Deprecated public static class ActivityResultContracts.TakeVideo extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,android.graphics.Bitmap> {
+ ctor @Deprecated public ActivityResultContracts.TakeVideo();
+ method @Deprecated @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+ method @Deprecated public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.graphics.Bitmap>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+ method @Deprecated public final android.graphics.Bitmap? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+}
+
diff --git a/activity/activity/api/res-1.6.0-beta02.txt b/activity/activity/api/res-1.6.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/activity/activity/api/res-1.6.0-beta02.txt
diff --git a/activity/activity/api/restricted_1.6.0-beta02.txt b/activity/activity/api/restricted_1.6.0-beta02.txt
new file mode 100644
index 0000000..75909c6
--- /dev/null
+++ b/activity/activity/api/restricted_1.6.0-beta02.txt
@@ -0,0 +1,367 @@
+// Signature format: 4.0
+package androidx.activity {
+
+ public class ComponentActivity extends androidx.core.app.ComponentActivity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.activity.contextaware.ContextAware androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.core.view.MenuHost androidx.activity.OnBackPressedDispatcherOwner androidx.core.content.OnConfigurationChangedProvider androidx.core.app.OnMultiWindowModeChangedProvider androidx.core.app.OnNewIntentProvider androidx.core.app.OnPictureInPictureModeChangedProvider androidx.core.content.OnTrimMemoryProvider androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+ ctor public ComponentActivity();
+ ctor @ContentView public ComponentActivity(@LayoutRes int);
+ 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 final void addOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+ method public final void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ method public final void addOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+ method public final void addOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+ method public final void addOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+ method public final void addOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+ method public final androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
+ method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
+ method @Deprecated public Object? getLastCustomNonConfigurationInstance();
+ method public final androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+ method public final androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
+ 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[]);
+ method @Deprecated public Object? onRetainCustomNonConfigurationInstance();
+ method public final Object? onRetainNonConfigurationInstance();
+ method public android.content.Context? peekAvailableContext();
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public void removeMenuProvider(androidx.core.view.MenuProvider);
+ method public final void removeOnConfigurationChangedListener(androidx.core.util.Consumer<android.content.res.Configuration!>);
+ method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ method public final void removeOnMultiWindowModeChangedListener(androidx.core.util.Consumer<androidx.core.app.MultiWindowModeChangedInfo!>);
+ method public final void removeOnNewIntentListener(androidx.core.util.Consumer<android.content.Intent!>);
+ method public final void removeOnPictureInPictureModeChangedListener(androidx.core.util.Consumer<androidx.core.app.PictureInPictureModeChangedInfo!>);
+ method public final void removeOnTrimMemoryListener(androidx.core.util.Consumer<java.lang.Integer!>);
+ 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) throws android.content.IntentSender.SendIntentException;
+ method @Deprecated public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent?, int, int, int, android.os.Bundle?) throws android.content.IntentSender.SendIntentException;
+ }
+
+ public class ComponentDialog extends android.app.Dialog implements androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner {
+ ctor public ComponentDialog(android.content.Context context, optional @StyleRes int themeResId);
+ 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 {
+ ctor public OnBackPressedCallback(boolean);
+ method @MainThread public abstract void handleOnBackPressed();
+ method @MainThread public final boolean isEnabled();
+ method @MainThread public final void remove();
+ method @MainThread public final void setEnabled(boolean);
+ }
+
+ public final class OnBackPressedDispatcher {
+ ctor public OnBackPressedDispatcher();
+ ctor public OnBackPressedDispatcher(Runnable?);
+ method @MainThread public void addCallback(androidx.activity.OnBackPressedCallback);
+ 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 {
+ method public androidx.activity.OnBackPressedDispatcher getOnBackPressedDispatcher();
+ }
+
+ public final class ViewTreeOnBackPressedDispatcherOwner {
+ method public static androidx.activity.OnBackPressedDispatcherOwner? get(android.view.View);
+ method public static void set(android.view.View, androidx.activity.OnBackPressedDispatcherOwner onBackPressedDispatcherOwner);
+ }
+
+}
+
+package androidx.activity.contextaware {
+
+ public interface ContextAware {
+ method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ method public android.content.Context? peekAvailableContext();
+ method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ }
+
+ public final class ContextAwareHelper {
+ ctor public ContextAwareHelper();
+ method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ method public void clearAvailableContext();
+ method public void dispatchOnContextAvailable(android.content.Context);
+ method public android.content.Context? peekAvailableContext();
+ method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+ }
+
+ public interface OnContextAvailableListener {
+ method public void onContextAvailable(android.content.Context);
+ }
+
+}
+
+package androidx.activity.result {
+
+ public final class ActivityResult implements android.os.Parcelable {
+ ctor public ActivityResult(int, android.content.Intent?);
+ method public int describeContents();
+ method public android.content.Intent? getData();
+ method public int getResultCode();
+ method public static String resultCodeToString(int);
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<androidx.activity.result.ActivityResult!> CREATOR;
+ }
+
+ public interface ActivityResultCallback<O> {
+ method public void onActivityResult(O!);
+ }
+
+ public interface ActivityResultCaller {
+ method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
+ }
+
+ public abstract class ActivityResultLauncher<I> {
+ ctor public ActivityResultLauncher();
+ method public abstract androidx.activity.result.contract.ActivityResultContract<I!,?> getContract();
+ method public void launch(I!);
+ method public abstract void launch(I!, androidx.core.app.ActivityOptionsCompat?);
+ method @MainThread public abstract void unregister();
+ }
+
+ public abstract class ActivityResultRegistry {
+ ctor public ActivityResultRegistry();
+ method @MainThread public final boolean dispatchResult(int, int, android.content.Intent?);
+ method @MainThread public final <O> boolean dispatchResult(int, O!);
+ method @MainThread public abstract <I, O> void onLaunch(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!, androidx.core.app.ActivityOptionsCompat?);
+ method public final void onRestoreInstanceState(android.os.Bundle?);
+ method public final void onSaveInstanceState(android.os.Bundle);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+ }
+
+ public interface ActivityResultRegistryOwner {
+ method public androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
+ }
+
+ public final class IntentSenderRequest implements android.os.Parcelable {
+ method public int describeContents();
+ method public android.content.Intent? getFillInIntent();
+ method public int getFlagsMask();
+ method public int getFlagsValues();
+ method public android.content.IntentSender getIntentSender();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<androidx.activity.result.IntentSenderRequest!> CREATOR;
+ }
+
+ public static final class IntentSenderRequest.Builder {
+ ctor public IntentSenderRequest.Builder(android.content.IntentSender);
+ ctor public IntentSenderRequest.Builder(android.app.PendingIntent);
+ method public androidx.activity.result.IntentSenderRequest build();
+ method public androidx.activity.result.IntentSenderRequest.Builder setFillInIntent(android.content.Intent?);
+ 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 {
+
+ public abstract class ActivityResultContract<I, O> {
+ ctor public ActivityResultContract();
+ method public abstract android.content.Intent createIntent(android.content.Context context, I? input);
+ method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<O>? getSynchronousResult(android.content.Context context, I? input);
+ method public abstract O! parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static final class ActivityResultContract.SynchronousResult<T> {
+ ctor public ActivityResultContract.SynchronousResult(T? value);
+ method public T! getValue();
+ property public final T! value;
+ }
+
+ public final class ActivityResultContracts {
+ }
+
+ public static class ActivityResultContracts.CaptureVideo extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,java.lang.Boolean> {
+ ctor public ActivityResultContracts.CaptureVideo();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+ method public final Boolean parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(19) public static class ActivityResultContracts.CreateDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
+ ctor public ActivityResultContracts.CreateDocument(String mimeType);
+ ctor @Deprecated public ActivityResultContracts.CreateDocument();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static class ActivityResultContracts.GetContent extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,android.net.Uri> {
+ ctor public ActivityResultContracts.GetContent();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String input);
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(18) public static class ActivityResultContracts.GetMultipleContents extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,java.util.List<android.net.Uri>> {
+ ctor public ActivityResultContracts.GetMultipleContents();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, String input);
+ method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(19) public static class ActivityResultContracts.OpenDocument extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],android.net.Uri> {
+ ctor public ActivityResultContracts.OpenDocument();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String![] input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, String![] input);
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(21) public static class ActivityResultContracts.OpenDocumentTree extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,android.net.Uri> {
+ ctor public ActivityResultContracts.OpenDocumentTree();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri? input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, android.net.Uri? input);
+ method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @RequiresApi(19) public static class ActivityResultContracts.OpenMultipleDocuments extends androidx.activity.result.contract.ActivityResultContract<java.lang.String[],java.util.List<android.net.Uri>> {
+ ctor public ActivityResultContracts.OpenMultipleDocuments();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, String![] input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, String![] input);
+ method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static final class ActivityResultContracts.PickContact extends androidx.activity.result.contract.ActivityResultContract<java.lang.Void,android.net.Uri> {
+ ctor public ActivityResultContracts.PickContact();
+ method public android.content.Intent createIntent(android.content.Context context, Void? input);
+ 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);
+ method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.Map<java.lang.String,java.lang.Boolean>>? getSynchronousResult(android.content.Context context, String![] input);
+ method public java.util.Map<java.lang.String,java.lang.Boolean> parseResult(int resultCode, android.content.Intent? intent);
+ field public static final String ACTION_REQUEST_PERMISSIONS = "androidx.activity.result.contract.action.REQUEST_PERMISSIONS";
+ field public static final androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions.Companion Companion;
+ field public static final String EXTRA_PERMISSIONS = "androidx.activity.result.contract.extra.PERMISSIONS";
+ field public static final String EXTRA_PERMISSION_GRANT_RESULTS = "androidx.activity.result.contract.extra.PERMISSION_GRANT_RESULTS";
+ }
+
+ public static final class ActivityResultContracts.RequestMultiplePermissions.Companion {
+ }
+
+ public static final class ActivityResultContracts.RequestPermission extends androidx.activity.result.contract.ActivityResultContract<java.lang.String,java.lang.Boolean> {
+ ctor public ActivityResultContracts.RequestPermission();
+ method public android.content.Intent createIntent(android.content.Context context, String input);
+ method public androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, String input);
+ method public Boolean parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static final class ActivityResultContracts.StartActivityForResult extends androidx.activity.result.contract.ActivityResultContract<android.content.Intent,androidx.activity.result.ActivityResult> {
+ ctor public ActivityResultContracts.StartActivityForResult();
+ method public android.content.Intent createIntent(android.content.Context context, android.content.Intent input);
+ method public androidx.activity.result.ActivityResult parseResult(int resultCode, android.content.Intent? intent);
+ field public static final androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult.Companion Companion;
+ field public static final String EXTRA_ACTIVITY_OPTIONS_BUNDLE = "androidx.activity.result.contract.extra.ACTIVITY_OPTIONS_BUNDLE";
+ }
+
+ public static final class ActivityResultContracts.StartActivityForResult.Companion {
+ }
+
+ public static final class ActivityResultContracts.StartIntentSenderForResult extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.IntentSenderRequest,androidx.activity.result.ActivityResult> {
+ ctor public ActivityResultContracts.StartIntentSenderForResult();
+ method public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.IntentSenderRequest input);
+ method public androidx.activity.result.ActivityResult parseResult(int resultCode, android.content.Intent? intent);
+ field public static final String ACTION_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.action.INTENT_SENDER_REQUEST";
+ field public static final androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion Companion;
+ field public static final String EXTRA_INTENT_SENDER_REQUEST = "androidx.activity.result.contract.extra.INTENT_SENDER_REQUEST";
+ field public static final String EXTRA_SEND_INTENT_EXCEPTION = "androidx.activity.result.contract.extra.SEND_INTENT_EXCEPTION";
+ }
+
+ public static final class ActivityResultContracts.StartIntentSenderForResult.Companion {
+ }
+
+ public static class ActivityResultContracts.TakePicture extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,java.lang.Boolean> {
+ ctor public ActivityResultContracts.TakePicture();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.lang.Boolean>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+ method public final Boolean parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ public static class ActivityResultContracts.TakePicturePreview extends androidx.activity.result.contract.ActivityResultContract<java.lang.Void,android.graphics.Bitmap> {
+ ctor public ActivityResultContracts.TakePicturePreview();
+ method @CallSuper public android.content.Intent createIntent(android.content.Context context, Void? input);
+ method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.graphics.Bitmap>? getSynchronousResult(android.content.Context context, Void? input);
+ method public final android.graphics.Bitmap? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+ @Deprecated public static class ActivityResultContracts.TakeVideo extends androidx.activity.result.contract.ActivityResultContract<android.net.Uri,android.graphics.Bitmap> {
+ ctor @Deprecated public ActivityResultContracts.TakeVideo();
+ method @Deprecated @CallSuper public android.content.Intent createIntent(android.content.Context context, android.net.Uri input);
+ method @Deprecated public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.graphics.Bitmap>? getSynchronousResult(android.content.Context context, android.net.Uri input);
+ method @Deprecated public final android.graphics.Bitmap? parseResult(int resultCode, android.content.Intent? intent);
+ }
+
+}
+
diff --git a/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityCallbacksTest.kt b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityCallbacksTest.kt
index cc28abf..ace59e0 100644
--- a/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityCallbacksTest.kt
+++ b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityCallbacksTest.kt
@@ -398,9 +398,11 @@
fun onPictureInPictureModeChangedWithConfig() {
with(ActivityScenario.launch(ComponentActivity::class.java)) {
lateinit var receivedInfo: PictureInPictureModeChangedInfo
+ var dispatchCount = 0
val listener = Consumer<PictureInPictureModeChangedInfo> { info ->
receivedInfo = info
+ dispatchCount++
}
lateinit var newConfig: Configuration
withActivity {
@@ -411,6 +413,7 @@
assertThat(receivedInfo.isInPictureInPictureMode).isTrue()
assertThat(receivedInfo.newConfig).isSameInstanceAs(newConfig)
+ assertThat(dispatchCount).isEqualTo(1)
}
}
diff --git a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
index 2e82b9e..d882540 100644
--- a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
+++ b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
@@ -254,6 +254,8 @@
private final CopyOnWriteArrayList<Consumer<PictureInPictureModeChangedInfo>>
mOnPictureInPictureModeChangedListeners = new CopyOnWriteArrayList<>();
+ private boolean mDispatchingOnPictureInPictureModeChanged = false;
+
/**
* Default constructor for ComponentActivity. All Activities must have a default constructor
* for API 27 and lower devices or when using the default
@@ -994,6 +996,10 @@
// We specifically do not call super.onPictureInPictureModeChanged() to avoid
// crashing when this method is manually called prior to API 24 (which is
// when this method was added to the framework)
+ if (mDispatchingOnPictureInPictureModeChanged) {
+ return;
+ }
+
for (Consumer<PictureInPictureModeChangedInfo> listener :
mOnPictureInPictureModeChangedListeners) {
listener.accept(new PictureInPictureModeChangedInfo(isInPictureInPictureMode));
@@ -1011,9 +1017,15 @@
@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode,
@NonNull Configuration newConfig) {
- // We specifically do not call super.onPictureInPictureModeChanged() to avoid
- // triggering the call to onPictureInPictureModeChanged(boolean) which would
- // send a second callback to listeners without the newConfig
+ mDispatchingOnPictureInPictureModeChanged = true;
+ try {
+ // We can unconditionally call super.onPictureInPictureModeChanged() here because
+ // this function is marked with RequiresApi, meaning we are always on an API level
+ // where this call is valid.
+ super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);
+ } finally {
+ mDispatchingOnPictureInPictureModeChanged = false;
+ }
for (Consumer<PictureInPictureModeChangedInfo> listener :
mOnPictureInPictureModeChangedListeners) {
listener.accept(new PictureInPictureModeChangedInfo(
diff --git a/activity/activity/src/main/java/androidx/activity/OnBackPressedDispatcher.java b/activity/activity/src/main/java/androidx/activity/OnBackPressedDispatcher.java
index e306a9b..4645d84 100644
--- a/activity/activity/src/main/java/androidx/activity/OnBackPressedDispatcher.java
+++ b/activity/activity/src/main/java/androidx/activity/OnBackPressedDispatcher.java
@@ -127,12 +127,7 @@
updateBackInvokedCallbackState();
}
};
- mOnBackInvokedCallback = new OnBackInvokedCallback() {
- @Override
- public void onBackInvoked() {
- onBackPressed();
- }
- };
+ mOnBackInvokedCallback = Api33Impl.createOnBackInvokedCallback(this::onBackPressed);
}
}
@@ -331,18 +326,22 @@
@DoNotInline
static void registerOnBackInvokedCallback(
- OnBackInvokedDispatcher onBackInvokedDispatcher, int priority,
- OnBackInvokedCallback onBackInvokedCallback
+ Object dispatcher, int priority, Object callback
) {
+ OnBackInvokedDispatcher dispatcher;
+ OnBackInvokedCallback callback;
onBackInvokedDispatcher.registerOnBackInvokedCallback(priority, onBackInvokedCallback);
}
@DoNotInline
- static void unregisterOnBackInvokedCallback(
- OnBackInvokedDispatcher onBackInvokedDispatcher,
- OnBackInvokedCallback onBackInvokedCallback
- ) {
+ static void unregisterOnBackInvokedCallback(Object dispatcher, Object callback) {
+ OnBackInvokedDispatcher dispatcher;
+ OnBackInvokedCallback callback;
onBackInvokedDispatcher.unregisterOnBackInvokedCallback(onBackInvokedCallback);
}
+ @DoNotInline
+ static OnBackInvokedCallback createOnBackInvokedCallback(Runnable runnable) {
+ return runnable::run;
+ }
}
}
diff --git a/appcompat/appcompat-resources/api/1.6.0-beta02.txt b/appcompat/appcompat-resources/api/1.6.0-beta02.txt
new file mode 100644
index 0000000..0d2a788
--- /dev/null
+++ b/appcompat/appcompat-resources/api/1.6.0-beta02.txt
@@ -0,0 +1,57 @@
+// Signature format: 4.0
+package androidx.appcompat.content.res {
+
+ public final class AppCompatResources {
+ method public static android.content.res.ColorStateList! getColorStateList(android.content.Context, @ColorRes int);
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
+ }
+
+}
+
+package androidx.appcompat.graphics.drawable {
+
+ public class AnimatedStateListDrawableCompat extends androidx.appcompat.graphics.drawable.StateListDrawableCompat {
+ ctor public AnimatedStateListDrawableCompat();
+ method public void addState(int[], android.graphics.drawable.Drawable, int);
+ method public <T extends android.graphics.drawable.Drawable & android.graphics.drawable.Animatable> void addTransition(int, int, T, boolean);
+ method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat? create(android.content.Context, @DrawableRes int, android.content.res.Resources.Theme?);
+ method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat createFromXmlInner(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ }
+
+ public class DrawableContainerCompat extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+ ctor public DrawableContainerCompat();
+ method public void draw(android.graphics.Canvas);
+ method public final android.graphics.drawable.Drawable.ConstantState! getConstantState();
+ method public int getOpacity();
+ method public void invalidateDrawable(android.graphics.drawable.Drawable);
+ method public void scheduleDrawable(android.graphics.drawable.Drawable, Runnable, long);
+ method public void setAlpha(int);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setDither(boolean);
+ method public void setEnterFadeDuration(int);
+ method public void setExitFadeDuration(int);
+ method public void unscheduleDrawable(android.graphics.drawable.Drawable, Runnable);
+ }
+
+ public class DrawableWrapperCompat extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+ ctor public DrawableWrapperCompat(android.graphics.drawable.Drawable!);
+ method public void draw(android.graphics.Canvas!);
+ method public android.graphics.drawable.Drawable? getDrawable();
+ method public int getOpacity();
+ method public void invalidateDrawable(android.graphics.drawable.Drawable!);
+ method public void scheduleDrawable(android.graphics.drawable.Drawable!, Runnable!, long);
+ method public void setAlpha(int);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setDither(boolean);
+ method public void setDrawable(android.graphics.drawable.Drawable?);
+ method public void unscheduleDrawable(android.graphics.drawable.Drawable!, Runnable!);
+ }
+
+ public class StateListDrawableCompat extends androidx.appcompat.graphics.drawable.DrawableContainerCompat {
+ ctor public StateListDrawableCompat();
+ method public void addState(int[]!, android.graphics.drawable.Drawable!);
+ method public void inflate(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ }
+
+}
+
diff --git a/appcompat/appcompat-resources/api/public_plus_experimental_1.6.0-beta02.txt b/appcompat/appcompat-resources/api/public_plus_experimental_1.6.0-beta02.txt
new file mode 100644
index 0000000..0d2a788
--- /dev/null
+++ b/appcompat/appcompat-resources/api/public_plus_experimental_1.6.0-beta02.txt
@@ -0,0 +1,57 @@
+// Signature format: 4.0
+package androidx.appcompat.content.res {
+
+ public final class AppCompatResources {
+ method public static android.content.res.ColorStateList! getColorStateList(android.content.Context, @ColorRes int);
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
+ }
+
+}
+
+package androidx.appcompat.graphics.drawable {
+
+ public class AnimatedStateListDrawableCompat extends androidx.appcompat.graphics.drawable.StateListDrawableCompat {
+ ctor public AnimatedStateListDrawableCompat();
+ method public void addState(int[], android.graphics.drawable.Drawable, int);
+ method public <T extends android.graphics.drawable.Drawable & android.graphics.drawable.Animatable> void addTransition(int, int, T, boolean);
+ method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat? create(android.content.Context, @DrawableRes int, android.content.res.Resources.Theme?);
+ method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat createFromXmlInner(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ }
+
+ public class DrawableContainerCompat extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+ ctor public DrawableContainerCompat();
+ method public void draw(android.graphics.Canvas);
+ method public final android.graphics.drawable.Drawable.ConstantState! getConstantState();
+ method public int getOpacity();
+ method public void invalidateDrawable(android.graphics.drawable.Drawable);
+ method public void scheduleDrawable(android.graphics.drawable.Drawable, Runnable, long);
+ method public void setAlpha(int);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setDither(boolean);
+ method public void setEnterFadeDuration(int);
+ method public void setExitFadeDuration(int);
+ method public void unscheduleDrawable(android.graphics.drawable.Drawable, Runnable);
+ }
+
+ public class DrawableWrapperCompat extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+ ctor public DrawableWrapperCompat(android.graphics.drawable.Drawable!);
+ method public void draw(android.graphics.Canvas!);
+ method public android.graphics.drawable.Drawable? getDrawable();
+ method public int getOpacity();
+ method public void invalidateDrawable(android.graphics.drawable.Drawable!);
+ method public void scheduleDrawable(android.graphics.drawable.Drawable!, Runnable!, long);
+ method public void setAlpha(int);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setDither(boolean);
+ method public void setDrawable(android.graphics.drawable.Drawable?);
+ method public void unscheduleDrawable(android.graphics.drawable.Drawable!, Runnable!);
+ }
+
+ public class StateListDrawableCompat extends androidx.appcompat.graphics.drawable.DrawableContainerCompat {
+ ctor public StateListDrawableCompat();
+ method public void addState(int[]!, android.graphics.drawable.Drawable!);
+ method public void inflate(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ }
+
+}
+
diff --git a/appcompat/appcompat-resources/api/res-1.6.0-beta02.txt b/appcompat/appcompat-resources/api/res-1.6.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/appcompat/appcompat-resources/api/res-1.6.0-beta02.txt
diff --git a/appcompat/appcompat-resources/api/restricted_1.6.0-beta02.txt b/appcompat/appcompat-resources/api/restricted_1.6.0-beta02.txt
new file mode 100644
index 0000000..d998c06
--- /dev/null
+++ b/appcompat/appcompat-resources/api/restricted_1.6.0-beta02.txt
@@ -0,0 +1,111 @@
+// Signature format: 4.0
+package androidx.appcompat.content.res {
+
+ public final class AppCompatResources {
+ method public static android.content.res.ColorStateList! getColorStateList(android.content.Context, @ColorRes int);
+ method public static android.graphics.drawable.Drawable? getDrawable(android.content.Context, @DrawableRes int);
+ }
+
+}
+
+package androidx.appcompat.graphics.drawable {
+
+ public class AnimatedStateListDrawableCompat extends androidx.appcompat.graphics.drawable.StateListDrawableCompat implements androidx.core.graphics.drawable.TintAwareDrawable {
+ ctor public AnimatedStateListDrawableCompat();
+ method public void addState(int[], android.graphics.drawable.Drawable, int);
+ method public <T extends android.graphics.drawable.Drawable & android.graphics.drawable.Animatable> void addTransition(int, int, T, boolean);
+ method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat? create(android.content.Context, @DrawableRes int, android.content.res.Resources.Theme?);
+ method public static androidx.appcompat.graphics.drawable.AnimatedStateListDrawableCompat createFromXmlInner(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ }
+
+ public class DrawableContainerCompat extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+ ctor public DrawableContainerCompat();
+ method public void draw(android.graphics.Canvas);
+ method public final android.graphics.drawable.Drawable.ConstantState! getConstantState();
+ method public int getOpacity();
+ method public void invalidateDrawable(android.graphics.drawable.Drawable);
+ method public void scheduleDrawable(android.graphics.drawable.Drawable, Runnable, long);
+ method public void setAlpha(int);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setDither(boolean);
+ method public void setEnterFadeDuration(int);
+ method public void setExitFadeDuration(int);
+ method public void unscheduleDrawable(android.graphics.drawable.Drawable, Runnable);
+ }
+
+ public class DrawableWrapperCompat extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+ ctor public DrawableWrapperCompat(android.graphics.drawable.Drawable!);
+ method public void draw(android.graphics.Canvas!);
+ method public android.graphics.drawable.Drawable? getDrawable();
+ method public int getOpacity();
+ method public void invalidateDrawable(android.graphics.drawable.Drawable!);
+ method public void scheduleDrawable(android.graphics.drawable.Drawable!, Runnable!, long);
+ method public void setAlpha(int);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setDither(boolean);
+ method public void setDrawable(android.graphics.drawable.Drawable?);
+ method public void unscheduleDrawable(android.graphics.drawable.Drawable!, Runnable!);
+ }
+
+ public class StateListDrawableCompat extends androidx.appcompat.graphics.drawable.DrawableContainerCompat {
+ ctor public StateListDrawableCompat();
+ method public void addState(int[]!, android.graphics.drawable.Drawable!);
+ method public void inflate(android.content.Context, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme?) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ }
+
+}
+
+package androidx.appcompat.widget {
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class DrawableUtils {
+ method public static boolean canSafelyMutateDrawable(android.graphics.drawable.Drawable);
+ method public static android.graphics.Rect getOpticalBounds(android.graphics.drawable.Drawable);
+ method public static android.graphics.PorterDuff.Mode! parseTintMode(int, android.graphics.PorterDuff.Mode!);
+ field public static final android.graphics.Rect! INSETS_NONE;
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ResourceManagerInternal {
+ ctor public ResourceManagerInternal();
+ method public static androidx.appcompat.widget.ResourceManagerInternal! get();
+ method public android.graphics.drawable.Drawable! getDrawable(android.content.Context, @DrawableRes int);
+ method public static android.graphics.PorterDuffColorFilter! getPorterDuffColorFilter(int, android.graphics.PorterDuff.Mode!);
+ method public void onConfigurationChanged(android.content.Context);
+ method public void setHooks(androidx.appcompat.widget.ResourceManagerInternal.ResourceManagerHooks!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface ResourceManagerInternal.ResourceManagerHooks {
+ method public android.graphics.drawable.Drawable? createDrawableFor(androidx.appcompat.widget.ResourceManagerInternal, android.content.Context, @DrawableRes int);
+ method public android.content.res.ColorStateList? getTintListForDrawableRes(android.content.Context, @DrawableRes int);
+ method public android.graphics.PorterDuff.Mode? getTintModeForDrawableRes(int);
+ method public boolean tintDrawable(android.content.Context, @DrawableRes int, android.graphics.drawable.Drawable);
+ method public boolean tintDrawableUsingColorFilter(android.content.Context, @DrawableRes int, android.graphics.drawable.Drawable);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TintContextWrapper extends android.content.ContextWrapper {
+ method public static android.content.Context! wrap(android.content.Context);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TintInfo {
+ ctor public TintInfo();
+ field public boolean mHasTintList;
+ field public boolean mHasTintMode;
+ field public android.content.res.ColorStateList! mTintList;
+ field public android.graphics.PorterDuff.Mode! mTintMode;
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class VectorEnabledTintResources extends android.content.res.Resources {
+ ctor public VectorEnabledTintResources(android.content.Context, android.content.res.Resources);
+ method public int getColor(int) throws android.content.res.Resources.NotFoundException;
+ method public android.content.res.ColorStateList! getColorStateList(int) throws android.content.res.Resources.NotFoundException;
+ method public android.graphics.drawable.Drawable! getDrawable(int) throws android.content.res.Resources.NotFoundException;
+ method @RequiresApi(15) public android.graphics.drawable.Drawable! getDrawableForDensity(int, int) throws android.content.res.Resources.NotFoundException;
+ method public android.graphics.Movie! getMovie(int) throws android.content.res.Resources.NotFoundException;
+ method public static boolean isCompatVectorFromResourcesEnabled();
+ method public static void setCompatVectorFromResourcesEnabled(boolean);
+ method public static boolean shouldBeUsed();
+ method public void updateConfiguration(android.content.res.Configuration!, android.util.DisplayMetrics!);
+ field public static final int MAX_SDK_WHERE_REQUIRED = 20; // 0x14
+ }
+
+}
+
diff --git a/appcompat/appcompat/api/1.6.0-beta02.txt b/appcompat/appcompat/api/1.6.0-beta02.txt
new file mode 100644
index 0000000..0219b45
--- /dev/null
+++ b/appcompat/appcompat/api/1.6.0-beta02.txt
@@ -0,0 +1,1063 @@
+// Signature format: 4.0
+package androidx.appcompat.app {
+
+ public abstract class ActionBar {
+ ctor public ActionBar();
+ method public abstract void addOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
+ method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!);
+ method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, boolean);
+ method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, int);
+ method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, int, boolean);
+ method public abstract android.view.View! getCustomView();
+ method public abstract int getDisplayOptions();
+ method public float getElevation();
+ method public abstract int getHeight();
+ method public int getHideOffset();
+ method @Deprecated public abstract int getNavigationItemCount();
+ method @Deprecated public abstract int getNavigationMode();
+ method @Deprecated public abstract int getSelectedNavigationIndex();
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab? getSelectedTab();
+ method public abstract CharSequence? getSubtitle();
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! getTabAt(int);
+ method @Deprecated public abstract int getTabCount();
+ method public android.content.Context! getThemedContext();
+ method public abstract CharSequence? getTitle();
+ method public abstract void hide();
+ method public boolean isHideOnContentScrollEnabled();
+ method public abstract boolean isShowing();
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! newTab();
+ method @Deprecated public abstract void removeAllTabs();
+ method public abstract void removeOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
+ method @Deprecated public abstract void removeTab(androidx.appcompat.app.ActionBar.Tab!);
+ method @Deprecated public abstract void removeTabAt(int);
+ method @Deprecated public abstract void selectTab(androidx.appcompat.app.ActionBar.Tab!);
+ method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public abstract void setCustomView(android.view.View!);
+ method public abstract void setCustomView(android.view.View!, androidx.appcompat.app.ActionBar.LayoutParams!);
+ method public abstract void setCustomView(int);
+ method public abstract void setDisplayHomeAsUpEnabled(boolean);
+ method public abstract void setDisplayOptions(int);
+ method public abstract void setDisplayOptions(int, int);
+ method public abstract void setDisplayShowCustomEnabled(boolean);
+ method public abstract void setDisplayShowHomeEnabled(boolean);
+ method public abstract void setDisplayShowTitleEnabled(boolean);
+ method public abstract void setDisplayUseLogoEnabled(boolean);
+ method public void setElevation(float);
+ method public void setHideOffset(int);
+ method public void setHideOnContentScrollEnabled(boolean);
+ method public void setHomeActionContentDescription(CharSequence?);
+ method public void setHomeActionContentDescription(@StringRes int);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable?);
+ method public void setHomeAsUpIndicator(@DrawableRes int);
+ method public void setHomeButtonEnabled(boolean);
+ method public abstract void setIcon(@DrawableRes int);
+ method public abstract void setIcon(android.graphics.drawable.Drawable!);
+ method @Deprecated public abstract void setListNavigationCallbacks(android.widget.SpinnerAdapter!, androidx.appcompat.app.ActionBar.OnNavigationListener!);
+ method public abstract void setLogo(@DrawableRes int);
+ method public abstract void setLogo(android.graphics.drawable.Drawable!);
+ method @Deprecated public abstract void setNavigationMode(int);
+ method @Deprecated public abstract void setSelectedNavigationItem(int);
+ method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable!);
+ method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable!);
+ method public abstract void setSubtitle(CharSequence!);
+ method public abstract void setSubtitle(int);
+ method public abstract void setTitle(CharSequence!);
+ method public abstract void setTitle(@StringRes int);
+ method public abstract void show();
+ field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4
+ field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10
+ field public static final int DISPLAY_SHOW_HOME = 2; // 0x2
+ field public static final int DISPLAY_SHOW_TITLE = 8; // 0x8
+ field public static final int DISPLAY_USE_LOGO = 1; // 0x1
+ field @Deprecated public static final int NAVIGATION_MODE_LIST = 1; // 0x1
+ field @Deprecated public static final int NAVIGATION_MODE_STANDARD = 0; // 0x0
+ field @Deprecated public static final int NAVIGATION_MODE_TABS = 2; // 0x2
+ }
+
+ public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public ActionBar.LayoutParams(android.content.Context, android.util.AttributeSet!);
+ ctor public ActionBar.LayoutParams(int, int);
+ ctor public ActionBar.LayoutParams(int, int, int);
+ ctor public ActionBar.LayoutParams(int);
+ ctor public ActionBar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
+ ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ field public int gravity;
+ }
+
+ public static interface ActionBar.OnMenuVisibilityListener {
+ method public void onMenuVisibilityChanged(boolean);
+ }
+
+ @Deprecated public static interface ActionBar.OnNavigationListener {
+ method @Deprecated public boolean onNavigationItemSelected(int, long);
+ }
+
+ @Deprecated public abstract static class ActionBar.Tab {
+ ctor @Deprecated public ActionBar.Tab();
+ method @Deprecated public abstract CharSequence! getContentDescription();
+ method @Deprecated public abstract android.view.View! getCustomView();
+ method @Deprecated public abstract android.graphics.drawable.Drawable! getIcon();
+ method @Deprecated public abstract int getPosition();
+ method @Deprecated public abstract Object! getTag();
+ method @Deprecated public abstract CharSequence! getText();
+ method @Deprecated public abstract void select();
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setContentDescription(@StringRes int);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setContentDescription(CharSequence!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setCustomView(android.view.View!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setCustomView(int);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(android.graphics.drawable.Drawable!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(@DrawableRes int);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTabListener(androidx.appcompat.app.ActionBar.TabListener!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTag(Object!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(CharSequence!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(int);
+ field @Deprecated public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ @Deprecated public static interface ActionBar.TabListener {
+ method @Deprecated public void onTabReselected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+ method @Deprecated public void onTabSelected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+ method @Deprecated public void onTabUnselected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+ }
+
+ public class ActionBarDrawerToggle implements androidx.drawerlayout.widget.DrawerLayout.DrawerListener {
+ ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, @StringRes int, @StringRes int);
+ ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, androidx.appcompat.widget.Toolbar!, @StringRes int, @StringRes int);
+ method public androidx.appcompat.graphics.drawable.DrawerArrowDrawable getDrawerArrowDrawable();
+ method public android.view.View.OnClickListener! getToolbarNavigationClickListener();
+ method public boolean isDrawerIndicatorEnabled();
+ method public boolean isDrawerSlideAnimationEnabled();
+ method public void onConfigurationChanged(android.content.res.Configuration!);
+ method public void onDrawerClosed(android.view.View!);
+ method public void onDrawerOpened(android.view.View!);
+ method public void onDrawerSlide(android.view.View!, float);
+ method public void onDrawerStateChanged(int);
+ method public boolean onOptionsItemSelected(android.view.MenuItem!);
+ method public void setDrawerArrowDrawable(androidx.appcompat.graphics.drawable.DrawerArrowDrawable);
+ method public void setDrawerIndicatorEnabled(boolean);
+ method public void setDrawerSlideAnimationEnabled(boolean);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable!);
+ method public void setHomeAsUpIndicator(int);
+ method public void setToolbarNavigationClickListener(android.view.View.OnClickListener!);
+ method public void syncState();
+ }
+
+ public static interface ActionBarDrawerToggle.Delegate {
+ method public android.content.Context! getActionBarThemedContext();
+ method public android.graphics.drawable.Drawable! getThemeUpIndicator();
+ method public boolean isNavigationVisible();
+ method public void setActionBarDescription(@StringRes int);
+ method public void setActionBarUpIndicator(android.graphics.drawable.Drawable!, @StringRes int);
+ }
+
+ public static interface ActionBarDrawerToggle.DelegateProvider {
+ method public androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
+ }
+
+ public class AlertDialog extends androidx.appcompat.app.AppCompatDialog implements android.content.DialogInterface {
+ ctor protected AlertDialog(android.content.Context);
+ ctor protected AlertDialog(android.content.Context, @StyleRes int);
+ ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener?);
+ method public android.widget.Button! getButton(int);
+ method public android.widget.ListView! getListView();
+ method public void setButton(int, CharSequence!, android.os.Message!);
+ method public void setButton(int, CharSequence!, android.content.DialogInterface.OnClickListener!);
+ method public void setButton(int, CharSequence!, android.graphics.drawable.Drawable!, android.content.DialogInterface.OnClickListener!);
+ method public void setCustomTitle(android.view.View!);
+ method public void setIcon(int);
+ method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setIconAttribute(int);
+ method public void setMessage(CharSequence!);
+ method public void setView(android.view.View!);
+ method public void setView(android.view.View!, int, int, int, int);
+ }
+
+ public static class AlertDialog.Builder {
+ ctor public AlertDialog.Builder(android.content.Context);
+ ctor public AlertDialog.Builder(android.content.Context, @StyleRes int);
+ method public androidx.appcompat.app.AlertDialog create();
+ method public android.content.Context getContext();
+ method public androidx.appcompat.app.AlertDialog.Builder! setAdapter(android.widget.ListAdapter!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setCancelable(boolean);
+ method public androidx.appcompat.app.AlertDialog.Builder! setCursor(android.database.Cursor!, android.content.DialogInterface.OnClickListener!, String!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setCustomTitle(android.view.View?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setIcon(@DrawableRes int);
+ method public androidx.appcompat.app.AlertDialog.Builder! setIcon(android.graphics.drawable.Drawable?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setIconAttribute(@AttrRes int);
+ method @Deprecated public androidx.appcompat.app.AlertDialog.Builder! setInverseBackgroundForced(boolean);
+ method public androidx.appcompat.app.AlertDialog.Builder! setItems(@ArrayRes int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setItems(CharSequence![]!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMessage(@StringRes int);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMessage(CharSequence?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(@ArrayRes int, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(CharSequence![]!, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(android.database.Cursor!, String!, String!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButtonIcon(android.graphics.drawable.Drawable!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButtonIcon(android.graphics.drawable.Drawable!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setOnCancelListener(android.content.DialogInterface.OnCancelListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setOnDismissListener(android.content.DialogInterface.OnDismissListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setOnKeyListener(android.content.DialogInterface.OnKeyListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButtonIcon(android.graphics.drawable.Drawable!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(@ArrayRes int, int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.database.Cursor!, int, String!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(CharSequence![]!, int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.widget.ListAdapter!, int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setTitle(@StringRes int);
+ method public androidx.appcompat.app.AlertDialog.Builder! setTitle(CharSequence?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setView(int);
+ method public androidx.appcompat.app.AlertDialog.Builder! setView(android.view.View!);
+ method public androidx.appcompat.app.AlertDialog! show();
+ }
+
+ public class AppCompatActivity extends androidx.fragment.app.FragmentActivity implements androidx.appcompat.app.ActionBarDrawerToggle.DelegateProvider androidx.appcompat.app.AppCompatCallback androidx.lifecycle.LifecycleOwner androidx.core.app.TaskStackBuilder.SupportParentable {
+ ctor public AppCompatActivity();
+ ctor @ContentView public AppCompatActivity(@LayoutRes int);
+ method public androidx.appcompat.app.AppCompatDelegate getDelegate();
+ method public androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
+ method public androidx.appcompat.app.ActionBar? getSupportActionBar();
+ method public android.content.Intent? getSupportParentActivityIntent();
+ method public void onCreateSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+ method protected void onLocalesChanged(androidx.core.os.LocaleListCompat);
+ method public final boolean onMenuItemSelected(int, android.view.MenuItem);
+ method protected void onNightModeChanged(int);
+ method public void onPrepareSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+ method @CallSuper public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode);
+ method @CallSuper public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode);
+ method @Deprecated public void onSupportContentChanged();
+ method public boolean onSupportNavigateUp();
+ method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+ method public void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
+ method @Deprecated public void setSupportProgress(int);
+ method @Deprecated public void setSupportProgressBarIndeterminate(boolean);
+ method @Deprecated public void setSupportProgressBarIndeterminateVisibility(boolean);
+ method @Deprecated public void setSupportProgressBarVisibility(boolean);
+ method public androidx.appcompat.view.ActionMode? startSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+ method public void supportInvalidateOptionsMenu();
+ method public void supportNavigateUpTo(android.content.Intent);
+ method public boolean supportRequestWindowFeature(int);
+ method public boolean supportShouldUpRecreateTask(android.content.Intent);
+ }
+
+ public interface AppCompatCallback {
+ method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
+ method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode!);
+ method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback!);
+ }
+
+ public abstract class AppCompatDelegate {
+ method public abstract void addContentView(android.view.View!, android.view.ViewGroup.LayoutParams!);
+ method public abstract boolean applyDayNight();
+ method @Deprecated public void attachBaseContext(android.content.Context!);
+ method @CallSuper public android.content.Context attachBaseContext2(android.content.Context);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Dialog, androidx.appcompat.app.AppCompatCallback?);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.view.Window, androidx.appcompat.app.AppCompatCallback?);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
+ method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
+ method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
+ method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales();
+ method public android.content.Context? getContextForDelegate();
+ method public static int getDefaultNightMode();
+ method public abstract androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
+ method public int getLocalNightMode();
+ method public abstract android.view.MenuInflater! getMenuInflater();
+ method public abstract androidx.appcompat.app.ActionBar? getSupportActionBar();
+ method public abstract boolean hasWindowFeature(int);
+ method public abstract void installViewFactory();
+ method public abstract void invalidateOptionsMenu();
+ method public static boolean isCompatVectorFromResourcesEnabled();
+ method public abstract boolean isHandleNativeActionModesEnabled();
+ method public abstract void onConfigurationChanged(android.content.res.Configuration!);
+ method public abstract void onCreate(android.os.Bundle!);
+ method public abstract void onDestroy();
+ method public abstract void onPostCreate(android.os.Bundle!);
+ method public abstract void onPostResume();
+ method public abstract void onSaveInstanceState(android.os.Bundle!);
+ method public abstract void onStart();
+ method public abstract void onStop();
+ method public abstract boolean requestWindowFeature(int);
+ method public static void setApplicationLocales(androidx.core.os.LocaleListCompat);
+ method public static void setCompatVectorFromResourcesEnabled(boolean);
+ method public abstract void setContentView(android.view.View!);
+ method public abstract void setContentView(@LayoutRes int);
+ method public abstract void setContentView(android.view.View!, android.view.ViewGroup.LayoutParams!);
+ method public static void setDefaultNightMode(int);
+ method public abstract void setHandleNativeActionModesEnabled(boolean);
+ method @RequiresApi(17) public abstract void setLocalNightMode(int);
+ method @CallSuper @RequiresApi(33) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher?);
+ method public abstract void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
+ method public void setTheme(@StyleRes int);
+ method public abstract void setTitle(CharSequence?);
+ method public abstract androidx.appcompat.view.ActionMode? startSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ field public static final int FEATURE_SUPPORT_ACTION_BAR = 108; // 0x6c
+ field public static final int FEATURE_SUPPORT_ACTION_BAR_OVERLAY = 109; // 0x6d
+ field @Deprecated public static final int MODE_NIGHT_AUTO = 0; // 0x0
+ field public static final int MODE_NIGHT_AUTO_BATTERY = 3; // 0x3
+ field @Deprecated public static final int MODE_NIGHT_AUTO_TIME = 0; // 0x0
+ field public static final int MODE_NIGHT_FOLLOW_SYSTEM = -1; // 0xffffffff
+ field public static final int MODE_NIGHT_NO = 1; // 0x1
+ field public static final int MODE_NIGHT_UNSPECIFIED = -100; // 0xffffff9c
+ field public static final int MODE_NIGHT_YES = 2; // 0x2
+ }
+
+ public class AppCompatDialog extends androidx.activity.ComponentDialog implements androidx.appcompat.app.AppCompatCallback {
+ ctor public AppCompatDialog(android.content.Context);
+ ctor public AppCompatDialog(android.content.Context, int);
+ ctor protected AppCompatDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener?);
+ method public androidx.appcompat.app.AppCompatDelegate getDelegate();
+ method public androidx.appcompat.app.ActionBar! getSupportActionBar();
+ method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
+ method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode!);
+ method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback!);
+ method public boolean supportRequestWindowFeature(int);
+ }
+
+ public class AppCompatDialogFragment extends androidx.fragment.app.DialogFragment {
+ ctor public AppCompatDialogFragment();
+ ctor public AppCompatDialogFragment(@LayoutRes int);
+ }
+
+ public class AppCompatViewInflater {
+ ctor public AppCompatViewInflater();
+ method protected androidx.appcompat.widget.AppCompatAutoCompleteTextView createAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatButton createButton(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatCheckBox createCheckBox(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatCheckedTextView createCheckedTextView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatEditText createEditText(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatImageButton createImageButton(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatImageView createImageView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatRadioButton createRadioButton(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatRatingBar createRatingBar(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatSeekBar createSeekBar(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatSpinner createSpinner(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatTextView createTextView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatToggleButton createToggleButton(android.content.Context!, android.util.AttributeSet!);
+ method public final android.view.View? createView(android.view.View?, String, android.content.Context, android.util.AttributeSet, boolean, boolean, boolean, boolean);
+ method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
+ }
+
+ public final class AppLocalesMetadataHolderService extends android.app.Service {
+ ctor public AppLocalesMetadataHolderService();
+ method public static android.content.pm.ServiceInfo getServiceInfo(android.content.Context) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public android.os.IBinder onBind(android.content.Intent);
+ }
+
+}
+
+package androidx.appcompat.graphics.drawable {
+
+ public class DrawerArrowDrawable extends android.graphics.drawable.Drawable {
+ ctor public DrawerArrowDrawable(android.content.Context!);
+ method public void draw(android.graphics.Canvas!);
+ method public float getArrowHeadLength();
+ method public float getArrowShaftLength();
+ method public float getBarLength();
+ method public float getBarThickness();
+ method @ColorInt public int getColor();
+ method public int getDirection();
+ method public float getGapSize();
+ method public int getOpacity();
+ method public final android.graphics.Paint! getPaint();
+ method @FloatRange(from=0.0, to=1.0) public float getProgress();
+ method public boolean isSpinEnabled();
+ method public void setAlpha(int);
+ method public void setArrowHeadLength(float);
+ method public void setArrowShaftLength(float);
+ method public void setBarLength(float);
+ method public void setBarThickness(float);
+ method public void setColor(@ColorInt int);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setDirection(int);
+ method public void setGapSize(float);
+ method public void setProgress(@FloatRange(from=0.0, to=1.0) float);
+ method public void setSpinEnabled(boolean);
+ method public void setVerticalMirror(boolean);
+ field public static final int ARROW_DIRECTION_END = 3; // 0x3
+ field public static final int ARROW_DIRECTION_LEFT = 0; // 0x0
+ field public static final int ARROW_DIRECTION_RIGHT = 1; // 0x1
+ field public static final int ARROW_DIRECTION_START = 2; // 0x2
+ }
+
+}
+
+package androidx.appcompat.view {
+
+ public abstract class ActionMode {
+ ctor public ActionMode();
+ method public abstract void finish();
+ method public abstract android.view.View! getCustomView();
+ method public abstract android.view.Menu! getMenu();
+ method public abstract android.view.MenuInflater! getMenuInflater();
+ method public abstract CharSequence! getSubtitle();
+ method public Object! getTag();
+ method public abstract CharSequence! getTitle();
+ method public boolean getTitleOptionalHint();
+ method public abstract void invalidate();
+ method public boolean isTitleOptional();
+ method public abstract void setCustomView(android.view.View!);
+ method public abstract void setSubtitle(CharSequence!);
+ method public abstract void setSubtitle(int);
+ method public void setTag(Object!);
+ method public abstract void setTitle(CharSequence!);
+ method public abstract void setTitle(int);
+ method public void setTitleOptionalHint(boolean);
+ }
+
+ public static interface ActionMode.Callback {
+ method public boolean onActionItemClicked(androidx.appcompat.view.ActionMode!, android.view.MenuItem!);
+ method public boolean onCreateActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
+ method public void onDestroyActionMode(androidx.appcompat.view.ActionMode!);
+ method public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
+ }
+
+ @Deprecated public interface CollapsibleActionView {
+ method @Deprecated public void onActionViewCollapsed();
+ method @Deprecated public void onActionViewExpanded();
+ }
+
+ public class ContextThemeWrapper extends android.content.ContextWrapper {
+ ctor public ContextThemeWrapper();
+ ctor public ContextThemeWrapper(android.content.Context!, @StyleRes int);
+ ctor public ContextThemeWrapper(android.content.Context!, android.content.res.Resources.Theme!);
+ method public void applyOverrideConfiguration(android.content.res.Configuration!);
+ method public int getThemeResId();
+ method protected void onApplyThemeResource(android.content.res.Resources.Theme!, int, boolean);
+ }
+
+}
+
+package androidx.appcompat.widget {
+
+ public class ActionMenuView extends androidx.appcompat.widget.LinearLayoutCompat {
+ ctor public ActionMenuView(android.content.Context);
+ ctor public ActionMenuView(android.content.Context, android.util.AttributeSet?);
+ method public void dismissPopupMenus();
+ method protected androidx.appcompat.widget.ActionMenuView.LayoutParams! generateDefaultLayoutParams();
+ method public androidx.appcompat.widget.ActionMenuView.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.ActionMenuView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+ method public android.view.Menu! getMenu();
+ method public android.graphics.drawable.Drawable? getOverflowIcon();
+ method public int getPopupTheme();
+ method public boolean hideOverflowMenu();
+ method public boolean isOverflowMenuShowing();
+ method public void onConfigurationChanged(android.content.res.Configuration!);
+ method public void onDetachedFromWindow();
+ method public void setOnMenuItemClickListener(androidx.appcompat.widget.ActionMenuView.OnMenuItemClickListener!);
+ method public void setOverflowIcon(android.graphics.drawable.Drawable?);
+ method public void setPopupTheme(@StyleRes int);
+ method public boolean showOverflowMenu();
+ }
+
+ public static class ActionMenuView.LayoutParams extends androidx.appcompat.widget.LinearLayoutCompat.LayoutParams {
+ ctor public ActionMenuView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public ActionMenuView.LayoutParams(androidx.appcompat.widget.ActionMenuView.LayoutParams!);
+ ctor public ActionMenuView.LayoutParams(int, int);
+ field public int cellsUsed;
+ field public boolean expandable;
+ field public int extraPixels;
+ field public boolean isOverflowButton;
+ field public boolean preventEdgeOffset;
+ }
+
+ public static interface ActionMenuView.OnMenuItemClickListener {
+ method public boolean onMenuItemClick(android.view.MenuItem!);
+ }
+
+ public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatAutoCompleteTextView(android.content.Context);
+ ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ }
+
+ public class AppCompatButton extends android.widget.Button implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatButton(android.content.Context);
+ ctor public AppCompatButton(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatButton(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method public void setSupportAllCaps(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ }
+
+ public class AppCompatCheckBox extends android.widget.CheckBox implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatCheckBox(android.content.Context);
+ ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public class AppCompatCheckedTextView extends android.widget.CheckedTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatCheckedTextView(android.content.Context);
+ ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class AppCompatEditText extends android.widget.EditText implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.OnReceiveContentViewBehavior androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatEditText(android.content.Context);
+ ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public androidx.core.view.ContentInfoCompat? onReceiveContent(androidx.core.view.ContentInfoCompat);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ }
+
+ public class AppCompatImageButton extends android.widget.ImageButton implements androidx.core.view.TintableBackgroundView {
+ ctor public AppCompatImageButton(android.content.Context);
+ ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public class AppCompatImageView extends android.widget.ImageView implements androidx.core.view.TintableBackgroundView {
+ ctor public AppCompatImageView(android.content.Context);
+ ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public class AppCompatMultiAutoCompleteTextView extends android.widget.MultiAutoCompleteTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context);
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ }
+
+ public class AppCompatRadioButton extends android.widget.RadioButton implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatRadioButton(android.content.Context!);
+ ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?);
+ ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public class AppCompatRatingBar extends android.widget.RatingBar {
+ ctor public AppCompatRatingBar(android.content.Context);
+ ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet?, int);
+ }
+
+ public class AppCompatSeekBar extends android.widget.SeekBar {
+ ctor public AppCompatSeekBar(android.content.Context);
+ ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet?, int);
+ }
+
+ public class AppCompatSpinner extends android.widget.Spinner implements androidx.core.view.TintableBackgroundView {
+ ctor public AppCompatSpinner(android.content.Context);
+ ctor public AppCompatSpinner(android.content.Context, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int, int, android.content.res.Resources.Theme!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public class AppCompatTextView extends android.widget.TextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatTextView(android.content.Context);
+ ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParamsCompat();
+ method public boolean isEmojiCompatEnabled();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method public void setPrecomputedText(androidx.core.text.PrecomputedTextCompat);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ method public void setTextFuture(java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>?);
+ method public void setTextMetricsParamsCompat(androidx.core.text.PrecomputedTextCompat.Params);
+ }
+
+ public class AppCompatToggleButton extends android.widget.ToggleButton implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatToggleButton(android.content.Context);
+ ctor public AppCompatToggleButton(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatToggleButton(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public interface EmojiCompatConfigurationView {
+ method public boolean isEmojiCompatEnabled();
+ method public void setEmojiCompatEnabled(boolean);
+ }
+
+ public class LinearLayoutCompat extends android.view.ViewGroup {
+ ctor public LinearLayoutCompat(android.content.Context);
+ ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet?);
+ ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet?, int);
+ method protected androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateDefaultLayoutParams();
+ method public androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+ method @androidx.resourceinspection.annotation.Attribute("android:baselineAlignedChildIndex") public int getBaselineAlignedChildIndex();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:divider") public android.graphics.drawable.Drawable! getDividerDrawable();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:dividerPadding") public int getDividerPadding();
+ method @GravityInt @androidx.resourceinspection.annotation.Attribute("android:gravity") public int getGravity();
+ method @androidx.resourceinspection.annotation.Attribute(value="android:orientation", intMapping={@androidx.resourceinspection.annotation.Attribute.IntMap(name="horizontal", value=0), @androidx.resourceinspection.annotation.Attribute.IntMap(name="vertical", value=1)}) public int getOrientation();
+ method @androidx.resourceinspection.annotation.Attribute(value="androidx.appcompat:showDividers", intMapping={@androidx.resourceinspection.annotation.Attribute.IntMap(name="none", value=0), @androidx.resourceinspection.annotation.Attribute.IntMap(name="beginning", value=1, mask=1), @androidx.resourceinspection.annotation.Attribute.IntMap(name="middle", value=2, mask=2), @androidx.resourceinspection.annotation.Attribute.IntMap(name="end", value=4, mask=4)}) public int getShowDividers();
+ method @androidx.resourceinspection.annotation.Attribute("android:weightSum") public float getWeightSum();
+ method @androidx.resourceinspection.annotation.Attribute("android:baselineAligned") public boolean isBaselineAligned();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:measureWithLargestChild") public boolean isMeasureWithLargestChildEnabled();
+ method public void setBaselineAligned(boolean);
+ method public void setBaselineAlignedChildIndex(int);
+ method public void setDividerDrawable(android.graphics.drawable.Drawable!);
+ method public void setDividerPadding(int);
+ method public void setGravity(@GravityInt int);
+ method public void setHorizontalGravity(int);
+ method public void setMeasureWithLargestChildEnabled(boolean);
+ method public void setOrientation(int);
+ method public void setShowDividers(int);
+ method public void setVerticalGravity(int);
+ method public void setWeightSum(float);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int SHOW_DIVIDER_BEGINNING = 1; // 0x1
+ field public static final int SHOW_DIVIDER_END = 4; // 0x4
+ field public static final int SHOW_DIVIDER_MIDDLE = 2; // 0x2
+ field public static final int SHOW_DIVIDER_NONE = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static class LinearLayoutCompat.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+ ctor public LinearLayoutCompat.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public LinearLayoutCompat.LayoutParams(int, int);
+ ctor public LinearLayoutCompat.LayoutParams(int, int, float);
+ ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ }
+
+ public class ListPopupWindow {
+ ctor public ListPopupWindow(android.content.Context);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?, @AttrRes int);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?, @AttrRes int, @StyleRes int);
+ method public void clearListSelection();
+ method public android.view.View.OnTouchListener! createDragToOpenListener(android.view.View!);
+ method public void dismiss();
+ method public android.view.View? getAnchorView();
+ method @StyleRes public int getAnimationStyle();
+ method public android.graphics.drawable.Drawable? getBackground();
+ method public android.graphics.Rect? getEpicenterBounds();
+ method public int getHeight();
+ method public int getHorizontalOffset();
+ method public int getInputMethodMode();
+ method public android.widget.ListView? getListView();
+ method public int getPromptPosition();
+ method public Object? getSelectedItem();
+ method public long getSelectedItemId();
+ method public int getSelectedItemPosition();
+ method public android.view.View? getSelectedView();
+ method public int getSoftInputMode();
+ method public int getVerticalOffset();
+ method public int getWidth();
+ method public boolean isInputMethodNotNeeded();
+ method public boolean isModal();
+ method public boolean isShowing();
+ method public boolean onKeyDown(int, android.view.KeyEvent);
+ method public boolean onKeyPreIme(int, android.view.KeyEvent);
+ method public boolean onKeyUp(int, android.view.KeyEvent);
+ method public boolean performItemClick(int);
+ method public void postShow();
+ method public void setAdapter(android.widget.ListAdapter?);
+ method public void setAnchorView(android.view.View?);
+ method public void setAnimationStyle(@StyleRes int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setContentWidth(int);
+ method public void setDropDownGravity(int);
+ method public void setEpicenterBounds(android.graphics.Rect?);
+ method public void setHeight(int);
+ method public void setHorizontalOffset(int);
+ method public void setInputMethodMode(int);
+ method public void setListSelector(android.graphics.drawable.Drawable!);
+ method public void setModal(boolean);
+ method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener?);
+ method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener?);
+ method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener?);
+ method public void setPromptPosition(int);
+ method public void setPromptView(android.view.View?);
+ method public void setSelection(int);
+ method public void setSoftInputMode(int);
+ method public void setVerticalOffset(int);
+ method public void setWidth(int);
+ method public void setWindowLayoutType(int);
+ method public void show();
+ field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
+ field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
+ field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2
+ field public static final int MATCH_PARENT = -1; // 0xffffffff
+ field public static final int POSITION_PROMPT_ABOVE = 0; // 0x0
+ field public static final int POSITION_PROMPT_BELOW = 1; // 0x1
+ field public static final int WRAP_CONTENT = -2; // 0xfffffffe
+ }
+
+ public class PopupMenu {
+ ctor public PopupMenu(android.content.Context, android.view.View);
+ ctor public PopupMenu(android.content.Context, android.view.View, int);
+ ctor public PopupMenu(android.content.Context, android.view.View, int, @AttrRes int, @StyleRes int);
+ method public void dismiss();
+ method public android.view.View.OnTouchListener getDragToOpenListener();
+ method public int getGravity();
+ method public android.view.Menu getMenu();
+ method public android.view.MenuInflater getMenuInflater();
+ method public void inflate(@MenuRes int);
+ method public void setForceShowIcon(boolean);
+ method public void setGravity(int);
+ method public void setOnDismissListener(androidx.appcompat.widget.PopupMenu.OnDismissListener?);
+ method public void setOnMenuItemClickListener(androidx.appcompat.widget.PopupMenu.OnMenuItemClickListener?);
+ method public void show();
+ }
+
+ public static interface PopupMenu.OnDismissListener {
+ method public void onDismiss(androidx.appcompat.widget.PopupMenu!);
+ }
+
+ public static interface PopupMenu.OnMenuItemClickListener {
+ method public boolean onMenuItemClick(android.view.MenuItem!);
+ }
+
+ public class SearchView extends androidx.appcompat.widget.LinearLayoutCompat implements androidx.appcompat.view.CollapsibleActionView {
+ ctor public SearchView(android.content.Context);
+ ctor public SearchView(android.content.Context, android.util.AttributeSet?);
+ ctor public SearchView(android.content.Context, android.util.AttributeSet?, int);
+ method @androidx.resourceinspection.annotation.Attribute("android:imeOptions") public int getImeOptions();
+ method public int getInputType();
+ method @androidx.resourceinspection.annotation.Attribute("android:maxWidth") public int getMaxWidth();
+ method public CharSequence! getQuery();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:queryHint") public CharSequence? getQueryHint();
+ method public androidx.cursoradapter.widget.CursorAdapter! getSuggestionsAdapter();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:iconifiedByDefault") public boolean isIconfiedByDefault();
+ method public boolean isIconified();
+ method public boolean isQueryRefinementEnabled();
+ method public boolean isSubmitButtonEnabled();
+ method public void onActionViewCollapsed();
+ method public void onActionViewExpanded();
+ method protected void onQueryRefine(CharSequence?);
+ method public void setIconified(boolean);
+ method public void setIconifiedByDefault(boolean);
+ method public void setImeOptions(int);
+ method public void setInputType(int);
+ method public void setMaxWidth(int);
+ method public void setOnCloseListener(androidx.appcompat.widget.SearchView.OnCloseListener!);
+ method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener!);
+ method public void setOnQueryTextListener(androidx.appcompat.widget.SearchView.OnQueryTextListener!);
+ method public void setOnSearchClickListener(android.view.View.OnClickListener!);
+ method public void setOnSuggestionListener(androidx.appcompat.widget.SearchView.OnSuggestionListener!);
+ method public void setQuery(CharSequence!, boolean);
+ method public void setQueryHint(CharSequence?);
+ method public void setQueryRefinementEnabled(boolean);
+ method public void setSearchableInfo(android.app.SearchableInfo!);
+ method public void setSubmitButtonEnabled(boolean);
+ method public void setSuggestionsAdapter(androidx.cursoradapter.widget.CursorAdapter!);
+ }
+
+ public static interface SearchView.OnCloseListener {
+ method public boolean onClose();
+ }
+
+ public static interface SearchView.OnQueryTextListener {
+ method public boolean onQueryTextChange(String!);
+ method public boolean onQueryTextSubmit(String!);
+ }
+
+ public static interface SearchView.OnSuggestionListener {
+ method public boolean onSuggestionClick(int);
+ method public boolean onSuggestionSelect(int);
+ }
+
+ public class ShareActionProvider extends androidx.core.view.ActionProvider {
+ ctor public ShareActionProvider(android.content.Context!);
+ method public android.view.View! onCreateActionView();
+ method public void setOnShareTargetSelectedListener(androidx.appcompat.widget.ShareActionProvider.OnShareTargetSelectedListener!);
+ method public void setShareHistoryFileName(String!);
+ method public void setShareIntent(android.content.Intent!);
+ field public static final String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
+ }
+
+ public static interface ShareActionProvider.OnShareTargetSelectedListener {
+ method public boolean onShareTargetSelected(androidx.appcompat.widget.ShareActionProvider!, android.content.Intent!);
+ }
+
+ public class SwitchCompat extends android.widget.CompoundButton implements androidx.appcompat.widget.EmojiCompatConfigurationView {
+ ctor public SwitchCompat(android.content.Context);
+ ctor public SwitchCompat(android.content.Context, android.util.AttributeSet?);
+ ctor public SwitchCompat(android.content.Context, android.util.AttributeSet?, int);
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:showText") public boolean getShowText();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:splitTrack") public boolean getSplitTrack();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:switchMinWidth") public int getSwitchMinWidth();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:switchPadding") public int getSwitchPadding();
+ method @androidx.resourceinspection.annotation.Attribute("android:textOff") public CharSequence! getTextOff();
+ method @androidx.resourceinspection.annotation.Attribute("android:textOn") public CharSequence! getTextOn();
+ method @androidx.resourceinspection.annotation.Attribute("android:thumb") public android.graphics.drawable.Drawable! getThumbDrawable();
+ method @FloatRange(from=0.0, to=1.0) protected final float getThumbPosition();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:thumbTextPadding") public int getThumbTextPadding();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:thumbTint") public android.content.res.ColorStateList? getThumbTintList();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:thumbTintMode") public android.graphics.PorterDuff.Mode? getThumbTintMode();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:track") public android.graphics.drawable.Drawable! getTrackDrawable();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:trackTint") public android.content.res.ColorStateList? getTrackTintList();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:trackTintMode") public android.graphics.PorterDuff.Mode? getTrackTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void onMeasure(int, int);
+ method public void setEmojiCompatEnabled(boolean);
+ method protected final void setEnforceSwitchWidth(boolean);
+ method public void setShowText(boolean);
+ method public void setSplitTrack(boolean);
+ method public void setSwitchMinWidth(int);
+ method public void setSwitchPadding(int);
+ method public void setSwitchTextAppearance(android.content.Context!, int);
+ method public void setSwitchTypeface(android.graphics.Typeface!, int);
+ method public void setSwitchTypeface(android.graphics.Typeface!);
+ method public void setTextOff(CharSequence!);
+ method public void setTextOn(CharSequence!);
+ method public void setThumbDrawable(android.graphics.drawable.Drawable!);
+ method public void setThumbResource(int);
+ method public void setThumbTextPadding(int);
+ method public void setThumbTintList(android.content.res.ColorStateList?);
+ method public void setThumbTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTrackDrawable(android.graphics.drawable.Drawable!);
+ method public void setTrackResource(int);
+ method public void setTrackTintList(android.content.res.ColorStateList?);
+ method public void setTrackTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public interface ThemedSpinnerAdapter extends android.widget.SpinnerAdapter {
+ method public android.content.res.Resources.Theme? getDropDownViewTheme();
+ method public void setDropDownViewTheme(android.content.res.Resources.Theme?);
+ }
+
+ public static final class ThemedSpinnerAdapter.Helper {
+ ctor public ThemedSpinnerAdapter.Helper(android.content.Context);
+ method public android.view.LayoutInflater getDropDownViewInflater();
+ method public android.content.res.Resources.Theme? getDropDownViewTheme();
+ method public void setDropDownViewTheme(android.content.res.Resources.Theme?);
+ }
+
+ public class Toolbar extends android.view.ViewGroup implements androidx.core.view.MenuHost {
+ ctor public Toolbar(android.content.Context);
+ ctor public Toolbar(android.content.Context, android.util.AttributeSet?);
+ ctor public Toolbar(android.content.Context, android.util.AttributeSet?, int);
+ method @MainThread public void addMenuProvider(androidx.core.view.MenuProvider);
+ method @MainThread public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
+ method @MainThread public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
+ method public void collapseActionView();
+ method public void dismissPopupMenus();
+ method protected androidx.appcompat.widget.Toolbar.LayoutParams! generateDefaultLayoutParams();
+ method public androidx.appcompat.widget.Toolbar.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.Toolbar.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:collapseContentDescription") public CharSequence? getCollapseContentDescription();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:collapseIcon") public android.graphics.drawable.Drawable? getCollapseIcon();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetEnd") public int getContentInsetEnd();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetEndWithActions") public int getContentInsetEndWithActions();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetLeft") public int getContentInsetLeft();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetRight") public int getContentInsetRight();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetStart") public int getContentInsetStart();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetStartWithNavigation") public int getContentInsetStartWithNavigation();
+ method public int getCurrentContentInsetEnd();
+ method public int getCurrentContentInsetLeft();
+ method public int getCurrentContentInsetRight();
+ method public int getCurrentContentInsetStart();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:logo") public android.graphics.drawable.Drawable! getLogo();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:logoDescription") public CharSequence! getLogoDescription();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:menu") public android.view.Menu! getMenu();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:navigationContentDescription") public CharSequence? getNavigationContentDescription();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:navigationIcon") public android.graphics.drawable.Drawable? getNavigationIcon();
+ method public android.graphics.drawable.Drawable? getOverflowIcon();
+ method @StyleRes @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:popupTheme") public int getPopupTheme();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:subtitle") public CharSequence! getSubtitle();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:title") public CharSequence! getTitle();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginBottom") public int getTitleMarginBottom();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginEnd") public int getTitleMarginEnd();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginStart") public int getTitleMarginStart();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginTop") public int getTitleMarginTop();
+ method public boolean hasExpandedActionView();
+ method public boolean hideOverflowMenu();
+ method public void inflateMenu(@MenuRes int);
+ method @MainThread public void invalidateMenu();
+ method public boolean isBackInvokedCallbackEnabled();
+ method public boolean isOverflowMenuShowing();
+ method @MainThread public void removeMenuProvider(androidx.core.view.MenuProvider);
+ method public void setBackInvokedCallbackEnabled(boolean);
+ method public void setCollapseContentDescription(@StringRes int);
+ method public void setCollapseContentDescription(CharSequence?);
+ method public void setCollapseIcon(@DrawableRes int);
+ method public void setCollapseIcon(android.graphics.drawable.Drawable?);
+ method public void setContentInsetEndWithActions(int);
+ method public void setContentInsetStartWithNavigation(int);
+ method public void setContentInsetsAbsolute(int, int);
+ method public void setContentInsetsRelative(int, int);
+ method public void setLogo(@DrawableRes int);
+ method public void setLogo(android.graphics.drawable.Drawable!);
+ method public void setLogoDescription(@StringRes int);
+ method public void setLogoDescription(CharSequence!);
+ method public void setNavigationContentDescription(@StringRes int);
+ method public void setNavigationContentDescription(CharSequence?);
+ method public void setNavigationIcon(@DrawableRes int);
+ method public void setNavigationIcon(android.graphics.drawable.Drawable?);
+ method public void setNavigationOnClickListener(android.view.View.OnClickListener!);
+ method public void setOnMenuItemClickListener(androidx.appcompat.widget.Toolbar.OnMenuItemClickListener!);
+ method public void setOverflowIcon(android.graphics.drawable.Drawable?);
+ method public void setPopupTheme(@StyleRes int);
+ method public void setSubtitle(@StringRes int);
+ method public void setSubtitle(CharSequence!);
+ method public void setSubtitleTextAppearance(android.content.Context!, @StyleRes int);
+ method public void setSubtitleTextColor(@ColorInt int);
+ method public void setSubtitleTextColor(android.content.res.ColorStateList);
+ method public void setTitle(@StringRes int);
+ method public void setTitle(CharSequence!);
+ method public void setTitleMargin(int, int, int, int);
+ method public void setTitleMarginBottom(int);
+ method public void setTitleMarginEnd(int);
+ method public void setTitleMarginStart(int);
+ method public void setTitleMarginTop(int);
+ method public void setTitleTextAppearance(android.content.Context!, @StyleRes int);
+ method public void setTitleTextColor(@ColorInt int);
+ method public void setTitleTextColor(android.content.res.ColorStateList);
+ method public boolean showOverflowMenu();
+ }
+
+ public static class Toolbar.LayoutParams extends androidx.appcompat.app.ActionBar.LayoutParams {
+ ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet!);
+ ctor public Toolbar.LayoutParams(int, int);
+ ctor public Toolbar.LayoutParams(int, int, int);
+ ctor public Toolbar.LayoutParams(int);
+ ctor public Toolbar.LayoutParams(androidx.appcompat.widget.Toolbar.LayoutParams!);
+ ctor public Toolbar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ }
+
+ public static interface Toolbar.OnMenuItemClickListener {
+ method public boolean onMenuItemClick(android.view.MenuItem!);
+ }
+
+ public static class Toolbar.SavedState extends androidx.customview.view.AbsSavedState {
+ ctor public Toolbar.SavedState(android.os.Parcel!);
+ ctor public Toolbar.SavedState(android.os.Parcel!, ClassLoader!);
+ ctor public Toolbar.SavedState(android.os.Parcelable!);
+ field public static final android.os.Parcelable.Creator<androidx.appcompat.widget.Toolbar.SavedState!>! CREATOR;
+ }
+
+ public class TooltipCompat {
+ method public static void setTooltipText(android.view.View, CharSequence?);
+ }
+
+}
+
diff --git a/appcompat/appcompat/api/public_plus_experimental_1.6.0-beta02.txt b/appcompat/appcompat/api/public_plus_experimental_1.6.0-beta02.txt
new file mode 100644
index 0000000..0219b45
--- /dev/null
+++ b/appcompat/appcompat/api/public_plus_experimental_1.6.0-beta02.txt
@@ -0,0 +1,1063 @@
+// Signature format: 4.0
+package androidx.appcompat.app {
+
+ public abstract class ActionBar {
+ ctor public ActionBar();
+ method public abstract void addOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
+ method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!);
+ method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, boolean);
+ method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, int);
+ method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, int, boolean);
+ method public abstract android.view.View! getCustomView();
+ method public abstract int getDisplayOptions();
+ method public float getElevation();
+ method public abstract int getHeight();
+ method public int getHideOffset();
+ method @Deprecated public abstract int getNavigationItemCount();
+ method @Deprecated public abstract int getNavigationMode();
+ method @Deprecated public abstract int getSelectedNavigationIndex();
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab? getSelectedTab();
+ method public abstract CharSequence? getSubtitle();
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! getTabAt(int);
+ method @Deprecated public abstract int getTabCount();
+ method public android.content.Context! getThemedContext();
+ method public abstract CharSequence? getTitle();
+ method public abstract void hide();
+ method public boolean isHideOnContentScrollEnabled();
+ method public abstract boolean isShowing();
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! newTab();
+ method @Deprecated public abstract void removeAllTabs();
+ method public abstract void removeOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
+ method @Deprecated public abstract void removeTab(androidx.appcompat.app.ActionBar.Tab!);
+ method @Deprecated public abstract void removeTabAt(int);
+ method @Deprecated public abstract void selectTab(androidx.appcompat.app.ActionBar.Tab!);
+ method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public abstract void setCustomView(android.view.View!);
+ method public abstract void setCustomView(android.view.View!, androidx.appcompat.app.ActionBar.LayoutParams!);
+ method public abstract void setCustomView(int);
+ method public abstract void setDisplayHomeAsUpEnabled(boolean);
+ method public abstract void setDisplayOptions(int);
+ method public abstract void setDisplayOptions(int, int);
+ method public abstract void setDisplayShowCustomEnabled(boolean);
+ method public abstract void setDisplayShowHomeEnabled(boolean);
+ method public abstract void setDisplayShowTitleEnabled(boolean);
+ method public abstract void setDisplayUseLogoEnabled(boolean);
+ method public void setElevation(float);
+ method public void setHideOffset(int);
+ method public void setHideOnContentScrollEnabled(boolean);
+ method public void setHomeActionContentDescription(CharSequence?);
+ method public void setHomeActionContentDescription(@StringRes int);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable?);
+ method public void setHomeAsUpIndicator(@DrawableRes int);
+ method public void setHomeButtonEnabled(boolean);
+ method public abstract void setIcon(@DrawableRes int);
+ method public abstract void setIcon(android.graphics.drawable.Drawable!);
+ method @Deprecated public abstract void setListNavigationCallbacks(android.widget.SpinnerAdapter!, androidx.appcompat.app.ActionBar.OnNavigationListener!);
+ method public abstract void setLogo(@DrawableRes int);
+ method public abstract void setLogo(android.graphics.drawable.Drawable!);
+ method @Deprecated public abstract void setNavigationMode(int);
+ method @Deprecated public abstract void setSelectedNavigationItem(int);
+ method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable!);
+ method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable!);
+ method public abstract void setSubtitle(CharSequence!);
+ method public abstract void setSubtitle(int);
+ method public abstract void setTitle(CharSequence!);
+ method public abstract void setTitle(@StringRes int);
+ method public abstract void show();
+ field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4
+ field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10
+ field public static final int DISPLAY_SHOW_HOME = 2; // 0x2
+ field public static final int DISPLAY_SHOW_TITLE = 8; // 0x8
+ field public static final int DISPLAY_USE_LOGO = 1; // 0x1
+ field @Deprecated public static final int NAVIGATION_MODE_LIST = 1; // 0x1
+ field @Deprecated public static final int NAVIGATION_MODE_STANDARD = 0; // 0x0
+ field @Deprecated public static final int NAVIGATION_MODE_TABS = 2; // 0x2
+ }
+
+ public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public ActionBar.LayoutParams(android.content.Context, android.util.AttributeSet!);
+ ctor public ActionBar.LayoutParams(int, int);
+ ctor public ActionBar.LayoutParams(int, int, int);
+ ctor public ActionBar.LayoutParams(int);
+ ctor public ActionBar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
+ ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ field public int gravity;
+ }
+
+ public static interface ActionBar.OnMenuVisibilityListener {
+ method public void onMenuVisibilityChanged(boolean);
+ }
+
+ @Deprecated public static interface ActionBar.OnNavigationListener {
+ method @Deprecated public boolean onNavigationItemSelected(int, long);
+ }
+
+ @Deprecated public abstract static class ActionBar.Tab {
+ ctor @Deprecated public ActionBar.Tab();
+ method @Deprecated public abstract CharSequence! getContentDescription();
+ method @Deprecated public abstract android.view.View! getCustomView();
+ method @Deprecated public abstract android.graphics.drawable.Drawable! getIcon();
+ method @Deprecated public abstract int getPosition();
+ method @Deprecated public abstract Object! getTag();
+ method @Deprecated public abstract CharSequence! getText();
+ method @Deprecated public abstract void select();
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setContentDescription(@StringRes int);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setContentDescription(CharSequence!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setCustomView(android.view.View!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setCustomView(int);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(android.graphics.drawable.Drawable!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(@DrawableRes int);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTabListener(androidx.appcompat.app.ActionBar.TabListener!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTag(Object!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(CharSequence!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(int);
+ field @Deprecated public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ @Deprecated public static interface ActionBar.TabListener {
+ method @Deprecated public void onTabReselected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+ method @Deprecated public void onTabSelected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+ method @Deprecated public void onTabUnselected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+ }
+
+ public class ActionBarDrawerToggle implements androidx.drawerlayout.widget.DrawerLayout.DrawerListener {
+ ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, @StringRes int, @StringRes int);
+ ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, androidx.appcompat.widget.Toolbar!, @StringRes int, @StringRes int);
+ method public androidx.appcompat.graphics.drawable.DrawerArrowDrawable getDrawerArrowDrawable();
+ method public android.view.View.OnClickListener! getToolbarNavigationClickListener();
+ method public boolean isDrawerIndicatorEnabled();
+ method public boolean isDrawerSlideAnimationEnabled();
+ method public void onConfigurationChanged(android.content.res.Configuration!);
+ method public void onDrawerClosed(android.view.View!);
+ method public void onDrawerOpened(android.view.View!);
+ method public void onDrawerSlide(android.view.View!, float);
+ method public void onDrawerStateChanged(int);
+ method public boolean onOptionsItemSelected(android.view.MenuItem!);
+ method public void setDrawerArrowDrawable(androidx.appcompat.graphics.drawable.DrawerArrowDrawable);
+ method public void setDrawerIndicatorEnabled(boolean);
+ method public void setDrawerSlideAnimationEnabled(boolean);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable!);
+ method public void setHomeAsUpIndicator(int);
+ method public void setToolbarNavigationClickListener(android.view.View.OnClickListener!);
+ method public void syncState();
+ }
+
+ public static interface ActionBarDrawerToggle.Delegate {
+ method public android.content.Context! getActionBarThemedContext();
+ method public android.graphics.drawable.Drawable! getThemeUpIndicator();
+ method public boolean isNavigationVisible();
+ method public void setActionBarDescription(@StringRes int);
+ method public void setActionBarUpIndicator(android.graphics.drawable.Drawable!, @StringRes int);
+ }
+
+ public static interface ActionBarDrawerToggle.DelegateProvider {
+ method public androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
+ }
+
+ public class AlertDialog extends androidx.appcompat.app.AppCompatDialog implements android.content.DialogInterface {
+ ctor protected AlertDialog(android.content.Context);
+ ctor protected AlertDialog(android.content.Context, @StyleRes int);
+ ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener?);
+ method public android.widget.Button! getButton(int);
+ method public android.widget.ListView! getListView();
+ method public void setButton(int, CharSequence!, android.os.Message!);
+ method public void setButton(int, CharSequence!, android.content.DialogInterface.OnClickListener!);
+ method public void setButton(int, CharSequence!, android.graphics.drawable.Drawable!, android.content.DialogInterface.OnClickListener!);
+ method public void setCustomTitle(android.view.View!);
+ method public void setIcon(int);
+ method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setIconAttribute(int);
+ method public void setMessage(CharSequence!);
+ method public void setView(android.view.View!);
+ method public void setView(android.view.View!, int, int, int, int);
+ }
+
+ public static class AlertDialog.Builder {
+ ctor public AlertDialog.Builder(android.content.Context);
+ ctor public AlertDialog.Builder(android.content.Context, @StyleRes int);
+ method public androidx.appcompat.app.AlertDialog create();
+ method public android.content.Context getContext();
+ method public androidx.appcompat.app.AlertDialog.Builder! setAdapter(android.widget.ListAdapter!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setCancelable(boolean);
+ method public androidx.appcompat.app.AlertDialog.Builder! setCursor(android.database.Cursor!, android.content.DialogInterface.OnClickListener!, String!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setCustomTitle(android.view.View?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setIcon(@DrawableRes int);
+ method public androidx.appcompat.app.AlertDialog.Builder! setIcon(android.graphics.drawable.Drawable?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setIconAttribute(@AttrRes int);
+ method @Deprecated public androidx.appcompat.app.AlertDialog.Builder! setInverseBackgroundForced(boolean);
+ method public androidx.appcompat.app.AlertDialog.Builder! setItems(@ArrayRes int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setItems(CharSequence![]!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMessage(@StringRes int);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMessage(CharSequence?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(@ArrayRes int, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(CharSequence![]!, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(android.database.Cursor!, String!, String!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButtonIcon(android.graphics.drawable.Drawable!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButtonIcon(android.graphics.drawable.Drawable!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setOnCancelListener(android.content.DialogInterface.OnCancelListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setOnDismissListener(android.content.DialogInterface.OnDismissListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setOnKeyListener(android.content.DialogInterface.OnKeyListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButtonIcon(android.graphics.drawable.Drawable!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(@ArrayRes int, int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.database.Cursor!, int, String!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(CharSequence![]!, int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.widget.ListAdapter!, int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setTitle(@StringRes int);
+ method public androidx.appcompat.app.AlertDialog.Builder! setTitle(CharSequence?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setView(int);
+ method public androidx.appcompat.app.AlertDialog.Builder! setView(android.view.View!);
+ method public androidx.appcompat.app.AlertDialog! show();
+ }
+
+ public class AppCompatActivity extends androidx.fragment.app.FragmentActivity implements androidx.appcompat.app.ActionBarDrawerToggle.DelegateProvider androidx.appcompat.app.AppCompatCallback androidx.lifecycle.LifecycleOwner androidx.core.app.TaskStackBuilder.SupportParentable {
+ ctor public AppCompatActivity();
+ ctor @ContentView public AppCompatActivity(@LayoutRes int);
+ method public androidx.appcompat.app.AppCompatDelegate getDelegate();
+ method public androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
+ method public androidx.appcompat.app.ActionBar? getSupportActionBar();
+ method public android.content.Intent? getSupportParentActivityIntent();
+ method public void onCreateSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+ method protected void onLocalesChanged(androidx.core.os.LocaleListCompat);
+ method public final boolean onMenuItemSelected(int, android.view.MenuItem);
+ method protected void onNightModeChanged(int);
+ method public void onPrepareSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+ method @CallSuper public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode);
+ method @CallSuper public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode);
+ method @Deprecated public void onSupportContentChanged();
+ method public boolean onSupportNavigateUp();
+ method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+ method public void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
+ method @Deprecated public void setSupportProgress(int);
+ method @Deprecated public void setSupportProgressBarIndeterminate(boolean);
+ method @Deprecated public void setSupportProgressBarIndeterminateVisibility(boolean);
+ method @Deprecated public void setSupportProgressBarVisibility(boolean);
+ method public androidx.appcompat.view.ActionMode? startSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+ method public void supportInvalidateOptionsMenu();
+ method public void supportNavigateUpTo(android.content.Intent);
+ method public boolean supportRequestWindowFeature(int);
+ method public boolean supportShouldUpRecreateTask(android.content.Intent);
+ }
+
+ public interface AppCompatCallback {
+ method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
+ method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode!);
+ method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback!);
+ }
+
+ public abstract class AppCompatDelegate {
+ method public abstract void addContentView(android.view.View!, android.view.ViewGroup.LayoutParams!);
+ method public abstract boolean applyDayNight();
+ method @Deprecated public void attachBaseContext(android.content.Context!);
+ method @CallSuper public android.content.Context attachBaseContext2(android.content.Context);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Dialog, androidx.appcompat.app.AppCompatCallback?);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.view.Window, androidx.appcompat.app.AppCompatCallback?);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
+ method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
+ method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
+ method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales();
+ method public android.content.Context? getContextForDelegate();
+ method public static int getDefaultNightMode();
+ method public abstract androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
+ method public int getLocalNightMode();
+ method public abstract android.view.MenuInflater! getMenuInflater();
+ method public abstract androidx.appcompat.app.ActionBar? getSupportActionBar();
+ method public abstract boolean hasWindowFeature(int);
+ method public abstract void installViewFactory();
+ method public abstract void invalidateOptionsMenu();
+ method public static boolean isCompatVectorFromResourcesEnabled();
+ method public abstract boolean isHandleNativeActionModesEnabled();
+ method public abstract void onConfigurationChanged(android.content.res.Configuration!);
+ method public abstract void onCreate(android.os.Bundle!);
+ method public abstract void onDestroy();
+ method public abstract void onPostCreate(android.os.Bundle!);
+ method public abstract void onPostResume();
+ method public abstract void onSaveInstanceState(android.os.Bundle!);
+ method public abstract void onStart();
+ method public abstract void onStop();
+ method public abstract boolean requestWindowFeature(int);
+ method public static void setApplicationLocales(androidx.core.os.LocaleListCompat);
+ method public static void setCompatVectorFromResourcesEnabled(boolean);
+ method public abstract void setContentView(android.view.View!);
+ method public abstract void setContentView(@LayoutRes int);
+ method public abstract void setContentView(android.view.View!, android.view.ViewGroup.LayoutParams!);
+ method public static void setDefaultNightMode(int);
+ method public abstract void setHandleNativeActionModesEnabled(boolean);
+ method @RequiresApi(17) public abstract void setLocalNightMode(int);
+ method @CallSuper @RequiresApi(33) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher?);
+ method public abstract void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
+ method public void setTheme(@StyleRes int);
+ method public abstract void setTitle(CharSequence?);
+ method public abstract androidx.appcompat.view.ActionMode? startSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ field public static final int FEATURE_SUPPORT_ACTION_BAR = 108; // 0x6c
+ field public static final int FEATURE_SUPPORT_ACTION_BAR_OVERLAY = 109; // 0x6d
+ field @Deprecated public static final int MODE_NIGHT_AUTO = 0; // 0x0
+ field public static final int MODE_NIGHT_AUTO_BATTERY = 3; // 0x3
+ field @Deprecated public static final int MODE_NIGHT_AUTO_TIME = 0; // 0x0
+ field public static final int MODE_NIGHT_FOLLOW_SYSTEM = -1; // 0xffffffff
+ field public static final int MODE_NIGHT_NO = 1; // 0x1
+ field public static final int MODE_NIGHT_UNSPECIFIED = -100; // 0xffffff9c
+ field public static final int MODE_NIGHT_YES = 2; // 0x2
+ }
+
+ public class AppCompatDialog extends androidx.activity.ComponentDialog implements androidx.appcompat.app.AppCompatCallback {
+ ctor public AppCompatDialog(android.content.Context);
+ ctor public AppCompatDialog(android.content.Context, int);
+ ctor protected AppCompatDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener?);
+ method public androidx.appcompat.app.AppCompatDelegate getDelegate();
+ method public androidx.appcompat.app.ActionBar! getSupportActionBar();
+ method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
+ method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode!);
+ method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback!);
+ method public boolean supportRequestWindowFeature(int);
+ }
+
+ public class AppCompatDialogFragment extends androidx.fragment.app.DialogFragment {
+ ctor public AppCompatDialogFragment();
+ ctor public AppCompatDialogFragment(@LayoutRes int);
+ }
+
+ public class AppCompatViewInflater {
+ ctor public AppCompatViewInflater();
+ method protected androidx.appcompat.widget.AppCompatAutoCompleteTextView createAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatButton createButton(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatCheckBox createCheckBox(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatCheckedTextView createCheckedTextView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatEditText createEditText(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatImageButton createImageButton(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatImageView createImageView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatRadioButton createRadioButton(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatRatingBar createRatingBar(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatSeekBar createSeekBar(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatSpinner createSpinner(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatTextView createTextView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatToggleButton createToggleButton(android.content.Context!, android.util.AttributeSet!);
+ method public final android.view.View? createView(android.view.View?, String, android.content.Context, android.util.AttributeSet, boolean, boolean, boolean, boolean);
+ method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
+ }
+
+ public final class AppLocalesMetadataHolderService extends android.app.Service {
+ ctor public AppLocalesMetadataHolderService();
+ method public static android.content.pm.ServiceInfo getServiceInfo(android.content.Context) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public android.os.IBinder onBind(android.content.Intent);
+ }
+
+}
+
+package androidx.appcompat.graphics.drawable {
+
+ public class DrawerArrowDrawable extends android.graphics.drawable.Drawable {
+ ctor public DrawerArrowDrawable(android.content.Context!);
+ method public void draw(android.graphics.Canvas!);
+ method public float getArrowHeadLength();
+ method public float getArrowShaftLength();
+ method public float getBarLength();
+ method public float getBarThickness();
+ method @ColorInt public int getColor();
+ method public int getDirection();
+ method public float getGapSize();
+ method public int getOpacity();
+ method public final android.graphics.Paint! getPaint();
+ method @FloatRange(from=0.0, to=1.0) public float getProgress();
+ method public boolean isSpinEnabled();
+ method public void setAlpha(int);
+ method public void setArrowHeadLength(float);
+ method public void setArrowShaftLength(float);
+ method public void setBarLength(float);
+ method public void setBarThickness(float);
+ method public void setColor(@ColorInt int);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setDirection(int);
+ method public void setGapSize(float);
+ method public void setProgress(@FloatRange(from=0.0, to=1.0) float);
+ method public void setSpinEnabled(boolean);
+ method public void setVerticalMirror(boolean);
+ field public static final int ARROW_DIRECTION_END = 3; // 0x3
+ field public static final int ARROW_DIRECTION_LEFT = 0; // 0x0
+ field public static final int ARROW_DIRECTION_RIGHT = 1; // 0x1
+ field public static final int ARROW_DIRECTION_START = 2; // 0x2
+ }
+
+}
+
+package androidx.appcompat.view {
+
+ public abstract class ActionMode {
+ ctor public ActionMode();
+ method public abstract void finish();
+ method public abstract android.view.View! getCustomView();
+ method public abstract android.view.Menu! getMenu();
+ method public abstract android.view.MenuInflater! getMenuInflater();
+ method public abstract CharSequence! getSubtitle();
+ method public Object! getTag();
+ method public abstract CharSequence! getTitle();
+ method public boolean getTitleOptionalHint();
+ method public abstract void invalidate();
+ method public boolean isTitleOptional();
+ method public abstract void setCustomView(android.view.View!);
+ method public abstract void setSubtitle(CharSequence!);
+ method public abstract void setSubtitle(int);
+ method public void setTag(Object!);
+ method public abstract void setTitle(CharSequence!);
+ method public abstract void setTitle(int);
+ method public void setTitleOptionalHint(boolean);
+ }
+
+ public static interface ActionMode.Callback {
+ method public boolean onActionItemClicked(androidx.appcompat.view.ActionMode!, android.view.MenuItem!);
+ method public boolean onCreateActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
+ method public void onDestroyActionMode(androidx.appcompat.view.ActionMode!);
+ method public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
+ }
+
+ @Deprecated public interface CollapsibleActionView {
+ method @Deprecated public void onActionViewCollapsed();
+ method @Deprecated public void onActionViewExpanded();
+ }
+
+ public class ContextThemeWrapper extends android.content.ContextWrapper {
+ ctor public ContextThemeWrapper();
+ ctor public ContextThemeWrapper(android.content.Context!, @StyleRes int);
+ ctor public ContextThemeWrapper(android.content.Context!, android.content.res.Resources.Theme!);
+ method public void applyOverrideConfiguration(android.content.res.Configuration!);
+ method public int getThemeResId();
+ method protected void onApplyThemeResource(android.content.res.Resources.Theme!, int, boolean);
+ }
+
+}
+
+package androidx.appcompat.widget {
+
+ public class ActionMenuView extends androidx.appcompat.widget.LinearLayoutCompat {
+ ctor public ActionMenuView(android.content.Context);
+ ctor public ActionMenuView(android.content.Context, android.util.AttributeSet?);
+ method public void dismissPopupMenus();
+ method protected androidx.appcompat.widget.ActionMenuView.LayoutParams! generateDefaultLayoutParams();
+ method public androidx.appcompat.widget.ActionMenuView.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.ActionMenuView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+ method public android.view.Menu! getMenu();
+ method public android.graphics.drawable.Drawable? getOverflowIcon();
+ method public int getPopupTheme();
+ method public boolean hideOverflowMenu();
+ method public boolean isOverflowMenuShowing();
+ method public void onConfigurationChanged(android.content.res.Configuration!);
+ method public void onDetachedFromWindow();
+ method public void setOnMenuItemClickListener(androidx.appcompat.widget.ActionMenuView.OnMenuItemClickListener!);
+ method public void setOverflowIcon(android.graphics.drawable.Drawable?);
+ method public void setPopupTheme(@StyleRes int);
+ method public boolean showOverflowMenu();
+ }
+
+ public static class ActionMenuView.LayoutParams extends androidx.appcompat.widget.LinearLayoutCompat.LayoutParams {
+ ctor public ActionMenuView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public ActionMenuView.LayoutParams(androidx.appcompat.widget.ActionMenuView.LayoutParams!);
+ ctor public ActionMenuView.LayoutParams(int, int);
+ field public int cellsUsed;
+ field public boolean expandable;
+ field public int extraPixels;
+ field public boolean isOverflowButton;
+ field public boolean preventEdgeOffset;
+ }
+
+ public static interface ActionMenuView.OnMenuItemClickListener {
+ method public boolean onMenuItemClick(android.view.MenuItem!);
+ }
+
+ public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatAutoCompleteTextView(android.content.Context);
+ ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ }
+
+ public class AppCompatButton extends android.widget.Button implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatButton(android.content.Context);
+ ctor public AppCompatButton(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatButton(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method public void setSupportAllCaps(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ }
+
+ public class AppCompatCheckBox extends android.widget.CheckBox implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatCheckBox(android.content.Context);
+ ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public class AppCompatCheckedTextView extends android.widget.CheckedTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatCheckedTextView(android.content.Context);
+ ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ public class AppCompatEditText extends android.widget.EditText implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.OnReceiveContentViewBehavior androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatEditText(android.content.Context);
+ ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public androidx.core.view.ContentInfoCompat? onReceiveContent(androidx.core.view.ContentInfoCompat);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ }
+
+ public class AppCompatImageButton extends android.widget.ImageButton implements androidx.core.view.TintableBackgroundView {
+ ctor public AppCompatImageButton(android.content.Context);
+ ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public class AppCompatImageView extends android.widget.ImageView implements androidx.core.view.TintableBackgroundView {
+ ctor public AppCompatImageView(android.content.Context);
+ ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public class AppCompatMultiAutoCompleteTextView extends android.widget.MultiAutoCompleteTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context);
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ }
+
+ public class AppCompatRadioButton extends android.widget.RadioButton implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatRadioButton(android.content.Context!);
+ ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?);
+ ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public class AppCompatRatingBar extends android.widget.RatingBar {
+ ctor public AppCompatRatingBar(android.content.Context);
+ ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet?, int);
+ }
+
+ public class AppCompatSeekBar extends android.widget.SeekBar {
+ ctor public AppCompatSeekBar(android.content.Context);
+ ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet?, int);
+ }
+
+ public class AppCompatSpinner extends android.widget.Spinner implements androidx.core.view.TintableBackgroundView {
+ ctor public AppCompatSpinner(android.content.Context);
+ ctor public AppCompatSpinner(android.content.Context, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int, int, android.content.res.Resources.Theme!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public class AppCompatTextView extends android.widget.TextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatTextView(android.content.Context);
+ ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParamsCompat();
+ method public boolean isEmojiCompatEnabled();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method public void setPrecomputedText(androidx.core.text.PrecomputedTextCompat);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ method public void setTextFuture(java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>?);
+ method public void setTextMetricsParamsCompat(androidx.core.text.PrecomputedTextCompat.Params);
+ }
+
+ public class AppCompatToggleButton extends android.widget.ToggleButton implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatToggleButton(android.content.Context);
+ ctor public AppCompatToggleButton(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatToggleButton(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public interface EmojiCompatConfigurationView {
+ method public boolean isEmojiCompatEnabled();
+ method public void setEmojiCompatEnabled(boolean);
+ }
+
+ public class LinearLayoutCompat extends android.view.ViewGroup {
+ ctor public LinearLayoutCompat(android.content.Context);
+ ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet?);
+ ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet?, int);
+ method protected androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateDefaultLayoutParams();
+ method public androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+ method @androidx.resourceinspection.annotation.Attribute("android:baselineAlignedChildIndex") public int getBaselineAlignedChildIndex();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:divider") public android.graphics.drawable.Drawable! getDividerDrawable();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:dividerPadding") public int getDividerPadding();
+ method @GravityInt @androidx.resourceinspection.annotation.Attribute("android:gravity") public int getGravity();
+ method @androidx.resourceinspection.annotation.Attribute(value="android:orientation", intMapping={@androidx.resourceinspection.annotation.Attribute.IntMap(name="horizontal", value=0), @androidx.resourceinspection.annotation.Attribute.IntMap(name="vertical", value=1)}) public int getOrientation();
+ method @androidx.resourceinspection.annotation.Attribute(value="androidx.appcompat:showDividers", intMapping={@androidx.resourceinspection.annotation.Attribute.IntMap(name="none", value=0), @androidx.resourceinspection.annotation.Attribute.IntMap(name="beginning", value=1, mask=1), @androidx.resourceinspection.annotation.Attribute.IntMap(name="middle", value=2, mask=2), @androidx.resourceinspection.annotation.Attribute.IntMap(name="end", value=4, mask=4)}) public int getShowDividers();
+ method @androidx.resourceinspection.annotation.Attribute("android:weightSum") public float getWeightSum();
+ method @androidx.resourceinspection.annotation.Attribute("android:baselineAligned") public boolean isBaselineAligned();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:measureWithLargestChild") public boolean isMeasureWithLargestChildEnabled();
+ method public void setBaselineAligned(boolean);
+ method public void setBaselineAlignedChildIndex(int);
+ method public void setDividerDrawable(android.graphics.drawable.Drawable!);
+ method public void setDividerPadding(int);
+ method public void setGravity(@GravityInt int);
+ method public void setHorizontalGravity(int);
+ method public void setMeasureWithLargestChildEnabled(boolean);
+ method public void setOrientation(int);
+ method public void setShowDividers(int);
+ method public void setVerticalGravity(int);
+ method public void setWeightSum(float);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int SHOW_DIVIDER_BEGINNING = 1; // 0x1
+ field public static final int SHOW_DIVIDER_END = 4; // 0x4
+ field public static final int SHOW_DIVIDER_MIDDLE = 2; // 0x2
+ field public static final int SHOW_DIVIDER_NONE = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static class LinearLayoutCompat.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+ ctor public LinearLayoutCompat.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public LinearLayoutCompat.LayoutParams(int, int);
+ ctor public LinearLayoutCompat.LayoutParams(int, int, float);
+ ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ }
+
+ public class ListPopupWindow {
+ ctor public ListPopupWindow(android.content.Context);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?, @AttrRes int);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?, @AttrRes int, @StyleRes int);
+ method public void clearListSelection();
+ method public android.view.View.OnTouchListener! createDragToOpenListener(android.view.View!);
+ method public void dismiss();
+ method public android.view.View? getAnchorView();
+ method @StyleRes public int getAnimationStyle();
+ method public android.graphics.drawable.Drawable? getBackground();
+ method public android.graphics.Rect? getEpicenterBounds();
+ method public int getHeight();
+ method public int getHorizontalOffset();
+ method public int getInputMethodMode();
+ method public android.widget.ListView? getListView();
+ method public int getPromptPosition();
+ method public Object? getSelectedItem();
+ method public long getSelectedItemId();
+ method public int getSelectedItemPosition();
+ method public android.view.View? getSelectedView();
+ method public int getSoftInputMode();
+ method public int getVerticalOffset();
+ method public int getWidth();
+ method public boolean isInputMethodNotNeeded();
+ method public boolean isModal();
+ method public boolean isShowing();
+ method public boolean onKeyDown(int, android.view.KeyEvent);
+ method public boolean onKeyPreIme(int, android.view.KeyEvent);
+ method public boolean onKeyUp(int, android.view.KeyEvent);
+ method public boolean performItemClick(int);
+ method public void postShow();
+ method public void setAdapter(android.widget.ListAdapter?);
+ method public void setAnchorView(android.view.View?);
+ method public void setAnimationStyle(@StyleRes int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setContentWidth(int);
+ method public void setDropDownGravity(int);
+ method public void setEpicenterBounds(android.graphics.Rect?);
+ method public void setHeight(int);
+ method public void setHorizontalOffset(int);
+ method public void setInputMethodMode(int);
+ method public void setListSelector(android.graphics.drawable.Drawable!);
+ method public void setModal(boolean);
+ method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener?);
+ method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener?);
+ method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener?);
+ method public void setPromptPosition(int);
+ method public void setPromptView(android.view.View?);
+ method public void setSelection(int);
+ method public void setSoftInputMode(int);
+ method public void setVerticalOffset(int);
+ method public void setWidth(int);
+ method public void setWindowLayoutType(int);
+ method public void show();
+ field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
+ field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
+ field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2
+ field public static final int MATCH_PARENT = -1; // 0xffffffff
+ field public static final int POSITION_PROMPT_ABOVE = 0; // 0x0
+ field public static final int POSITION_PROMPT_BELOW = 1; // 0x1
+ field public static final int WRAP_CONTENT = -2; // 0xfffffffe
+ }
+
+ public class PopupMenu {
+ ctor public PopupMenu(android.content.Context, android.view.View);
+ ctor public PopupMenu(android.content.Context, android.view.View, int);
+ ctor public PopupMenu(android.content.Context, android.view.View, int, @AttrRes int, @StyleRes int);
+ method public void dismiss();
+ method public android.view.View.OnTouchListener getDragToOpenListener();
+ method public int getGravity();
+ method public android.view.Menu getMenu();
+ method public android.view.MenuInflater getMenuInflater();
+ method public void inflate(@MenuRes int);
+ method public void setForceShowIcon(boolean);
+ method public void setGravity(int);
+ method public void setOnDismissListener(androidx.appcompat.widget.PopupMenu.OnDismissListener?);
+ method public void setOnMenuItemClickListener(androidx.appcompat.widget.PopupMenu.OnMenuItemClickListener?);
+ method public void show();
+ }
+
+ public static interface PopupMenu.OnDismissListener {
+ method public void onDismiss(androidx.appcompat.widget.PopupMenu!);
+ }
+
+ public static interface PopupMenu.OnMenuItemClickListener {
+ method public boolean onMenuItemClick(android.view.MenuItem!);
+ }
+
+ public class SearchView extends androidx.appcompat.widget.LinearLayoutCompat implements androidx.appcompat.view.CollapsibleActionView {
+ ctor public SearchView(android.content.Context);
+ ctor public SearchView(android.content.Context, android.util.AttributeSet?);
+ ctor public SearchView(android.content.Context, android.util.AttributeSet?, int);
+ method @androidx.resourceinspection.annotation.Attribute("android:imeOptions") public int getImeOptions();
+ method public int getInputType();
+ method @androidx.resourceinspection.annotation.Attribute("android:maxWidth") public int getMaxWidth();
+ method public CharSequence! getQuery();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:queryHint") public CharSequence? getQueryHint();
+ method public androidx.cursoradapter.widget.CursorAdapter! getSuggestionsAdapter();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:iconifiedByDefault") public boolean isIconfiedByDefault();
+ method public boolean isIconified();
+ method public boolean isQueryRefinementEnabled();
+ method public boolean isSubmitButtonEnabled();
+ method public void onActionViewCollapsed();
+ method public void onActionViewExpanded();
+ method protected void onQueryRefine(CharSequence?);
+ method public void setIconified(boolean);
+ method public void setIconifiedByDefault(boolean);
+ method public void setImeOptions(int);
+ method public void setInputType(int);
+ method public void setMaxWidth(int);
+ method public void setOnCloseListener(androidx.appcompat.widget.SearchView.OnCloseListener!);
+ method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener!);
+ method public void setOnQueryTextListener(androidx.appcompat.widget.SearchView.OnQueryTextListener!);
+ method public void setOnSearchClickListener(android.view.View.OnClickListener!);
+ method public void setOnSuggestionListener(androidx.appcompat.widget.SearchView.OnSuggestionListener!);
+ method public void setQuery(CharSequence!, boolean);
+ method public void setQueryHint(CharSequence?);
+ method public void setQueryRefinementEnabled(boolean);
+ method public void setSearchableInfo(android.app.SearchableInfo!);
+ method public void setSubmitButtonEnabled(boolean);
+ method public void setSuggestionsAdapter(androidx.cursoradapter.widget.CursorAdapter!);
+ }
+
+ public static interface SearchView.OnCloseListener {
+ method public boolean onClose();
+ }
+
+ public static interface SearchView.OnQueryTextListener {
+ method public boolean onQueryTextChange(String!);
+ method public boolean onQueryTextSubmit(String!);
+ }
+
+ public static interface SearchView.OnSuggestionListener {
+ method public boolean onSuggestionClick(int);
+ method public boolean onSuggestionSelect(int);
+ }
+
+ public class ShareActionProvider extends androidx.core.view.ActionProvider {
+ ctor public ShareActionProvider(android.content.Context!);
+ method public android.view.View! onCreateActionView();
+ method public void setOnShareTargetSelectedListener(androidx.appcompat.widget.ShareActionProvider.OnShareTargetSelectedListener!);
+ method public void setShareHistoryFileName(String!);
+ method public void setShareIntent(android.content.Intent!);
+ field public static final String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
+ }
+
+ public static interface ShareActionProvider.OnShareTargetSelectedListener {
+ method public boolean onShareTargetSelected(androidx.appcompat.widget.ShareActionProvider!, android.content.Intent!);
+ }
+
+ public class SwitchCompat extends android.widget.CompoundButton implements androidx.appcompat.widget.EmojiCompatConfigurationView {
+ ctor public SwitchCompat(android.content.Context);
+ ctor public SwitchCompat(android.content.Context, android.util.AttributeSet?);
+ ctor public SwitchCompat(android.content.Context, android.util.AttributeSet?, int);
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:showText") public boolean getShowText();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:splitTrack") public boolean getSplitTrack();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:switchMinWidth") public int getSwitchMinWidth();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:switchPadding") public int getSwitchPadding();
+ method @androidx.resourceinspection.annotation.Attribute("android:textOff") public CharSequence! getTextOff();
+ method @androidx.resourceinspection.annotation.Attribute("android:textOn") public CharSequence! getTextOn();
+ method @androidx.resourceinspection.annotation.Attribute("android:thumb") public android.graphics.drawable.Drawable! getThumbDrawable();
+ method @FloatRange(from=0.0, to=1.0) protected final float getThumbPosition();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:thumbTextPadding") public int getThumbTextPadding();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:thumbTint") public android.content.res.ColorStateList? getThumbTintList();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:thumbTintMode") public android.graphics.PorterDuff.Mode? getThumbTintMode();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:track") public android.graphics.drawable.Drawable! getTrackDrawable();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:trackTint") public android.content.res.ColorStateList? getTrackTintList();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:trackTintMode") public android.graphics.PorterDuff.Mode? getTrackTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void onMeasure(int, int);
+ method public void setEmojiCompatEnabled(boolean);
+ method protected final void setEnforceSwitchWidth(boolean);
+ method public void setShowText(boolean);
+ method public void setSplitTrack(boolean);
+ method public void setSwitchMinWidth(int);
+ method public void setSwitchPadding(int);
+ method public void setSwitchTextAppearance(android.content.Context!, int);
+ method public void setSwitchTypeface(android.graphics.Typeface!, int);
+ method public void setSwitchTypeface(android.graphics.Typeface!);
+ method public void setTextOff(CharSequence!);
+ method public void setTextOn(CharSequence!);
+ method public void setThumbDrawable(android.graphics.drawable.Drawable!);
+ method public void setThumbResource(int);
+ method public void setThumbTextPadding(int);
+ method public void setThumbTintList(android.content.res.ColorStateList?);
+ method public void setThumbTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTrackDrawable(android.graphics.drawable.Drawable!);
+ method public void setTrackResource(int);
+ method public void setTrackTintList(android.content.res.ColorStateList?);
+ method public void setTrackTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public interface ThemedSpinnerAdapter extends android.widget.SpinnerAdapter {
+ method public android.content.res.Resources.Theme? getDropDownViewTheme();
+ method public void setDropDownViewTheme(android.content.res.Resources.Theme?);
+ }
+
+ public static final class ThemedSpinnerAdapter.Helper {
+ ctor public ThemedSpinnerAdapter.Helper(android.content.Context);
+ method public android.view.LayoutInflater getDropDownViewInflater();
+ method public android.content.res.Resources.Theme? getDropDownViewTheme();
+ method public void setDropDownViewTheme(android.content.res.Resources.Theme?);
+ }
+
+ public class Toolbar extends android.view.ViewGroup implements androidx.core.view.MenuHost {
+ ctor public Toolbar(android.content.Context);
+ ctor public Toolbar(android.content.Context, android.util.AttributeSet?);
+ ctor public Toolbar(android.content.Context, android.util.AttributeSet?, int);
+ method @MainThread public void addMenuProvider(androidx.core.view.MenuProvider);
+ method @MainThread public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
+ method @MainThread public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
+ method public void collapseActionView();
+ method public void dismissPopupMenus();
+ method protected androidx.appcompat.widget.Toolbar.LayoutParams! generateDefaultLayoutParams();
+ method public androidx.appcompat.widget.Toolbar.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.Toolbar.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:collapseContentDescription") public CharSequence? getCollapseContentDescription();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:collapseIcon") public android.graphics.drawable.Drawable? getCollapseIcon();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetEnd") public int getContentInsetEnd();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetEndWithActions") public int getContentInsetEndWithActions();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetLeft") public int getContentInsetLeft();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetRight") public int getContentInsetRight();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetStart") public int getContentInsetStart();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetStartWithNavigation") public int getContentInsetStartWithNavigation();
+ method public int getCurrentContentInsetEnd();
+ method public int getCurrentContentInsetLeft();
+ method public int getCurrentContentInsetRight();
+ method public int getCurrentContentInsetStart();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:logo") public android.graphics.drawable.Drawable! getLogo();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:logoDescription") public CharSequence! getLogoDescription();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:menu") public android.view.Menu! getMenu();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:navigationContentDescription") public CharSequence? getNavigationContentDescription();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:navigationIcon") public android.graphics.drawable.Drawable? getNavigationIcon();
+ method public android.graphics.drawable.Drawable? getOverflowIcon();
+ method @StyleRes @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:popupTheme") public int getPopupTheme();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:subtitle") public CharSequence! getSubtitle();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:title") public CharSequence! getTitle();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginBottom") public int getTitleMarginBottom();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginEnd") public int getTitleMarginEnd();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginStart") public int getTitleMarginStart();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginTop") public int getTitleMarginTop();
+ method public boolean hasExpandedActionView();
+ method public boolean hideOverflowMenu();
+ method public void inflateMenu(@MenuRes int);
+ method @MainThread public void invalidateMenu();
+ method public boolean isBackInvokedCallbackEnabled();
+ method public boolean isOverflowMenuShowing();
+ method @MainThread public void removeMenuProvider(androidx.core.view.MenuProvider);
+ method public void setBackInvokedCallbackEnabled(boolean);
+ method public void setCollapseContentDescription(@StringRes int);
+ method public void setCollapseContentDescription(CharSequence?);
+ method public void setCollapseIcon(@DrawableRes int);
+ method public void setCollapseIcon(android.graphics.drawable.Drawable?);
+ method public void setContentInsetEndWithActions(int);
+ method public void setContentInsetStartWithNavigation(int);
+ method public void setContentInsetsAbsolute(int, int);
+ method public void setContentInsetsRelative(int, int);
+ method public void setLogo(@DrawableRes int);
+ method public void setLogo(android.graphics.drawable.Drawable!);
+ method public void setLogoDescription(@StringRes int);
+ method public void setLogoDescription(CharSequence!);
+ method public void setNavigationContentDescription(@StringRes int);
+ method public void setNavigationContentDescription(CharSequence?);
+ method public void setNavigationIcon(@DrawableRes int);
+ method public void setNavigationIcon(android.graphics.drawable.Drawable?);
+ method public void setNavigationOnClickListener(android.view.View.OnClickListener!);
+ method public void setOnMenuItemClickListener(androidx.appcompat.widget.Toolbar.OnMenuItemClickListener!);
+ method public void setOverflowIcon(android.graphics.drawable.Drawable?);
+ method public void setPopupTheme(@StyleRes int);
+ method public void setSubtitle(@StringRes int);
+ method public void setSubtitle(CharSequence!);
+ method public void setSubtitleTextAppearance(android.content.Context!, @StyleRes int);
+ method public void setSubtitleTextColor(@ColorInt int);
+ method public void setSubtitleTextColor(android.content.res.ColorStateList);
+ method public void setTitle(@StringRes int);
+ method public void setTitle(CharSequence!);
+ method public void setTitleMargin(int, int, int, int);
+ method public void setTitleMarginBottom(int);
+ method public void setTitleMarginEnd(int);
+ method public void setTitleMarginStart(int);
+ method public void setTitleMarginTop(int);
+ method public void setTitleTextAppearance(android.content.Context!, @StyleRes int);
+ method public void setTitleTextColor(@ColorInt int);
+ method public void setTitleTextColor(android.content.res.ColorStateList);
+ method public boolean showOverflowMenu();
+ }
+
+ public static class Toolbar.LayoutParams extends androidx.appcompat.app.ActionBar.LayoutParams {
+ ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet!);
+ ctor public Toolbar.LayoutParams(int, int);
+ ctor public Toolbar.LayoutParams(int, int, int);
+ ctor public Toolbar.LayoutParams(int);
+ ctor public Toolbar.LayoutParams(androidx.appcompat.widget.Toolbar.LayoutParams!);
+ ctor public Toolbar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ }
+
+ public static interface Toolbar.OnMenuItemClickListener {
+ method public boolean onMenuItemClick(android.view.MenuItem!);
+ }
+
+ public static class Toolbar.SavedState extends androidx.customview.view.AbsSavedState {
+ ctor public Toolbar.SavedState(android.os.Parcel!);
+ ctor public Toolbar.SavedState(android.os.Parcel!, ClassLoader!);
+ ctor public Toolbar.SavedState(android.os.Parcelable!);
+ field public static final android.os.Parcelable.Creator<androidx.appcompat.widget.Toolbar.SavedState!>! CREATOR;
+ }
+
+ public class TooltipCompat {
+ method public static void setTooltipText(android.view.View, CharSequence?);
+ }
+
+}
+
diff --git a/appcompat/appcompat/api/res-1.6.0-beta02.txt b/appcompat/appcompat/api/res-1.6.0-beta02.txt
new file mode 100644
index 0000000..b9f58a8
--- /dev/null
+++ b/appcompat/appcompat/api/res-1.6.0-beta02.txt
@@ -0,0 +1,369 @@
+attr actionBarDivider
+attr actionBarItemBackground
+attr actionBarPopupTheme
+attr actionBarSize
+attr actionBarSplitStyle
+attr actionBarStyle
+attr actionBarTabBarStyle
+attr actionBarTabStyle
+attr actionBarTabTextStyle
+attr actionBarTheme
+attr actionBarWidgetTheme
+attr actionButtonStyle
+attr actionDropDownStyle
+attr actionLayout
+attr actionMenuTextAppearance
+attr actionMenuTextColor
+attr actionModeBackground
+attr actionModeCloseButtonStyle
+attr actionModeCloseContentDescription
+attr actionModeCloseDrawable
+attr actionModeCopyDrawable
+attr actionModeCutDrawable
+attr actionModeFindDrawable
+attr actionModePasteDrawable
+attr actionModeSelectAllDrawable
+attr actionModeShareDrawable
+attr actionModeSplitBackground
+attr actionModeStyle
+attr actionModeTheme
+attr actionModeWebSearchDrawable
+attr actionOverflowButtonStyle
+attr actionOverflowMenuStyle
+attr actionProviderClass
+attr actionViewClass
+attr alertDialogStyle
+attr alertDialogTheme
+attr arrowHeadLength
+attr arrowShaftLength
+attr autoCompleteTextViewStyle
+attr autoSizeMaxTextSize
+attr autoSizeMinTextSize
+attr autoSizePresetSizes
+attr autoSizeStepGranularity
+attr autoSizeTextType
+attr background
+attr backgroundSplit
+attr backgroundStacked
+attr backgroundTint
+attr backgroundTintMode
+attr barLength
+attr borderlessButtonStyle
+attr buttonBarButtonStyle
+attr buttonBarNegativeButtonStyle
+attr buttonBarNeutralButtonStyle
+attr buttonBarPositiveButtonStyle
+attr buttonBarStyle
+attr buttonGravity
+attr buttonStyle
+attr buttonStyleSmall
+attr buttonTint
+attr buttonTintMode
+attr checkboxStyle
+attr checkedTextViewStyle
+attr closeIcon
+attr closeItemLayout
+attr collapseContentDescription
+attr collapseIcon
+attr color
+attr colorAccent
+attr colorBackgroundFloating
+attr colorButtonNormal
+attr colorControlActivated
+attr colorControlHighlight
+attr colorControlNormal
+attr colorError
+attr colorPrimary
+attr colorPrimaryDark
+attr commitIcon
+attr contentInsetEnd
+attr contentInsetEndWithActions
+attr contentInsetLeft
+attr contentInsetRight
+attr contentInsetStart
+attr contentInsetStartWithNavigation
+attr customNavigationLayout
+attr dialogCornerRadius
+attr dialogPreferredPadding
+attr dialogTheme
+attr displayOptions
+attr divider
+attr dividerHorizontal
+attr dividerPadding
+attr dividerVertical
+attr drawableSize
+attr drawerArrowStyle
+attr dropDownListViewStyle
+attr editTextBackground
+attr editTextColor
+attr editTextStyle
+attr elevation
+attr emojiCompatEnabled
+attr firstBaselineToTopHeight
+attr fontFamily
+attr fontVariationSettings
+attr gapBetweenBars
+attr goIcon
+attr height
+attr hideOnContentScroll
+attr homeAsUpIndicator
+attr homeLayout
+attr icon
+attr iconTint
+attr iconTintMode
+attr iconifiedByDefault
+attr imageButtonStyle
+attr indeterminateProgressStyle
+attr isLightTheme
+attr itemPadding
+attr lastBaselineToBottomHeight
+attr layout
+attr lineHeight
+attr listChoiceBackgroundIndicator
+attr listChoiceIndicatorMultipleAnimated
+attr listChoiceIndicatorSingleAnimated
+attr listDividerAlertDialog
+attr listPopupWindowStyle
+attr listPreferredItemHeight
+attr listPreferredItemHeightLarge
+attr listPreferredItemHeightSmall
+attr listPreferredItemPaddingEnd
+attr listPreferredItemPaddingLeft
+attr listPreferredItemPaddingRight
+attr listPreferredItemPaddingStart
+attr logo
+attr logoDescription
+attr maxButtonHeight
+attr measureWithLargestChild
+attr navigationContentDescription
+attr navigationIcon
+attr navigationMode
+attr overlapAnchor
+attr paddingEnd
+attr paddingStart
+attr panelBackground
+attr popupMenuStyle
+attr popupTheme
+attr popupWindowStyle
+attr preserveIconSpacing
+attr progressBarPadding
+attr progressBarStyle
+attr queryBackground
+attr queryHint
+attr radioButtonStyle
+attr ratingBarStyle
+attr ratingBarStyleIndicator
+attr ratingBarStyleSmall
+attr searchHintIcon
+attr searchIcon
+attr searchViewStyle
+attr seekBarStyle
+attr selectableItemBackground
+attr selectableItemBackgroundBorderless
+attr showAsAction
+attr showDividers
+attr showText
+attr spinBars
+attr spinnerDropDownItemStyle
+attr spinnerStyle
+attr splitTrack
+attr srcCompat
+attr state_above_anchor
+attr submitBackground
+attr subtitle
+attr subtitleTextAppearance
+attr subtitleTextColor
+attr subtitleTextStyle
+attr suggestionRowLayout
+attr switchMinWidth
+attr switchPadding
+attr switchStyle
+attr switchTextAppearance
+attr textAllCaps
+attr textAppearanceLargePopupMenu
+attr textAppearanceListItem
+attr textAppearanceListItemSecondary
+attr textAppearanceListItemSmall
+attr textAppearancePopupMenuHeader
+attr textAppearanceSearchResultSubtitle
+attr textAppearanceSearchResultTitle
+attr textAppearanceSmallPopupMenu
+attr textColorAlertDialogListItem
+attr textLocale
+attr theme
+attr thickness
+attr thumbTextPadding
+attr thumbTint
+attr thumbTintMode
+attr tickMark
+attr tickMarkTint
+attr tickMarkTintMode
+attr tint
+attr tintMode
+attr title
+attr titleMargin
+attr titleMarginBottom
+attr titleMarginEnd
+attr titleMarginStart
+attr titleMarginTop
+attr titleMargins
+attr titleTextAppearance
+attr titleTextColor
+attr titleTextStyle
+attr toolbarNavigationButtonStyle
+attr toolbarStyle
+attr track
+attr trackTint
+attr trackTintMode
+attr voiceIcon
+attr windowActionBar
+attr windowActionBarOverlay
+attr windowActionModeOverlay
+attr windowNoTitle
+layout support_simple_spinner_dropdown_item
+style TextAppearance_AppCompat
+style TextAppearance_AppCompat_Body1
+style TextAppearance_AppCompat_Body2
+style TextAppearance_AppCompat_Button
+style TextAppearance_AppCompat_Caption
+style TextAppearance_AppCompat_Display1
+style TextAppearance_AppCompat_Display2
+style TextAppearance_AppCompat_Display3
+style TextAppearance_AppCompat_Display4
+style TextAppearance_AppCompat_Headline
+style TextAppearance_AppCompat_Inverse
+style TextAppearance_AppCompat_Large
+style TextAppearance_AppCompat_Large_Inverse
+style TextAppearance_AppCompat_Light_SearchResult_Subtitle
+style TextAppearance_AppCompat_Light_SearchResult_Title
+style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large
+style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small
+style TextAppearance_AppCompat_Medium
+style TextAppearance_AppCompat_Medium_Inverse
+style TextAppearance_AppCompat_Menu
+style TextAppearance_AppCompat_SearchResult_Subtitle
+style TextAppearance_AppCompat_SearchResult_Title
+style TextAppearance_AppCompat_Small
+style TextAppearance_AppCompat_Small_Inverse
+style TextAppearance_AppCompat_Subhead
+style TextAppearance_AppCompat_Subhead_Inverse
+style TextAppearance_AppCompat_Title
+style TextAppearance_AppCompat_Title_Inverse
+style TextAppearance_AppCompat_Widget_ActionBar_Menu
+style TextAppearance_AppCompat_Widget_ActionBar_Subtitle
+style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse
+style TextAppearance_AppCompat_Widget_ActionBar_Title
+style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse
+style TextAppearance_AppCompat_Widget_ActionMode_Subtitle
+style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse
+style TextAppearance_AppCompat_Widget_ActionMode_Title
+style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse
+style TextAppearance_AppCompat_Widget_Button
+style TextAppearance_AppCompat_Widget_Button_Borderless_Colored
+style TextAppearance_AppCompat_Widget_Button_Colored
+style TextAppearance_AppCompat_Widget_Button_Inverse
+style TextAppearance_AppCompat_Widget_DropDownItem
+style TextAppearance_AppCompat_Widget_PopupMenu_Header
+style TextAppearance_AppCompat_Widget_PopupMenu_Large
+style TextAppearance_AppCompat_Widget_PopupMenu_Small
+style TextAppearance_AppCompat_Widget_Switch
+style TextAppearance_AppCompat_Widget_TextView_SpinnerItem
+style ThemeOverlay_AppCompat
+style ThemeOverlay_AppCompat_ActionBar
+style ThemeOverlay_AppCompat_Dark
+style ThemeOverlay_AppCompat_Dark_ActionBar
+style ThemeOverlay_AppCompat_DayNight
+style ThemeOverlay_AppCompat_DayNight_ActionBar
+style ThemeOverlay_AppCompat_Dialog
+style ThemeOverlay_AppCompat_Dialog_Alert
+style ThemeOverlay_AppCompat_Light
+style Theme_AppCompat
+style Theme_AppCompat_DayNight
+style Theme_AppCompat_DayNight_DarkActionBar
+style Theme_AppCompat_DayNight_Dialog
+style Theme_AppCompat_DayNight_DialogWhenLarge
+style Theme_AppCompat_DayNight_Dialog_Alert
+style Theme_AppCompat_DayNight_Dialog_MinWidth
+style Theme_AppCompat_DayNight_NoActionBar
+style Theme_AppCompat_Dialog
+style Theme_AppCompat_DialogWhenLarge
+style Theme_AppCompat_Dialog_Alert
+style Theme_AppCompat_Dialog_MinWidth
+style Theme_AppCompat_Light
+style Theme_AppCompat_Light_DarkActionBar
+style Theme_AppCompat_Light_Dialog
+style Theme_AppCompat_Light_DialogWhenLarge
+style Theme_AppCompat_Light_Dialog_Alert
+style Theme_AppCompat_Light_Dialog_MinWidth
+style Theme_AppCompat_Light_NoActionBar
+style Theme_AppCompat_NoActionBar
+style Widget_AppCompat_ActionBar
+style Widget_AppCompat_ActionBar_Solid
+style Widget_AppCompat_ActionBar_TabBar
+style Widget_AppCompat_ActionBar_TabText
+style Widget_AppCompat_ActionBar_TabView
+style Widget_AppCompat_ActionButton
+style Widget_AppCompat_ActionButton_CloseMode
+style Widget_AppCompat_ActionButton_Overflow
+style Widget_AppCompat_ActionMode
+style Widget_AppCompat_AutoCompleteTextView
+style Widget_AppCompat_Button
+style Widget_AppCompat_ButtonBar
+style Widget_AppCompat_ButtonBar_AlertDialog
+style Widget_AppCompat_Button_Borderless
+style Widget_AppCompat_Button_Borderless_Colored
+style Widget_AppCompat_Button_ButtonBar_AlertDialog
+style Widget_AppCompat_Button_Colored
+style Widget_AppCompat_Button_Small
+style Widget_AppCompat_CompoundButton_CheckBox
+style Widget_AppCompat_CompoundButton_RadioButton
+style Widget_AppCompat_CompoundButton_Switch
+style Widget_AppCompat_DrawerArrowToggle
+style Widget_AppCompat_DropDownItem_Spinner
+style Widget_AppCompat_EditText
+style Widget_AppCompat_ImageButton
+style Widget_AppCompat_Light_ActionBar
+style Widget_AppCompat_Light_ActionBar_Solid
+style Widget_AppCompat_Light_ActionBar_Solid_Inverse
+style Widget_AppCompat_Light_ActionBar_TabBar
+style Widget_AppCompat_Light_ActionBar_TabBar_Inverse
+style Widget_AppCompat_Light_ActionBar_TabText
+style Widget_AppCompat_Light_ActionBar_TabText_Inverse
+style Widget_AppCompat_Light_ActionBar_TabView
+style Widget_AppCompat_Light_ActionBar_TabView_Inverse
+style Widget_AppCompat_Light_ActionButton
+style Widget_AppCompat_Light_ActionButton_CloseMode
+style Widget_AppCompat_Light_ActionButton_Overflow
+style Widget_AppCompat_Light_ActionMode_Inverse
+style Widget_AppCompat_Light_AutoCompleteTextView
+style Widget_AppCompat_Light_DropDownItem_Spinner
+style Widget_AppCompat_Light_ListPopupWindow
+style Widget_AppCompat_Light_ListView_DropDown
+style Widget_AppCompat_Light_PopupMenu
+style Widget_AppCompat_Light_PopupMenu_Overflow
+style Widget_AppCompat_Light_SearchView
+style Widget_AppCompat_Light_Spinner_DropDown_ActionBar
+style Widget_AppCompat_ListPopupWindow
+style Widget_AppCompat_ListView
+style Widget_AppCompat_ListView_DropDown
+style Widget_AppCompat_ListView_Menu
+style Widget_AppCompat_PopupMenu
+style Widget_AppCompat_PopupMenu_Overflow
+style Widget_AppCompat_PopupWindow
+style Widget_AppCompat_ProgressBar
+style Widget_AppCompat_ProgressBar_Horizontal
+style Widget_AppCompat_RatingBar
+style Widget_AppCompat_RatingBar_Indicator
+style Widget_AppCompat_RatingBar_Small
+style Widget_AppCompat_SearchView
+style Widget_AppCompat_SearchView_ActionBar
+style Widget_AppCompat_SeekBar
+style Widget_AppCompat_SeekBar_Discrete
+style Widget_AppCompat_Spinner
+style Widget_AppCompat_Spinner_DropDown
+style Widget_AppCompat_Spinner_DropDown_ActionBar
+style Widget_AppCompat_Spinner_Underlined
+style Widget_AppCompat_TextView
+style Widget_AppCompat_TextView_SpinnerItem
+style Widget_AppCompat_Toolbar
+style Widget_AppCompat_Toolbar_Button_Navigation
diff --git a/appcompat/appcompat/api/restricted_1.6.0-beta02.txt b/appcompat/appcompat/api/restricted_1.6.0-beta02.txt
new file mode 100644
index 0000000..5454c84
--- /dev/null
+++ b/appcompat/appcompat/api/restricted_1.6.0-beta02.txt
@@ -0,0 +1,2287 @@
+// Signature format: 4.0
+package androidx.appcompat.app {
+
+ public abstract class ActionBar {
+ ctor public ActionBar();
+ method public abstract void addOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
+ method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!);
+ method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, boolean);
+ method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, int);
+ method @Deprecated public abstract void addTab(androidx.appcompat.app.ActionBar.Tab!, int, boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean closeOptionsMenu();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean collapseActionView();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void dispatchMenuVisibilityChanged(boolean);
+ method public abstract android.view.View! getCustomView();
+ method @androidx.appcompat.app.ActionBar.DisplayOptions public abstract int getDisplayOptions();
+ method public float getElevation();
+ method public abstract int getHeight();
+ method public int getHideOffset();
+ method @Deprecated public abstract int getNavigationItemCount();
+ method @Deprecated @androidx.appcompat.app.ActionBar.NavigationMode public abstract int getNavigationMode();
+ method @Deprecated public abstract int getSelectedNavigationIndex();
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab? getSelectedTab();
+ method public abstract CharSequence? getSubtitle();
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! getTabAt(int);
+ method @Deprecated public abstract int getTabCount();
+ method public android.content.Context! getThemedContext();
+ method public abstract CharSequence? getTitle();
+ method public abstract void hide();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean invalidateOptionsMenu();
+ method public boolean isHideOnContentScrollEnabled();
+ method public abstract boolean isShowing();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isTitleTruncated();
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! newTab();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void onConfigurationChanged(android.content.res.Configuration!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean onKeyShortcut(int, android.view.KeyEvent!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean onMenuKeyEvent(android.view.KeyEvent!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean openOptionsMenu();
+ method @Deprecated public abstract void removeAllTabs();
+ method public abstract void removeOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
+ method @Deprecated public abstract void removeTab(androidx.appcompat.app.ActionBar.Tab!);
+ method @Deprecated public abstract void removeTabAt(int);
+ method @Deprecated public abstract void selectTab(androidx.appcompat.app.ActionBar.Tab!);
+ method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public abstract void setCustomView(android.view.View!);
+ method public abstract void setCustomView(android.view.View!, androidx.appcompat.app.ActionBar.LayoutParams!);
+ method public abstract void setCustomView(int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setDefaultDisplayHomeAsUpEnabled(boolean);
+ method public abstract void setDisplayHomeAsUpEnabled(boolean);
+ method public abstract void setDisplayOptions(@androidx.appcompat.app.ActionBar.DisplayOptions int);
+ method public abstract void setDisplayOptions(@androidx.appcompat.app.ActionBar.DisplayOptions int, @androidx.appcompat.app.ActionBar.DisplayOptions int);
+ method public abstract void setDisplayShowCustomEnabled(boolean);
+ method public abstract void setDisplayShowHomeEnabled(boolean);
+ method public abstract void setDisplayShowTitleEnabled(boolean);
+ method public abstract void setDisplayUseLogoEnabled(boolean);
+ method public void setElevation(float);
+ method public void setHideOffset(int);
+ method public void setHideOnContentScrollEnabled(boolean);
+ method public void setHomeActionContentDescription(CharSequence?);
+ method public void setHomeActionContentDescription(@StringRes int);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable?);
+ method public void setHomeAsUpIndicator(@DrawableRes int);
+ method public void setHomeButtonEnabled(boolean);
+ method public abstract void setIcon(@DrawableRes int);
+ method public abstract void setIcon(android.graphics.drawable.Drawable!);
+ method @Deprecated public abstract void setListNavigationCallbacks(android.widget.SpinnerAdapter!, androidx.appcompat.app.ActionBar.OnNavigationListener!);
+ method public abstract void setLogo(@DrawableRes int);
+ method public abstract void setLogo(android.graphics.drawable.Drawable!);
+ method @Deprecated public abstract void setNavigationMode(@androidx.appcompat.app.ActionBar.NavigationMode int);
+ method @Deprecated public abstract void setSelectedNavigationItem(int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setShowHideAnimationEnabled(boolean);
+ method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable!);
+ method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable!);
+ method public abstract void setSubtitle(CharSequence!);
+ method public abstract void setSubtitle(int);
+ method public abstract void setTitle(CharSequence!);
+ method public abstract void setTitle(@StringRes int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setWindowTitle(CharSequence!);
+ method public abstract void show();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.appcompat.view.ActionMode! startActionMode(androidx.appcompat.view.ActionMode.Callback!);
+ field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4
+ field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10
+ field public static final int DISPLAY_SHOW_HOME = 2; // 0x2
+ field public static final int DISPLAY_SHOW_TITLE = 8; // 0x8
+ field public static final int DISPLAY_USE_LOGO = 1; // 0x1
+ field @Deprecated public static final int NAVIGATION_MODE_LIST = 1; // 0x1
+ field @Deprecated public static final int NAVIGATION_MODE_STANDARD = 0; // 0x0
+ field @Deprecated public static final int NAVIGATION_MODE_TABS = 2; // 0x2
+ }
+
+ @IntDef(flag=true, value={androidx.appcompat.app.ActionBar.DISPLAY_USE_LOGO, androidx.appcompat.app.ActionBar.DISPLAY_SHOW_HOME, androidx.appcompat.app.ActionBar.DISPLAY_HOME_AS_UP, androidx.appcompat.app.ActionBar.DISPLAY_SHOW_TITLE, androidx.appcompat.app.ActionBar.DISPLAY_SHOW_CUSTOM}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ActionBar.DisplayOptions {
+ }
+
+ public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public ActionBar.LayoutParams(android.content.Context, android.util.AttributeSet!);
+ ctor public ActionBar.LayoutParams(int, int);
+ ctor public ActionBar.LayoutParams(int, int, int);
+ ctor public ActionBar.LayoutParams(int);
+ ctor public ActionBar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
+ ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ field public int gravity;
+ }
+
+ @IntDef({androidx.appcompat.app.ActionBar.NAVIGATION_MODE_STANDARD, androidx.appcompat.app.ActionBar.NAVIGATION_MODE_LIST, androidx.appcompat.app.ActionBar.NAVIGATION_MODE_TABS}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ActionBar.NavigationMode {
+ }
+
+ public static interface ActionBar.OnMenuVisibilityListener {
+ method public void onMenuVisibilityChanged(boolean);
+ }
+
+ @Deprecated public static interface ActionBar.OnNavigationListener {
+ method @Deprecated public boolean onNavigationItemSelected(int, long);
+ }
+
+ @Deprecated public abstract static class ActionBar.Tab {
+ ctor @Deprecated public ActionBar.Tab();
+ method @Deprecated public abstract CharSequence! getContentDescription();
+ method @Deprecated public abstract android.view.View! getCustomView();
+ method @Deprecated public abstract android.graphics.drawable.Drawable! getIcon();
+ method @Deprecated public abstract int getPosition();
+ method @Deprecated public abstract Object! getTag();
+ method @Deprecated public abstract CharSequence! getText();
+ method @Deprecated public abstract void select();
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setContentDescription(@StringRes int);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setContentDescription(CharSequence!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setCustomView(android.view.View!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setCustomView(int);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(android.graphics.drawable.Drawable!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setIcon(@DrawableRes int);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTabListener(androidx.appcompat.app.ActionBar.TabListener!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setTag(Object!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(CharSequence!);
+ method @Deprecated public abstract androidx.appcompat.app.ActionBar.Tab! setText(int);
+ field @Deprecated public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ @Deprecated public static interface ActionBar.TabListener {
+ method @Deprecated public void onTabReselected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+ method @Deprecated public void onTabSelected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+ method @Deprecated public void onTabUnselected(androidx.appcompat.app.ActionBar.Tab!, androidx.fragment.app.FragmentTransaction!);
+ }
+
+ public class ActionBarDrawerToggle implements androidx.drawerlayout.widget.DrawerLayout.DrawerListener {
+ ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, @StringRes int, @StringRes int);
+ ctor public ActionBarDrawerToggle(android.app.Activity!, androidx.drawerlayout.widget.DrawerLayout!, androidx.appcompat.widget.Toolbar!, @StringRes int, @StringRes int);
+ method public androidx.appcompat.graphics.drawable.DrawerArrowDrawable getDrawerArrowDrawable();
+ method public android.view.View.OnClickListener! getToolbarNavigationClickListener();
+ method public boolean isDrawerIndicatorEnabled();
+ method public boolean isDrawerSlideAnimationEnabled();
+ method public void onConfigurationChanged(android.content.res.Configuration!);
+ method public void onDrawerClosed(android.view.View!);
+ method public void onDrawerOpened(android.view.View!);
+ method public void onDrawerSlide(android.view.View!, float);
+ method public void onDrawerStateChanged(int);
+ method public boolean onOptionsItemSelected(android.view.MenuItem!);
+ method public void setDrawerArrowDrawable(androidx.appcompat.graphics.drawable.DrawerArrowDrawable);
+ method public void setDrawerIndicatorEnabled(boolean);
+ method public void setDrawerSlideAnimationEnabled(boolean);
+ method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable!);
+ method public void setHomeAsUpIndicator(int);
+ method public void setToolbarNavigationClickListener(android.view.View.OnClickListener!);
+ method public void syncState();
+ }
+
+ public static interface ActionBarDrawerToggle.Delegate {
+ method public android.content.Context! getActionBarThemedContext();
+ method public android.graphics.drawable.Drawable! getThemeUpIndicator();
+ method public boolean isNavigationVisible();
+ method public void setActionBarDescription(@StringRes int);
+ method public void setActionBarUpIndicator(android.graphics.drawable.Drawable!, @StringRes int);
+ }
+
+ public static interface ActionBarDrawerToggle.DelegateProvider {
+ method public androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
+ }
+
+ public class AlertDialog extends androidx.appcompat.app.AppCompatDialog implements android.content.DialogInterface {
+ ctor protected AlertDialog(android.content.Context);
+ ctor protected AlertDialog(android.content.Context, @StyleRes int);
+ ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener?);
+ method public android.widget.Button! getButton(int);
+ method public android.widget.ListView! getListView();
+ method public void setButton(int, CharSequence!, android.os.Message!);
+ method public void setButton(int, CharSequence!, android.content.DialogInterface.OnClickListener!);
+ method public void setButton(int, CharSequence!, android.graphics.drawable.Drawable!, android.content.DialogInterface.OnClickListener!);
+ method public void setCustomTitle(android.view.View!);
+ method public void setIcon(int);
+ method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setIconAttribute(int);
+ method public void setMessage(CharSequence!);
+ method public void setView(android.view.View!);
+ method public void setView(android.view.View!, int, int, int, int);
+ }
+
+ public static class AlertDialog.Builder {
+ ctor public AlertDialog.Builder(android.content.Context);
+ ctor public AlertDialog.Builder(android.content.Context, @StyleRes int);
+ method public androidx.appcompat.app.AlertDialog create();
+ method public android.content.Context getContext();
+ method public androidx.appcompat.app.AlertDialog.Builder! setAdapter(android.widget.ListAdapter!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setCancelable(boolean);
+ method public androidx.appcompat.app.AlertDialog.Builder! setCursor(android.database.Cursor!, android.content.DialogInterface.OnClickListener!, String!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setCustomTitle(android.view.View?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setIcon(@DrawableRes int);
+ method public androidx.appcompat.app.AlertDialog.Builder! setIcon(android.graphics.drawable.Drawable?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setIconAttribute(@AttrRes int);
+ method @Deprecated public androidx.appcompat.app.AlertDialog.Builder! setInverseBackgroundForced(boolean);
+ method public androidx.appcompat.app.AlertDialog.Builder! setItems(@ArrayRes int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setItems(CharSequence![]!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMessage(@StringRes int);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMessage(CharSequence?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(@ArrayRes int, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(CharSequence![]!, boolean[]!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setMultiChoiceItems(android.database.Cursor!, String!, String!, android.content.DialogInterface.OnMultiChoiceClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNegativeButtonIcon(android.graphics.drawable.Drawable!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setNeutralButtonIcon(android.graphics.drawable.Drawable!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setOnCancelListener(android.content.DialogInterface.OnCancelListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setOnDismissListener(android.content.DialogInterface.OnDismissListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setOnKeyListener(android.content.DialogInterface.OnKeyListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(@StringRes int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButton(CharSequence!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setPositiveButtonIcon(android.graphics.drawable.Drawable!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.appcompat.app.AlertDialog.Builder! setRecycleOnMeasureEnabled(boolean);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(@ArrayRes int, int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.database.Cursor!, int, String!, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(CharSequence![]!, int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setSingleChoiceItems(android.widget.ListAdapter!, int, android.content.DialogInterface.OnClickListener!);
+ method public androidx.appcompat.app.AlertDialog.Builder! setTitle(@StringRes int);
+ method public androidx.appcompat.app.AlertDialog.Builder! setTitle(CharSequence?);
+ method public androidx.appcompat.app.AlertDialog.Builder! setView(int);
+ method public androidx.appcompat.app.AlertDialog.Builder! setView(android.view.View!);
+ method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.appcompat.app.AlertDialog.Builder! setView(android.view.View!, int, int, int, int);
+ method public androidx.appcompat.app.AlertDialog! show();
+ }
+
+ public class AppCompatActivity extends androidx.fragment.app.FragmentActivity implements androidx.appcompat.app.ActionBarDrawerToggle.DelegateProvider androidx.appcompat.app.AppCompatCallback androidx.core.app.TaskStackBuilder.SupportParentable {
+ ctor public AppCompatActivity();
+ ctor @ContentView public AppCompatActivity(@LayoutRes int);
+ method public androidx.appcompat.app.AppCompatDelegate getDelegate();
+ method public androidx.appcompat.app.ActionBarDrawerToggle.Delegate? getDrawerToggleDelegate();
+ method public androidx.appcompat.app.ActionBar? getSupportActionBar();
+ method public android.content.Intent? getSupportParentActivityIntent();
+ method public void onCreateSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+ method protected void onLocalesChanged(androidx.core.os.LocaleListCompat);
+ method public final boolean onMenuItemSelected(int, android.view.MenuItem);
+ method protected void onNightModeChanged(@androidx.appcompat.app.AppCompatDelegate.NightMode int);
+ method public void onPrepareSupportNavigateUpTaskStack(androidx.core.app.TaskStackBuilder);
+ method @CallSuper public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode);
+ method @CallSuper public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode);
+ method @Deprecated public void onSupportContentChanged();
+ method public boolean onSupportNavigateUp();
+ method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+ method public void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
+ method @Deprecated public void setSupportProgress(int);
+ method @Deprecated public void setSupportProgressBarIndeterminate(boolean);
+ method @Deprecated public void setSupportProgressBarIndeterminateVisibility(boolean);
+ method @Deprecated public void setSupportProgressBarVisibility(boolean);
+ method public androidx.appcompat.view.ActionMode? startSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+ method public void supportInvalidateOptionsMenu();
+ method public void supportNavigateUpTo(android.content.Intent);
+ method public boolean supportRequestWindowFeature(int);
+ method public boolean supportShouldUpRecreateTask(android.content.Intent);
+ }
+
+ public interface AppCompatCallback {
+ method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
+ method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode!);
+ method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback!);
+ }
+
+ public abstract class AppCompatDelegate {
+ method public abstract void addContentView(android.view.View!, android.view.ViewGroup.LayoutParams!);
+ method public abstract boolean applyDayNight();
+ method @Deprecated public void attachBaseContext(android.content.Context!);
+ method @CallSuper public android.content.Context attachBaseContext2(android.content.Context);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.app.Dialog, androidx.appcompat.app.AppCompatCallback?);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.view.Window, androidx.appcompat.app.AppCompatCallback?);
+ method public static androidx.appcompat.app.AppCompatDelegate create(android.content.Context, android.app.Activity, androidx.appcompat.app.AppCompatCallback?);
+ method public abstract android.view.View! createView(android.view.View?, String!, android.content.Context, android.util.AttributeSet);
+ method public abstract <T extends android.view.View> T! findViewById(@IdRes int);
+ method @AnyThread public static androidx.core.os.LocaleListCompat getApplicationLocales();
+ method public android.content.Context? getContextForDelegate();
+ method @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();
+ method public abstract android.view.MenuInflater! getMenuInflater();
+ method public abstract androidx.appcompat.app.ActionBar? getSupportActionBar();
+ method public abstract boolean hasWindowFeature(int);
+ method public abstract void installViewFactory();
+ method public abstract void invalidateOptionsMenu();
+ method public static boolean isCompatVectorFromResourcesEnabled();
+ method public abstract boolean isHandleNativeActionModesEnabled();
+ method public abstract void onConfigurationChanged(android.content.res.Configuration!);
+ method public abstract void onCreate(android.os.Bundle!);
+ method public abstract void onDestroy();
+ method public abstract void onPostCreate(android.os.Bundle!);
+ method public abstract void onPostResume();
+ method public abstract void onSaveInstanceState(android.os.Bundle!);
+ method public abstract void onStart();
+ method public abstract void onStop();
+ method public abstract boolean requestWindowFeature(int);
+ method public static void setApplicationLocales(androidx.core.os.LocaleListCompat);
+ method public static void setCompatVectorFromResourcesEnabled(boolean);
+ method public abstract void setContentView(android.view.View!);
+ method public abstract void setContentView(@LayoutRes int);
+ method public abstract void setContentView(android.view.View!, android.view.ViewGroup.LayoutParams!);
+ method public static void setDefaultNightMode(@androidx.appcompat.app.AppCompatDelegate.NightMode int);
+ method public abstract void setHandleNativeActionModesEnabled(boolean);
+ method @RequiresApi(17) public abstract void setLocalNightMode(@androidx.appcompat.app.AppCompatDelegate.NightMode int);
+ method @CallSuper @RequiresApi(33) public void setOnBackInvokedDispatcher(android.window.OnBackInvokedDispatcher?);
+ method public abstract void setSupportActionBar(androidx.appcompat.widget.Toolbar?);
+ method public void setTheme(@StyleRes int);
+ method public abstract void setTitle(CharSequence?);
+ method public abstract androidx.appcompat.view.ActionMode? startSupportActionMode(androidx.appcompat.view.ActionMode.Callback);
+ field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+ field public static final int FEATURE_SUPPORT_ACTION_BAR = 108; // 0x6c
+ field public static final int FEATURE_SUPPORT_ACTION_BAR_OVERLAY = 109; // 0x6d
+ field @Deprecated public static final int MODE_NIGHT_AUTO = 0; // 0x0
+ field public static final int MODE_NIGHT_AUTO_BATTERY = 3; // 0x3
+ field @Deprecated public static final int MODE_NIGHT_AUTO_TIME = 0; // 0x0
+ field public static final int MODE_NIGHT_FOLLOW_SYSTEM = -1; // 0xffffffff
+ field public static final int MODE_NIGHT_NO = 1; // 0x1
+ field public static final int MODE_NIGHT_UNSPECIFIED = -100; // 0xffffff9c
+ field public static final int MODE_NIGHT_YES = 2; // 0x2
+ }
+
+ @IntDef({androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO, androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES, androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_TIME, androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM, androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_UNSPECIFIED, androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface AppCompatDelegate.NightMode {
+ }
+
+ public class AppCompatDialog extends androidx.activity.ComponentDialog implements androidx.appcompat.app.AppCompatCallback {
+ ctor public AppCompatDialog(android.content.Context);
+ ctor public AppCompatDialog(android.content.Context, int);
+ ctor protected AppCompatDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener?);
+ method public androidx.appcompat.app.AppCompatDelegate getDelegate();
+ method public androidx.appcompat.app.ActionBar! getSupportActionBar();
+ method public void onSupportActionModeFinished(androidx.appcompat.view.ActionMode!);
+ method public void onSupportActionModeStarted(androidx.appcompat.view.ActionMode!);
+ method public androidx.appcompat.view.ActionMode? onWindowStartingSupportActionMode(androidx.appcompat.view.ActionMode.Callback!);
+ method public boolean supportRequestWindowFeature(int);
+ }
+
+ public class AppCompatDialogFragment extends androidx.fragment.app.DialogFragment {
+ ctor public AppCompatDialogFragment();
+ ctor public AppCompatDialogFragment(@LayoutRes int);
+ }
+
+ public class AppCompatViewInflater {
+ ctor public AppCompatViewInflater();
+ method protected androidx.appcompat.widget.AppCompatAutoCompleteTextView createAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatButton createButton(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatCheckBox createCheckBox(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatCheckedTextView createCheckedTextView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatEditText createEditText(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatImageButton createImageButton(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatImageView createImageView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView createMultiAutoCompleteTextView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatRadioButton createRadioButton(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatRatingBar createRatingBar(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatSeekBar createSeekBar(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatSpinner createSpinner(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatTextView createTextView(android.content.Context!, android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.AppCompatToggleButton createToggleButton(android.content.Context!, android.util.AttributeSet!);
+ method public final android.view.View? createView(android.view.View?, String, android.content.Context, android.util.AttributeSet, boolean, boolean, boolean, boolean);
+ method protected android.view.View? createView(android.content.Context!, String!, android.util.AttributeSet!);
+ }
+
+ public final class AppLocalesMetadataHolderService extends android.app.Service {
+ ctor public AppLocalesMetadataHolderService();
+ method public static android.content.pm.ServiceInfo getServiceInfo(android.content.Context) throws android.content.pm.PackageManager.NameNotFoundException;
+ method public android.os.IBinder onBind(android.content.Intent);
+ }
+
+ @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!);
+ ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public WindowDecorActionBar(android.view.View!);
+ method public void addOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
+ method public void addTab(androidx.appcompat.app.ActionBar.Tab!);
+ method public void addTab(androidx.appcompat.app.ActionBar.Tab!, int);
+ method public void addTab(androidx.appcompat.app.ActionBar.Tab!, boolean);
+ method public void addTab(androidx.appcompat.app.ActionBar.Tab!, int, boolean);
+ method public void animateToMode(boolean);
+ method public void doHide(boolean);
+ method public void doShow(boolean);
+ method public void enableContentAnimations(boolean);
+ method public android.view.View! getCustomView();
+ method public int getDisplayOptions();
+ method public int getHeight();
+ method public int getNavigationItemCount();
+ method public int getNavigationMode();
+ method public int getSelectedNavigationIndex();
+ method public androidx.appcompat.app.ActionBar.Tab! getSelectedTab();
+ method public CharSequence! getSubtitle();
+ method public androidx.appcompat.app.ActionBar.Tab! getTabAt(int);
+ method public int getTabCount();
+ method public CharSequence! getTitle();
+ method public boolean hasIcon();
+ method public boolean hasLogo();
+ method public void hide();
+ method public void hideForSystem();
+ method public boolean isShowing();
+ method public androidx.appcompat.app.ActionBar.Tab! newTab();
+ method public void onContentScrollStarted();
+ method public void onContentScrollStopped();
+ method public void onWindowVisibilityChanged(int);
+ method public void removeAllTabs();
+ method public void removeOnMenuVisibilityListener(androidx.appcompat.app.ActionBar.OnMenuVisibilityListener!);
+ method public void removeTab(androidx.appcompat.app.ActionBar.Tab!);
+ method public void removeTabAt(int);
+ method public boolean requestFocus();
+ method public void selectTab(androidx.appcompat.app.ActionBar.Tab!);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+ method public void setCustomView(int);
+ method public void setCustomView(android.view.View!);
+ method public void setCustomView(android.view.View!, androidx.appcompat.app.ActionBar.LayoutParams!);
+ method public void setDisplayHomeAsUpEnabled(boolean);
+ method public void setDisplayOptions(int);
+ method public void setDisplayOptions(int, int);
+ method public void setDisplayShowCustomEnabled(boolean);
+ method public void setDisplayShowHomeEnabled(boolean);
+ method public void setDisplayShowTitleEnabled(boolean);
+ method public void setDisplayUseLogoEnabled(boolean);
+ method public void setIcon(int);
+ method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setListNavigationCallbacks(android.widget.SpinnerAdapter!, androidx.appcompat.app.ActionBar.OnNavigationListener!);
+ method public void setLogo(int);
+ method public void setLogo(android.graphics.drawable.Drawable!);
+ method public void setNavigationMode(int);
+ method public void setSelectedNavigationItem(int);
+ method public void setSubtitle(int);
+ method public void setSubtitle(CharSequence!);
+ method public void setTitle(int);
+ method public void setTitle(CharSequence!);
+ method public void show();
+ method public void showForSystem();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class WindowDecorActionBar.ActionModeImpl extends androidx.appcompat.view.ActionMode implements androidx.appcompat.view.menu.MenuBuilder.Callback {
+ ctor public WindowDecorActionBar.ActionModeImpl(android.content.Context!, androidx.appcompat.view.ActionMode.Callback!);
+ method public boolean dispatchOnCreate();
+ method public void finish();
+ method public android.view.View! getCustomView();
+ method public android.view.Menu! getMenu();
+ method public android.view.MenuInflater! getMenuInflater();
+ method public CharSequence! getSubtitle();
+ method public CharSequence! getTitle();
+ method public void invalidate();
+ method public void onCloseMenu(androidx.appcompat.view.menu.MenuBuilder!, boolean);
+ method public void onCloseSubMenu(androidx.appcompat.view.menu.SubMenuBuilder!);
+ method public boolean onMenuItemSelected(androidx.appcompat.view.menu.MenuBuilder, android.view.MenuItem);
+ method public void onMenuModeChange(androidx.appcompat.view.menu.MenuBuilder);
+ method public boolean onSubMenuSelected(androidx.appcompat.view.menu.SubMenuBuilder!);
+ method public void setCustomView(android.view.View!);
+ method public void setSubtitle(CharSequence!);
+ method public void setSubtitle(int);
+ method public void setTitle(CharSequence!);
+ method public void setTitle(int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class WindowDecorActionBar.TabImpl extends androidx.appcompat.app.ActionBar.Tab {
+ ctor public WindowDecorActionBar.TabImpl();
+ method public androidx.appcompat.app.ActionBar.TabListener! getCallback();
+ method public CharSequence! getContentDescription();
+ method public android.view.View! getCustomView();
+ method public android.graphics.drawable.Drawable! getIcon();
+ method public int getPosition();
+ method public Object! getTag();
+ method public CharSequence! getText();
+ method public void select();
+ method public androidx.appcompat.app.ActionBar.Tab! setContentDescription(int);
+ method public androidx.appcompat.app.ActionBar.Tab! setContentDescription(CharSequence!);
+ method public androidx.appcompat.app.ActionBar.Tab! setCustomView(android.view.View!);
+ method public androidx.appcompat.app.ActionBar.Tab! setCustomView(int);
+ method public androidx.appcompat.app.ActionBar.Tab! setIcon(android.graphics.drawable.Drawable!);
+ method public androidx.appcompat.app.ActionBar.Tab! setIcon(int);
+ method public void setPosition(int);
+ method public androidx.appcompat.app.ActionBar.Tab! setTabListener(androidx.appcompat.app.ActionBar.TabListener!);
+ method public androidx.appcompat.app.ActionBar.Tab! setTag(Object!);
+ method public androidx.appcompat.app.ActionBar.Tab! setText(CharSequence!);
+ method public androidx.appcompat.app.ActionBar.Tab! setText(int);
+ }
+
+}
+
+package androidx.appcompat.graphics.drawable {
+
+ public class DrawerArrowDrawable extends android.graphics.drawable.Drawable {
+ ctor public DrawerArrowDrawable(android.content.Context!);
+ method public void draw(android.graphics.Canvas!);
+ method public float getArrowHeadLength();
+ method public float getArrowShaftLength();
+ method public float getBarLength();
+ method public float getBarThickness();
+ method @ColorInt public int getColor();
+ method @androidx.appcompat.graphics.drawable.DrawerArrowDrawable.ArrowDirection public int getDirection();
+ method public float getGapSize();
+ method public int getOpacity();
+ method public final android.graphics.Paint! getPaint();
+ method @FloatRange(from=0.0, to=1.0) public float getProgress();
+ method public boolean isSpinEnabled();
+ method public void setAlpha(int);
+ method public void setArrowHeadLength(float);
+ method public void setArrowShaftLength(float);
+ method public void setBarLength(float);
+ method public void setBarThickness(float);
+ method public void setColor(@ColorInt int);
+ method public void setColorFilter(android.graphics.ColorFilter!);
+ method public void setDirection(@androidx.appcompat.graphics.drawable.DrawerArrowDrawable.ArrowDirection int);
+ method public void setGapSize(float);
+ method public void setProgress(@FloatRange(from=0.0, to=1.0) float);
+ method public void setSpinEnabled(boolean);
+ method public void setVerticalMirror(boolean);
+ field public static final int ARROW_DIRECTION_END = 3; // 0x3
+ field public static final int ARROW_DIRECTION_LEFT = 0; // 0x0
+ field public static final int ARROW_DIRECTION_RIGHT = 1; // 0x1
+ field public static final int ARROW_DIRECTION_START = 2; // 0x2
+ }
+
+ @IntDef({androidx.appcompat.graphics.drawable.DrawerArrowDrawable.ARROW_DIRECTION_LEFT, androidx.appcompat.graphics.drawable.DrawerArrowDrawable.ARROW_DIRECTION_RIGHT, androidx.appcompat.graphics.drawable.DrawerArrowDrawable.ARROW_DIRECTION_START, androidx.appcompat.graphics.drawable.DrawerArrowDrawable.ARROW_DIRECTION_END}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface DrawerArrowDrawable.ArrowDirection {
+ }
+
+}
+
+package androidx.appcompat.text {
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class AllCapsTransformationMethod implements android.text.method.TransformationMethod {
+ ctor public AllCapsTransformationMethod(android.content.Context!);
+ method public CharSequence! getTransformation(CharSequence!, android.view.View!);
+ method public void onFocusChanged(android.view.View!, CharSequence!, boolean, int, android.graphics.Rect!);
+ }
+
+}
+
+package androidx.appcompat.view {
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ActionBarPolicy {
+ method public boolean enableHomeButtonByDefault();
+ method public static androidx.appcompat.view.ActionBarPolicy! get(android.content.Context!);
+ method public int getEmbeddedMenuWidthLimit();
+ method public int getMaxActionButtons();
+ method public int getStackedTabMaxWidth();
+ method public int getTabContainerHeight();
+ method public boolean hasEmbeddedTabs();
+ method public boolean showsOverflowMenuButton();
+ }
+
+ public abstract class ActionMode {
+ ctor public ActionMode();
+ method public abstract void finish();
+ method public abstract android.view.View! getCustomView();
+ method public abstract android.view.Menu! getMenu();
+ method public abstract android.view.MenuInflater! getMenuInflater();
+ method public abstract CharSequence! getSubtitle();
+ method public Object! getTag();
+ method public abstract CharSequence! getTitle();
+ method public boolean getTitleOptionalHint();
+ method public abstract void invalidate();
+ method public boolean isTitleOptional();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isUiFocusable();
+ method public abstract void setCustomView(android.view.View!);
+ method public abstract void setSubtitle(CharSequence!);
+ method public abstract void setSubtitle(int);
+ method public void setTag(Object!);
+ method public abstract void setTitle(CharSequence!);
+ method public abstract void setTitle(int);
+ method public void setTitleOptionalHint(boolean);
+ }
+
+ public static interface ActionMode.Callback {
+ method public boolean onActionItemClicked(androidx.appcompat.view.ActionMode!, android.view.MenuItem!);
+ method public boolean onCreateActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
+ method public void onDestroyActionMode(androidx.appcompat.view.ActionMode!);
+ method public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
+ }
+
+ @Deprecated public interface CollapsibleActionView {
+ method @Deprecated public void onActionViewCollapsed();
+ method @Deprecated public void onActionViewExpanded();
+ }
+
+ public class ContextThemeWrapper extends android.content.ContextWrapper {
+ ctor public ContextThemeWrapper();
+ ctor public ContextThemeWrapper(android.content.Context!, @StyleRes int);
+ ctor public ContextThemeWrapper(android.content.Context!, android.content.res.Resources.Theme!);
+ method public void applyOverrideConfiguration(android.content.res.Configuration!);
+ method public int getThemeResId();
+ method protected void onApplyThemeResource(android.content.res.Resources.Theme!, int, boolean);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class StandaloneActionMode extends androidx.appcompat.view.ActionMode implements androidx.appcompat.view.menu.MenuBuilder.Callback {
+ ctor public StandaloneActionMode(android.content.Context!, androidx.appcompat.widget.ActionBarContextView!, androidx.appcompat.view.ActionMode.Callback!, boolean);
+ method public void finish();
+ method public android.view.View! getCustomView();
+ method public android.view.Menu! getMenu();
+ method public android.view.MenuInflater! getMenuInflater();
+ method public CharSequence! getSubtitle();
+ method public CharSequence! getTitle();
+ method public void invalidate();
+ method public void onCloseMenu(androidx.appcompat.view.menu.MenuBuilder!, boolean);
+ method public void onCloseSubMenu(androidx.appcompat.view.menu.SubMenuBuilder!);
+ method public boolean onMenuItemSelected(androidx.appcompat.view.menu.MenuBuilder, android.view.MenuItem);
+ method public void onMenuModeChange(androidx.appcompat.view.menu.MenuBuilder);
+ method public boolean onSubMenuSelected(androidx.appcompat.view.menu.SubMenuBuilder!);
+ method public void setCustomView(android.view.View!);
+ method public void setSubtitle(CharSequence!);
+ method public void setSubtitle(int);
+ method public void setTitle(CharSequence!);
+ method public void setTitle(int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SupportActionModeWrapper extends android.view.ActionMode {
+ ctor public SupportActionModeWrapper(android.content.Context!, androidx.appcompat.view.ActionMode!);
+ method public void finish();
+ method public android.view.View! getCustomView();
+ method public android.view.Menu! getMenu();
+ method public android.view.MenuInflater! getMenuInflater();
+ method public CharSequence! getSubtitle();
+ method public CharSequence! getTitle();
+ method public void invalidate();
+ method public void setCustomView(android.view.View!);
+ method public void setSubtitle(CharSequence!);
+ method public void setSubtitle(int);
+ method public void setTitle(CharSequence!);
+ method public void setTitle(int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class SupportActionModeWrapper.CallbackWrapper implements androidx.appcompat.view.ActionMode.Callback {
+ ctor public SupportActionModeWrapper.CallbackWrapper(android.content.Context!, android.view.ActionMode.Callback!);
+ method public android.view.ActionMode! getActionModeWrapper(androidx.appcompat.view.ActionMode!);
+ method public boolean onActionItemClicked(androidx.appcompat.view.ActionMode!, android.view.MenuItem!);
+ method public boolean onCreateActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
+ method public void onDestroyActionMode(androidx.appcompat.view.ActionMode!);
+ method public boolean onPrepareActionMode(androidx.appcompat.view.ActionMode!, android.view.Menu!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SupportMenuInflater extends android.view.MenuInflater {
+ ctor public SupportMenuInflater(android.content.Context!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ViewPropertyAnimatorCompatSet {
+ ctor public ViewPropertyAnimatorCompatSet();
+ method public void cancel();
+ method public androidx.appcompat.view.ViewPropertyAnimatorCompatSet! play(androidx.core.view.ViewPropertyAnimatorCompat!);
+ method public androidx.appcompat.view.ViewPropertyAnimatorCompatSet! playSequentially(androidx.core.view.ViewPropertyAnimatorCompat!, androidx.core.view.ViewPropertyAnimatorCompat!);
+ method public androidx.appcompat.view.ViewPropertyAnimatorCompatSet! setDuration(long);
+ method public androidx.appcompat.view.ViewPropertyAnimatorCompatSet! setInterpolator(android.view.animation.Interpolator!);
+ method public androidx.appcompat.view.ViewPropertyAnimatorCompatSet! setListener(androidx.core.view.ViewPropertyAnimatorListener!);
+ method public void start();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class WindowCallbackWrapper implements android.view.Window.Callback {
+ ctor public WindowCallbackWrapper(android.view.Window.Callback!);
+ method public boolean dispatchGenericMotionEvent(android.view.MotionEvent!);
+ method public boolean dispatchKeyEvent(android.view.KeyEvent!);
+ method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent!);
+ method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent!);
+ method public boolean dispatchTouchEvent(android.view.MotionEvent!);
+ method public boolean dispatchTrackballEvent(android.view.MotionEvent!);
+ method public final android.view.Window.Callback! getWrapped();
+ method public void onActionModeFinished(android.view.ActionMode!);
+ method public void onActionModeStarted(android.view.ActionMode!);
+ method public void onAttachedToWindow();
+ method public void onContentChanged();
+ method public boolean onCreatePanelMenu(int, android.view.Menu!);
+ method public android.view.View! onCreatePanelView(int);
+ method public void onDetachedFromWindow();
+ method public boolean onMenuItemSelected(int, android.view.MenuItem!);
+ method public boolean onMenuOpened(int, android.view.Menu!);
+ method public void onPanelClosed(int, android.view.Menu!);
+ method public boolean onPreparePanel(int, android.view.View!, android.view.Menu!);
+ method @RequiresApi(23) public boolean onSearchRequested(android.view.SearchEvent!);
+ method public boolean onSearchRequested();
+ method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams!);
+ method public void onWindowFocusChanged(boolean);
+ method public android.view.ActionMode! onWindowStartingActionMode(android.view.ActionMode.Callback!);
+ method @RequiresApi(23) public android.view.ActionMode! onWindowStartingActionMode(android.view.ActionMode.Callback!, int);
+ }
+
+}
+
+package androidx.appcompat.view.menu {
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ActionMenuItem implements androidx.core.internal.view.SupportMenuItem {
+ ctor public ActionMenuItem(android.content.Context!, int, int, int, int, CharSequence!);
+ method public boolean collapseActionView();
+ method public boolean expandActionView();
+ method public android.view.ActionProvider! getActionProvider();
+ method public android.view.View! getActionView();
+ method public char getAlphabeticShortcut();
+ method public int getGroupId();
+ method public android.graphics.drawable.Drawable! getIcon();
+ method public android.content.Intent! getIntent();
+ method public int getItemId();
+ method public android.view.ContextMenu.ContextMenuInfo! getMenuInfo();
+ method public char getNumericShortcut();
+ method public int getOrder();
+ method public android.view.SubMenu! getSubMenu();
+ method public androidx.core.view.ActionProvider! getSupportActionProvider();
+ method public CharSequence! getTitle();
+ method public CharSequence! getTitleCondensed();
+ method public boolean hasSubMenu();
+ method public boolean invoke();
+ method public boolean isActionViewExpanded();
+ method public boolean isCheckable();
+ method public boolean isChecked();
+ method public boolean isEnabled();
+ method public boolean isVisible();
+ method public boolean requiresActionButton();
+ method public boolean requiresOverflow();
+ method public android.view.MenuItem! setActionProvider(android.view.ActionProvider!);
+ method public androidx.core.internal.view.SupportMenuItem setActionView(android.view.View!);
+ method public androidx.core.internal.view.SupportMenuItem setActionView(int);
+ method public android.view.MenuItem! setAlphabeticShortcut(char);
+ method public android.view.MenuItem! setCheckable(boolean);
+ method public android.view.MenuItem! setChecked(boolean);
+ method public androidx.core.internal.view.SupportMenuItem setContentDescription(CharSequence!);
+ method public android.view.MenuItem! setEnabled(boolean);
+ method public androidx.appcompat.view.menu.ActionMenuItem! setExclusiveCheckable(boolean);
+ method public android.view.MenuItem! setIcon(android.graphics.drawable.Drawable!);
+ method public android.view.MenuItem! setIcon(int);
+ method public android.view.MenuItem! setIntent(android.content.Intent!);
+ method public android.view.MenuItem! setNumericShortcut(char);
+ method public android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem.OnActionExpandListener!);
+ method public android.view.MenuItem! setOnMenuItemClickListener(android.view.MenuItem.OnMenuItemClickListener!);
+ method public android.view.MenuItem! setShortcut(char, char);
+ method public void setShowAsAction(int);
+ method public androidx.core.internal.view.SupportMenuItem setShowAsActionFlags(int);
+ method public androidx.core.internal.view.SupportMenuItem setSupportActionProvider(androidx.core.view.ActionProvider!);
+ method public android.view.MenuItem! setTitle(CharSequence!);
+ method public android.view.MenuItem! setTitle(int);
+ method public android.view.MenuItem! setTitleCondensed(CharSequence!);
+ method public androidx.core.internal.view.SupportMenuItem setTooltipText(CharSequence!);
+ method public android.view.MenuItem! setVisible(boolean);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ActionMenuItemView extends androidx.appcompat.widget.AppCompatTextView implements androidx.appcompat.widget.ActionMenuView.ActionMenuChildView androidx.appcompat.view.menu.MenuView.ItemView android.view.View.OnClickListener {
+ ctor public ActionMenuItemView(android.content.Context!);
+ ctor public ActionMenuItemView(android.content.Context!, android.util.AttributeSet!);
+ ctor public ActionMenuItemView(android.content.Context!, android.util.AttributeSet!, int);
+ method public androidx.appcompat.view.menu.MenuItemImpl! getItemData();
+ method public boolean hasText();
+ method public void initialize(androidx.appcompat.view.menu.MenuItemImpl!, int);
+ method public boolean needsDividerAfter();
+ method public boolean needsDividerBefore();
+ method public void onClick(android.view.View!);
+ method public void onConfigurationChanged(android.content.res.Configuration!);
+ method public boolean prefersCondensedTitle();
+ method public void setCheckable(boolean);
+ method public void setChecked(boolean);
+ method public void setExpandedFormat(boolean);
+ method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setItemInvoker(androidx.appcompat.view.menu.MenuBuilder.ItemInvoker!);
+ method public void setPopupCallback(androidx.appcompat.view.menu.ActionMenuItemView.PopupCallback!);
+ method public void setShortcut(boolean, char);
+ method public void setTitle(CharSequence!);
+ method public boolean showsIcon();
+ }
+
+ public abstract static class ActionMenuItemView.PopupCallback {
+ ctor public ActionMenuItemView.PopupCallback();
+ method public abstract androidx.appcompat.view.menu.ShowableListMenu! getPopup();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class BaseMenuPresenter implements androidx.appcompat.view.menu.MenuPresenter {
+ ctor public BaseMenuPresenter(android.content.Context!, int, int);
+ method protected void addItemView(android.view.View!, int);
+ method public abstract void bindItemView(androidx.appcompat.view.menu.MenuItemImpl!, androidx.appcompat.view.menu.MenuView.ItemView!);
+ method public boolean collapseItemActionView(androidx.appcompat.view.menu.MenuBuilder!, androidx.appcompat.view.menu.MenuItemImpl!);
+ method public androidx.appcompat.view.menu.MenuView.ItemView! createItemView(android.view.ViewGroup!);
+ method public boolean expandItemActionView(androidx.appcompat.view.menu.MenuBuilder!, androidx.appcompat.view.menu.MenuItemImpl!);
+ method protected boolean filterLeftoverView(android.view.ViewGroup!, int);
+ method public boolean flagActionItems();
+ method public androidx.appcompat.view.menu.MenuPresenter.Callback! getCallback();
+ method public int getId();
+ method public android.view.View! getItemView(androidx.appcompat.view.menu.MenuItemImpl!, android.view.View!, android.view.ViewGroup!);
+ method public androidx.appcompat.view.menu.MenuView! getMenuView(android.view.ViewGroup!);
+ method public void initForMenu(android.content.Context!, androidx.appcompat.view.menu.MenuBuilder!);
+ method public void onCloseMenu(androidx.appcompat.view.menu.MenuBuilder!, boolean);
+ method public boolean onSubMenuSelected(androidx.appcompat.view.menu.SubMenuBuilder!);
+ method public void setCallback(androidx.appcompat.view.menu.MenuPresenter.Callback!);
+ method public void setId(int);
+ method public boolean shouldIncludeItem(int, androidx.appcompat.view.menu.MenuItemImpl!);
+ method public void updateMenuView(boolean);
+ field protected android.content.Context! mContext;
+ field protected android.view.LayoutInflater! mInflater;
+ field protected androidx.appcompat.view.menu.MenuBuilder! mMenu;
+ field protected androidx.appcompat.view.menu.MenuView! mMenuView;
+ field protected android.content.Context! mSystemContext;
+ field protected android.view.LayoutInflater! mSystemInflater;
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ExpandedMenuView extends android.widget.ListView implements android.widget.AdapterView.OnItemClickListener androidx.appcompat.view.menu.MenuBuilder.ItemInvoker androidx.appcompat.view.menu.MenuView {
+ ctor public ExpandedMenuView(android.content.Context!, android.util.AttributeSet!);
+ ctor public ExpandedMenuView(android.content.Context!, android.util.AttributeSet!, int);
+ method public int getWindowAnimations();
+ method public void initialize(androidx.appcompat.view.menu.MenuBuilder!);
+ method public boolean invokeItem(androidx.appcompat.view.menu.MenuItemImpl!);
+ method public void onItemClick(android.widget.AdapterView!, android.view.View!, int, long);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ListMenuItemView extends android.widget.LinearLayout implements android.widget.AbsListView.SelectionBoundsAdjuster androidx.appcompat.view.menu.MenuView.ItemView {
+ ctor public ListMenuItemView(android.content.Context!, android.util.AttributeSet!);
+ ctor public ListMenuItemView(android.content.Context!, android.util.AttributeSet!, int);
+ method public void adjustListItemSelectionBounds(android.graphics.Rect!);
+ method public androidx.appcompat.view.menu.MenuItemImpl! getItemData();
+ method public void initialize(androidx.appcompat.view.menu.MenuItemImpl!, int);
+ method public boolean prefersCondensedTitle();
+ method public void setCheckable(boolean);
+ method public void setChecked(boolean);
+ method public void setForceShowIcon(boolean);
+ method public void setGroupDividerEnabled(boolean);
+ method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setShortcut(boolean, char);
+ method public void setTitle(CharSequence!);
+ method public boolean showsIcon();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ListMenuPresenter implements android.widget.AdapterView.OnItemClickListener androidx.appcompat.view.menu.MenuPresenter {
+ ctor public ListMenuPresenter(android.content.Context!, int);
+ ctor public ListMenuPresenter(int, int);
+ method public boolean collapseItemActionView(androidx.appcompat.view.menu.MenuBuilder!, androidx.appcompat.view.menu.MenuItemImpl!);
+ method public boolean expandItemActionView(androidx.appcompat.view.menu.MenuBuilder!, androidx.appcompat.view.menu.MenuItemImpl!);
+ method public boolean flagActionItems();
+ method public android.widget.ListAdapter! getAdapter();
+ method public int getId();
+ method public androidx.appcompat.view.menu.MenuView! getMenuView(android.view.ViewGroup!);
+ method public void initForMenu(android.content.Context!, androidx.appcompat.view.menu.MenuBuilder!);
+ method public void onCloseMenu(androidx.appcompat.view.menu.MenuBuilder!, boolean);
+ method public void onItemClick(android.widget.AdapterView<?>!, android.view.View!, int, long);
+ method public void onRestoreInstanceState(android.os.Parcelable!);
+ method public android.os.Parcelable! onSaveInstanceState();
+ method public boolean onSubMenuSelected(androidx.appcompat.view.menu.SubMenuBuilder!);
+ method public void restoreHierarchyState(android.os.Bundle!);
+ method public void saveHierarchyState(android.os.Bundle!);
+ method public void setCallback(androidx.appcompat.view.menu.MenuPresenter.Callback!);
+ method public void setId(int);
+ method public void setItemIndexOffset(int);
+ method public void updateMenuView(boolean);
+ field public static final String VIEWS_TAG = "android:menu:list";
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MenuAdapter extends android.widget.BaseAdapter {
+ ctor public MenuAdapter(androidx.appcompat.view.menu.MenuBuilder!, android.view.LayoutInflater!, boolean, int);
+ method public androidx.appcompat.view.menu.MenuBuilder! getAdapterMenu();
+ method public int getCount();
+ method public boolean getForceShowIcon();
+ method public androidx.appcompat.view.menu.MenuItemImpl! getItem(int);
+ method public long getItemId(int);
+ method public android.view.View! getView(int, android.view.View!, android.view.ViewGroup!);
+ method public void setForceShowIcon(boolean);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MenuBuilder implements androidx.core.internal.view.SupportMenu {
+ ctor public MenuBuilder(android.content.Context!);
+ method public android.view.MenuItem! add(CharSequence!);
+ method public android.view.MenuItem! add(int);
+ method public android.view.MenuItem! add(int, int, int, CharSequence!);
+ method public android.view.MenuItem! add(int, int, int, int);
+ method public int addIntentOptions(int, int, int, android.content.ComponentName!, android.content.Intent![]!, android.content.Intent!, int, android.view.MenuItem![]!);
+ method protected android.view.MenuItem! addInternal(int, int, int, CharSequence!);
+ method public void addMenuPresenter(androidx.appcompat.view.menu.MenuPresenter!);
+ method public void addMenuPresenter(androidx.appcompat.view.menu.MenuPresenter!, android.content.Context!);
+ method public android.view.SubMenu! addSubMenu(CharSequence!);
+ method public android.view.SubMenu! addSubMenu(int);
+ method public android.view.SubMenu! addSubMenu(int, int, int, CharSequence!);
+ method public android.view.SubMenu! addSubMenu(int, int, int, int);
+ method public void changeMenuMode();
+ method public void clear();
+ method public void clearAll();
+ method public void clearHeader();
+ method public final void close(boolean);
+ method public void close();
+ method public boolean collapseItemActionView(androidx.appcompat.view.menu.MenuItemImpl!);
+ method public boolean expandItemActionView(androidx.appcompat.view.menu.MenuItemImpl!);
+ method public int findGroupIndex(int);
+ method public int findGroupIndex(int, int);
+ method public android.view.MenuItem! findItem(int);
+ method public int findItemIndex(int);
+ method public void flagActionItems();
+ method public java.util.ArrayList<androidx.appcompat.view.menu.MenuItemImpl!>! getActionItems();
+ method protected String! getActionViewStatesKey();
+ method public android.content.Context! getContext();
+ method public androidx.appcompat.view.menu.MenuItemImpl! getExpandedItem();
+ method public android.graphics.drawable.Drawable! getHeaderIcon();
+ method public CharSequence! getHeaderTitle();
+ method public android.view.View! getHeaderView();
+ method public android.view.MenuItem! getItem(int);
+ method public java.util.ArrayList<androidx.appcompat.view.menu.MenuItemImpl!>! getNonActionItems();
+ method public androidx.appcompat.view.menu.MenuBuilder! getRootMenu();
+ method public java.util.ArrayList<androidx.appcompat.view.menu.MenuItemImpl!> getVisibleItems();
+ method public boolean hasVisibleItems();
+ method public boolean isGroupDividerEnabled();
+ method public boolean isShortcutKey(int, android.view.KeyEvent!);
+ method public boolean isShortcutsVisible();
+ method public void onItemsChanged(boolean);
+ method public boolean performIdentifierAction(int, int);
+ method public boolean performItemAction(android.view.MenuItem!, int);
+ method public boolean performItemAction(android.view.MenuItem!, androidx.appcompat.view.menu.MenuPresenter!, int);
+ method public boolean performShortcut(int, android.view.KeyEvent!, int);
+ method public void removeGroup(int);
+ method public void removeItem(int);
+ method public void removeItemAt(int);
+ method public void removeMenuPresenter(androidx.appcompat.view.menu.MenuPresenter!);
+ method public void restoreActionViewStates(android.os.Bundle!);
+ method public void restorePresenterStates(android.os.Bundle!);
+ method public void saveActionViewStates(android.os.Bundle!);
+ method public void savePresenterStates(android.os.Bundle!);
+ method public void setCallback(androidx.appcompat.view.menu.MenuBuilder.Callback!);
+ method public void setCurrentMenuInfo(android.view.ContextMenu.ContextMenuInfo!);
+ method public androidx.appcompat.view.menu.MenuBuilder! setDefaultShowAsAction(int);
+ method public void setGroupCheckable(int, boolean, boolean);
+ method public void setGroupEnabled(int, boolean);
+ method public void setGroupVisible(int, boolean);
+ method protected androidx.appcompat.view.menu.MenuBuilder! setHeaderIconInt(android.graphics.drawable.Drawable!);
+ method protected androidx.appcompat.view.menu.MenuBuilder! setHeaderIconInt(int);
+ method protected androidx.appcompat.view.menu.MenuBuilder! setHeaderTitleInt(CharSequence!);
+ method protected androidx.appcompat.view.menu.MenuBuilder! setHeaderTitleInt(int);
+ method protected androidx.appcompat.view.menu.MenuBuilder! setHeaderViewInt(android.view.View!);
+ method public void setOptionalIconsVisible(boolean);
+ method public void setOverrideVisibleItems(boolean);
+ method public void setQwertyMode(boolean);
+ method public void setShortcutsVisible(boolean);
+ method public int size();
+ method public void startDispatchingItemsChanged();
+ method public void stopDispatchingItemsChanged();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface MenuBuilder.Callback {
+ method public boolean onMenuItemSelected(androidx.appcompat.view.menu.MenuBuilder, android.view.MenuItem);
+ method public void onMenuModeChange(androidx.appcompat.view.menu.MenuBuilder);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface MenuBuilder.ItemInvoker {
+ method public boolean invokeItem(androidx.appcompat.view.menu.MenuItemImpl!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class MenuItemImpl implements androidx.core.internal.view.SupportMenuItem {
+ method public void actionFormatChanged();
+ method public boolean collapseActionView();
+ method public boolean expandActionView();
+ method public android.view.ActionProvider! getActionProvider();
+ method public android.view.View! getActionView();
+ method public char getAlphabeticShortcut();
+ method public int getGroupId();
+ method public android.graphics.drawable.Drawable! getIcon();
+ method public android.content.Intent! getIntent();
+ method public int getItemId();
+ method public android.view.ContextMenu.ContextMenuInfo! getMenuInfo();
+ method public char getNumericShortcut();
+ method public int getOrder();
+ method public int getOrdering();
+ method public android.view.SubMenu! getSubMenu();
+ method public androidx.core.view.ActionProvider! getSupportActionProvider();
+ method public CharSequence! getTitle();
+ method public CharSequence! getTitleCondensed();
+ method public boolean hasCollapsibleActionView();
+ method public boolean hasSubMenu();
+ method public boolean invoke();
+ method public boolean isActionButton();
+ method public boolean isActionViewExpanded();
+ method public boolean isCheckable();
+ method public boolean isChecked();
+ method public boolean isEnabled();
+ method public boolean isExclusiveCheckable();
+ method public boolean isVisible();
+ method public boolean requestsActionButton();
+ method public boolean requiresActionButton();
+ method public boolean requiresOverflow();
+ method public android.view.MenuItem! setActionProvider(android.view.ActionProvider!);
+ method public androidx.core.internal.view.SupportMenuItem setActionView(android.view.View!);
+ method public androidx.core.internal.view.SupportMenuItem setActionView(int);
+ method public void setActionViewExpanded(boolean);
+ method public android.view.MenuItem! setAlphabeticShortcut(char);
+ method public android.view.MenuItem! setCallback(Runnable!);
+ method public android.view.MenuItem! setCheckable(boolean);
+ method public android.view.MenuItem! setChecked(boolean);
+ method public androidx.core.internal.view.SupportMenuItem setContentDescription(CharSequence!);
+ method public android.view.MenuItem! setEnabled(boolean);
+ method public void setExclusiveCheckable(boolean);
+ method public android.view.MenuItem! setIcon(android.graphics.drawable.Drawable!);
+ method public android.view.MenuItem! setIcon(int);
+ method public android.view.MenuItem! setIntent(android.content.Intent!);
+ method public void setIsActionButton(boolean);
+ method public android.view.MenuItem! setNumericShortcut(char);
+ method public android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem.OnActionExpandListener!);
+ method public android.view.MenuItem! setOnMenuItemClickListener(android.view.MenuItem.OnMenuItemClickListener!);
+ method public android.view.MenuItem! setShortcut(char, char);
+ method public void setShowAsAction(int);
+ method public androidx.core.internal.view.SupportMenuItem setShowAsActionFlags(int);
+ method public void setSubMenu(androidx.appcompat.view.menu.SubMenuBuilder!);
+ method public androidx.core.internal.view.SupportMenuItem setSupportActionProvider(androidx.core.view.ActionProvider!);
+ method public android.view.MenuItem! setTitle(CharSequence!);
+ method public android.view.MenuItem! setTitle(int);
+ method public android.view.MenuItem! setTitleCondensed(CharSequence!);
+ method public androidx.core.internal.view.SupportMenuItem setTooltipText(CharSequence!);
+ method public android.view.MenuItem! setVisible(boolean);
+ method public boolean shouldShowIcon();
+ method public boolean showsTextAsAction();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MenuItemWrapperICS implements android.view.MenuItem {
+ ctor public MenuItemWrapperICS(android.content.Context!, androidx.core.internal.view.SupportMenuItem!);
+ method public boolean collapseActionView();
+ method public boolean expandActionView();
+ method public android.view.ActionProvider! getActionProvider();
+ method public android.view.View! getActionView();
+ method public char getAlphabeticShortcut();
+ method public int getGroupId();
+ method public android.graphics.drawable.Drawable! getIcon();
+ method public android.content.Intent! getIntent();
+ method public int getItemId();
+ method public android.view.ContextMenu.ContextMenuInfo! getMenuInfo();
+ method public char getNumericShortcut();
+ method public int getOrder();
+ method public android.view.SubMenu! getSubMenu();
+ method public CharSequence! getTitle();
+ method public CharSequence! getTitleCondensed();
+ method public boolean hasSubMenu();
+ method public boolean isActionViewExpanded();
+ method public boolean isCheckable();
+ method public boolean isChecked();
+ method public boolean isEnabled();
+ method public boolean isVisible();
+ method public android.view.MenuItem! setActionProvider(android.view.ActionProvider!);
+ method public android.view.MenuItem! setActionView(android.view.View!);
+ method public android.view.MenuItem! setActionView(int);
+ method public android.view.MenuItem! setAlphabeticShortcut(char);
+ method public android.view.MenuItem! setCheckable(boolean);
+ method public android.view.MenuItem! setChecked(boolean);
+ method public android.view.MenuItem! setEnabled(boolean);
+ method public void setExclusiveCheckable(boolean);
+ method public android.view.MenuItem! setIcon(android.graphics.drawable.Drawable!);
+ method public android.view.MenuItem! setIcon(int);
+ method public android.view.MenuItem! setIntent(android.content.Intent!);
+ method public android.view.MenuItem! setNumericShortcut(char);
+ method public android.view.MenuItem! setOnActionExpandListener(android.view.MenuItem.OnActionExpandListener!);
+ method public android.view.MenuItem! setOnMenuItemClickListener(android.view.MenuItem.OnMenuItemClickListener!);
+ method public android.view.MenuItem! setShortcut(char, char);
+ method public void setShowAsAction(int);
+ method public android.view.MenuItem! setShowAsActionFlags(int);
+ method public android.view.MenuItem! setTitle(CharSequence!);
+ method public android.view.MenuItem! setTitle(int);
+ method public android.view.MenuItem! setTitleCondensed(CharSequence!);
+ method public android.view.MenuItem! setVisible(boolean);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MenuPopupHelper {
+ ctor public MenuPopupHelper(android.content.Context, androidx.appcompat.view.menu.MenuBuilder);
+ ctor public MenuPopupHelper(android.content.Context, androidx.appcompat.view.menu.MenuBuilder, android.view.View);
+ ctor public MenuPopupHelper(android.content.Context, androidx.appcompat.view.menu.MenuBuilder, android.view.View, boolean, @AttrRes int);
+ ctor public MenuPopupHelper(android.content.Context, androidx.appcompat.view.menu.MenuBuilder, android.view.View, boolean, @AttrRes int, @StyleRes int);
+ method public void dismiss();
+ method public int getGravity();
+ method public android.widget.ListView! getListView();
+ method public boolean isShowing();
+ method protected void onDismiss();
+ method public void setAnchorView(android.view.View);
+ method public void setForceShowIcon(boolean);
+ method public void setGravity(int);
+ method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener?);
+ method public void setPresenterCallback(androidx.appcompat.view.menu.MenuPresenter.Callback?);
+ method public void show();
+ method public void show(int, int);
+ method public boolean tryShow();
+ method public boolean tryShow(int, int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface MenuPresenter {
+ method public boolean collapseItemActionView(androidx.appcompat.view.menu.MenuBuilder!, androidx.appcompat.view.menu.MenuItemImpl!);
+ method public boolean expandItemActionView(androidx.appcompat.view.menu.MenuBuilder!, androidx.appcompat.view.menu.MenuItemImpl!);
+ method public boolean flagActionItems();
+ method public int getId();
+ method public androidx.appcompat.view.menu.MenuView! getMenuView(android.view.ViewGroup!);
+ method public void initForMenu(android.content.Context!, androidx.appcompat.view.menu.MenuBuilder!);
+ method public void onCloseMenu(androidx.appcompat.view.menu.MenuBuilder!, boolean);
+ method public void onRestoreInstanceState(android.os.Parcelable!);
+ method public android.os.Parcelable! onSaveInstanceState();
+ method public boolean onSubMenuSelected(androidx.appcompat.view.menu.SubMenuBuilder!);
+ method public void setCallback(androidx.appcompat.view.menu.MenuPresenter.Callback!);
+ method public void updateMenuView(boolean);
+ }
+
+ public static interface MenuPresenter.Callback {
+ method public void onCloseMenu(androidx.appcompat.view.menu.MenuBuilder, boolean);
+ method public boolean onOpenSubMenu(androidx.appcompat.view.menu.MenuBuilder);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface MenuView {
+ method public int getWindowAnimations();
+ method public void initialize(androidx.appcompat.view.menu.MenuBuilder!);
+ }
+
+ public static interface MenuView.ItemView {
+ method public androidx.appcompat.view.menu.MenuItemImpl! getItemData();
+ method public void initialize(androidx.appcompat.view.menu.MenuItemImpl!, int);
+ method public boolean prefersCondensedTitle();
+ method public void setCheckable(boolean);
+ method public void setChecked(boolean);
+ method public void setEnabled(boolean);
+ method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setShortcut(boolean, char);
+ method public void setTitle(CharSequence!);
+ method public boolean showsIcon();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MenuWrapperICS implements android.view.Menu {
+ ctor public MenuWrapperICS(android.content.Context!, androidx.core.internal.view.SupportMenu!);
+ method public android.view.MenuItem! add(CharSequence!);
+ method public android.view.MenuItem! add(int);
+ method public android.view.MenuItem! add(int, int, int, CharSequence!);
+ method public android.view.MenuItem! add(int, int, int, int);
+ method public int addIntentOptions(int, int, int, android.content.ComponentName!, android.content.Intent![]!, android.content.Intent!, int, android.view.MenuItem![]!);
+ method public android.view.SubMenu! addSubMenu(CharSequence!);
+ method public android.view.SubMenu! addSubMenu(int);
+ method public android.view.SubMenu! addSubMenu(int, int, int, CharSequence!);
+ method public android.view.SubMenu! addSubMenu(int, int, int, int);
+ method public void clear();
+ method public void close();
+ method public android.view.MenuItem! findItem(int);
+ method public android.view.MenuItem! getItem(int);
+ method public boolean hasVisibleItems();
+ method public boolean isShortcutKey(int, android.view.KeyEvent!);
+ method public boolean performIdentifierAction(int, int);
+ method public boolean performShortcut(int, android.view.KeyEvent!, int);
+ method public void removeGroup(int);
+ method public void removeItem(int);
+ method public void setGroupCheckable(int, boolean, boolean);
+ method public void setGroupEnabled(int, boolean);
+ method public void setGroupVisible(int, boolean);
+ method public void setQwertyMode(boolean);
+ method public int size();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface ShowableListMenu {
+ method public void dismiss();
+ method public android.widget.ListView! getListView();
+ method public boolean isShowing();
+ method public void show();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SubMenuBuilder extends androidx.appcompat.view.menu.MenuBuilder implements android.view.SubMenu {
+ ctor public SubMenuBuilder(android.content.Context!, androidx.appcompat.view.menu.MenuBuilder!, androidx.appcompat.view.menu.MenuItemImpl!);
+ method public String! getActionViewStatesKey();
+ method public android.view.MenuItem! getItem();
+ method public android.view.Menu! getParentMenu();
+ method public boolean isQwertyMode();
+ method public android.view.SubMenu! setHeaderIcon(android.graphics.drawable.Drawable!);
+ method public android.view.SubMenu! setHeaderIcon(int);
+ method public android.view.SubMenu! setHeaderTitle(CharSequence!);
+ method public android.view.SubMenu! setHeaderTitle(int);
+ method public android.view.SubMenu! setHeaderView(android.view.View!);
+ method public android.view.SubMenu! setIcon(android.graphics.drawable.Drawable!);
+ method public android.view.SubMenu! setIcon(int);
+ }
+
+}
+
+package androidx.appcompat.widget {
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ActionBarContainer extends android.widget.FrameLayout {
+ ctor public ActionBarContainer(android.content.Context!);
+ ctor public ActionBarContainer(android.content.Context!, android.util.AttributeSet!);
+ method public android.view.View! getTabContainer();
+ method public void onFinishInflate();
+ method public void onLayout(boolean, int, int, int, int);
+ method public void onMeasure(int, int);
+ method public void setPrimaryBackground(android.graphics.drawable.Drawable!);
+ method public void setSplitBackground(android.graphics.drawable.Drawable!);
+ method public void setStackedBackground(android.graphics.drawable.Drawable!);
+ method public void setTabContainer(androidx.appcompat.widget.ScrollingTabContainerView!);
+ method public void setTransitioning(boolean);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ActionBarContextView extends android.view.ViewGroup {
+ ctor public ActionBarContextView(android.content.Context);
+ ctor public ActionBarContextView(android.content.Context, android.util.AttributeSet?);
+ ctor public ActionBarContextView(android.content.Context, android.util.AttributeSet?, int);
+ method public void animateToVisibility(int);
+ method public boolean canShowOverflowMenu();
+ method public void closeMode();
+ method public void dismissPopupMenus();
+ method public int getAnimatedVisibility();
+ method public int getContentHeight();
+ method public CharSequence! getSubtitle();
+ method public CharSequence! getTitle();
+ method public boolean hideOverflowMenu();
+ method public void initForMode(androidx.appcompat.view.ActionMode!);
+ method public boolean isOverflowMenuShowPending();
+ method public boolean isOverflowMenuShowing();
+ method public boolean isOverflowReserved();
+ method public boolean isTitleOptional();
+ method public void killMode();
+ method public void onDetachedFromWindow();
+ method public void postShowOverflowMenu();
+ method public void setContentHeight(int);
+ method public void setCustomView(android.view.View!);
+ method public void setSubtitle(CharSequence!);
+ method public void setTitle(CharSequence!);
+ method public void setTitleOptional(boolean);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setupAnimatorToVisibility(int, long);
+ method public boolean showOverflowMenu();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ActionBarOverlayLayout extends android.view.ViewGroup implements androidx.appcompat.widget.DecorContentParent androidx.core.view.NestedScrollingParent androidx.core.view.NestedScrollingParent2 androidx.core.view.NestedScrollingParent3 {
+ ctor public ActionBarOverlayLayout(android.content.Context);
+ ctor public ActionBarOverlayLayout(android.content.Context, android.util.AttributeSet?);
+ method public boolean canShowOverflowMenu();
+ method public void dismissPopups();
+ method protected boolean fitSystemWindows(android.graphics.Rect!);
+ method protected androidx.appcompat.widget.ActionBarOverlayLayout.LayoutParams! generateDefaultLayoutParams();
+ method public androidx.appcompat.widget.ActionBarOverlayLayout.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+ method public int getActionBarHideOffset();
+ method public CharSequence! getTitle();
+ method public boolean hasIcon();
+ method public boolean hasLogo();
+ method public boolean hideOverflowMenu();
+ method public void initFeature(int);
+ method public boolean isHideOnContentScrollEnabled();
+ method public boolean isInOverlayMode();
+ method public boolean isOverflowMenuShowPending();
+ method public boolean isOverflowMenuShowing();
+ method public void onNestedPreScroll(android.view.View!, int, int, int[]!, int);
+ method public void onNestedScroll(android.view.View!, int, int, int, int, int, int[]!);
+ method public void onNestedScroll(android.view.View!, int, int, int, int, int);
+ method public void onNestedScrollAccepted(android.view.View!, android.view.View!, int, int);
+ method public boolean onStartNestedScroll(android.view.View!, android.view.View!, int, int);
+ method public void onStopNestedScroll(android.view.View!, int);
+ method public void restoreToolbarHierarchyState(android.util.SparseArray<android.os.Parcelable!>!);
+ method public void saveToolbarHierarchyState(android.util.SparseArray<android.os.Parcelable!>!);
+ method public void setActionBarHideOffset(int);
+ method public void setActionBarVisibilityCallback(androidx.appcompat.widget.ActionBarOverlayLayout.ActionBarVisibilityCallback!);
+ method public void setHasNonEmbeddedTabs(boolean);
+ method public void setHideOnContentScrollEnabled(boolean);
+ method public void setIcon(int);
+ method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setLogo(int);
+ method public void setMenu(android.view.Menu!, androidx.appcompat.view.menu.MenuPresenter.Callback!);
+ method public void setMenuPrepared();
+ method public void setOverlayMode(boolean);
+ method public void setShowingForActionMode(boolean);
+ method public void setUiOptions(int);
+ method public void setWindowCallback(android.view.Window.Callback!);
+ method public void setWindowTitle(CharSequence!);
+ method public boolean showOverflowMenu();
+ }
+
+ public static interface ActionBarOverlayLayout.ActionBarVisibilityCallback {
+ method public void enableContentAnimations(boolean);
+ method public void hideForSystem();
+ method public void onContentScrollStarted();
+ method public void onContentScrollStopped();
+ method public void onWindowVisibilityChanged(int);
+ method public void showForSystem();
+ }
+
+ public static class ActionBarOverlayLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public ActionBarOverlayLayout.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public ActionBarOverlayLayout.LayoutParams(int, int);
+ ctor public ActionBarOverlayLayout.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public ActionBarOverlayLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ }
+
+ public class ActionMenuView extends androidx.appcompat.widget.LinearLayoutCompat implements androidx.appcompat.view.menu.MenuBuilder.ItemInvoker androidx.appcompat.view.menu.MenuView {
+ ctor public ActionMenuView(android.content.Context);
+ ctor public ActionMenuView(android.content.Context, android.util.AttributeSet?);
+ method public void dismissPopupMenus();
+ method protected androidx.appcompat.widget.ActionMenuView.LayoutParams! generateDefaultLayoutParams();
+ method public androidx.appcompat.widget.ActionMenuView.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.ActionMenuView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.appcompat.widget.ActionMenuView.LayoutParams! generateOverflowButtonLayoutParams();
+ method public android.view.Menu! getMenu();
+ method public android.graphics.drawable.Drawable? getOverflowIcon();
+ method public int getPopupTheme();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getWindowAnimations();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) protected boolean hasSupportDividerBeforeChildAt(int);
+ method public boolean hideOverflowMenu();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void initialize(androidx.appcompat.view.menu.MenuBuilder!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean invokeItem(androidx.appcompat.view.menu.MenuItemImpl!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isOverflowMenuShowPending();
+ method public boolean isOverflowMenuShowing();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isOverflowReserved();
+ method public void onConfigurationChanged(android.content.res.Configuration!);
+ method public void onDetachedFromWindow();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.appcompat.view.menu.MenuBuilder! peekMenu();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setExpandedActionViewsExclusive(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setMenuCallbacks(androidx.appcompat.view.menu.MenuPresenter.Callback!, androidx.appcompat.view.menu.MenuBuilder.Callback!);
+ method public void setOnMenuItemClickListener(androidx.appcompat.widget.ActionMenuView.OnMenuItemClickListener!);
+ method public void setOverflowIcon(android.graphics.drawable.Drawable?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setOverflowReserved(boolean);
+ method public void setPopupTheme(@StyleRes int);
+ method public boolean showOverflowMenu();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static interface ActionMenuView.ActionMenuChildView {
+ method public boolean needsDividerAfter();
+ method public boolean needsDividerBefore();
+ }
+
+ public static class ActionMenuView.LayoutParams extends androidx.appcompat.widget.LinearLayoutCompat.LayoutParams {
+ ctor public ActionMenuView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public ActionMenuView.LayoutParams(androidx.appcompat.widget.ActionMenuView.LayoutParams!);
+ ctor public ActionMenuView.LayoutParams(int, int);
+ field public int cellsUsed;
+ field public boolean expandable;
+ field public int extraPixels;
+ field public boolean isOverflowButton;
+ field public boolean preventEdgeOffset;
+ }
+
+ public static interface ActionMenuView.OnMenuItemClickListener {
+ method public boolean onMenuItemClick(android.view.MenuItem!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ActivityChooserView extends android.view.ViewGroup {
+ ctor public ActivityChooserView(android.content.Context);
+ ctor public ActivityChooserView(android.content.Context, android.util.AttributeSet?);
+ ctor public ActivityChooserView(android.content.Context, android.util.AttributeSet?, int);
+ method public boolean dismissPopup();
+ method public boolean isShowingPopup();
+ method public void setDefaultActionButtonContentDescription(int);
+ method public void setExpandActivityOverflowButtonContentDescription(int);
+ method public void setExpandActivityOverflowButtonDrawable(android.graphics.drawable.Drawable!);
+ method public void setInitialActivityCount(int);
+ method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setProvider(androidx.core.view.ActionProvider!);
+ method public boolean showPopup();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class ActivityChooserView.InnerLayout extends android.widget.LinearLayout {
+ ctor public ActivityChooserView.InnerLayout(android.content.Context!, android.util.AttributeSet!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class AlertDialogLayout extends androidx.appcompat.widget.LinearLayoutCompat {
+ ctor public AlertDialogLayout(android.content.Context?);
+ ctor public AlertDialogLayout(android.content.Context?, android.util.AttributeSet?);
+ }
+
+ @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatAutoCompleteTextView(android.content.Context);
+ ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ }
+
+ @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatButton extends android.widget.Button implements androidx.core.widget.AutoSizeableTextView androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatButton(android.content.Context);
+ ctor public AppCompatButton(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatButton(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method public void setSupportAllCaps(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ }
+
+ @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatCheckBox extends android.widget.CheckBox implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatCheckBox(android.content.Context);
+ ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatCheckedTextView extends android.widget.CheckedTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCheckedTextView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatCheckedTextView(android.content.Context);
+ ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatCheckedTextView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCheckMarkTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCheckMarkTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCheckMarkTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCheckMarkTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context, int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class AppCompatDrawableManager {
+ ctor public AppCompatDrawableManager();
+ method public static androidx.appcompat.widget.AppCompatDrawableManager! get();
+ method public android.graphics.drawable.Drawable! getDrawable(android.content.Context, @DrawableRes int);
+ method public static android.graphics.PorterDuffColorFilter! getPorterDuffColorFilter(int, android.graphics.PorterDuff.Mode!);
+ method public void onConfigurationChanged(android.content.Context);
+ method public static void preload();
+ }
+
+ @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatEditText extends android.widget.EditText implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.OnReceiveContentViewBehavior androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatEditText(android.content.Context);
+ ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatEditText(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public androidx.core.view.ContentInfoCompat? onReceiveContent(androidx.core.view.ContentInfoCompat);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ }
+
+ @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatImageButton extends android.widget.ImageButton implements androidx.core.view.TintableBackgroundView androidx.core.widget.TintableImageSourceView {
+ ctor public AppCompatImageButton(android.content.Context);
+ ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatImageButton(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportImageTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportImageTintMode();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportImageTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportImageTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class AppCompatImageHelper {
+ ctor public AppCompatImageHelper(android.widget.ImageView);
+ method public void loadFromAttributes(android.util.AttributeSet!, int);
+ method public void setImageResource(int);
+ }
+
+ @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatImageView extends android.widget.ImageView implements androidx.core.view.TintableBackgroundView androidx.core.widget.TintableImageSourceView {
+ ctor public AppCompatImageView(android.content.Context);
+ ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatImageView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportImageTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportImageTintMode();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportImageTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportImageTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatMultiAutoCompleteTextView extends android.widget.MultiAutoCompleteTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context);
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatMultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ }
+
+ @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatRadioButton extends android.widget.RadioButton implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatRadioButton(android.content.Context!);
+ ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?);
+ ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public class AppCompatRatingBar extends android.widget.RatingBar {
+ ctor public AppCompatRatingBar(android.content.Context);
+ ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatRatingBar(android.content.Context, android.util.AttributeSet?, int);
+ }
+
+ public class AppCompatSeekBar extends android.widget.SeekBar {
+ ctor public AppCompatSeekBar(android.content.Context);
+ ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatSeekBar(android.content.Context, android.util.AttributeSet?, int);
+ }
+
+ @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatSpinner extends android.widget.Spinner implements androidx.core.view.TintableBackgroundView {
+ ctor public AppCompatSpinner(android.content.Context);
+ ctor public AppCompatSpinner(android.content.Context, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int, int);
+ ctor public AppCompatSpinner(android.content.Context, android.util.AttributeSet?, int, int, android.content.res.Resources.Theme!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatTextView extends android.widget.TextView implements androidx.core.widget.AutoSizeableTextView androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatTextView(android.content.Context);
+ ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatTextView(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public androidx.core.text.PrecomputedTextCompat.Params getTextMetricsParamsCompat();
+ method public boolean isEmojiCompatEnabled();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int) throws java.lang.IllegalArgumentException;
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAutoSizeTextTypeUniformWithPresetSizes(int[], int) throws java.lang.IllegalArgumentException;
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setEmojiCompatEnabled(boolean);
+ method public void setPrecomputedText(androidx.core.text.PrecomputedTextCompat);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTextAppearance(android.content.Context!, int);
+ method public void setTextFuture(java.util.concurrent.Future<androidx.core.text.PrecomputedTextCompat!>?);
+ method public void setTextMetricsParamsCompat(androidx.core.text.PrecomputedTextCompat.Params);
+ }
+
+ @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatToggleButton extends android.widget.ToggleButton implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundDrawablesView {
+ ctor public AppCompatToggleButton(android.content.Context);
+ ctor public AppCompatToggleButton(android.content.Context, android.util.AttributeSet?);
+ ctor public AppCompatToggleButton(android.content.Context, android.util.AttributeSet?, int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportCompoundDrawablesTintList();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportCompoundDrawablesTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void setEmojiCompatEnabled(boolean);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintList(android.content.res.ColorStateList?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportCompoundDrawablesTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ButtonBarLayout extends android.widget.LinearLayout {
+ ctor public ButtonBarLayout(android.content.Context, android.util.AttributeSet?);
+ method public void setAllowStacking(boolean);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface DecorContentParent {
+ method public boolean canShowOverflowMenu();
+ method public void dismissPopups();
+ method public CharSequence! getTitle();
+ method public boolean hasIcon();
+ method public boolean hasLogo();
+ method public boolean hideOverflowMenu();
+ method public void initFeature(int);
+ method public boolean isOverflowMenuShowPending();
+ method public boolean isOverflowMenuShowing();
+ method public void restoreToolbarHierarchyState(android.util.SparseArray<android.os.Parcelable!>!);
+ method public void saveToolbarHierarchyState(android.util.SparseArray<android.os.Parcelable!>!);
+ method public void setIcon(int);
+ method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setLogo(int);
+ method public void setMenu(android.view.Menu!, androidx.appcompat.view.menu.MenuPresenter.Callback!);
+ method public void setMenuPrepared();
+ method public void setUiOptions(int);
+ method public void setWindowCallback(android.view.Window.Callback!);
+ method public void setWindowTitle(CharSequence!);
+ method public boolean showOverflowMenu();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface DecorToolbar {
+ method public void animateToVisibility(int);
+ method public boolean canShowOverflowMenu();
+ method public void collapseActionView();
+ method public void dismissPopupMenus();
+ method public android.content.Context! getContext();
+ method public android.view.View! getCustomView();
+ method public int getDisplayOptions();
+ method public int getDropdownItemCount();
+ method public int getDropdownSelectedPosition();
+ method public int getHeight();
+ method public android.view.Menu! getMenu();
+ method public int getNavigationMode();
+ method public CharSequence! getSubtitle();
+ method public CharSequence! getTitle();
+ method public android.view.ViewGroup! getViewGroup();
+ method public int getVisibility();
+ method public boolean hasEmbeddedTabs();
+ method public boolean hasExpandedActionView();
+ method public boolean hasIcon();
+ method public boolean hasLogo();
+ method public boolean hideOverflowMenu();
+ method public void initIndeterminateProgress();
+ method public void initProgress();
+ method public boolean isOverflowMenuShowPending();
+ method public boolean isOverflowMenuShowing();
+ method public boolean isTitleTruncated();
+ method public void restoreHierarchyState(android.util.SparseArray<android.os.Parcelable!>!);
+ method public void saveHierarchyState(android.util.SparseArray<android.os.Parcelable!>!);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+ method public void setCollapsible(boolean);
+ method public void setCustomView(android.view.View!);
+ method public void setDefaultNavigationContentDescription(int);
+ method public void setDefaultNavigationIcon(android.graphics.drawable.Drawable!);
+ method public void setDisplayOptions(int);
+ method public void setDropdownParams(android.widget.SpinnerAdapter!, android.widget.AdapterView.OnItemSelectedListener!);
+ method public void setDropdownSelectedPosition(int);
+ method public void setEmbeddedTabView(androidx.appcompat.widget.ScrollingTabContainerView!);
+ method public void setHomeButtonEnabled(boolean);
+ method public void setIcon(int);
+ method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setLogo(int);
+ method public void setLogo(android.graphics.drawable.Drawable!);
+ method public void setMenu(android.view.Menu!, androidx.appcompat.view.menu.MenuPresenter.Callback!);
+ method public void setMenuCallbacks(androidx.appcompat.view.menu.MenuPresenter.Callback!, androidx.appcompat.view.menu.MenuBuilder.Callback!);
+ method public void setMenuPrepared();
+ method public void setNavigationContentDescription(CharSequence!);
+ method public void setNavigationContentDescription(int);
+ method public void setNavigationIcon(android.graphics.drawable.Drawable!);
+ method public void setNavigationIcon(int);
+ method public void setNavigationMode(int);
+ method public void setSubtitle(CharSequence!);
+ method public void setTitle(CharSequence!);
+ method public void setVisibility(int);
+ method public void setWindowCallback(android.view.Window.Callback!);
+ method public void setWindowTitle(CharSequence!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setupAnimatorToVisibility(int, long);
+ method public boolean showOverflowMenu();
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class DialogTitle extends androidx.appcompat.widget.AppCompatTextView {
+ ctor public DialogTitle(android.content.Context, android.util.AttributeSet?, int);
+ ctor public DialogTitle(android.content.Context, android.util.AttributeSet?);
+ ctor public DialogTitle(android.content.Context);
+ }
+
+ public interface EmojiCompatConfigurationView {
+ method public boolean isEmojiCompatEnabled();
+ method public void setEmojiCompatEnabled(boolean);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class FitWindowsFrameLayout extends android.widget.FrameLayout implements androidx.appcompat.widget.FitWindowsViewGroup {
+ ctor public FitWindowsFrameLayout(android.content.Context);
+ ctor public FitWindowsFrameLayout(android.content.Context, android.util.AttributeSet?);
+ method protected boolean fitSystemWindows(android.graphics.Rect!);
+ method public void setOnFitSystemWindowsListener(androidx.appcompat.widget.FitWindowsViewGroup.OnFitSystemWindowsListener!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class FitWindowsLinearLayout extends android.widget.LinearLayout implements androidx.appcompat.widget.FitWindowsViewGroup {
+ ctor public FitWindowsLinearLayout(android.content.Context);
+ ctor public FitWindowsLinearLayout(android.content.Context, android.util.AttributeSet?);
+ method protected boolean fitSystemWindows(android.graphics.Rect!);
+ method public void setOnFitSystemWindowsListener(androidx.appcompat.widget.FitWindowsViewGroup.OnFitSystemWindowsListener!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface FitWindowsViewGroup {
+ method public void setOnFitSystemWindowsListener(androidx.appcompat.widget.FitWindowsViewGroup.OnFitSystemWindowsListener!);
+ }
+
+ public static interface FitWindowsViewGroup.OnFitSystemWindowsListener {
+ method public void onFitSystemWindows(android.graphics.Rect!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class ForwardingListener implements android.view.View.OnAttachStateChangeListener android.view.View.OnTouchListener {
+ ctor public ForwardingListener(android.view.View!);
+ method public abstract androidx.appcompat.view.menu.ShowableListMenu! getPopup();
+ method protected boolean onForwardingStarted();
+ method protected boolean onForwardingStopped();
+ method public boolean onTouch(android.view.View!, android.view.MotionEvent!);
+ method public void onViewAttachedToWindow(android.view.View!);
+ method public void onViewDetachedFromWindow(android.view.View!);
+ }
+
+ public class LinearLayoutCompat extends android.view.ViewGroup {
+ ctor public LinearLayoutCompat(android.content.Context);
+ ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet?);
+ ctor public LinearLayoutCompat(android.content.Context, android.util.AttributeSet?, int);
+ method protected androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateDefaultLayoutParams();
+ method public androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.LinearLayoutCompat.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+ method @androidx.resourceinspection.annotation.Attribute("android:baselineAlignedChildIndex") public int getBaselineAlignedChildIndex();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:divider") public android.graphics.drawable.Drawable! getDividerDrawable();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:dividerPadding") public int getDividerPadding();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public int getDividerWidth();
+ method @GravityInt @androidx.resourceinspection.annotation.Attribute("android:gravity") public int getGravity();
+ method @androidx.appcompat.widget.LinearLayoutCompat.OrientationMode @androidx.resourceinspection.annotation.Attribute(value="android:orientation", intMapping={@androidx.resourceinspection.annotation.Attribute.IntMap(name="horizontal", value=0), @androidx.resourceinspection.annotation.Attribute.IntMap(name="vertical", value=1)}) public int getOrientation();
+ method @androidx.appcompat.widget.LinearLayoutCompat.DividerMode @androidx.resourceinspection.annotation.Attribute(value="androidx.appcompat:showDividers", intMapping={@androidx.resourceinspection.annotation.Attribute.IntMap(name="none", value=0), @androidx.resourceinspection.annotation.Attribute.IntMap(name="beginning", value=1, mask=1), @androidx.resourceinspection.annotation.Attribute.IntMap(name="middle", value=2, mask=2), @androidx.resourceinspection.annotation.Attribute.IntMap(name="end", value=4, mask=4)}) public int getShowDividers();
+ method @androidx.resourceinspection.annotation.Attribute("android:weightSum") public float getWeightSum();
+ method @androidx.resourceinspection.annotation.Attribute("android:baselineAligned") public boolean isBaselineAligned();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:measureWithLargestChild") public boolean isMeasureWithLargestChildEnabled();
+ method public void setBaselineAligned(boolean);
+ method public void setBaselineAlignedChildIndex(int);
+ method public void setDividerDrawable(android.graphics.drawable.Drawable!);
+ method public void setDividerPadding(int);
+ method public void setGravity(@GravityInt int);
+ method public void setHorizontalGravity(int);
+ method public void setMeasureWithLargestChildEnabled(boolean);
+ method public void setOrientation(@androidx.appcompat.widget.LinearLayoutCompat.OrientationMode int);
+ method public void setShowDividers(@androidx.appcompat.widget.LinearLayoutCompat.DividerMode int);
+ method public void setVerticalGravity(int);
+ method public void setWeightSum(float);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int SHOW_DIVIDER_BEGINNING = 1; // 0x1
+ field public static final int SHOW_DIVIDER_END = 4; // 0x4
+ field public static final int SHOW_DIVIDER_MIDDLE = 2; // 0x2
+ field public static final int SHOW_DIVIDER_NONE = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ @IntDef(flag=true, value={androidx.appcompat.widget.LinearLayoutCompat.SHOW_DIVIDER_NONE, androidx.appcompat.widget.LinearLayoutCompat.SHOW_DIVIDER_BEGINNING, androidx.appcompat.widget.LinearLayoutCompat.SHOW_DIVIDER_MIDDLE, androidx.appcompat.widget.LinearLayoutCompat.SHOW_DIVIDER_END}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface LinearLayoutCompat.DividerMode {
+ }
+
+ public static class LinearLayoutCompat.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+ ctor public LinearLayoutCompat.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public LinearLayoutCompat.LayoutParams(int, int);
+ ctor public LinearLayoutCompat.LayoutParams(int, int, float);
+ ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public LinearLayoutCompat.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ }
+
+ @IntDef({androidx.appcompat.widget.LinearLayoutCompat.HORIZONTAL, androidx.appcompat.widget.LinearLayoutCompat.VERTICAL}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface LinearLayoutCompat.OrientationMode {
+ }
+
+ public class ListPopupWindow implements androidx.appcompat.view.menu.ShowableListMenu {
+ ctor public ListPopupWindow(android.content.Context);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?, @AttrRes int);
+ ctor public ListPopupWindow(android.content.Context, android.util.AttributeSet?, @AttrRes int, @StyleRes int);
+ method public void clearListSelection();
+ method public android.view.View.OnTouchListener! createDragToOpenListener(android.view.View!);
+ method public void dismiss();
+ method public android.view.View? getAnchorView();
+ method @StyleRes public int getAnimationStyle();
+ method public android.graphics.drawable.Drawable? getBackground();
+ method public android.graphics.Rect? getEpicenterBounds();
+ method public int getHeight();
+ method public int getHorizontalOffset();
+ method public int getInputMethodMode();
+ method public android.widget.ListView? getListView();
+ method public int getPromptPosition();
+ method public Object? getSelectedItem();
+ method public long getSelectedItemId();
+ method public int getSelectedItemPosition();
+ method public android.view.View? getSelectedView();
+ method public int getSoftInputMode();
+ method public int getVerticalOffset();
+ method public int getWidth();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isDropDownAlwaysVisible();
+ method public boolean isInputMethodNotNeeded();
+ method public boolean isModal();
+ method public boolean isShowing();
+ method public boolean onKeyDown(int, android.view.KeyEvent);
+ method public boolean onKeyPreIme(int, android.view.KeyEvent);
+ method public boolean onKeyUp(int, android.view.KeyEvent);
+ method public boolean performItemClick(int);
+ method public void postShow();
+ method public void setAdapter(android.widget.ListAdapter?);
+ method public void setAnchorView(android.view.View?);
+ method public void setAnimationStyle(@StyleRes int);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+ method public void setContentWidth(int);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setDropDownAlwaysVisible(boolean);
+ method public void setDropDownGravity(int);
+ method public void setEpicenterBounds(android.graphics.Rect?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setForceIgnoreOutsideTouch(boolean);
+ method public void setHeight(int);
+ method public void setHorizontalOffset(int);
+ method public void setInputMethodMode(int);
+ method public void setListSelector(android.graphics.drawable.Drawable!);
+ method public void setModal(boolean);
+ method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener?);
+ method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener?);
+ method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setOverlapAnchor(boolean);
+ method public void setPromptPosition(int);
+ method public void setPromptView(android.view.View?);
+ method public void setSelection(int);
+ method public void setSoftInputMode(int);
+ method public void setVerticalOffset(int);
+ method public void setWidth(int);
+ method public void setWindowLayoutType(int);
+ method public void show();
+ field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
+ field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
+ field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2
+ field public static final int MATCH_PARENT = -1; // 0xffffffff
+ field public static final int POSITION_PROMPT_ABOVE = 0; // 0x0
+ field public static final int POSITION_PROMPT_BELOW = 1; // 0x1
+ field public static final int WRAP_CONTENT = -2; // 0xfffffffe
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface MenuItemHoverListener {
+ method public void onItemHoverEnter(androidx.appcompat.view.menu.MenuBuilder, android.view.MenuItem);
+ method public void onItemHoverExit(androidx.appcompat.view.menu.MenuBuilder, android.view.MenuItem);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MenuPopupWindow extends androidx.appcompat.widget.ListPopupWindow implements androidx.appcompat.widget.MenuItemHoverListener {
+ ctor public MenuPopupWindow(android.content.Context, android.util.AttributeSet?, int, int);
+ method public void onItemHoverEnter(androidx.appcompat.view.menu.MenuBuilder, android.view.MenuItem);
+ method public void onItemHoverExit(androidx.appcompat.view.menu.MenuBuilder, android.view.MenuItem);
+ method public void setEnterTransition(Object!);
+ method public void setExitTransition(Object!);
+ method public void setHoverListener(androidx.appcompat.widget.MenuItemHoverListener!);
+ method public void setTouchModal(boolean);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class MenuPopupWindow.MenuDropDownListView extends android.widget.ListView {
+ ctor public MenuPopupWindow.MenuDropDownListView(android.content.Context!, boolean);
+ method public void clearSelection();
+ method public int lookForSelectablePosition(int, boolean);
+ method public int measureHeightOfChildrenCompat(int, int, int, int, int);
+ method public boolean onForwardedEvent(android.view.MotionEvent!, int);
+ method public void setHoverListener(androidx.appcompat.widget.MenuItemHoverListener!);
+ field public static final int INVALID_POSITION = -1; // 0xffffffff
+ field public static final int NO_POSITION = -1; // 0xffffffff
+ }
+
+ public class PopupMenu {
+ ctor public PopupMenu(android.content.Context, android.view.View);
+ ctor public PopupMenu(android.content.Context, android.view.View, int);
+ ctor public PopupMenu(android.content.Context, android.view.View, int, @AttrRes int, @StyleRes int);
+ method public void dismiss();
+ method public android.view.View.OnTouchListener getDragToOpenListener();
+ method public int getGravity();
+ method public android.view.Menu getMenu();
+ method public android.view.MenuInflater getMenuInflater();
+ method public void inflate(@MenuRes int);
+ method public void setForceShowIcon(boolean);
+ method public void setGravity(int);
+ method public void setOnDismissListener(androidx.appcompat.widget.PopupMenu.OnDismissListener?);
+ method public void setOnMenuItemClickListener(androidx.appcompat.widget.PopupMenu.OnMenuItemClickListener?);
+ method public void show();
+ }
+
+ public static interface PopupMenu.OnDismissListener {
+ method public void onDismiss(androidx.appcompat.widget.PopupMenu!);
+ }
+
+ public static interface PopupMenu.OnMenuItemClickListener {
+ method public boolean onMenuItemClick(android.view.MenuItem!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ScrollingTabContainerView extends android.widget.HorizontalScrollView implements android.widget.AdapterView.OnItemSelectedListener {
+ ctor public ScrollingTabContainerView(android.content.Context);
+ method public void addTab(androidx.appcompat.app.ActionBar.Tab!, boolean);
+ method public void addTab(androidx.appcompat.app.ActionBar.Tab!, int, boolean);
+ method public void animateToTab(int);
+ method public void animateToVisibility(int);
+ method public void onAttachedToWindow();
+ method public void onDetachedFromWindow();
+ method public void onItemSelected(android.widget.AdapterView<?>!, android.view.View!, int, long);
+ method public void onMeasure(int, int);
+ method public void onNothingSelected(android.widget.AdapterView<?>!);
+ method public void removeAllTabs();
+ method public void removeTabAt(int);
+ method public void setAllowCollapse(boolean);
+ method public void setContentHeight(int);
+ method public void setTabSelected(int);
+ method public void updateTab(int);
+ field protected final androidx.appcompat.widget.ScrollingTabContainerView.VisibilityAnimListener! mVisAnimListener;
+ field protected android.view.ViewPropertyAnimator! mVisibilityAnim;
+ }
+
+ protected class ScrollingTabContainerView.VisibilityAnimListener extends android.animation.AnimatorListenerAdapter {
+ ctor protected ScrollingTabContainerView.VisibilityAnimListener();
+ method public androidx.appcompat.widget.ScrollingTabContainerView.VisibilityAnimListener! withFinalVisibility(android.view.ViewPropertyAnimator!, int);
+ }
+
+ public class SearchView extends androidx.appcompat.widget.LinearLayoutCompat implements androidx.appcompat.view.CollapsibleActionView {
+ ctor public SearchView(android.content.Context);
+ ctor public SearchView(android.content.Context, android.util.AttributeSet?);
+ ctor public SearchView(android.content.Context, android.util.AttributeSet?, int);
+ method @androidx.resourceinspection.annotation.Attribute("android:imeOptions") public int getImeOptions();
+ method public int getInputType();
+ method @androidx.resourceinspection.annotation.Attribute("android:maxWidth") public int getMaxWidth();
+ method public CharSequence! getQuery();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:queryHint") public CharSequence? getQueryHint();
+ method public androidx.cursoradapter.widget.CursorAdapter! getSuggestionsAdapter();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:iconifiedByDefault") public boolean isIconfiedByDefault();
+ method public boolean isIconified();
+ method public boolean isQueryRefinementEnabled();
+ method public boolean isSubmitButtonEnabled();
+ method public void onActionViewCollapsed();
+ method public void onActionViewExpanded();
+ method protected void onQueryRefine(CharSequence?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setAppSearchData(android.os.Bundle!);
+ method public void setIconified(boolean);
+ method public void setIconifiedByDefault(boolean);
+ method public void setImeOptions(int);
+ method public void setInputType(int);
+ method public void setMaxWidth(int);
+ method public void setOnCloseListener(androidx.appcompat.widget.SearchView.OnCloseListener!);
+ method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener!);
+ method public void setOnQueryTextListener(androidx.appcompat.widget.SearchView.OnQueryTextListener!);
+ method public void setOnSearchClickListener(android.view.View.OnClickListener!);
+ method public void setOnSuggestionListener(androidx.appcompat.widget.SearchView.OnSuggestionListener!);
+ method public void setQuery(CharSequence!, boolean);
+ method public void setQueryHint(CharSequence?);
+ method public void setQueryRefinementEnabled(boolean);
+ method public void setSearchableInfo(android.app.SearchableInfo!);
+ method public void setSubmitButtonEnabled(boolean);
+ method public void setSuggestionsAdapter(androidx.cursoradapter.widget.CursorAdapter!);
+ }
+
+ public static interface SearchView.OnCloseListener {
+ method public boolean onClose();
+ }
+
+ public static interface SearchView.OnQueryTextListener {
+ method public boolean onQueryTextChange(String!);
+ method public boolean onQueryTextSubmit(String!);
+ }
+
+ public static interface SearchView.OnSuggestionListener {
+ method public boolean onSuggestionClick(int);
+ method public boolean onSuggestionSelect(int);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class SearchView.SearchAutoComplete extends androidx.appcompat.widget.AppCompatAutoCompleteTextView {
+ ctor public SearchView.SearchAutoComplete(android.content.Context!);
+ ctor public SearchView.SearchAutoComplete(android.content.Context!, android.util.AttributeSet!);
+ ctor public SearchView.SearchAutoComplete(android.content.Context!, android.util.AttributeSet!, int);
+ }
+
+ public class ShareActionProvider extends androidx.core.view.ActionProvider {
+ ctor public ShareActionProvider(android.content.Context!);
+ method public android.view.View! onCreateActionView();
+ method public void setOnShareTargetSelectedListener(androidx.appcompat.widget.ShareActionProvider.OnShareTargetSelectedListener!);
+ method public void setShareHistoryFileName(String!);
+ method public void setShareIntent(android.content.Intent!);
+ field public static final String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
+ }
+
+ public static interface ShareActionProvider.OnShareTargetSelectedListener {
+ method public boolean onShareTargetSelected(androidx.appcompat.widget.ShareActionProvider!, android.content.Intent!);
+ }
+
+ public class SwitchCompat extends android.widget.CompoundButton implements androidx.appcompat.widget.EmojiCompatConfigurationView {
+ ctor public SwitchCompat(android.content.Context);
+ ctor public SwitchCompat(android.content.Context, android.util.AttributeSet?);
+ ctor public SwitchCompat(android.content.Context, android.util.AttributeSet?, int);
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:showText") public boolean getShowText();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:splitTrack") public boolean getSplitTrack();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:switchMinWidth") public int getSwitchMinWidth();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:switchPadding") public int getSwitchPadding();
+ method @androidx.resourceinspection.annotation.Attribute("android:textOff") public CharSequence! getTextOff();
+ method @androidx.resourceinspection.annotation.Attribute("android:textOn") public CharSequence! getTextOn();
+ method @androidx.resourceinspection.annotation.Attribute("android:thumb") public android.graphics.drawable.Drawable! getThumbDrawable();
+ method @FloatRange(from=0.0, to=1.0) protected final float getThumbPosition();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:thumbTextPadding") public int getThumbTextPadding();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:thumbTint") public android.content.res.ColorStateList? getThumbTintList();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:thumbTintMode") public android.graphics.PorterDuff.Mode? getThumbTintMode();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:track") public android.graphics.drawable.Drawable! getTrackDrawable();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:trackTint") public android.content.res.ColorStateList? getTrackTintList();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:trackTintMode") public android.graphics.PorterDuff.Mode? getTrackTintMode();
+ method public boolean isEmojiCompatEnabled();
+ method public void onMeasure(int, int);
+ method public void setEmojiCompatEnabled(boolean);
+ method protected final void setEnforceSwitchWidth(boolean);
+ method public void setShowText(boolean);
+ method public void setSplitTrack(boolean);
+ method public void setSwitchMinWidth(int);
+ method public void setSwitchPadding(int);
+ method public void setSwitchTextAppearance(android.content.Context!, int);
+ method public void setSwitchTypeface(android.graphics.Typeface!, int);
+ method public void setSwitchTypeface(android.graphics.Typeface!);
+ method public void setTextOff(CharSequence!);
+ method public void setTextOn(CharSequence!);
+ method public void setThumbDrawable(android.graphics.drawable.Drawable!);
+ method public void setThumbResource(int);
+ method public void setThumbTextPadding(int);
+ method public void setThumbTintList(android.content.res.ColorStateList?);
+ method public void setThumbTintMode(android.graphics.PorterDuff.Mode?);
+ method public void setTrackDrawable(android.graphics.drawable.Drawable!);
+ method public void setTrackResource(int);
+ method public void setTrackTintList(android.content.res.ColorStateList?);
+ method public void setTrackTintMode(android.graphics.PorterDuff.Mode?);
+ }
+
+ public interface ThemedSpinnerAdapter extends android.widget.SpinnerAdapter {
+ method public android.content.res.Resources.Theme? getDropDownViewTheme();
+ method public void setDropDownViewTheme(android.content.res.Resources.Theme?);
+ }
+
+ public static final class ThemedSpinnerAdapter.Helper {
+ ctor public ThemedSpinnerAdapter.Helper(android.content.Context);
+ method public android.view.LayoutInflater getDropDownViewInflater();
+ method public android.content.res.Resources.Theme? getDropDownViewTheme();
+ method public void setDropDownViewTheme(android.content.res.Resources.Theme?);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class TintTypedArray {
+ method public boolean getBoolean(int, boolean);
+ method @RequiresApi(21) public int getChangingConfigurations();
+ method public int getColor(int, int);
+ method public android.content.res.ColorStateList! getColorStateList(int);
+ method public float getDimension(int, float);
+ method public int getDimensionPixelOffset(int, int);
+ method public int getDimensionPixelSize(int, int);
+ method public android.graphics.drawable.Drawable! getDrawable(int);
+ method public android.graphics.drawable.Drawable! getDrawableIfKnown(int);
+ method public float getFloat(int, float);
+ method public android.graphics.Typeface? getFont(@StyleableRes int, int, androidx.core.content.res.ResourcesCompat.FontCallback?);
+ method public float getFraction(int, int, int, float);
+ method public int getIndex(int);
+ method public int getIndexCount();
+ method public int getInt(int, int);
+ method public int getInteger(int, int);
+ method public int getLayoutDimension(int, String!);
+ method public int getLayoutDimension(int, int);
+ method public String! getNonResourceString(int);
+ method public String! getPositionDescription();
+ method public int getResourceId(int, int);
+ method public android.content.res.Resources! getResources();
+ method public String! getString(int);
+ method public CharSequence! getText(int);
+ method public CharSequence![]! getTextArray(int);
+ method public int getType(int);
+ method public boolean getValue(int, android.util.TypedValue!);
+ method public android.content.res.TypedArray! getWrappedTypeArray();
+ method public boolean hasValue(int);
+ method public int length();
+ method public static androidx.appcompat.widget.TintTypedArray! obtainStyledAttributes(android.content.Context!, android.util.AttributeSet!, int[]!);
+ method public static androidx.appcompat.widget.TintTypedArray! obtainStyledAttributes(android.content.Context!, android.util.AttributeSet!, int[]!, int, int);
+ method public static androidx.appcompat.widget.TintTypedArray! obtainStyledAttributes(android.content.Context!, int, int[]!);
+ method public android.util.TypedValue! peekValue(int);
+ method public void recycle();
+ }
+
+ public class Toolbar extends android.view.ViewGroup implements androidx.core.view.MenuHost {
+ ctor public Toolbar(android.content.Context);
+ ctor public Toolbar(android.content.Context, android.util.AttributeSet?);
+ ctor public Toolbar(android.content.Context, android.util.AttributeSet?, int);
+ method @MainThread public void addMenuProvider(androidx.core.view.MenuProvider);
+ method @MainThread public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner);
+ method @MainThread public void addMenuProvider(androidx.core.view.MenuProvider, androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.State);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean canShowOverflowMenu();
+ method public void collapseActionView();
+ method public void dismissPopupMenus();
+ method protected androidx.appcompat.widget.Toolbar.LayoutParams! generateDefaultLayoutParams();
+ method public androidx.appcompat.widget.Toolbar.LayoutParams! generateLayoutParams(android.util.AttributeSet!);
+ method protected androidx.appcompat.widget.Toolbar.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:collapseContentDescription") public CharSequence? getCollapseContentDescription();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:collapseIcon") public android.graphics.drawable.Drawable? getCollapseIcon();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetEnd") public int getContentInsetEnd();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetEndWithActions") public int getContentInsetEndWithActions();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetLeft") public int getContentInsetLeft();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetRight") public int getContentInsetRight();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetStart") public int getContentInsetStart();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:contentInsetStartWithNavigation") public int getContentInsetStartWithNavigation();
+ method public int getCurrentContentInsetEnd();
+ method public int getCurrentContentInsetLeft();
+ method public int getCurrentContentInsetRight();
+ method public int getCurrentContentInsetStart();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:logo") public android.graphics.drawable.Drawable! getLogo();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:logoDescription") public CharSequence! getLogoDescription();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:menu") public android.view.Menu! getMenu();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:navigationContentDescription") public CharSequence? getNavigationContentDescription();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:navigationIcon") public android.graphics.drawable.Drawable? getNavigationIcon();
+ method public android.graphics.drawable.Drawable? getOverflowIcon();
+ method @StyleRes @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:popupTheme") public int getPopupTheme();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:subtitle") public CharSequence! getSubtitle();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:title") public CharSequence! getTitle();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginBottom") public int getTitleMarginBottom();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginEnd") public int getTitleMarginEnd();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginStart") public int getTitleMarginStart();
+ method @androidx.resourceinspection.annotation.Attribute("androidx.appcompat:titleMarginTop") public int getTitleMarginTop();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.appcompat.widget.DecorToolbar! getWrapper();
+ method public boolean hasExpandedActionView();
+ method public boolean hideOverflowMenu();
+ method public void inflateMenu(@MenuRes int);
+ method @MainThread public void invalidateMenu();
+ method public boolean isBackInvokedCallbackEnabled();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isOverflowMenuShowPending();
+ method public boolean isOverflowMenuShowing();
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public boolean isTitleTruncated();
+ method @MainThread public void removeMenuProvider(androidx.core.view.MenuProvider);
+ method public void setBackInvokedCallbackEnabled(boolean);
+ method public void setCollapseContentDescription(@StringRes int);
+ method public void setCollapseContentDescription(CharSequence?);
+ method public void setCollapseIcon(@DrawableRes int);
+ method public void setCollapseIcon(android.graphics.drawable.Drawable?);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setCollapsible(boolean);
+ method public void setContentInsetEndWithActions(int);
+ method public void setContentInsetStartWithNavigation(int);
+ method public void setContentInsetsAbsolute(int, int);
+ method public void setContentInsetsRelative(int, int);
+ method public void setLogo(@DrawableRes int);
+ method public void setLogo(android.graphics.drawable.Drawable!);
+ method public void setLogoDescription(@StringRes int);
+ method public void setLogoDescription(CharSequence!);
+ method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setMenuCallbacks(androidx.appcompat.view.menu.MenuPresenter.Callback!, androidx.appcompat.view.menu.MenuBuilder.Callback!);
+ method public void setNavigationContentDescription(@StringRes int);
+ method public void setNavigationContentDescription(CharSequence?);
+ method public void setNavigationIcon(@DrawableRes int);
+ method public void setNavigationIcon(android.graphics.drawable.Drawable?);
+ method public void setNavigationOnClickListener(android.view.View.OnClickListener!);
+ method public void setOnMenuItemClickListener(androidx.appcompat.widget.Toolbar.OnMenuItemClickListener!);
+ method public void setOverflowIcon(android.graphics.drawable.Drawable?);
+ method public void setPopupTheme(@StyleRes int);
+ method public void setSubtitle(@StringRes int);
+ method public void setSubtitle(CharSequence!);
+ method public void setSubtitleTextAppearance(android.content.Context!, @StyleRes int);
+ method public void setSubtitleTextColor(@ColorInt int);
+ method public void setSubtitleTextColor(android.content.res.ColorStateList);
+ method public void setTitle(@StringRes int);
+ method public void setTitle(CharSequence!);
+ method public void setTitleMargin(int, int, int, int);
+ method public void setTitleMarginBottom(int);
+ method public void setTitleMarginEnd(int);
+ method public void setTitleMarginStart(int);
+ method public void setTitleMarginTop(int);
+ method public void setTitleTextAppearance(android.content.Context!, @StyleRes int);
+ method public void setTitleTextColor(@ColorInt int);
+ method public void setTitleTextColor(android.content.res.ColorStateList);
+ method public boolean showOverflowMenu();
+ }
+
+ public static class Toolbar.LayoutParams extends androidx.appcompat.app.ActionBar.LayoutParams {
+ ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet!);
+ ctor public Toolbar.LayoutParams(int, int);
+ ctor public Toolbar.LayoutParams(int, int, int);
+ ctor public Toolbar.LayoutParams(int);
+ ctor public Toolbar.LayoutParams(androidx.appcompat.widget.Toolbar.LayoutParams!);
+ ctor public Toolbar.LayoutParams(androidx.appcompat.app.ActionBar.LayoutParams!);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ }
+
+ public static interface Toolbar.OnMenuItemClickListener {
+ method public boolean onMenuItemClick(android.view.MenuItem!);
+ }
+
+ public static class Toolbar.SavedState extends androidx.customview.view.AbsSavedState {
+ ctor public Toolbar.SavedState(android.os.Parcel!);
+ ctor public Toolbar.SavedState(android.os.Parcel!, ClassLoader!);
+ ctor public Toolbar.SavedState(android.os.Parcelable!);
+ field public static final android.os.Parcelable.Creator<androidx.appcompat.widget.Toolbar.SavedState!>! CREATOR;
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ToolbarWidgetWrapper implements androidx.appcompat.widget.DecorToolbar {
+ ctor public ToolbarWidgetWrapper(androidx.appcompat.widget.Toolbar!, boolean);
+ ctor public ToolbarWidgetWrapper(androidx.appcompat.widget.Toolbar!, boolean, int, int);
+ method public void animateToVisibility(int);
+ method public boolean canShowOverflowMenu();
+ method public void collapseActionView();
+ method public void dismissPopupMenus();
+ method public android.content.Context! getContext();
+ method public android.view.View! getCustomView();
+ method public int getDisplayOptions();
+ method public int getDropdownItemCount();
+ method public int getDropdownSelectedPosition();
+ method public int getHeight();
+ method public android.view.Menu! getMenu();
+ method public int getNavigationMode();
+ method public CharSequence! getSubtitle();
+ method public CharSequence! getTitle();
+ method public android.view.ViewGroup! getViewGroup();
+ method public int getVisibility();
+ method public boolean hasEmbeddedTabs();
+ method public boolean hasExpandedActionView();
+ method public boolean hasIcon();
+ method public boolean hasLogo();
+ method public boolean hideOverflowMenu();
+ method public void initIndeterminateProgress();
+ method public void initProgress();
+ method public boolean isOverflowMenuShowPending();
+ method public boolean isOverflowMenuShowing();
+ method public boolean isTitleTruncated();
+ method public void restoreHierarchyState(android.util.SparseArray<android.os.Parcelable!>!);
+ method public void saveHierarchyState(android.util.SparseArray<android.os.Parcelable!>!);
+ method public void setBackgroundDrawable(android.graphics.drawable.Drawable!);
+ method public void setCollapsible(boolean);
+ method public void setCustomView(android.view.View!);
+ method public void setDefaultNavigationContentDescription(int);
+ method public void setDefaultNavigationIcon(android.graphics.drawable.Drawable!);
+ method public void setDisplayOptions(int);
+ method public void setDropdownParams(android.widget.SpinnerAdapter!, android.widget.AdapterView.OnItemSelectedListener!);
+ method public void setDropdownSelectedPosition(int);
+ method public void setEmbeddedTabView(androidx.appcompat.widget.ScrollingTabContainerView!);
+ method public void setHomeButtonEnabled(boolean);
+ method public void setIcon(int);
+ method public void setIcon(android.graphics.drawable.Drawable!);
+ method public void setLogo(int);
+ method public void setLogo(android.graphics.drawable.Drawable!);
+ method public void setMenu(android.view.Menu!, androidx.appcompat.view.menu.MenuPresenter.Callback!);
+ method public void setMenuCallbacks(androidx.appcompat.view.menu.MenuPresenter.Callback!, androidx.appcompat.view.menu.MenuBuilder.Callback!);
+ method public void setMenuPrepared();
+ method public void setNavigationContentDescription(CharSequence!);
+ method public void setNavigationContentDescription(int);
+ method public void setNavigationIcon(android.graphics.drawable.Drawable!);
+ method public void setNavigationIcon(int);
+ method public void setNavigationMode(int);
+ method public void setSubtitle(CharSequence!);
+ method public void setTitle(CharSequence!);
+ method public void setVisibility(int);
+ method public void setWindowCallback(android.view.Window.Callback!);
+ method public void setWindowTitle(CharSequence!);
+ method public androidx.core.view.ViewPropertyAnimatorCompat! setupAnimatorToVisibility(int, long);
+ method public boolean showOverflowMenu();
+ }
+
+ public class TooltipCompat {
+ method public static void setTooltipText(android.view.View, CharSequence?);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ViewStubCompat extends android.view.View {
+ ctor public ViewStubCompat(android.content.Context, android.util.AttributeSet?);
+ ctor public ViewStubCompat(android.content.Context, android.util.AttributeSet?, int);
+ method public int getInflatedId();
+ method public android.view.LayoutInflater! getLayoutInflater();
+ method public int getLayoutResource();
+ method public android.view.View! inflate();
+ method public void setInflatedId(int);
+ method public void setLayoutInflater(android.view.LayoutInflater!);
+ method public void setLayoutResource(int);
+ method public void setOnInflateListener(androidx.appcompat.widget.ViewStubCompat.OnInflateListener!);
+ }
+
+ public static interface ViewStubCompat.OnInflateListener {
+ method public void onInflate(androidx.appcompat.widget.ViewStubCompat!, android.view.View!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ViewUtils {
+ method public static void computeFitSystemWindows(android.view.View!, android.graphics.Rect!, android.graphics.Rect!);
+ method public static boolean isLayoutRtl(android.view.View!);
+ method public static void makeOptionalFitsSystemWindows(android.view.View!);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface WithHint {
+ method public CharSequence? getHint();
+ }
+
+}
+
diff --git a/benchmark/benchmark-macro/build.gradle b/benchmark/benchmark-macro/build.gradle
index b367562..fc0fd01 100644
--- a/benchmark/benchmark-macro/build.gradle
+++ b/benchmark/benchmark-macro/build.gradle
@@ -39,7 +39,8 @@
)
androidTest.assets.srcDirs += new File(
SupportConfigKt.getPrebuiltsRoot(project),
- "androidx/internal/androidx/tracing/tracing-perfetto-binary"
+ "androidx/internal/androidx/tracing/tracing-perfetto-binary/" +
+ "${androidx.LibraryVersions.TRACING_PERFETTO}"
)
}
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
index c3e83b6..cb13b1d 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
@@ -47,7 +47,7 @@
import org.junit.runners.Parameterized
import org.junit.runners.Parameterized.Parameters
-private const val tracingPerfettoVersion = "1.0.0-alpha01" // TODO(224510255): get by 'reflection'
+private const val tracingPerfettoVersion = "1.0.0-alpha02" // TODO(224510255): get by 'reflection'
private const val minSupportedSdk = Build.VERSION_CODES.R // TODO(234351579): Support API < 30
@RunWith(Parameterized::class)
@@ -178,7 +178,7 @@
// find tracing-perfetto-binary AAR in test assets
val libraryZipPath: String? = run {
val rx =
- Regex(".*/tracing-perfetto-binary-[^/]+\\.aar", RegexOption.IGNORE_CASE)
+ Regex("tracing-perfetto-binary-[^/]+\\.aar", RegexOption.IGNORE_CASE)
val queue = ArrayDeque(context.assets.list("")?.asList() ?: emptyList())
while (queue.isNotEmpty()) {
val curr = queue.removeFirst()
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
index 581be6b..a4a255a 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
@@ -630,6 +630,8 @@
"development/",
"playground-common/",
".github/",
+ // since we only used AMD for device tests, versions do not affect test outcomes.
+ "libraryversions.toml",
)
}
}
diff --git a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/JpegHalCorruptImageQuirk.java b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/JpegHalCorruptImageQuirk.java
index fbdd892..7e1211af 100644
--- a/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/JpegHalCorruptImageQuirk.java
+++ b/camera/camera-camera2/src/main/java/androidx/camera/camera2/internal/compat/quirk/JpegHalCorruptImageQuirk.java
@@ -32,13 +32,18 @@
* Quirk which denotes JPEGs produced directly from the HAL may sometimes be corrupted.
*
* <p>QuirkSummary
- * Bug Id: <a href="https://issuetracker.google.com/159831206">159831206</a>
+ * Bug Id: <a href="https://issuetracker.google.com/159831206">159831206</a>,
+ * <a href="https://issuetracker.google.com/242509463">242509463</a>
* Description: Corrupt images generally manifest as completely monochrome JPEGs, sometimes
* solid green. On the affected devices, this is easier to reproduce
* immediately after rebooting the device. If possible, it is preferred
* that CameraX produce JPEGs from some other image format rather than
- * receiving JPEGs directly from the HAL.
- * Device(s): Samsung Galaxy S7 (SM-G930T and SM-G930V variants)
+ * receiving JPEGs directly from the HAL. This issue happens on Samsung Galaxy S7.
+ * The other issue is that the Exif metadata of the captured images might be
+ * incorrect to cause IOException when using ExifInterface to save the updated
+ * attributes. Capturing the images in YUV format and then compress it to JPEG
+ * output images can produce correct Exif metadata to workaround this issue.
+ * Device(s): Samsung Galaxy S7 (SM-G930T and SM-G930V variants), alps k61v1_basic_ref
*/
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
public final class JpegHalCorruptImageQuirk implements SoftwareJpegEncodingPreferredQuirk {
@@ -46,7 +51,8 @@
private static final Set<String> KNOWN_AFFECTED_DEVICES = new HashSet<>(
Arrays.asList(
"heroqltevzw",
- "heroqltetmo"
+ "heroqltetmo",
+ "k61v1_basic_ref"
));
static boolean load(@NonNull CameraCharacteristicsCompat characteristicsCompat) {
diff --git a/camera/camera-core/build.gradle b/camera/camera-core/build.gradle
index a266a1e..de3bb7b 100644
--- a/camera/camera-core/build.gradle
+++ b/camera/camera-core/build.gradle
@@ -39,6 +39,7 @@
annotationProcessor(libs.autoValue)
+ testImplementation(libs.kotlinCoroutinesAndroid)
testImplementation(libs.kotlinStdlib)
testImplementation(libs.testCore)
testImplementation(libs.testRunner)
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/processing/DefaultSurfaceEffectTest.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/processing/DefaultSurfaceEffectTest.kt
index 645d23a..d67c4fe 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/processing/DefaultSurfaceEffectTest.kt
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/processing/DefaultSurfaceEffectTest.kt
@@ -16,9 +16,12 @@
package androidx.camera.core.processing
+import android.graphics.ImageFormat
import android.graphics.Rect
+import android.graphics.SurfaceTexture
import android.hardware.camera2.CameraDevice.TEMPLATE_PREVIEW
import android.media.ImageReader
+import android.os.Build
import android.os.Handler
import android.os.HandlerThread
import android.util.Size
@@ -29,6 +32,7 @@
import androidx.camera.core.impl.ImageFormatConstants
import androidx.camera.core.impl.utils.executor.CameraXExecutors
import androidx.camera.testing.CameraUtil
+import androidx.camera.testing.GLUtil
import androidx.camera.testing.HandlerUtil
import androidx.camera.testing.fakes.FakeCamera
import androidx.concurrent.futures.await
@@ -49,6 +53,7 @@
import kotlinx.coroutines.flow.collectIndexed
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.withContext
import kotlinx.coroutines.withTimeoutOrNull
import org.junit.After
import org.junit.Assert.fail
@@ -211,7 +216,7 @@
@Test
fun render(): Unit = runBlocking {
- testRenderFromCameraToImageReader()
+ testRender()
}
@Test
@@ -222,7 +227,7 @@
fragCoordsVarName: String
): String = getCustomFragmentShader(samplerVarName, fragCoordsVarName)
}
- testRenderFromCameraToImageReader(shaderProvider)
+ testRender(shaderProvider)
}
@Test
@@ -277,6 +282,16 @@
}
}
+ private suspend fun testRender(shaderProvider: ShaderProvider = ShaderProvider.DEFAULT) {
+ if (Build.VERSION.SDK_INT >= 23) {
+ // ImageReader support ImageFormat.PRIVATE from API 23
+ testRenderFromCameraToImageReader(shaderProvider)
+ } else {
+ // Render to SurfaceTexture surface as workaround
+ testRenderFromCameraToTextureSurface(shaderProvider)
+ }
+ }
+
private suspend fun testRenderFromCameraToImageReader(
shaderProvider: ShaderProvider = ShaderProvider.DEFAULT
) {
@@ -296,7 +311,7 @@
val imageReader = ImageReader.newInstance(
WIDTH,
HEIGHT,
- ImageFormatConstants.INTERNAL_DEFINED_IMAGE_FORMAT_PRIVATE,
+ ImageFormat.PRIVATE,
2
)
val scope = CoroutineScope(dispatcher)
@@ -325,6 +340,59 @@
} ?: fail("Timed out to receive images")
}
+ private suspend fun testRenderFromCameraToTextureSurface(
+ shaderProvider: ShaderProvider = ShaderProvider.DEFAULT
+ ) {
+ createSurfaceEffect(shaderProvider)
+ prepareHandlerThread()
+ // Prepare input
+ val inputSurfaceRequest = createInputSurfaceRequest()
+ surfaceEffect.onInputSurface(inputSurfaceRequest)
+ val inputDeferrableSurface = inputSurfaceRequest.deferrableSurface
+ val inputSurface = inputDeferrableSurface.surface.await()
+ openCameraAndSetRepeating(inputSurface)
+ cameraDeviceHolder.closedFuture.addListener({
+ inputDeferrableSurface.close()
+ }, CameraXExecutors.directExecutor())
+
+ // Prepare output
+ lateinit var outputSurfaceTexture: SurfaceTexture
+ lateinit var outputSurface: Surface
+ withContext(dispatcher) {
+ outputSurfaceTexture = SurfaceTexture(GLUtil.getTexIdFromGLContext()).apply {
+ setDefaultBufferSize(WIDTH, HEIGHT)
+ }
+ outputSurface = Surface(outputSurfaceTexture)
+ }
+
+ val scope = CoroutineScope(dispatcher)
+ val imageCollectJob = scope.launch {
+ callbackFlow {
+ outputSurfaceTexture.setOnFrameAvailableListener({
+ it.updateTexImage()
+ trySend(Unit)
+ }, handler)
+ awaitClose {
+ outputSurfaceTexture.release()
+ outputSurface.release()
+ }
+ }.collectIndexed { index, _ ->
+ if (index >= 4) {
+ // stop the collect job
+ scope.cancel()
+ }
+ }
+ }
+ val surfaceOutput = createSurfaceOutput(outputSurface)
+ surfaceEffect.onOutputSurface(surfaceOutput)
+
+ // Assert.
+ withTimeoutOrNull(10_000L) {
+ imageCollectJob.join()
+ true
+ } ?: fail("Timed out to receive images")
+ }
+
private fun prepareHandlerThread() {
handlerThread = HandlerThread("Worker").apply { start() }
handler = Handler(handlerThread.looper)
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/processing/OpenGlRendererTest.kt b/camera/camera-core/src/androidTest/java/androidx/camera/core/processing/OpenGlRendererTest.kt
index 46a955c..eece033 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/processing/OpenGlRendererTest.kt
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/processing/OpenGlRendererTest.kt
@@ -19,9 +19,9 @@
import android.graphics.ImageFormat
import android.graphics.SurfaceTexture
import android.hardware.camera2.CameraDevice
-import android.media.Image
import android.media.ImageReader
import android.opengl.Matrix
+import android.os.Build
import android.os.Handler
import android.os.HandlerThread
import android.view.Surface
@@ -259,7 +259,7 @@
@Test
fun render(): Unit = runBlocking(glDispatcher) {
- testRenderFromCameraToImageReader()
+ testRender()
}
@Test
@@ -270,7 +270,17 @@
fragCoordsVarName: String
): String = getCustomFragmentShader(samplerVarName, fragCoordsVarName)
}
- testRenderFromCameraToImageReader(shaderProvider)
+ testRender(shaderProvider)
+ }
+
+ private suspend fun testRender(shaderProvider: ShaderProvider = ShaderProvider.DEFAULT) {
+ if (Build.VERSION.SDK_INT >= 23) {
+ // ImageReader support ImageFormat.PRIVATE from API 23
+ testRenderFromCameraToImageReader(shaderProvider)
+ } else {
+ // Render to SurfaceTexture surface as workaround
+ testRenderFromCameraToTextureSurface(shaderProvider)
+ }
}
private suspend fun testRenderFromCameraToImageReader(
@@ -293,7 +303,7 @@
// Prepare output
val imageReader =
ImageReader.newInstance(WIDTH, HEIGHT, ImageFormat.PRIVATE, 2)
- val imageFlow = callbackFlow<Image> {
+ val imageFlow = callbackFlow {
val listener = ImageReader.OnImageAvailableListener {
trySend(it.acquireLatestImage())
}
@@ -325,6 +335,62 @@
} ?: fail("Timed out to receive images")
}
+ private suspend fun testRenderFromCameraToTextureSurface(
+ shaderProvider: ShaderProvider = ShaderProvider.DEFAULT
+ ) {
+ // Arrange.
+ createOpenGlRendererAndInit(shaderProvider = shaderProvider)
+
+ // Prepare input
+ val surfaceTexture = SurfaceTexture(glRenderer.textureName).apply {
+ setDefaultBufferSize(WIDTH, HEIGHT)
+ }
+ val inputSurface = Surface(surfaceTexture)
+ openCameraAndSetRepeating(inputSurface)
+ cameraDeviceHolder.closedFuture.addListener({
+ inputSurface.release()
+ surfaceTexture.release()
+ }, CameraXExecutors.directExecutor())
+
+ // Prepare output
+ val outputSurfaceTexture = SurfaceTexture(0).apply {
+ setDefaultBufferSize(WIDTH, HEIGHT)
+ }
+ val outputSurface = Surface(outputSurfaceTexture)
+ val imageFlow = callbackFlow {
+ outputSurfaceTexture.setOnFrameAvailableListener({
+ it.updateTexImage()
+ trySend(Unit)
+ }, glHandler)
+ awaitClose {
+ outputSurfaceTexture.release()
+ outputSurface.release()
+ }
+ }
+
+ // Bridge input to output
+ surfaceTexture.setOnFrameAvailableListener({
+ it.updateTexImage()
+ glRenderer.setOutputSurface(outputSurface)
+ glRenderer.render(0L, IDENTITY_MATRIX)
+ }, glHandler)
+
+ val scope = CoroutineScope(glDispatcher)
+ val imageCollectJob = scope.launch {
+ imageFlow.collectIndexed { index, _ ->
+ if (index >= 4) {
+ scope.cancel()
+ }
+ }
+ }
+
+ // Assert.
+ withTimeoutOrNull(10_000L) {
+ imageCollectJob.join()
+ true
+ } ?: fail("Timed out to receive images")
+ }
+
private suspend fun createOpenGlRendererAndInit(
shaderProvider: ShaderProvider = ShaderProvider.DEFAULT
) {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/processing/SettableSurface.java b/camera/camera-core/src/main/java/androidx/camera/core/processing/SettableSurface.java
index 6b48394b..feb5c35 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/processing/SettableSurface.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/processing/SettableSurface.java
@@ -217,12 +217,12 @@
* <p>Do not provide the {@link SurfaceOutput} to external target if the
* {@link ListenableFuture} fails.
*
- * @param applyGlTransform whether the SurfaceOutput should apply the transform, which is
- * calculated based on the input image buffer's attributes.
- * @param resolution resolution of input image buffer
- * @param cropRect crop rect of input image buffer
- * @param rotationDegrees expected rotation to the input image buffer
- * @param mirroring expected mirroring to the input image buffer
+ * @param applyGlTransform whether the SurfaceOutput should apply the transform, which is
+ * calculated based on the input image buffer's attributes.
+ * @param resolution resolution of input image buffer
+ * @param cropRect crop rect of input image buffer
+ * @param rotationDegrees expected rotation to the input image buffer
+ * @param mirroring expected mirroring to the input image buffer
*/
@MainThread
@NonNull
@@ -253,15 +253,15 @@
/**
* Closes the {@link DeferrableSurface} and notifies linked objects for the closure.
*/
- @MainThread
@Override
public final void close() {
- checkMainThread();
super.close();
- if (mConsumerToNotify != null) {
- mConsumerToNotify.requestClose();
- mConsumerToNotify = null;
- }
+ mainThreadExecutor().execute(() -> {
+ if (mConsumerToNotify != null) {
+ mConsumerToNotify.requestClose();
+ mConsumerToNotify = null;
+ }
+ });
}
/**
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/processing/SettableSurfaceTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/processing/SettableSurfaceTest.kt
index a7f1226..e5654bb 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/processing/SettableSurfaceTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/processing/SettableSurfaceTest.kt
@@ -38,6 +38,8 @@
import androidx.camera.testing.fakes.FakeCamera
import androidx.concurrent.futures.CallbackToFutureAdapter
import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.Before
import org.junit.Test
@@ -81,6 +83,11 @@
}
@Test
+ fun closeSettableSurfaceOnIoDispatchers_noCrash(): Unit = runBlocking(Dispatchers.IO) {
+ settableSurface.close()
+ }
+
+ @Test
fun closeProviderAfterConnected_surfaceNotReleased() {
// Arrange.
val surfaceRequest = settableSurface.createSurfaceRequest(FakeCamera())
diff --git a/camera/integration-tests/uiwidgetstestapp/build.gradle b/camera/integration-tests/uiwidgetstestapp/build.gradle
index 9ed2338..b7a82ad 100644
--- a/camera/integration-tests/uiwidgetstestapp/build.gradle
+++ b/camera/integration-tests/uiwidgetstestapp/build.gradle
@@ -65,6 +65,7 @@
implementation(libs.kotlinStdlib)
implementation(project(":camera:camera-core"))
implementation(project(":camera:camera-camera2"))
+ implementation(project(":camera:camera-camera2-pipe-integration"))
implementation(project(":camera:camera-lifecycle"))
implementation(project(":camera:camera-view"))
implementation(project(":camera:camera-video"))
diff --git a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisBaseTest.kt b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisBaseTest.kt
index 5d45ab8..e69c9d3 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisBaseTest.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisBaseTest.kt
@@ -19,7 +19,10 @@
import android.content.Context
import android.content.Intent
import androidx.camera.camera2.Camera2Config
+import androidx.camera.camera2.pipe.integration.CameraPipeConfig
+import androidx.camera.core.CameraSelector
import androidx.camera.lifecycle.ProcessCameraProvider
+import androidx.camera.testing.CameraPipeConfigTestRule
import androidx.camera.testing.CameraUtil
import androidx.camera.testing.CoreAppTestUtil
import androidx.test.core.app.ActivityScenario
@@ -44,11 +47,25 @@
* - Wait a couple of frames
* - Verify the image analysis image rotation
*/
-abstract class ImageAnalysisBaseTest<A : CameraActivity> {
+abstract class ImageAnalysisBaseTest<A : CameraActivity>(
+ cameraXConfig: String = CameraActivity.CAMERA2_IMPLEMENTATION_OPTION
+) {
+
+ @get:Rule
+ val cameraPipeConfigTestRule = CameraPipeConfigTestRule(
+ active = cameraXConfig == CameraActivity.CAMERA_PIPE_IMPLEMENTATION_OPTION,
+ forAllTests = true,
+ )
@get:Rule
val useCameraRule = CameraUtil.grantCameraPermissionAndPreTest(
- testCameraRule, CameraUtil.PreTestCameraIdList(Camera2Config.defaultConfig())
+ testCameraRule, CameraUtil.PreTestCameraIdList(
+ if (cameraXConfig == CameraActivity.CAMERA2_IMPLEMENTATION_OPTION) {
+ Camera2Config.defaultConfig()
+ } else {
+ CameraPipeConfig.defaultConfig()
+ }
+ )
)
@get:Rule
@@ -80,9 +97,10 @@
protected inline fun <reified A : CameraActivity> verifyRotation(
lensFacing: Int,
- rotate: ActivityScenario<A>.() -> Unit
+ cameraXConfig: String = CameraActivity.CAMERA2_IMPLEMENTATION_OPTION,
+ rotate: ActivityScenario<A>.() -> Unit,
) {
- val activityScenario: ActivityScenario<A> = launchActivity(lensFacing)
+ val activityScenario: ActivityScenario<A> = launchActivity(lensFacing, cameraXConfig)
activityScenario.use { scenario ->
// Wait until the camera is set up and analysis starts receiving frames
@@ -110,13 +128,17 @@
}
}
- protected inline fun <reified A : CameraActivity> launchActivity(lensFacing: Int):
+ protected inline fun <reified A : CameraActivity> launchActivity(
+ lensFacing: Int,
+ cameraXConfig: String,
+ ):
ActivityScenario<A> {
val intent = Intent(
ApplicationProvider.getApplicationContext(),
A::class.java
).apply {
putExtra(CameraActivity.KEY_LENS_FACING, lensFacing)
+ putExtra(CameraActivity.KEY_CAMERA_IMPLEMENTATION, cameraXConfig)
}
return ActivityScenario.launch<A>(intent)
}
@@ -137,6 +159,16 @@
protected const val TIMEOUT = 20L
@JvmStatic
+ protected val lensFacingList =
+ arrayOf(CameraSelector.LENS_FACING_BACK, CameraSelector.LENS_FACING_FRONT)
+
+ @JvmStatic
+ protected val cameraXConfigList = arrayOf(
+ CameraActivity.CAMERA2_IMPLEMENTATION_OPTION,
+ CameraActivity.CAMERA_PIPE_IMPLEMENTATION_OPTION
+ )
+
+ @JvmStatic
lateinit var testCameraRule: CameraUtil.PreTestCamera
@BeforeClass
diff --git a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisLockedOrientationTest.kt b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisLockedOrientationTest.kt
index 4f4899a..c96ac71 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisLockedOrientationTest.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisLockedOrientationTest.kt
@@ -16,7 +16,6 @@
package androidx.camera.integration.uiwidgets.rotations
-import androidx.camera.core.CameraSelector
import androidx.test.core.app.ActivityScenario
import androidx.test.filters.LargeTest
import org.junit.After
@@ -29,21 +28,24 @@
@LargeTest
class ImageAnalysisLockedOrientationTest(
private val lensFacing: Int,
- private val rotationDegrees: Int
-) : ImageAnalysisBaseTest<LockedOrientationActivity>() {
+ private val rotationDegrees: Int,
+ private val cameraXConfig: String
+) : ImageAnalysisBaseTest<LockedOrientationActivity>(cameraXConfig) {
companion object {
@JvmStatic
- @Parameterized.Parameters(name = "lensFacing={0}, rotationDegrees={1}")
+ private val rotationDegrees = arrayOf(0, 90, 180, 270)
+
+ @JvmStatic
+ @Parameterized.Parameters(name = "lensFacing={0}, rotationDegrees={1}, cameraXConfig={2}")
fun data() = mutableListOf<Array<Any?>>().apply {
- add(arrayOf(CameraSelector.LENS_FACING_BACK, 0))
- add(arrayOf(CameraSelector.LENS_FACING_BACK, 90))
- add(arrayOf(CameraSelector.LENS_FACING_BACK, 180))
- add(arrayOf(CameraSelector.LENS_FACING_BACK, 270))
- add(arrayOf(CameraSelector.LENS_FACING_FRONT, 0))
- add(arrayOf(CameraSelector.LENS_FACING_FRONT, 90))
- add(arrayOf(CameraSelector.LENS_FACING_FRONT, 180))
- add(arrayOf(CameraSelector.LENS_FACING_FRONT, 270))
+ lensFacingList.forEach { lens ->
+ rotationDegrees.forEach { rotation ->
+ cameraXConfigList.forEach { cameraXConfig ->
+ add(arrayOf(lens, rotation, cameraXConfig))
+ }
+ }
+ }
}
}
@@ -59,7 +61,7 @@
@Test
fun verifyRotation() {
- verifyRotation<LockedOrientationActivity>(lensFacing) {
+ verifyRotation<LockedOrientationActivity>(lensFacing, cameraXConfig) {
rotate(rotationDegrees)
}
}
diff --git a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisOrientationConfigChangesTest.kt b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisOrientationConfigChangesTest.kt
index 0748b49..f1ca9eb 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisOrientationConfigChangesTest.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisOrientationConfigChangesTest.kt
@@ -19,7 +19,6 @@
import android.os.Build
import android.view.Surface
import android.view.View
-import androidx.camera.core.CameraSelector
import androidx.test.core.app.ActivityScenario
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
@@ -38,21 +37,29 @@
@LargeTest
class ImageAnalysisOrientationConfigChangesTest(
private val lensFacing: Int,
- private val rotation: Int
-) : ImageAnalysisBaseTest<OrientationConfigChangesOverriddenActivity>() {
+ private val rotation: Int,
+ private val cameraXConfig: String
+) : ImageAnalysisBaseTest<OrientationConfigChangesOverriddenActivity>(cameraXConfig) {
companion object {
@JvmStatic
- @Parameterized.Parameters(name = "lensFacing={0}, rotation={1}")
+ private val rotations = arrayOf(
+ Surface.ROTATION_0,
+ Surface.ROTATION_90,
+ Surface.ROTATION_180,
+ Surface.ROTATION_270
+ )
+
+ @JvmStatic
+ @Parameterized.Parameters(name = "lensFacing={0}, rotation={1}, cameraXConfig={2}")
fun data() = mutableListOf<Array<Any?>>().apply {
- add(arrayOf(CameraSelector.LENS_FACING_BACK, Surface.ROTATION_0))
- add(arrayOf(CameraSelector.LENS_FACING_BACK, Surface.ROTATION_90))
- add(arrayOf(CameraSelector.LENS_FACING_BACK, Surface.ROTATION_180))
- add(arrayOf(CameraSelector.LENS_FACING_BACK, Surface.ROTATION_270))
- add(arrayOf(CameraSelector.LENS_FACING_FRONT, Surface.ROTATION_0))
- add(arrayOf(CameraSelector.LENS_FACING_FRONT, Surface.ROTATION_90))
- add(arrayOf(CameraSelector.LENS_FACING_FRONT, Surface.ROTATION_180))
- add(arrayOf(CameraSelector.LENS_FACING_FRONT, Surface.ROTATION_270))
+ lensFacingList.forEach { lens ->
+ rotations.forEach { rotation ->
+ cameraXConfigList.forEach { cameraXConfig ->
+ add(arrayOf(lens, rotation, cameraXConfig))
+ }
+ }
+ }
}
}
@@ -75,7 +82,7 @@
@Test
fun verifyRotation() {
- verifyRotation<OrientationConfigChangesOverriddenActivity>(lensFacing) {
+ verifyRotation<OrientationConfigChangesOverriddenActivity>(lensFacing, cameraXConfig) {
if (rotate(rotation)) {
// Wait for the rotation to occur
diff --git a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisUnlockedOrientationTest.kt b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisUnlockedOrientationTest.kt
index 82aa20f..870f64b 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisUnlockedOrientationTest.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageAnalysisUnlockedOrientationTest.kt
@@ -19,6 +19,9 @@
import android.app.Instrumentation
import androidx.camera.core.CameraSelector.LENS_FACING_BACK
import androidx.camera.core.CameraSelector.LENS_FACING_FRONT
+import androidx.camera.integration.uiwidgets.rotations.RotationUnlocked.Left
+import androidx.camera.integration.uiwidgets.rotations.RotationUnlocked.Natural
+import androidx.camera.integration.uiwidgets.rotations.RotationUnlocked.Right
import androidx.test.filters.LargeTest
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.After
@@ -31,20 +34,23 @@
@LargeTest
class ImageAnalysisUnlockedOrientationTest(
private val lensFacing: Int,
+ private val cameraXConfig: String,
private val rotation: RotationUnlocked,
private val testName: String
-) : ImageAnalysisBaseTest<UnlockedOrientationActivity>() {
+) : ImageAnalysisBaseTest<UnlockedOrientationActivity>(cameraXConfig) {
companion object {
@JvmStatic
- @Parameterized.Parameters(name = "{2}")
+ @Parameterized.Parameters(name = "cameraXConfig={1}, {3}")
fun data() = mutableListOf<Array<Any?>>().apply {
- add(arrayOf(LENS_FACING_BACK, RotationUnlocked.Natural, "Back lens - Natural"))
- add(arrayOf(LENS_FACING_BACK, RotationUnlocked.Left, "Back lens - Left"))
- add(arrayOf(LENS_FACING_BACK, RotationUnlocked.Right, "Back lens - Right"))
- add(arrayOf(LENS_FACING_FRONT, RotationUnlocked.Natural, "Front lens - Natural"))
- add(arrayOf(LENS_FACING_FRONT, RotationUnlocked.Left, "Front lens - Left"))
- add(arrayOf(LENS_FACING_FRONT, RotationUnlocked.Right, "Front lens - Right"))
+ cameraXConfigList.forEach { config ->
+ add(arrayOf(LENS_FACING_BACK, config, Natural, "Back lens - Natural"))
+ add(arrayOf(LENS_FACING_BACK, config, Left, "Back lens - Left"))
+ add(arrayOf(LENS_FACING_BACK, config, Right, "Back lens - Right"))
+ add(arrayOf(LENS_FACING_FRONT, config, Natural, "Front lens - Natural"))
+ add(arrayOf(LENS_FACING_FRONT, config, Left, "Front lens - Left"))
+ add(arrayOf(LENS_FACING_FRONT, config, Right, "Front lens - Right"))
+ }
}
}
@@ -60,7 +66,7 @@
@Test
fun verifyRotation() {
- verifyRotation<UnlockedOrientationActivity>(lensFacing) {
+ verifyRotation<UnlockedOrientationActivity>(lensFacing, cameraXConfig) {
if (rotation.shouldRotate) {
rotateDeviceAndWait()
}
diff --git a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureBaseTest.kt b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureBaseTest.kt
index 025cb71..1a25aaa 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureBaseTest.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureBaseTest.kt
@@ -22,9 +22,11 @@
import android.os.Environment
import android.view.View
import androidx.camera.camera2.Camera2Config
+import androidx.camera.camera2.pipe.integration.CameraPipeConfig
import androidx.camera.core.CameraSelector
import androidx.camera.integration.uiwidgets.R
import androidx.camera.lifecycle.ProcessCameraProvider
+import androidx.camera.testing.CameraPipeConfigTestRule
import androidx.camera.testing.CameraUtil
import androidx.camera.testing.CoreAppTestUtil
import androidx.test.core.app.ActivityScenario
@@ -53,11 +55,25 @@
* - Wait for the image capture callback
* - Verify the picture's rotation or resolution
*/
-abstract class ImageCaptureBaseTest<A : CameraActivity> {
+abstract class ImageCaptureBaseTest<A : CameraActivity>(
+ cameraXConfig: String = CameraActivity.CAMERA2_IMPLEMENTATION_OPTION
+) {
+
+ @get:Rule
+ val cameraPipeConfigTestRule = CameraPipeConfigTestRule(
+ active = cameraXConfig == CameraActivity.CAMERA_PIPE_IMPLEMENTATION_OPTION,
+ forAllTests = true,
+ )
@get:Rule
val useCameraRule = CameraUtil.grantCameraPermissionAndPreTest(
- testCameraRule, CameraUtil.PreTestCameraIdList(Camera2Config.defaultConfig())
+ testCameraRule, CameraUtil.PreTestCameraIdList(
+ if (cameraXConfig == CameraActivity.CAMERA2_IMPLEMENTATION_OPTION) {
+ Camera2Config.defaultConfig()
+ } else {
+ CameraPipeConfig.defaultConfig()
+ }
+ )
)
@get:Rule
@@ -113,9 +129,11 @@
protected inline fun <reified A : CameraActivity> verifyRotation(
lensFacing: Int,
captureMode: Int,
- rotate: ActivityScenario<A>.() -> Unit
+ cameraXConfig: String = CameraActivity.CAMERA2_IMPLEMENTATION_OPTION,
+ rotate: ActivityScenario<A>.() -> Unit,
) {
- val activityScenario: ActivityScenario<A> = launchActivity(lensFacing, captureMode)
+ val activityScenario: ActivityScenario<A> =
+ launchActivity(lensFacing, captureMode, cameraXConfig)
activityScenario.use { scenario ->
// Wait until the camera is set up and analysis starts receiving frames
@@ -172,7 +190,8 @@
protected inline fun <reified A : CameraActivity> launchActivity(
lensFacing: Int,
- captureMode: Int
+ captureMode: Int,
+ cameraXConfig: String,
): ActivityScenario<A> {
val intent = Intent(
ApplicationProvider.getApplicationContext(),
@@ -180,6 +199,7 @@
).apply {
putExtra(CameraActivity.KEY_LENS_FACING, lensFacing)
putExtra(CameraActivity.KEY_IMAGE_CAPTURE_MODE, captureMode)
+ putExtra(CameraActivity.KEY_CAMERA_IMPLEMENTATION, cameraXConfig)
}
return ActivityScenario.launch<A>(intent)
}
@@ -206,10 +226,16 @@
CameraActivity.IMAGE_CAPTURE_MODE_MEDIA_STORE
)
@JvmStatic
- protected val lensFacing =
+ protected val lensFacingList =
arrayOf(CameraSelector.LENS_FACING_BACK, CameraSelector.LENS_FACING_FRONT)
@JvmStatic
+ protected val cameraXConfigList = arrayOf(
+ CameraActivity.CAMERA2_IMPLEMENTATION_OPTION,
+ CameraActivity.CAMERA_PIPE_IMPLEMENTATION_OPTION
+ )
+
+ @JvmStatic
lateinit var testCameraRule: CameraUtil.PreTestCamera
@BeforeClass
diff --git a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureLockedOrientationTest.kt b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureLockedOrientationTest.kt
index 696972a..7165a2e 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureLockedOrientationTest.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureLockedOrientationTest.kt
@@ -29,18 +29,23 @@
class ImageCaptureLockedOrientationTest(
private val lensFacing: Int,
private val rotationDegrees: Int,
- private val captureMode: Int
-) : ImageCaptureBaseTest<LockedOrientationActivity>() {
+ private val captureMode: Int,
+ private val cameraXConfig: String
+) : ImageCaptureBaseTest<LockedOrientationActivity>(cameraXConfig) {
companion object {
private val rotationDegrees = arrayOf(0, 90, 180, 270)
@JvmStatic
- @Parameterized.Parameters(name = "lensFacing={0}, rotationDegrees={1}, captureMode={2}")
+ @Parameterized.Parameters(
+ name = "lensFacing={0}, rotationDegrees={1}, captureMode={2}, cameraXConfig={3}"
+ )
fun data() = mutableListOf<Array<Any?>>().apply {
- lensFacing.forEach { lens ->
+ lensFacingList.forEach { lens ->
rotationDegrees.forEach { rotation ->
captureModes.forEach { mode ->
- add(arrayOf(lens, rotation, mode))
+ cameraXConfigList.forEach { cameraXConfig ->
+ add(arrayOf(lens, rotation, mode, cameraXConfig))
+ }
}
}
}
@@ -59,7 +64,7 @@
@Test
fun verifyRotation() {
- verifyRotation<LockedOrientationActivity>(lensFacing, captureMode) {
+ verifyRotation<LockedOrientationActivity>(lensFacing, captureMode, cameraXConfig) {
rotate(rotationDegrees)
}
}
diff --git a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureOrientationConfigChangesTest.kt b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureOrientationConfigChangesTest.kt
index c773656..ffc5c97 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureOrientationConfigChangesTest.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureOrientationConfigChangesTest.kt
@@ -38,8 +38,9 @@
class ImageCaptureOrientationConfigChangesTest(
private val lensFacing: Int,
private val rotation: Int,
- private val captureMode: Int
-) : ImageCaptureBaseTest<OrientationConfigChangesOverriddenActivity>() {
+ private val captureMode: Int,
+ private val cameraXConfig: String
+) : ImageCaptureBaseTest<OrientationConfigChangesOverriddenActivity>(cameraXConfig) {
companion object {
private val rotations = arrayOf(
@@ -50,12 +51,16 @@
)
@JvmStatic
- @Parameterized.Parameters(name = "lensFacing={0}, rotation={1}, captureMode={2}")
+ @Parameterized.Parameters(
+ name = "lensFacing={0}, rotation={1}, captureMode={2}, cameraXConfig={3}"
+ )
fun data() = mutableListOf<Array<Any?>>().apply {
- lensFacing.forEach { lens ->
+ lensFacingList.forEach { lens ->
rotations.forEach { rotation ->
captureModes.forEach { mode ->
- add(arrayOf(lens, rotation, mode))
+ cameraXConfigList.forEach { cameraXConfig ->
+ add(arrayOf(lens, rotation, mode, cameraXConfig))
+ }
}
}
}
@@ -83,7 +88,8 @@
fun verifyRotation() {
verifyRotation<OrientationConfigChangesOverriddenActivity>(
lensFacing,
- captureMode
+ captureMode,
+ cameraXConfig
) {
if (rotate(rotation)) {
diff --git a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureUnlockedOrientationTest.kt b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureUnlockedOrientationTest.kt
index 0248f11..a0204db 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureUnlockedOrientationTest.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/rotations/ImageCaptureUnlockedOrientationTest.kt
@@ -35,48 +35,51 @@
class ImageCaptureUnlockedOrientationTest(
private val lensFacing: Int,
private val captureMode: Int,
+ private val cameraXConfig: String,
private val rotation: RotationUnlocked,
private val testName: String
-) : ImageCaptureBaseTest<UnlockedOrientationActivity>() {
+) : ImageCaptureBaseTest<UnlockedOrientationActivity>(cameraXConfig) {
companion object {
@JvmStatic
- @Parameterized.Parameters(name = "{3}")
+ @Parameterized.Parameters(name = "cameraXConfig={2}, {4}")
fun data() = mutableListOf<Array<Any?>>().apply {
- lensFacing.forEach { lens ->
+ lensFacingList.forEach { lens ->
captureModes.forEach { mode ->
- val lensName = if (lens == CameraSelector.LENS_FACING_BACK) {
- "Back lens"
- } else {
- "Front lens"
- }
+ cameraXConfigList.forEach { cameraXConfig ->
+ val lensName = if (lens == CameraSelector.LENS_FACING_BACK) {
+ "Back lens"
+ } else {
+ "Front lens"
+ }
- val captureModeName = when (mode) {
- IMAGE_CAPTURE_MODE_IN_MEMORY -> "In memory"
- IMAGE_CAPTURE_MODE_FILE -> "File"
- IMAGE_CAPTURE_MODE_OUTPUT_STREAM -> "Output stream"
- IMAGE_CAPTURE_MODE_MEDIA_STORE -> "Media store"
- else -> "Invalid capture mode"
- }
+ val captureModeName = when (mode) {
+ IMAGE_CAPTURE_MODE_IN_MEMORY -> "In memory"
+ IMAGE_CAPTURE_MODE_FILE -> "File"
+ IMAGE_CAPTURE_MODE_OUTPUT_STREAM -> "Output stream"
+ IMAGE_CAPTURE_MODE_MEDIA_STORE -> "Media store"
+ else -> "Invalid capture mode"
+ }
- add(
- arrayOf(
- lens, mode, RotationUnlocked.Natural,
- "$lensName - $captureModeName - Natural"
+ add(
+ arrayOf(
+ lens, mode, cameraXConfig, RotationUnlocked.Natural,
+ "$lensName - $captureModeName - Natural"
+ )
)
- )
- add(
- arrayOf(
- lens, mode, RotationUnlocked.Left,
- "$lensName - $captureModeName - Left"
+ add(
+ arrayOf(
+ lens, mode, cameraXConfig, RotationUnlocked.Left,
+ "$lensName - $captureModeName - Left"
+ )
)
- )
- add(
- arrayOf(
- lens, mode, RotationUnlocked.Right,
- "$lensName - $captureModeName - Right"
+ add(
+ arrayOf(
+ lens, mode, cameraXConfig, RotationUnlocked.Right,
+ "$lensName - $captureModeName - Right"
+ )
)
- )
+ }
}
}
}
@@ -94,7 +97,7 @@
@Test
fun verifyRotation() {
- verifyRotation<UnlockedOrientationActivity>(lensFacing, captureMode) {
+ verifyRotation<UnlockedOrientationActivity>(lensFacing, captureMode, cameraXConfig) {
if (rotation.shouldRotate) {
rotateDeviceAndWait()
}
diff --git a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/viewpager/ViewPager2ActivityTest.kt b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/viewpager/ViewPager2ActivityTest.kt
index 1f21a3d..1567135 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/viewpager/ViewPager2ActivityTest.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/viewpager/ViewPager2ActivityTest.kt
@@ -22,8 +22,11 @@
import android.view.TextureView
import android.view.View
import androidx.camera.camera2.Camera2Config
+import androidx.camera.camera2.pipe.integration.CameraPipeConfig
import androidx.camera.core.CameraSelector
import androidx.camera.integration.uiwidgets.R
+import androidx.camera.lifecycle.ProcessCameraProvider
+import androidx.camera.testing.CameraPipeConfigTestRule
import androidx.camera.testing.CameraUtil
import androidx.camera.testing.CoreAppTestUtil
import androidx.camera.view.PreviewView
@@ -44,6 +47,7 @@
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.async
import kotlinx.coroutines.runBlocking
+import org.junit.After
import org.junit.Assume
import org.junit.Before
import org.junit.Rule
@@ -53,24 +57,50 @@
@RunWith(Parameterized::class)
@LargeTest
-class ViewPager2ActivityTest(private val lensFacing: Int) {
+class ViewPager2ActivityTest(private val lensFacing: Int, private val cameraXConfig: String) {
companion object {
private const val ACTION_IDLE_TIMEOUT: Long = 5000
+
@JvmStatic
- @Parameterized.Parameters(name = "lensFacing={0}")
- fun data() = listOf(
- CameraSelector.LENS_FACING_FRONT,
- CameraSelector.LENS_FACING_BACK
+ private val lensFacingList =
+ arrayOf(CameraSelector.LENS_FACING_BACK, CameraSelector.LENS_FACING_FRONT)
+
+ @JvmStatic
+ private val cameraXConfigList = arrayOf(
+ CameraFragment.CAMERA2_IMPLEMENTATION_OPTION,
+ CameraFragment.CAMERA_PIPE_IMPLEMENTATION_OPTION
)
+ @JvmStatic
+ @Parameterized.Parameters(name = "lensFacing={0}, cameraXConfig={1}")
+ fun data() = mutableListOf<Array<Any?>>().apply {
+ lensFacingList.forEach { lens ->
+ cameraXConfigList.forEach { cameraXConfig ->
+ add(arrayOf(lens, cameraXConfig))
+ }
+ }
+ }
+
@JvmField
val testCameraRule = CameraUtil.PreTestCamera()
}
@get:Rule
+ val cameraPipeConfigTestRule = CameraPipeConfigTestRule(
+ active = cameraXConfig == CameraFragment.CAMERA_PIPE_IMPLEMENTATION_OPTION,
+ forAllTests = true,
+ )
+
+ @get:Rule
val useCamera = CameraUtil.grantCameraPermissionAndPreTest(
- testCameraRule, CameraUtil.PreTestCameraIdList(Camera2Config.defaultConfig())
+ testCameraRule, CameraUtil.PreTestCameraIdList(
+ if (cameraXConfig == CameraFragment.CAMERA2_IMPLEMENTATION_OPTION) {
+ Camera2Config.defaultConfig()
+ } else {
+ CameraPipeConfig.defaultConfig()
+ }
+ )
)
private val mDevice =
@@ -80,15 +110,27 @@
fun setUp() {
Assume.assumeTrue(CameraUtil.hasCameraWithLensFacing(lensFacing))
+ // Ensure it's in a natural orientation. This change could delay around 1 sec, please
+ // call this earlier before launching the test activity.
+ mDevice.setOrientationNatural()
+
// Clear the device UI and check if there is no dialog or lock screen on the top of the
// window.
CoreAppTestUtil.prepareDeviceUI(InstrumentationRegistry.getInstrumentation())
}
+ @After
+ fun tearDown() {
+ val context = ApplicationProvider.getApplicationContext<Context>()
+ val cameraProvider = ProcessCameraProvider.getInstance(context)[10, TimeUnit.SECONDS]
+ cameraProvider.shutdown()[10, TimeUnit.SECONDS]
+ mDevice.unfreezeRotation()
+ }
+
// The test makes sure the camera PreviewView is in the streaming state.
@Test
fun testPreviewViewUpdateAfterStopResume() {
- launchActivity(lensFacing).use { scenario ->
+ launchActivity(lensFacing, cameraXConfig).use { scenario ->
// At first, check Preview in stream state
assertStreamState(scenario, PreviewView.StreamState.STREAMING)
@@ -106,7 +148,7 @@
@Test
fun testPreviewViewUpdateAfterSwitch() {
- launchActivity(lensFacing).use { scenario ->
+ launchActivity(lensFacing, cameraXConfig).use { scenario ->
// At first, check Preview in stream state
assertStreamState(scenario, PreviewView.StreamState.STREAMING)
@@ -126,7 +168,7 @@
@Test
fun testPreviewViewUpdateAfterSwitchAndStop_ResumeAndSwitchBack() {
- launchActivity(lensFacing).use { scenario ->
+ launchActivity(lensFacing, cameraXConfig).use { scenario ->
// At first, check Preview in stream state
assertStreamState(scenario, PreviewView.StreamState.STREAMING)
@@ -151,13 +193,18 @@
}
}
- private fun launchActivity(lensFacing: Int):
+ private fun launchActivity(
+ lensFacing: Int,
+ cameraXConfig: String = CameraFragment.CAMERA2_IMPLEMENTATION_OPTION,
+ ):
ActivityScenario<ViewPager2Activity> {
val intent = Intent(
ApplicationProvider.getApplicationContext<Context>(),
ViewPager2Activity::class.java
- )
- intent.putExtra(BaseActivity.INTENT_LENS_FACING, lensFacing)
+ ).apply {
+ putExtra(BaseActivity.INTENT_LENS_FACING, lensFacing)
+ putExtra(CameraFragment.KEY_CAMERA_IMPLEMENTATION, cameraXConfig)
+ }
return ActivityScenario.launch<ViewPager2Activity>(intent)
}
diff --git a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/viewpager/ViewPagerActivityTest.kt b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/viewpager/ViewPagerActivityTest.kt
index bbfc526..d4b7e98 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/viewpager/ViewPagerActivityTest.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/androidTest/java/androidx/camera/integration/uiwidgets/viewpager/ViewPagerActivityTest.kt
@@ -22,8 +22,11 @@
import android.view.TextureView
import android.view.View
import androidx.camera.camera2.Camera2Config
+import androidx.camera.camera2.pipe.integration.CameraPipeConfig
import androidx.camera.core.CameraSelector
import androidx.camera.integration.uiwidgets.R
+import androidx.camera.lifecycle.ProcessCameraProvider
+import androidx.camera.testing.CameraPipeConfigTestRule
import androidx.camera.testing.CameraUtil
import androidx.camera.testing.CoreAppTestUtil
import androidx.camera.view.PreviewView
@@ -46,6 +49,7 @@
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.async
import kotlinx.coroutines.runBlocking
+import org.junit.After
import org.junit.Assume
import org.junit.Before
import org.junit.Rule
@@ -55,24 +59,50 @@
@RunWith(Parameterized::class)
@LargeTest
-class ViewPagerActivityTest(private val lensFacing: Int) {
+class ViewPagerActivityTest(private val lensFacing: Int, private val cameraXConfig: String) {
companion object {
private const val ACTION_IDLE_TIMEOUT: Long = 5000
+
@JvmStatic
- @Parameterized.Parameters(name = "lensFacing={0}")
- fun data() = listOf(
- CameraSelector.LENS_FACING_FRONT,
- CameraSelector.LENS_FACING_BACK
+ private val lensFacingList =
+ arrayOf(CameraSelector.LENS_FACING_BACK, CameraSelector.LENS_FACING_FRONT)
+
+ @JvmStatic
+ private val cameraXConfigList = arrayOf(
+ CameraFragment.CAMERA2_IMPLEMENTATION_OPTION,
+ CameraFragment.CAMERA_PIPE_IMPLEMENTATION_OPTION
)
+ @JvmStatic
+ @Parameterized.Parameters(name = "lensFacing={0}, cameraXConfig={1}")
+ fun data() = mutableListOf<Array<Any?>>().apply {
+ lensFacingList.forEach { lens ->
+ cameraXConfigList.forEach { cameraXConfig ->
+ add(arrayOf(lens, cameraXConfig))
+ }
+ }
+ }
+
@JvmField
val testCameraRule = CameraUtil.PreTestCamera()
}
@get:Rule
+ val cameraPipeConfigTestRule = CameraPipeConfigTestRule(
+ active = cameraXConfig == CameraFragment.CAMERA_PIPE_IMPLEMENTATION_OPTION,
+ forAllTests = true,
+ )
+
+ @get:Rule
val useCamera = CameraUtil.grantCameraPermissionAndPreTest(
- testCameraRule, CameraUtil.PreTestCameraIdList(Camera2Config.defaultConfig())
+ testCameraRule, CameraUtil.PreTestCameraIdList(
+ if (cameraXConfig == CameraFragment.CAMERA2_IMPLEMENTATION_OPTION) {
+ Camera2Config.defaultConfig()
+ } else {
+ CameraPipeConfig.defaultConfig()
+ }
+ )
)
private val mDevice =
@@ -82,15 +112,27 @@
fun setUp() {
Assume.assumeTrue(CameraUtil.hasCameraWithLensFacing(lensFacing))
+ // Ensure it's in a natural orientation. This change could delay around 1 sec, please
+ // call this earlier before launching the test activity.
+ mDevice.setOrientationNatural()
+
// Clear the device UI and check if there is no dialog or lock screen on the top of the
// window.
CoreAppTestUtil.prepareDeviceUI(InstrumentationRegistry.getInstrumentation())
}
+ @After
+ fun tearDown() {
+ val context = ApplicationProvider.getApplicationContext<Context>()
+ val cameraProvider = ProcessCameraProvider.getInstance(context)[10, TimeUnit.SECONDS]
+ cameraProvider.shutdown()[10, TimeUnit.SECONDS]
+ mDevice.unfreezeRotation()
+ }
+
// The test makes sure the camera PreviewView is in the streaming state.
@Test
fun testPreviewViewUpdateAfterStopResume() {
- launchActivity(lensFacing).use { scenario ->
+ launchActivity(lensFacing, cameraXConfig).use { scenario ->
// At first, check Preview in stream state
assertStreamState(scenario, PreviewView.StreamState.STREAMING)
@@ -108,7 +150,7 @@
@FlakyTest(bugId = 230873000)
@Test
fun testPreviewViewUpdateAfterSwitch() {
- launchActivity(lensFacing).use { scenario ->
+ launchActivity(lensFacing, cameraXConfig).use { scenario ->
// At first, check Preview in stream state
assertStreamState(scenario, PreviewView.StreamState.STREAMING)
@@ -127,7 +169,7 @@
@Test
fun testPreviewViewUpdateAfterSwitchOutAndStop_ResumeAndSwitchBack() {
- launchActivity(lensFacing).use { scenario ->
+ launchActivity(lensFacing, cameraXConfig).use { scenario ->
// At first, check Preview in stream state
assertStreamState(scenario, PreviewView.StreamState.STREAMING)
@@ -154,13 +196,18 @@
// TODO(b/162810853): Add tests for PreviewView with PreviewView.ImplementationMode
// .SURFACE_VIEW in ViewPagerActivity.
- private fun launchActivity(lensFacing: Int):
+ private fun launchActivity(
+ lensFacing: Int,
+ cameraXConfig: String = CameraFragment.CAMERA2_IMPLEMENTATION_OPTION,
+ ):
ActivityScenario<ViewPagerActivity> {
val intent = Intent(
ApplicationProvider.getApplicationContext<Context>(),
ViewPagerActivity::class.java
- )
- intent.putExtra(BaseActivity.INTENT_LENS_FACING, lensFacing)
+ ).apply {
+ putExtra(BaseActivity.INTENT_LENS_FACING, lensFacing)
+ putExtra(CameraFragment.KEY_CAMERA_IMPLEMENTATION, cameraXConfig)
+ }
return ActivityScenario.launch<ViewPagerActivity>(intent)
}
diff --git a/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/rotations/CameraActivity.kt b/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/rotations/CameraActivity.kt
index c6f702ef..3cfa805 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/rotations/CameraActivity.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/rotations/CameraActivity.kt
@@ -22,10 +22,14 @@
import android.os.Build
import android.os.Bundle
import android.provider.MediaStore
+import android.text.TextUtils
import android.util.Log
import android.util.Size
+import androidx.annotation.OptIn
import androidx.annotation.VisibleForTesting
import androidx.appcompat.app.AppCompatActivity
+import androidx.camera.camera2.Camera2Config
+import androidx.camera.camera2.pipe.integration.CameraPipeConfig
import androidx.camera.core.Camera
import androidx.camera.core.CameraSelector
import androidx.camera.core.ImageAnalysis
@@ -35,6 +39,7 @@
import androidx.camera.core.Preview
import androidx.camera.core.impl.utils.executor.CameraXExecutors
import androidx.camera.integration.uiwidgets.databinding.ActivityRotationsMainBinding
+import androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
@@ -96,7 +101,29 @@
}
}
+ @OptIn(ExperimentalCameraProviderConfiguration::class)
private fun setUpCamera() {
+ val newCameraImpl = intent.getStringExtra(KEY_CAMERA_IMPLEMENTATION)
+ Log.d(TAG, "Set up cameraImpl: $newCameraImpl")
+ if (!TextUtils.isEmpty(newCameraImpl) && newCameraImpl != cameraImpl) {
+ try {
+ Log.d(TAG, "ProcessCameraProvider initialize using $newCameraImpl")
+ ProcessCameraProvider.configureInstance(
+ when (newCameraImpl) {
+ CAMERA2_IMPLEMENTATION_OPTION -> Camera2Config.defaultConfig()
+ CAMERA_PIPE_IMPLEMENTATION_OPTION -> CameraPipeConfig.defaultConfig()
+ else -> Camera2Config.defaultConfig()
+ }
+ )
+ cameraImpl = newCameraImpl
+ } catch (e: IllegalStateException) {
+ throw IllegalStateException(
+ "WARNING: CameraX is currently configured to a different implementation " +
+ "this would have resulted in unexpected behavior.", e
+ )
+ }
+ }
+
val cameraProcessFuture = ProcessCameraProvider.getInstance(this)
cameraProcessFuture.addListener(
Runnable {
@@ -305,6 +332,9 @@
companion object {
const val KEY_LENS_FACING = "lens-facing"
const val KEY_IMAGE_CAPTURE_MODE = "image-capture-mode"
+ const val KEY_CAMERA_IMPLEMENTATION = "camera_implementation"
+ const val CAMERA2_IMPLEMENTATION_OPTION = "camera2"
+ const val CAMERA_PIPE_IMPLEMENTATION_OPTION = "camera_pipe"
const val IMAGE_CAPTURE_MODE_IN_MEMORY = 0
const val IMAGE_CAPTURE_MODE_FILE = 1
const val IMAGE_CAPTURE_MODE_OUTPUT_STREAM = 2
@@ -314,5 +344,6 @@
private const val REQUEST_CODE_PERMISSIONS = 20
val PERMISSIONS =
arrayOf(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ private var cameraImpl: String? = null
}
}
diff --git a/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/viewpager/CameraFragment.kt b/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/viewpager/CameraFragment.kt
index 02db5e1..e9c2b48 100644
--- a/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/viewpager/CameraFragment.kt
+++ b/camera/integration-tests/uiwidgetstestapp/src/main/java/androidx/camera/integration/uiwidgets/viewpager/CameraFragment.kt
@@ -18,13 +18,18 @@
import android.content.Context
import android.os.Bundle
+import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.annotation.OptIn
+import androidx.camera.camera2.Camera2Config
+import androidx.camera.camera2.pipe.integration.CameraPipeConfig
import androidx.camera.core.CameraSelector
import androidx.camera.core.Preview
import androidx.camera.integration.uiwidgets.databinding.FragmentTextureviewBinding
+import androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.view.PreviewView
import androidx.core.content.ContextCompat
@@ -38,6 +43,10 @@
companion object {
fun newInstance() = CameraFragment()
private const val TAG = "CameraFragment"
+ const val KEY_CAMERA_IMPLEMENTATION = "camera_implementation"
+ const val CAMERA2_IMPLEMENTATION_OPTION = "camera2"
+ const val CAMERA_PIPE_IMPLEMENTATION_OPTION = "camera_pipe"
+ private var cameraImpl: String? = null
}
private var _binding: FragmentTextureviewBinding? = null
@@ -46,8 +55,29 @@
private lateinit var cameraProviderFuture: ListenableFuture<ProcessCameraProvider>
private lateinit var cameraProvider: ProcessCameraProvider
+ @OptIn(ExperimentalCameraProviderConfiguration::class)
override fun onAttach(context: Context) {
super.onAttach(context)
+ val newCameraImpl = activity?.intent?.getStringExtra(KEY_CAMERA_IMPLEMENTATION)
+ Log.d(TAG, "Set up cameraImpl: $newCameraImpl")
+ if (!TextUtils.isEmpty(newCameraImpl) && newCameraImpl != cameraImpl) {
+ try {
+ Log.d(TAG, "ProcessCameraProvider initialize using $newCameraImpl")
+ ProcessCameraProvider.configureInstance(
+ when (newCameraImpl) {
+ CAMERA2_IMPLEMENTATION_OPTION -> Camera2Config.defaultConfig()
+ CAMERA_PIPE_IMPLEMENTATION_OPTION -> CameraPipeConfig.defaultConfig()
+ else -> Camera2Config.defaultConfig()
+ }
+ )
+ cameraImpl = newCameraImpl
+ } catch (e: IllegalStateException) {
+ throw IllegalStateException(
+ "WARNING: CameraX is currently configured to a different implementation " +
+ "this would have resulted in unexpected behavior.", e
+ )
+ }
+ }
cameraProviderFuture = ProcessCameraProvider.getInstance(context)
}
diff --git a/car/app/app-automotive/src/main/java/androidx/car/app/activity/CarAppViewModelFactory.java b/car/app/app-automotive/src/main/java/androidx/car/app/activity/CarAppViewModelFactory.java
index 4ce892c..dd8bdef 100644
--- a/car/app/app-automotive/src/main/java/androidx/car/app/activity/CarAppViewModelFactory.java
+++ b/car/app/app-automotive/src/main/java/androidx/car/app/activity/CarAppViewModelFactory.java
@@ -24,6 +24,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.car.app.SessionInfo;
+import androidx.core.util.Pair;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
@@ -31,13 +32,15 @@
import java.util.Map;
/**
- * A factory to provide a unique {@link CarAppViewModel} for each given {@link ComponentName}.
+ * A factory to provide a unique {@link CarAppViewModel} for each pair of {@link ComponentName} and
+ * {@link SessionInfo}.
*
* @hide
*/
@RestrictTo(LIBRARY)
class CarAppViewModelFactory implements ViewModelProvider.Factory {
- private static final Map<ComponentName, CarAppViewModelFactory> sInstances = new HashMap<>();
+ private static final Map<Pair<ComponentName, SessionInfo>, CarAppViewModelFactory> sInstances =
+ new HashMap<>();
Application mApplication;
ComponentName mComponentName;
@@ -51,17 +54,19 @@
}
/**
- * Retrieve a singleton instance of CarAppViewModelFactory for the given key.
+ * Retrieve a singleton instance of CarAppViewModelFactory for the given
+ * {@link ComponentName} and {@link SessionInfo}.
*
* @return A valid {@link CarAppViewModelFactory}
*/
@NonNull
static CarAppViewModelFactory getInstance(Application application,
ComponentName componentName, SessionInfo sessionInfo) {
- CarAppViewModelFactory instance = sInstances.get(componentName);
+ Pair<ComponentName, SessionInfo> instanceCacheKey = new Pair<>(componentName, sessionInfo);
+ CarAppViewModelFactory instance = sInstances.get(instanceCacheKey);
if (instance == null) {
instance = new CarAppViewModelFactory(componentName, application, sessionInfo);
- sInstances.put(componentName, instance);
+ sInstances.put(instanceCacheKey, instance);
}
return instance;
}
diff --git a/car/app/app-automotive/src/test/java/androidx/car/app/activity/CarAppViewModelFactoryTest.java b/car/app/app-automotive/src/test/java/androidx/car/app/activity/CarAppViewModelFactoryTest.java
index 8625a22..fc228fe 100644
--- a/car/app/app-automotive/src/test/java/androidx/car/app/activity/CarAppViewModelFactoryTest.java
+++ b/car/app/app-automotive/src/test/java/androidx/car/app/activity/CarAppViewModelFactoryTest.java
@@ -17,12 +17,14 @@
package androidx.car.app.activity;
import static androidx.car.app.SessionInfo.DEFAULT_SESSION_INFO;
+import static androidx.car.app.SessionInfo.DISPLAY_TYPE_MAIN;
import static com.google.common.truth.Truth.assertThat;
import android.app.Application;
import android.content.ComponentName;
+import androidx.car.app.SessionInfo;
import androidx.test.core.app.ApplicationProvider;
import org.junit.Test;
@@ -49,18 +51,29 @@
CarAppViewModelFactory factory2 = CarAppViewModelFactory.getInstance(mApplication,
TEST_COMPONENT_NAME_1, DEFAULT_SESSION_INFO);
- assertThat(factory1).isEqualTo(factory2);
+ assertThat(factory1).isSameInstanceAs(factory2);
}
@Test
- public void getInstance_differentKeys_returnsDifferent() {
+ public void getInstance_differentComponentNames_returnsDifferent() {
CarAppViewModelFactory factory1 = CarAppViewModelFactory.getInstance(mApplication,
TEST_COMPONENT_NAME_1, DEFAULT_SESSION_INFO);
CarAppViewModelFactory factory2 = CarAppViewModelFactory.getInstance(mApplication,
TEST_COMPONENT_NAME_2, DEFAULT_SESSION_INFO);
- assertThat(factory1).isNotEqualTo(factory2);
+ assertThat(factory1).isNotSameInstanceAs(factory2);
+ }
+
+ @Test
+ public void getInstance_differentSessionInfos_returnsDifferent() {
+ CarAppViewModelFactory factory1 = CarAppViewModelFactory.getInstance(mApplication,
+ TEST_COMPONENT_NAME_1, DEFAULT_SESSION_INFO);
+
+ CarAppViewModelFactory factory2 = CarAppViewModelFactory.getInstance(mApplication,
+ TEST_COMPONENT_NAME_1, new SessionInfo(DISPLAY_TYPE_MAIN, "a session id"));
+
+ assertThat(factory1).isNotSameInstanceAs(factory2);
}
@Test
diff --git a/car/app/app/api/current.txt b/car/app/app/api/current.txt
index cc6101d..919b746 100644
--- a/car/app/app/api/current.txt
+++ b/car/app/app/api/current.txt
@@ -980,6 +980,7 @@
method public java.util.List<androidx.car.app.model.Action!> getActions();
method public androidx.car.app.model.CarIcon? getImage();
method public androidx.car.app.model.Metadata? getMetadata();
+ method public int getNumericDecoration();
method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
method public int getRowImageType();
method public java.util.List<androidx.car.app.model.CarText!> getTexts();
@@ -992,6 +993,7 @@
field public static final int IMAGE_TYPE_ICON = 4; // 0x4
field public static final int IMAGE_TYPE_LARGE = 2; // 0x2
field public static final int IMAGE_TYPE_SMALL = 1; // 0x1
+ field public static final int NO_DECORATION = -1; // 0xffffffff
}
public static final class Row.Builder {
@@ -1005,6 +1007,7 @@
method public androidx.car.app.model.Row.Builder setImage(androidx.car.app.model.CarIcon);
method public androidx.car.app.model.Row.Builder setImage(androidx.car.app.model.CarIcon, int);
method public androidx.car.app.model.Row.Builder setMetadata(androidx.car.app.model.Metadata);
+ method public androidx.car.app.model.Row.Builder setNumericDecoration(int);
method public androidx.car.app.model.Row.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
method public androidx.car.app.model.Row.Builder setTitle(CharSequence);
method public androidx.car.app.model.Row.Builder setTitle(androidx.car.app.model.CarText);
diff --git a/car/app/app/api/public_plus_experimental_current.txt b/car/app/app/api/public_plus_experimental_current.txt
index a040961..41b5994 100644
--- a/car/app/app/api/public_plus_experimental_current.txt
+++ b/car/app/app/api/public_plus_experimental_current.txt
@@ -1330,6 +1330,7 @@
method public java.util.List<androidx.car.app.model.Action!> getActions();
method public androidx.car.app.model.CarIcon? getImage();
method public androidx.car.app.model.Metadata? getMetadata();
+ method public int getNumericDecoration();
method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
method public int getRowImageType();
method public java.util.List<androidx.car.app.model.CarText!> getTexts();
@@ -1342,6 +1343,7 @@
field public static final int IMAGE_TYPE_ICON = 4; // 0x4
field public static final int IMAGE_TYPE_LARGE = 2; // 0x2
field public static final int IMAGE_TYPE_SMALL = 1; // 0x1
+ field public static final int NO_DECORATION = -1; // 0xffffffff
}
public static final class Row.Builder {
@@ -1355,6 +1357,7 @@
method public androidx.car.app.model.Row.Builder setImage(androidx.car.app.model.CarIcon);
method public androidx.car.app.model.Row.Builder setImage(androidx.car.app.model.CarIcon, int);
method public androidx.car.app.model.Row.Builder setMetadata(androidx.car.app.model.Metadata);
+ method public androidx.car.app.model.Row.Builder setNumericDecoration(int);
method public androidx.car.app.model.Row.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
method public androidx.car.app.model.Row.Builder setTitle(CharSequence);
method public androidx.car.app.model.Row.Builder setTitle(androidx.car.app.model.CarText);
diff --git a/car/app/app/api/restricted_current.txt b/car/app/app/api/restricted_current.txt
index cc6101d..919b746 100644
--- a/car/app/app/api/restricted_current.txt
+++ b/car/app/app/api/restricted_current.txt
@@ -980,6 +980,7 @@
method public java.util.List<androidx.car.app.model.Action!> getActions();
method public androidx.car.app.model.CarIcon? getImage();
method public androidx.car.app.model.Metadata? getMetadata();
+ method public int getNumericDecoration();
method public androidx.car.app.model.OnClickDelegate? getOnClickDelegate();
method public int getRowImageType();
method public java.util.List<androidx.car.app.model.CarText!> getTexts();
@@ -992,6 +993,7 @@
field public static final int IMAGE_TYPE_ICON = 4; // 0x4
field public static final int IMAGE_TYPE_LARGE = 2; // 0x2
field public static final int IMAGE_TYPE_SMALL = 1; // 0x1
+ field public static final int NO_DECORATION = -1; // 0xffffffff
}
public static final class Row.Builder {
@@ -1005,6 +1007,7 @@
method public androidx.car.app.model.Row.Builder setImage(androidx.car.app.model.CarIcon);
method public androidx.car.app.model.Row.Builder setImage(androidx.car.app.model.CarIcon, int);
method public androidx.car.app.model.Row.Builder setMetadata(androidx.car.app.model.Metadata);
+ method public androidx.car.app.model.Row.Builder setNumericDecoration(int);
method public androidx.car.app.model.Row.Builder setOnClickListener(androidx.car.app.model.OnClickListener);
method public androidx.car.app.model.Row.Builder setTitle(CharSequence);
method public androidx.car.app.model.Row.Builder setTitle(androidx.car.app.model.CarText);
diff --git a/car/app/app/src/main/java/androidx/car/app/SessionInfoIntentEncoder.java b/car/app/app/src/main/java/androidx/car/app/SessionInfoIntentEncoder.java
index 23850f4..0ee4c24 100644
--- a/car/app/app/src/main/java/androidx/car/app/SessionInfoIntentEncoder.java
+++ b/car/app/app/src/main/java/androidx/car/app/SessionInfoIntentEncoder.java
@@ -23,8 +23,6 @@
import androidx.annotation.DoNotInline;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
-import androidx.car.app.serialization.Bundleable;
-import androidx.car.app.serialization.BundlerException;
/** Helper to encode and decode a {@link SessionInfo} from an {@link Intent} */
public class SessionInfoIntentEncoder {
@@ -32,8 +30,13 @@
private SessionInfoIntentEncoder() {
}
- /** The key for a {@link Bundleable} extra containing the {@link SessionInfo} for a bind. */
- private static final String EXTRA_SESSION_INFO = "androidx.car.app.extra.SESSION_INFO";
+ /** The key for a {@link Bundle} extra containing the {@link SessionInfo} for a bind. */
+ private static final String EXTRA_SESSION_INFO = "androidx.car.app.extra.SESSION_INFO_BUNDLE";
+
+ /** Key for {@link SessionInfo#mDisplayType}. */
+ private static final String KEY_DISPLAY_TYPE = "display-type";
+ /** Key for {@link SessionInfo#mSessionId}. */
+ private static final String KEY_SESSION_ID = "session-id";
/**
* Sets the unique identifier for the given {@code intent} and encodes the passed
@@ -49,18 +52,17 @@
} else {
intent.setData(new Uri.Builder().path(sessionInfo.toString()).build());
}
- try {
- intent.putExtra(EXTRA_SESSION_INFO, Bundleable.create(sessionInfo));
- } catch (BundlerException e) {
- throw new RuntimeException(e);
- }
+
+ Bundle sessionInfoBundle = new Bundle();
+ sessionInfoBundle.putInt(KEY_DISPLAY_TYPE, sessionInfo.getDisplayType());
+ sessionInfoBundle.putString(KEY_SESSION_ID, sessionInfo.getSessionId());
+ intent.putExtra(EXTRA_SESSION_INFO, sessionInfoBundle);
}
/**
* Decodes a new {@link SessionInfo} for a given {@code intent}
*/
@NonNull
- @SuppressWarnings("deprecation") /* getParcelable deprecation */
public static SessionInfo decode(@NonNull Intent intent) {
Bundle extras = intent.getExtras();
if (extras == null) {
@@ -68,20 +70,11 @@
"Expected the SessionInfo to be encoded in the bind intent extras, but the "
+ "extras were null.");
}
- extras.setClassLoader(Bundleable.class.getClassLoader());
- Bundleable sessionInfoBundleable = extras.getParcelable(EXTRA_SESSION_INFO);
- if (sessionInfoBundleable == null) {
- throw new IllegalArgumentException(
- "Expected the SessionInfo to be encoded in the bind intent extras, but they "
- + "couldn't be found in the extras.");
- }
- try {
- return (SessionInfo) sessionInfoBundleable.get();
- } catch (BundlerException e) {
- throw new IllegalArgumentException(
- "Expected the SessionInfo to be encoded in the bind intent extras, but they "
- + "were encoded improperly", e);
- }
+
+ Bundle sessionInfoBundle = extras.getBundle(EXTRA_SESSION_INFO);
+ int displayType = sessionInfoBundle.getInt(KEY_DISPLAY_TYPE);
+ String sessionId = sessionInfoBundle.getString(KEY_SESSION_ID);
+ return new SessionInfo(displayType, sessionId);
}
/** Returns whether or not the given {@code intent} contains an encoded {@link SessionInfo}. */
diff --git a/car/app/app/src/main/java/androidx/car/app/model/Row.java b/car/app/app/src/main/java/androidx/car/app/model/Row.java
index 8987cfa..09805cc 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/Row.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/Row.java
@@ -52,6 +52,9 @@
/** A boat that belongs to you. */
private static final String YOUR_BOAT = "\uD83D\uDEA3"; // 🚣
+ /** An integer value indicating no decoration should be shown. */
+ public static final int NO_DECORATION = -1;
+
/**
* The type of images supported within rows.
*
@@ -106,6 +109,8 @@
@Keep
private final List<Action> mActions;
@Keep
+ private final int mDecoration;
+ @Keep
@Nullable
private final Toggle mToggle;
@Keep
@@ -168,6 +173,19 @@
}
/**
+ * Returns the numeric decoration.
+ *
+ * <p> Numeric decorations are displayed at the end of the row, but before any actions.
+ *
+ * <p> {@link Row#NO_DECORATION} will be returned if the row does not contain a decoration.
+ *
+ * @see Builder#setNumericDecoration(int)
+ */
+ public int getNumericDecoration() {
+ return mDecoration;
+ }
+
+ /**
* Returns the {@link Toggle} in the row or {@code null} if the row does not contain a
* toggle.
*
@@ -292,6 +310,7 @@
mTexts = CollectionUtils.unmodifiableCopy(builder.mTexts);
mImage = builder.mImage;
mActions = CollectionUtils.unmodifiableCopy(builder.mActions);
+ mDecoration = builder.mDecoration;
mToggle = builder.mToggle;
mOnClickDelegate = builder.mOnClickDelegate;
mMetadata = builder.mMetadata;
@@ -306,6 +325,7 @@
mTexts = Collections.emptyList();
mImage = null;
mActions = Collections.emptyList();
+ mDecoration = NO_DECORATION;
mToggle = null;
mOnClickDelegate = null;
mMetadata = EMPTY_METADATA;
@@ -323,6 +343,7 @@
@Nullable
CarIcon mImage;
final List<Action> mActions = new ArrayList<>();
+ int mDecoration;
@Nullable
Toggle mToggle;
@Nullable
@@ -522,6 +543,35 @@
}
/**
+ * Sets a numeric decoration to display in the row.
+ *
+ * <p> Numeric decorations are displayed at the end of the row, but before any actions.
+ *
+ * <p> Numeric decorations typically represent a quantity of unseen content. For example, a
+ * decoration might represent a number of missed notifications, or a number of unread
+ * messages in a conversation.
+ *
+ * @param decoration the {@code int} to display. Must be positive, zero, or equal to
+ * {@link Row#NO_DECORATION}.
+ * @throws IllegalArgumentException if {@code decoration} is invalid
+ */
+ @NonNull
+ public Builder setNumericDecoration(int decoration) {
+ if (decoration < 0 && decoration != NO_DECORATION) {
+ throw new IllegalArgumentException(
+ String.format(
+ "Decoration should be positive, zero, or equal to NO_DECORATION. "
+ + "Instead, was %d",
+ decoration
+ )
+ );
+ }
+
+ mDecoration = decoration;
+ return this;
+ }
+
+ /**
* Sets a {@link Toggle} to show in the row.
*
* @throws NullPointerException if {@code toggle} is {@code null}
diff --git a/car/app/app/src/test/java/androidx/car/app/SessionInfoIntentEncoderTest.java b/car/app/app/src/test/java/androidx/car/app/SessionInfoIntentEncoderTest.java
index cc5079d..17fe0d3 100644
--- a/car/app/app/src/test/java/androidx/car/app/SessionInfoIntentEncoderTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/SessionInfoIntentEncoderTest.java
@@ -33,7 +33,7 @@
@RunWith(RobolectricTestRunner.class)
@DoNotInstrument
public class SessionInfoIntentEncoderTest {
- private static final String EXTRA_SESSION_INFO = "androidx.car.app.extra.SESSION_INFO";
+ private static final String EXTRA_SESSION_INFO = "androidx.car.app.extra.SESSION_INFO_BUNDLE";
@Test
public void encode_insertsExtra() {
@@ -41,7 +41,7 @@
SessionInfoIntentEncoder.encode(DEFAULT_SESSION_INFO, intent);
- assertThat(intent.hasExtra(EXTRA_SESSION_INFO));
+ assertThat(intent.hasExtra(EXTRA_SESSION_INFO)).isTrue();
}
@Test
diff --git a/car/app/app/src/test/java/androidx/car/app/model/RowTest.java b/car/app/app/src/test/java/androidx/car/app/model/RowTest.java
index d64eac7..c745f1a 100644
--- a/car/app/app/src/test/java/androidx/car/app/model/RowTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/model/RowTest.java
@@ -132,6 +132,38 @@
}
@Test
+ public void setDecoration_positiveValue() {
+ int decoration = 5;
+ Row row = new Row.Builder().setTitle("Title").setNumericDecoration(decoration).build();
+ assertThat(decoration).isEqualTo(row.getNumericDecoration());
+ }
+
+ @Test
+ public void setDecoration_zero() {
+ int decoration = 0;
+ Row row = new Row.Builder().setTitle("Title").setNumericDecoration(decoration).build();
+ assertThat(decoration).isEqualTo(row.getNumericDecoration());
+ }
+
+ @Test
+ public void setDecoration_noDecoration() {
+ int decoration = Row.NO_DECORATION;
+ Row row = new Row.Builder().setTitle("Title").setNumericDecoration(decoration).build();
+ assertThat(decoration).isEqualTo(row.getNumericDecoration());
+ }
+
+ @Test
+ public void setDecoration_negative_throws() {
+ int decoration = -123;
+ Row.Builder rowBuilder =
+ new Row.Builder().setTitle("Title");
+ assertThrows(
+ IllegalArgumentException.class,
+ () -> rowBuilder.setNumericDecoration(decoration)
+ );
+ }
+
+ @Test
public void setToggle() {
Toggle toggle1 = new Toggle.Builder(isChecked -> {
}).build();
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
index c3fb540..7a4a17c 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
@@ -84,9 +84,11 @@
7102 to "1.2.0-rc03",
7103 to "1.2.0",
7104 to "1.2.1",
+ 7105 to "1.2.2",
8000 to "1.3.0-alpha01",
8100 to "1.3.0-alpha02",
8200 to "1.3.0-alpha03",
+ 8300 to "1.3.0-alpha04",
)
/**
@@ -99,7 +101,7 @@
* The maven version string of this compiler. This string should be updated before/after every
* release.
*/
- const val compilerVersion: String = "1.3.0-rc02"
+ const val compilerVersion: String = "1.3.1"
private val minimumRuntimeVersion: String
get() = versionTable[minimumRuntimeVersionInt] ?: "unknown"
}
diff --git a/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/SimpleColumnWithRowsBenchmark.kt b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/SimpleColumnWithRowsBenchmark.kt
new file mode 100644
index 0000000..27e6d90
--- /dev/null
+++ b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/SimpleColumnWithRowsBenchmark.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.compose.foundation.layout.benchmark
+
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkDrawPerf
+import androidx.compose.testutils.benchmark.benchmarkFirstCompose
+import androidx.compose.testutils.benchmark.benchmarkFirstDraw
+import androidx.compose.testutils.benchmark.benchmarkFirstLayout
+import androidx.compose.testutils.benchmark.benchmarkFirstMeasure
+import androidx.compose.testutils.benchmark.benchmarkLayoutPerf
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkDraw
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkLayout
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkMeasure
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkRecompose
+import androidx.test.filters.LargeTest
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@LargeTest
+@RunWith(Parameterized::class)
+class SimpleColumnWithRowsBenchmark(private val numberOfBoxes: Int) {
+
+ private val subLayouts = 5
+ companion object {
+ @JvmStatic
+ @Parameterized.Parameters(name = "numberOfBoxes={0}")
+ fun initParameters(): Array<Int> = arrayOf(10, 100)
+ }
+
+ @get:Rule
+ val benchmarkRule = ComposeBenchmarkRule()
+
+ private val simpleColumnWithRowsFactory =
+ { SimpleColumnWithRowsTestCase(subLayouts, numberOfBoxes) }
+
+ @Test
+ fun first_compose() {
+ benchmarkRule.benchmarkFirstCompose(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun first_measure() {
+ benchmarkRule.benchmarkFirstMeasure(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun first_layout() {
+ benchmarkRule.benchmarkFirstLayout(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun first_draw() {
+ benchmarkRule.benchmarkFirstDraw(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun toggleColor_recompose() {
+ benchmarkRule.toggleStateBenchmarkRecompose(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun toggleLayoutQuantity_measure() {
+ benchmarkRule.toggleStateBenchmarkMeasure(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun toggleLayoutQuantity_layout() {
+ benchmarkRule.toggleStateBenchmarkLayout(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun toggleLayoutQuantity_draw() {
+ benchmarkRule.toggleStateBenchmarkDraw(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun layout() {
+ benchmarkRule.benchmarkLayoutPerf(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun draw() {
+ benchmarkRule.benchmarkDrawPerf(simpleColumnWithRowsFactory)
+ }
+}
\ No newline at end of file
diff --git a/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/SimpleColumnWithRowsTestCase.kt b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/SimpleColumnWithRowsTestCase.kt
new file mode 100644
index 0000000..5b302fd
--- /dev/null
+++ b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/SimpleColumnWithRowsTestCase.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.compose.foundation.layout.benchmark
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.ToggleableTestCase
+import androidx.compose.ui.Modifier
+
+class SimpleColumnWithRowsTestCase(
+ private val subLayouts: Int,
+ private val numberOfBoxes: Int
+) : LayeredComposeTestCase(), ToggleableTestCase {
+
+ private val numberOfSubLayouts = mutableStateOf(subLayouts)
+
+ @Composable
+ override fun MeasuredContent() {
+ Column(modifier = Modifier.fillMaxSize()) {
+ repeat(numberOfSubLayouts.value) {
+ Row(modifier = Modifier.fillMaxWidth()) {
+ repeat(numberOfBoxes) {
+ Box(modifier = Modifier.fillMaxSize())
+ }
+ }
+ }
+ }
+ }
+
+ override fun toggleState() {
+ if (numberOfSubLayouts.value == subLayouts) {
+ numberOfSubLayouts.value = subLayouts - 1
+ } else {
+ numberOfSubLayouts.value = subLayouts
+ }
+ }
+}
\ No newline at end of file
diff --git a/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/WeightedColumnWithRowsBenchmark.kt b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/WeightedColumnWithRowsBenchmark.kt
new file mode 100644
index 0000000..2cd66ac
--- /dev/null
+++ b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/WeightedColumnWithRowsBenchmark.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.compose.foundation.layout.benchmark
+
+import androidx.compose.testutils.benchmark.ComposeBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkDrawPerf
+import androidx.compose.testutils.benchmark.benchmarkFirstCompose
+import androidx.compose.testutils.benchmark.benchmarkFirstDraw
+import androidx.compose.testutils.benchmark.benchmarkFirstLayout
+import androidx.compose.testutils.benchmark.benchmarkFirstMeasure
+import androidx.compose.testutils.benchmark.benchmarkLayoutPerf
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkDraw
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkLayout
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkMeasure
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkRecompose
+import androidx.test.filters.LargeTest
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@LargeTest
+@RunWith(Parameterized::class)
+class WeightedColumnWithRowsBenchmark(private val numberOfBoxes: Int) {
+
+ private val subLayouts = 5
+ companion object {
+ @JvmStatic
+ @Parameterized.Parameters(name = "numberOfBoxes={0}")
+ fun initParameters(): Array<Int> = arrayOf(10, 100)
+ }
+
+ @get:Rule
+ val benchmarkRule = ComposeBenchmarkRule()
+
+ private val simpleColumnWithRowsFactory =
+ { WeightedColumnWithRowsTestCase(subLayouts, numberOfBoxes) }
+
+ @Test
+ fun first_compose() {
+ benchmarkRule.benchmarkFirstCompose(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun first_measure() {
+ benchmarkRule.benchmarkFirstMeasure(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun first_layout() {
+ benchmarkRule.benchmarkFirstLayout(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun first_draw() {
+ benchmarkRule.benchmarkFirstDraw(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun toggleLayoutQuantity_recompose() {
+ benchmarkRule.toggleStateBenchmarkRecompose(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun toggleLayoutQuantity_measure() {
+ benchmarkRule.toggleStateBenchmarkMeasure(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun toggleLayoutQuantity_layout() {
+ benchmarkRule.toggleStateBenchmarkLayout(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun toggleColor_draw() {
+ benchmarkRule.toggleStateBenchmarkDraw(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun layout() {
+ benchmarkRule.benchmarkLayoutPerf(simpleColumnWithRowsFactory)
+ }
+
+ @Test
+ fun draw() {
+ benchmarkRule.benchmarkDrawPerf(simpleColumnWithRowsFactory)
+ }
+}
\ No newline at end of file
diff --git a/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/WeightedColumnWithRowsTestCase.kt b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/WeightedColumnWithRowsTestCase.kt
new file mode 100644
index 0000000..2632095
--- /dev/null
+++ b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/WeightedColumnWithRowsTestCase.kt
@@ -0,0 +1,63 @@
+/*
+ * 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.foundation.layout.benchmark
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.testutils.LayeredComposeTestCase
+import androidx.compose.testutils.ToggleableTestCase
+import androidx.compose.ui.Modifier
+
+class WeightedColumnWithRowsTestCase(
+ private val subLayouts: Int,
+ private val numberOfBoxes: Int
+) : LayeredComposeTestCase(), ToggleableTestCase {
+
+ private val numberOfSubLayouts = mutableStateOf(subLayouts)
+
+ @Composable
+ override fun MeasuredContent() {
+ Column(modifier = Modifier.fillMaxSize()) {
+ repeat(numberOfSubLayouts.value) {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .weight(1 / numberOfSubLayouts.value.toFloat())
+ ) {
+ repeat(numberOfBoxes) {
+ Box(
+ modifier = Modifier.weight(1 / numberOfBoxes.toFloat())
+ )
+ }
+ }
+ }
+ }
+ }
+
+ override fun toggleState() {
+ if (numberOfSubLayouts.value == subLayouts) {
+ numberOfSubLayouts.value = subLayouts - 1
+ } else {
+ numberOfSubLayouts.value = subLayouts
+ }
+ }
+}
\ No newline at end of file
diff --git a/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/view/SimpleLinearLayoutBenchmark.kt b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/view/SimpleLinearLayoutBenchmark.kt
new file mode 100644
index 0000000..be7f962
--- /dev/null
+++ b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/view/SimpleLinearLayoutBenchmark.kt
@@ -0,0 +1,96 @@
+/*
+ * 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.foundation.layout.benchmark.view
+
+import androidx.compose.testutils.benchmark.AndroidBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkDrawPerf
+import androidx.compose.testutils.benchmark.benchmarkFirstDraw
+import androidx.compose.testutils.benchmark.benchmarkFirstLayout
+import androidx.compose.testutils.benchmark.benchmarkFirstMeasure
+import androidx.compose.testutils.benchmark.benchmarkFirstSetContent
+import androidx.compose.testutils.benchmark.benchmarkLayoutPerf
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkDraw
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkLayout
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkMeasure
+import androidx.test.filters.LargeTest
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@LargeTest
+@RunWith(Parameterized::class)
+class SimpleLinearLayoutBenchmark(private val numberOfBoxes: Int) {
+ private val subLayouts = 5
+ companion object {
+ @JvmStatic
+ @Parameterized.Parameters(name = "numberOfBoxes={0}")
+ fun initParameters(): Array<Int> = arrayOf(10, 100)
+ }
+
+ @get:Rule
+ val benchmarkRule = AndroidBenchmarkRule()
+
+ private val linearLayoutCaseFactory = {
+ SimpleLinearLayoutTestCase(subLayouts, numberOfBoxes)
+ }
+
+ @Test
+ fun first_setContent() {
+ benchmarkRule.benchmarkFirstSetContent(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun first_measure() {
+ benchmarkRule.benchmarkFirstMeasure(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun first_layout() {
+ benchmarkRule.benchmarkFirstLayout(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun first_draw() {
+ benchmarkRule.benchmarkFirstDraw(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun layout() {
+ benchmarkRule.benchmarkLayoutPerf(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun draw() {
+ benchmarkRule.benchmarkDrawPerf(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun changeLayoutContents_measure() {
+ benchmarkRule.toggleStateBenchmarkMeasure(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun changeLayoutContents_layout() {
+ benchmarkRule.toggleStateBenchmarkLayout(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun changeLayoutContents_draw() {
+ benchmarkRule.toggleStateBenchmarkDraw(linearLayoutCaseFactory)
+ }
+}
\ No newline at end of file
diff --git a/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/view/SimpleLinearLayoutTestCase.kt b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/view/SimpleLinearLayoutTestCase.kt
new file mode 100644
index 0000000..4b5f0f6
--- /dev/null
+++ b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/view/SimpleLinearLayoutTestCase.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.compose.foundation.layout.benchmark.view
+
+import android.app.Activity
+import android.graphics.Color
+import android.view.View
+import android.view.ViewGroup
+import android.widget.LinearLayout
+import androidx.compose.testutils.ToggleableTestCase
+import androidx.compose.testutils.benchmark.android.AndroidTestCase
+
+class SimpleLinearLayoutTestCase(
+ private val subLayouts: Int,
+ private val numberOfBoxes: Int
+) : AndroidTestCase, ToggleableTestCase {
+
+ private val rows = mutableListOf<LinearLayout>()
+ private var isToggled = false
+ private var linearLayout: LinearLayout? = null
+ override fun getContent(activity: Activity): ViewGroup {
+ val mainLayout = LinearLayout(activity).also { linearLayout = it }
+ mainLayout.orientation = LinearLayout.VERTICAL
+ mainLayout.layoutParams = ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT
+ )
+
+ repeat(subLayouts) {
+ val row = LinearLayout(activity)
+ row.orientation = LinearLayout.HORIZONTAL
+ row.layoutParams = ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ )
+
+ repeat(numberOfBoxes) {
+ val box = View(activity)
+ box.setBackgroundColor(Color.BLUE)
+ box.layoutParams = LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ )
+ row.addView(box)
+ }
+ rows += row
+ mainLayout.addView(row)
+ }
+ return mainLayout
+ }
+
+ override fun toggleState() {
+ if (!isToggled) {
+ linearLayout?.removeView(rows.last())
+ isToggled = true
+ } else {
+ linearLayout?.addView(rows.last())
+ isToggled = false
+ }
+ }
+}
\ No newline at end of file
diff --git a/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/view/WeightedLinearLayoutBenchmark.kt b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/view/WeightedLinearLayoutBenchmark.kt
new file mode 100644
index 0000000..3d11935
--- /dev/null
+++ b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/view/WeightedLinearLayoutBenchmark.kt
@@ -0,0 +1,97 @@
+/*
+ * 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.foundation.layout.benchmark.view
+
+import androidx.compose.testutils.benchmark.AndroidBenchmarkRule
+import androidx.compose.testutils.benchmark.benchmarkDrawPerf
+import androidx.compose.testutils.benchmark.benchmarkFirstDraw
+import androidx.compose.testutils.benchmark.benchmarkFirstLayout
+import androidx.compose.testutils.benchmark.benchmarkFirstMeasure
+import androidx.compose.testutils.benchmark.benchmarkFirstSetContent
+import androidx.compose.testutils.benchmark.benchmarkLayoutPerf
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkDraw
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkLayout
+import androidx.compose.testutils.benchmark.toggleStateBenchmarkMeasure
+import androidx.test.filters.LargeTest
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@LargeTest
+@RunWith(Parameterized::class)
+class WeightedLinearLayoutBenchmark(private val numberOfBoxes: Int) {
+
+ private val subLayouts = 5
+ companion object {
+ @JvmStatic
+ @Parameterized.Parameters(name = "numberOfBoxes={0}")
+ fun initParameters(): Array<Int> = arrayOf(10, 100)
+ }
+
+ @get:Rule
+ val benchmarkRule = AndroidBenchmarkRule()
+
+ private val linearLayoutCaseFactory = {
+ WeightedLinearLayoutTestCase(subLayouts, numberOfBoxes)
+ }
+
+ @Test
+ fun first_setContent() {
+ benchmarkRule.benchmarkFirstSetContent(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun first_measure() {
+ benchmarkRule.benchmarkFirstMeasure(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun first_layout() {
+ benchmarkRule.benchmarkFirstLayout(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun first_draw() {
+ benchmarkRule.benchmarkFirstDraw(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun layout() {
+ benchmarkRule.benchmarkLayoutPerf(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun draw() {
+ benchmarkRule.benchmarkDrawPerf(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun changeLayoutContents_measure() {
+ benchmarkRule.toggleStateBenchmarkMeasure(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun changeLayoutContents_layout() {
+ benchmarkRule.toggleStateBenchmarkLayout(linearLayoutCaseFactory)
+ }
+
+ @Test
+ fun changeLayoutContents_draw() {
+ benchmarkRule.toggleStateBenchmarkDraw(linearLayoutCaseFactory)
+ }
+}
\ No newline at end of file
diff --git a/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/view/WeightedLinearLayoutTestCase.kt b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/view/WeightedLinearLayoutTestCase.kt
new file mode 100644
index 0000000..0177e2e
--- /dev/null
+++ b/compose/foundation/foundation-layout/benchmark/src/androidTest/java/androidx/compose/foundation/layout/benchmark/view/WeightedLinearLayoutTestCase.kt
@@ -0,0 +1,77 @@
+/*
+ * 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.foundation.layout.benchmark.view
+
+import android.app.Activity
+import android.graphics.Color
+import android.view.View
+import android.view.ViewGroup
+import android.widget.LinearLayout
+import androidx.compose.testutils.ToggleableTestCase
+import androidx.compose.testutils.benchmark.android.AndroidTestCase
+
+class WeightedLinearLayoutTestCase(
+ private val subLayouts: Int,
+ private val numberOfBoxes: Int
+) : AndroidTestCase, ToggleableTestCase {
+
+ private val rows = mutableListOf<LinearLayout>()
+ private var isToggled = false
+ private var linearLayout: LinearLayout? = null
+ override fun getContent(activity: Activity): ViewGroup {
+ val mainLayout = LinearLayout(activity).also { linearLayout = it }
+ mainLayout.orientation = LinearLayout.VERTICAL
+ mainLayout.layoutParams = ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT
+ )
+
+ repeat(subLayouts) {
+ val row = LinearLayout(activity)
+ row.orientation = LinearLayout.HORIZONTAL
+ row.layoutParams = LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ 1 / subLayouts.toFloat()
+ )
+
+ repeat(numberOfBoxes) {
+ val box = View(activity)
+ box.setBackgroundColor(Color.BLUE)
+ box.layoutParams = LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ 1 / numberOfBoxes.toFloat()
+ )
+ row.addView(box)
+ }
+ rows += row
+ mainLayout.addView(row)
+ }
+ return mainLayout
+ }
+
+ override fun toggleState() {
+ if (!isToggled) {
+ linearLayout?.removeView(rows.last())
+ isToggled = true
+ } else {
+ linearLayout?.addView(rows.last())
+ isToggled = false
+ }
+ }
+}
\ No newline at end of file
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/relocation/BringIntoViewRequesterModifierTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/relocation/BringIntoViewScrollableInteractionTest.kt
similarity index 64%
rename from compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/relocation/BringIntoViewRequesterModifierTest.kt
rename to compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/relocation/BringIntoViewScrollableInteractionTest.kt
index 5a13ce4..0adee6c 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/relocation/BringIntoViewRequesterModifierTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/relocation/BringIntoViewScrollableInteractionTest.kt
@@ -16,11 +16,9 @@
package androidx.compose.foundation.relocation
-import android.os.Build.VERSION_CODES.O
-import androidx.annotation.RequiresApi
-import androidx.compose.foundation.Canvas
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.ScrollState
+import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.Orientation.Horizontal
import androidx.compose.foundation.gestures.Orientation.Vertical
@@ -33,50 +31,50 @@
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.Composable
-import androidx.compose.testutils.assertAgainstGolden
-import androidx.compose.foundation.GOLDEN_UI
+import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
-import androidx.compose.foundation.background
-import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
-import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Color.Companion.Blue
import androidx.compose.ui.graphics.Color.Companion.Green
import androidx.compose.ui.graphics.Color.Companion.LightGray
import androidx.compose.ui.graphics.Color.Companion.Red
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.test.TestMonotonicFrameClock
-import androidx.compose.ui.test.captureToImage
+import androidx.compose.ui.test.assertPositionInRootIsEqualTo
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.unit.Density
-import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.DpRect
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.toSize
import androidx.test.filters.MediumTest
-import androidx.test.filters.SdkSuppress
-import androidx.test.screenshot.AndroidXScreenshotTestRule
+import com.google.common.truth.Truth.assertThat
+import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.test.advanceUntilIdle
-import kotlinx.coroutines.test.runTest
-import kotlinx.coroutines.withContext
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
-@OptIn(ExperimentalCoroutinesApi::class, ExperimentalFoundationApi::class)
+@OptIn(ExperimentalFoundationApi::class)
@MediumTest
@RunWith(Parameterized::class)
-@SdkSuppress(minSdkVersion = O)
-class BringIntoViewRequesterModifierTest(private val orientation: Orientation) {
+class BringIntoViewScrollableInteractionTest(private val orientation: Orientation) {
+
@get:Rule
val rule = createComposeRule()
- @get:Rule
- val screenshotRule = AndroidXScreenshotTestRule(GOLDEN_UI)
-
private val parentBox = "parent box"
+ private val childBox = "child box"
+
+ /**
+ * Captures a scope from inside the composition for [runBlockingAndAwaitIdle].
+ * Make sure to call [setContentAndInitialize] instead of calling `rule.setContent` to initialize this.
+ */
+ private lateinit var testScope: CoroutineScope
companion object {
@JvmStatic
@@ -88,13 +86,13 @@
fun noScrollableParent_noChange() {
// Arrange.
val bringIntoViewRequester = BringIntoViewRequester()
- rule.setContent {
+ setContentAndInitialize {
Box(
Modifier
.then(
when (orientation) {
- Horizontal -> Modifier.size(100.dp, 50.dp)
- Vertical -> Modifier.size(50.dp, 100.dp)
+ Horizontal -> Modifier.size(100.toDp(), 50.toDp())
+ Vertical -> Modifier.size(50.toDp(), 100.toDp())
}
)
.testTag(parentBox)
@@ -102,31 +100,34 @@
) {
Box(
Modifier
- .size(50.dp)
+ .size(50.toDp())
.background(Blue)
.bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
)
}
}
+ val startingBounds = getUnclippedBoundsInRoot(childBox)
// Act.
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot(if (horizontal) "blueBoxLeft" else "blueBoxTop")
+ assertThat(getUnclippedBoundsInRoot(childBox)).isEqualTo(startingBounds)
+ assertChildMaxInView()
}
@Test
fun noScrollableParent_itemNotVisible_noChange() {
// Arrange.
val bringIntoViewRequester = BringIntoViewRequester()
- rule.setContent {
+ setContentAndInitialize {
Box(
Modifier
.then(
when (orientation) {
- Horizontal -> Modifier.size(100.dp, 50.dp)
- Vertical -> Modifier.size(50.dp, 100.dp)
+ Horizontal -> Modifier.size(100.toDp(), 50.toDp())
+ Vertical -> Modifier.size(50.toDp(), 100.toDp())
}
)
.testTag(parentBox)
@@ -136,29 +137,32 @@
Modifier
.then(
when (orientation) {
- Horizontal -> Modifier.offset(x = 150.dp)
- Vertical -> Modifier.offset(y = 150.dp)
+ Horizontal -> Modifier.offset(x = 150.toDp())
+ Vertical -> Modifier.offset(y = 150.toDp())
}
)
- .size(50.dp)
+ .size(50.toDp())
.background(Blue)
.bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
)
}
}
+ val startingBounds = getUnclippedBoundsInRoot(childBox)
// Act.
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot(if (horizontal) "grayRectangleHorizontal" else "grayRectangleVertical")
+ assertThat(getUnclippedBoundsInRoot(childBox)).isEqualTo(startingBounds)
+ assertChildMaxInView()
}
@Test
fun itemAtLeadingEdge_alreadyVisible_noChange() {
// Arrange.
val bringIntoViewRequester = BringIntoViewRequester()
- rule.setContent {
+ setContentAndInitialize {
Box(
Modifier
.testTag(parentBox)
@@ -167,36 +171,39 @@
when (orientation) {
Horizontal ->
Modifier
- .size(100.dp, 50.dp)
+ .size(100.toDp(), 50.toDp())
.horizontalScroll(rememberScrollState())
Vertical ->
Modifier
- .size(50.dp, 100.dp)
+ .size(50.toDp(), 100.toDp())
.verticalScroll(rememberScrollState())
}
)
) {
Box(
Modifier
- .size(50.dp)
+ .size(50.toDp())
.background(Blue)
.bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
)
}
}
+ val startingBounds = getUnclippedBoundsInRoot(childBox)
// Act.
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot(if (horizontal) "blueBoxLeft" else "blueBoxTop")
+ assertThat(getUnclippedBoundsInRoot(childBox)).isEqualTo(startingBounds)
+ assertChildMaxInView()
}
@Test
fun itemAtTrailingEdge_alreadyVisible_noChange() {
// Arrange.
val bringIntoViewRequester = BringIntoViewRequester()
- rule.setContent {
+ setContentAndInitialize {
Box(
Modifier
.testTag(parentBox)
@@ -205,11 +212,11 @@
when (orientation) {
Horizontal ->
Modifier
- .size(100.dp, 50.dp)
+ .size(100.toDp(), 50.toDp())
.horizontalScroll(rememberScrollState())
Vertical ->
Modifier
- .size(50.dp, 100.dp)
+ .size(50.toDp(), 100.toDp())
.verticalScroll(rememberScrollState())
}
)
@@ -218,29 +225,32 @@
Modifier
.then(
when (orientation) {
- Horizontal -> Modifier.offset(x = 50.dp)
- Vertical -> Modifier.offset(y = 50.dp)
+ Horizontal -> Modifier.offset(x = 50.toDp())
+ Vertical -> Modifier.offset(y = 50.toDp())
}
)
- .size(50.dp)
+ .size(50.toDp())
.background(Blue)
.bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
)
}
}
+ val startingBounds = getUnclippedBoundsInRoot(childBox)
// Act.
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot(if (horizontal) "blueBoxRight" else "blueBoxBottom")
+ assertThat(getUnclippedBoundsInRoot(childBox)).isEqualTo(startingBounds)
+ assertChildMaxInView()
}
@Test
fun itemAtCenter_alreadyVisible_noChange() {
// Arrange.
val bringIntoViewRequester = BringIntoViewRequester()
- rule.setContent {
+ setContentAndInitialize {
Box(
Modifier
.testTag(parentBox)
@@ -249,11 +259,11 @@
when (orientation) {
Horizontal ->
Modifier
- .size(100.dp, 50.dp)
+ .size(100.toDp(), 50.toDp())
.horizontalScroll(rememberScrollState())
Vertical ->
Modifier
- .size(50.dp, 100.dp)
+ .size(50.toDp(), 100.toDp())
.verticalScroll(rememberScrollState())
}
)
@@ -262,32 +272,35 @@
Modifier
.then(
when (orientation) {
- Horizontal -> Modifier.offset(x = 25.dp)
- Vertical -> Modifier.offset(y = 25.dp)
+ Horizontal -> Modifier.offset(x = 25.toDp())
+ Vertical -> Modifier.offset(y = 25.toDp())
}
)
- .size(50.dp)
+ .size(50.toDp())
.background(Blue)
.bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
)
}
}
+ val startingBounds = getUnclippedBoundsInRoot(childBox)
// Act.
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot(if (horizontal) "blueBoxCenterHorizontal" else "blueBoxCenterVertical")
+ assertThat(getUnclippedBoundsInRoot(childBox)).isEqualTo(startingBounds)
+ assertChildMaxInView()
}
@Test
fun itemBiggerThanParentAtLeadingEdge_alreadyVisible_noChange() {
// Arrange.
val bringIntoViewRequester = BringIntoViewRequester()
- rule.setContent {
+ setContentAndInitialize {
Box(
Modifier
- .size(50.dp)
+ .size(50.toDp())
.testTag(parentBox)
.background(LightGray)
.then(
@@ -299,19 +312,37 @@
) {
// Using a multi-colored item to make sure we can assert that the right part of
// the item is visible.
- RowOrColumn(Modifier.bringIntoViewRequester(bringIntoViewRequester)) {
- Box(Modifier.size(50.dp).background(Blue))
- Box(Modifier.size(50.dp).background(Green))
- Box(Modifier.size(50.dp).background(Red))
+ RowOrColumn(
+ Modifier
+ .bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
+ ) {
+ Box(
+ Modifier
+ .size(50.toDp())
+ .background(Blue)
+ )
+ Box(
+ Modifier
+ .size(50.toDp())
+ .background(Green)
+ )
+ Box(
+ Modifier
+ .size(50.toDp())
+ .background(Red)
+ )
}
}
}
+ val startingBounds = getUnclippedBoundsInRoot(childBox)
// Act.
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot("blueBox")
+ assertThat(getUnclippedBoundsInRoot(childBox)).isEqualTo(startingBounds)
+ assertChildMaxInView()
}
@Test
@@ -319,11 +350,11 @@
// Arrange.
val bringIntoViewRequester = BringIntoViewRequester()
lateinit var scrollState: ScrollState
- rule.setContent {
+ setContentAndInitialize {
scrollState = rememberScrollState()
Box(
Modifier
- .size(50.dp)
+ .size(50.toDp())
.testTag(parentBox)
.background(LightGray)
.then(
@@ -335,20 +366,38 @@
) {
// Using a multi-colored item to make sure we can assert that the right part of
// the item is visible.
- RowOrColumn(Modifier.bringIntoViewRequester(bringIntoViewRequester)) {
- Box(Modifier.size(50.dp).background(Red))
- Box(Modifier.size(50.dp).background(Green))
- Box(Modifier.size(50.dp).background(Blue))
+ RowOrColumn(
+ Modifier
+ .bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
+ ) {
+ Box(
+ Modifier
+ .size(50.toDp())
+ .background(Red)
+ )
+ Box(
+ Modifier
+ .size(50.toDp())
+ .background(Green)
+ )
+ Box(
+ Modifier
+ .size(50.toDp())
+ .background(Blue)
+ )
}
}
}
runBlockingAndAwaitIdle { scrollState.scrollTo(scrollState.maxValue) }
+ val startingBounds = getUnclippedBoundsInRoot(childBox)
// Act.
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot("blueBox")
+ assertThat(getUnclippedBoundsInRoot(childBox)).isEqualTo(startingBounds)
+ assertChildMaxInView()
}
@Test
@@ -356,11 +405,11 @@
// Arrange.
val bringIntoViewRequester = BringIntoViewRequester()
lateinit var scrollState: ScrollState
- rule.setContent {
+ setContentAndInitialize {
scrollState = rememberScrollState()
Box(
Modifier
- .size(50.dp)
+ .size(50.toDp())
.testTag(parentBox)
.background(LightGray)
.then(
@@ -372,20 +421,38 @@
) {
// Using a multi-colored item to make sure we can assert that the right part of
// the item is visible.
- RowOrColumn(Modifier.bringIntoViewRequester(bringIntoViewRequester)) {
- Box(Modifier.size(50.dp).background(Green))
- Box(Modifier.size(50.dp).background(Blue))
- Box(Modifier.size(50.dp).background(Red))
+ RowOrColumn(
+ Modifier
+ .bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
+ ) {
+ Box(
+ Modifier
+ .size(50.toDp())
+ .background(Green)
+ )
+ Box(
+ Modifier
+ .size(50.toDp())
+ .background(Blue)
+ )
+ Box(
+ Modifier
+ .size(50.toDp())
+ .background(Red)
+ )
}
}
}
runBlockingAndAwaitIdle { scrollState.scrollTo(scrollState.maxValue / 2) }
+ val startingBounds = getUnclippedBoundsInRoot(childBox)
// Act.
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot("blueBox")
+ assertThat(getUnclippedBoundsInRoot(childBox)).isEqualTo(startingBounds)
+ assertChildMaxInView()
}
@Test
@@ -393,7 +460,7 @@
// Arrange.
val bringIntoViewRequester = BringIntoViewRequester()
lateinit var scrollState: ScrollState
- rule.setContent {
+ setContentAndInitialize {
scrollState = rememberScrollState()
Box(
Modifier
@@ -403,32 +470,33 @@
when (orientation) {
Horizontal ->
Modifier
- .size(100.dp, 50.dp)
+ .size(100.toDp(), 50.toDp())
.horizontalScroll(scrollState)
Vertical ->
Modifier
- .size(50.dp, 100.dp)
+ .size(50.toDp(), 100.toDp())
.verticalScroll(scrollState)
}
)
) {
Box(
when (orientation) {
- Horizontal -> Modifier.size(200.dp, 50.dp)
- Vertical -> Modifier.size(50.dp, 200.dp)
+ Horizontal -> Modifier.size(200.toDp(), 50.toDp())
+ Vertical -> Modifier.size(50.toDp(), 200.toDp())
}
) {
Box(
Modifier
.then(
when (orientation) {
- Horizontal -> Modifier.offset(x = 50.dp)
- Vertical -> Modifier.offset(y = 50.dp)
+ Horizontal -> Modifier.offset(x = 50.toDp())
+ Vertical -> Modifier.offset(y = 50.toDp())
}
)
- .size(50.dp)
+ .size(50.toDp())
.background(Blue)
.bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
)
}
}
@@ -439,7 +507,8 @@
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot(if (horizontal) "blueBoxLeft" else "blueBoxTop")
+ rule.onNodeWithTag(childBox).assertPositionInRootIsEqualTo(0.toDp(), 0.toDp())
+ assertChildMaxInView()
}
@Test
@@ -447,7 +516,7 @@
// Arrange.
val bringIntoViewRequester = BringIntoViewRequester()
lateinit var scrollState: ScrollState
- rule.setContent {
+ setContentAndInitialize {
scrollState = rememberScrollState()
Box(
Modifier
@@ -457,32 +526,33 @@
when (orientation) {
Horizontal ->
Modifier
- .size(100.dp, 50.dp)
+ .size(100.toDp(), 50.toDp())
.horizontalScroll(scrollState)
Vertical ->
Modifier
- .size(50.dp, 100.dp)
+ .size(50.toDp(), 100.toDp())
.verticalScroll(scrollState)
}
)
) {
Box(
when (orientation) {
- Horizontal -> Modifier.size(200.dp, 50.dp)
- Vertical -> Modifier.size(50.dp, 200.dp)
+ Horizontal -> Modifier.size(200.toDp(), 50.toDp())
+ Vertical -> Modifier.size(50.toDp(), 200.toDp())
}
) {
Box(
Modifier
.then(
when (orientation) {
- Horizontal -> Modifier.offset(x = 150.dp)
- Vertical -> Modifier.offset(y = 150.dp)
+ Horizontal -> Modifier.offset(x = 150.toDp())
+ Vertical -> Modifier.offset(y = 150.toDp())
}
)
- .size(50.dp)
+ .size(50.toDp())
.background(Blue)
.bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
)
}
}
@@ -493,7 +563,11 @@
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot(if (horizontal) "blueBoxRight" else "blueBoxBottom")
+ rule.onNodeWithTag(childBox).assertPositionInRootIsEqualTo(
+ expectedLeft = if (orientation == Horizontal) 50.toDp() else 0.toDp(),
+ expectedTop = if (orientation == Horizontal) 0.toDp() else 50.toDp()
+ )
+ assertChildMaxInView()
}
@Test
@@ -501,7 +575,7 @@
// Arrange.
val bringIntoViewRequester = BringIntoViewRequester()
lateinit var scrollState: ScrollState
- rule.setContent {
+ setContentAndInitialize {
scrollState = rememberScrollState()
Box(
Modifier
@@ -511,27 +585,28 @@
when (orientation) {
Horizontal ->
Modifier
- .size(100.dp, 50.dp)
+ .size(100.toDp(), 50.toDp())
.horizontalScroll(scrollState)
Vertical ->
Modifier
- .size(50.dp, 100.dp)
+ .size(50.toDp(), 100.toDp())
.verticalScroll(scrollState)
}
)
) {
- Box(Modifier.size(200.dp)) {
+ Box(Modifier.size(200.toDp())) {
Box(
Modifier
.then(
when (orientation) {
- Horizontal -> Modifier.offset(x = 25.dp)
- Vertical -> Modifier.offset(y = 25.dp)
+ Horizontal -> Modifier.offset(x = 25.toDp())
+ Vertical -> Modifier.offset(y = 25.toDp())
}
)
- .size(50.dp)
+ .size(50.toDp())
.background(Blue)
.bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
)
}
}
@@ -542,7 +617,8 @@
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot(if (horizontal) "blueBoxLeft" else "blueBoxTop")
+ rule.onNodeWithTag(childBox).assertPositionInRootIsEqualTo(0.toDp(), 0.toDp())
+ assertChildMaxInView()
}
@Test
@@ -550,7 +626,7 @@
// Arrange.
val bringIntoViewRequester = BringIntoViewRequester()
lateinit var scrollState: ScrollState
- rule.setContent {
+ setContentAndInitialize {
scrollState = rememberScrollState()
Box(
Modifier
@@ -560,32 +636,33 @@
when (orientation) {
Horizontal ->
Modifier
- .size(100.dp, 50.dp)
+ .size(100.toDp(), 50.toDp())
.horizontalScroll(scrollState)
Vertical ->
Modifier
- .size(50.dp, 100.dp)
+ .size(50.toDp(), 100.toDp())
.verticalScroll(scrollState)
}
)
) {
Box(
when (orientation) {
- Horizontal -> Modifier.size(200.dp, 50.dp)
- Vertical -> Modifier.size(50.dp, 200.dp)
+ Horizontal -> Modifier.size(200.toDp(), 50.toDp())
+ Vertical -> Modifier.size(50.toDp(), 200.toDp())
}
) {
Box(
Modifier
.then(
when (orientation) {
- Horizontal -> Modifier.offset(x = 150.dp)
- Vertical -> Modifier.offset(y = 150.dp)
+ Horizontal -> Modifier.offset(x = 150.toDp())
+ Vertical -> Modifier.offset(y = 150.toDp())
}
)
- .size(50.dp)
+ .size(50.toDp())
.background(Blue)
.bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
)
}
}
@@ -596,7 +673,11 @@
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot(if (horizontal) "blueBoxRight" else "blueBoxBottom")
+ rule.onNodeWithTag(childBox).assertPositionInRootIsEqualTo(
+ expectedLeft = if (orientation == Horizontal) 50.toDp() else 0.toDp(),
+ expectedTop = if (orientation == Horizontal) 0.toDp() else 50.toDp()
+ )
+ assertChildMaxInView()
}
@Test
@@ -605,7 +686,7 @@
val bringIntoViewRequester = BringIntoViewRequester()
lateinit var parentScrollState: ScrollState
lateinit var grandParentScrollState: ScrollState
- rule.setContent {
+ setContentAndInitialize {
parentScrollState = rememberScrollState()
grandParentScrollState = rememberScrollState()
Box(
@@ -616,11 +697,11 @@
when (orientation) {
Horizontal ->
Modifier
- .size(100.dp, 50.dp)
+ .size(100.toDp(), 50.toDp())
.horizontalScroll(grandParentScrollState)
Vertical ->
Modifier
- .size(50.dp, 100.dp)
+ .size(50.toDp(), 100.toDp())
.verticalScroll(grandParentScrollState)
}
)
@@ -632,32 +713,33 @@
when (orientation) {
Horizontal ->
Modifier
- .size(200.dp, 50.dp)
+ .size(200.toDp(), 50.toDp())
.horizontalScroll(parentScrollState)
Vertical ->
Modifier
- .size(50.dp, 200.dp)
+ .size(50.toDp(), 200.toDp())
.verticalScroll(parentScrollState)
}
)
) {
Box(
when (orientation) {
- Horizontal -> Modifier.size(400.dp, 50.dp)
- Vertical -> Modifier.size(50.dp, 400.dp)
+ Horizontal -> Modifier.size(400.toDp(), 50.toDp())
+ Vertical -> Modifier.size(50.toDp(), 400.toDp())
}
) {
Box(
Modifier
.then(
when (orientation) {
- Horizontal -> Modifier.offset(x = 25.dp)
- Vertical -> Modifier.offset(y = 25.dp)
+ Horizontal -> Modifier.offset(x = 25.toDp())
+ Vertical -> Modifier.offset(y = 25.toDp())
}
)
- .size(50.dp)
+ .size(50.toDp())
.background(Blue)
.bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
)
}
}
@@ -670,7 +752,8 @@
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot(if (horizontal) "blueBoxLeft" else "blueBoxTop")
+ rule.onNodeWithTag(childBox).assertPositionInRootIsEqualTo(0.toDp(), 0.toDp())
+ assertChildMaxInView()
}
@Test
@@ -679,7 +762,7 @@
val bringIntoViewRequester = BringIntoViewRequester()
lateinit var parentScrollState: ScrollState
lateinit var grandParentScrollState: ScrollState
- rule.setContent {
+ setContentAndInitialize {
parentScrollState = rememberScrollState()
grandParentScrollState = rememberScrollState()
Box(
@@ -690,18 +773,18 @@
when (orientation) {
Horizontal ->
Modifier
- .size(100.dp, 50.dp)
+ .size(100.toDp(), 50.toDp())
.verticalScroll(grandParentScrollState)
Vertical ->
Modifier
- .size(50.dp, 100.dp)
+ .size(50.toDp(), 100.toDp())
.horizontalScroll(grandParentScrollState)
}
)
) {
Box(
Modifier
- .size(100.dp)
+ .size(100.toDp())
.background(LightGray)
.then(
when (orientation) {
@@ -710,13 +793,14 @@
}
)
) {
- Box(Modifier.size(200.dp)) {
+ Box(Modifier.size(200.toDp())) {
Box(
Modifier
- .offset(x = 25.dp, y = 25.dp)
- .size(50.dp)
+ .offset(x = 25.toDp(), y = 25.toDp())
+ .size(50.toDp())
.background(Blue)
.bringIntoViewRequester(bringIntoViewRequester)
+ .testTag(childBox)
)
}
}
@@ -729,7 +813,8 @@
runBlockingAndAwaitIdle { bringIntoViewRequester.bringIntoView() }
// Assert.
- assertScreenshot(if (horizontal) "blueBoxLeft" else "blueBoxTop")
+ rule.onNodeWithTag(childBox).assertPositionInRootIsEqualTo(0.toDp(), 0.toDp())
+ assertChildMaxInView()
}
@Test
@@ -737,12 +822,12 @@
// Arrange.
val bringIntoViewRequester = BringIntoViewRequester()
lateinit var density: Density
- rule.setContent {
+ setContentAndInitialize {
density = LocalDensity.current
Box(
Modifier
.testTag(parentBox)
- .size(50.dp)
+ .size(50.toDp())
.background(LightGray)
.then(
when (orientation) {
@@ -751,22 +836,28 @@
}
)
) {
- Canvas(
- when (orientation) {
- Horizontal -> Modifier.size(150.dp, 50.dp)
- Vertical -> Modifier.size(50.dp, 150.dp)
- }.bringIntoViewRequester(bringIntoViewRequester)
- ) {
- with(density) {
- drawRect(
- color = Blue,
- topLeft = when (orientation) {
- Horizontal -> Offset(50.dp.toPx(), 0.dp.toPx())
- Vertical -> Offset(0.dp.toPx(), 50.dp.toPx())
- },
- size = Size(50.dp.toPx(), 50.dp.toPx())
+ Box(
+ Modifier
+ .then(
+ when (orientation) {
+ Horizontal -> Modifier.size(150.toDp(), 50.toDp())
+ Vertical -> Modifier.size(50.toDp(), 150.toDp())
+ }
)
- }
+ .bringIntoViewRequester(bringIntoViewRequester)
+ ) {
+ Box(
+ Modifier
+ .size(50.toDp())
+ .then(
+ when (orientation) {
+ Horizontal -> Modifier.offset(50.toDp(), 0.toDp())
+ Vertical -> Modifier.offset(0.toDp(), 50.toDp())
+ }
+ )
+ .background(Blue)
+ .testTag(childBox)
+ )
}
}
}
@@ -775,18 +866,40 @@
runBlockingAndAwaitIdle {
val rect = with(density) {
when (orientation) {
- Horizontal -> Rect(50.dp.toPx(), 0.dp.toPx(), 100.dp.toPx(), 50.dp.toPx())
- Vertical -> Rect(0.dp.toPx(), 50.dp.toPx(), 50.dp.toPx(), 100.dp.toPx())
+ Horizontal -> DpRect(50.toDp(), 0.toDp(), 100.toDp(), 50.toDp()).toRect()
+ Vertical -> DpRect(0.toDp(), 50.toDp(), 50.toDp(), 100.toDp()).toRect()
}
}
bringIntoViewRequester.bringIntoView(rect)
}
// Assert.
- assertScreenshot("blueBox")
+ rule.onNodeWithTag(childBox).assertPositionInRootIsEqualTo(0.toDp(), 0.toDp())
+ assertChildMaxInView()
}
- private val horizontal: Boolean get() = (orientation == Horizontal)
+ private fun setContentAndInitialize(content: @Composable () -> Unit) {
+ rule.setContent {
+ testScope = rememberCoroutineScope()
+ content()
+ }
+ }
+
+ /**
+ * Sizes and offsets of the composables in these tests must be specified using this function.
+ * If they're specified using `xx.dp` syntax, a rounding error somewhere in the layout system
+ * will cause the pixel values to be off-by-one.
+ */
+ private fun Int.toDp(): Dp = with(rule.density) { this@toDp.toDp() }
+
+ /**
+ * Returns the bounds of the node with [tag], without performing any clipping by any parents.
+ */
+ @Suppress("SameParameterValue")
+ private fun getUnclippedBoundsInRoot(tag: String): Rect {
+ val node = rule.onNodeWithTag(tag).fetchSemanticsNode()
+ return Rect(node.positionInRoot, node.size.toSize())
+ }
@Composable
private fun RowOrColumn(
@@ -799,20 +912,32 @@
}
}
- @RequiresApi(O)
- private fun assertScreenshot(screenshot: String) {
- rule.onNodeWithTag(parentBox)
- .captureToImage()
- .assertAgainstGolden(screenshotRule, "bringIntoParentBounds_$screenshot")
+ private fun runBlockingAndAwaitIdle(block: suspend CoroutineScope.() -> Unit) {
+ val job = testScope.launch(block = block)
+ rule.waitForIdle()
+ runBlocking {
+ job.join()
+ }
}
- private fun runBlockingAndAwaitIdle(block: suspend CoroutineScope.() -> Unit) {
- runTest {
- withContext(TestMonotonicFrameClock(this)) {
- block()
- advanceUntilIdle()
- }
+ /**
+ * Asserts that as much of the child (identified by [childBox]) as can fit in the viewport
+ * (identified by [parentBox]) is visible. This is the min of the child size and the viewport
+ * size.
+ */
+ private fun assertChildMaxInView() {
+ val parentNode = rule.onNodeWithTag(parentBox).fetchSemanticsNode()
+ val childNode = rule.onNodeWithTag(childBox).fetchSemanticsNode()
+
+ // BoundsInRoot returns the clipped bounds.
+ val visibleBounds: IntSize = childNode.boundsInRoot.size.run {
+ IntSize(width.roundToInt(), height.roundToInt())
}
- rule.waitForIdle()
+ val expectedVisibleBounds = IntSize(
+ width = minOf(parentNode.size.width, childNode.size.width),
+ height = minOf(parentNode.size.height, childNode.size.height)
+ )
+
+ assertThat(visibleBounds).isEqualTo(expectedVisibleBounds)
}
-}
+}
\ No newline at end of file
diff --git a/compose/integration-tests/demos/src/main/java/androidx/compose/integration/demos/DemoApp.kt b/compose/integration-tests/demos/src/main/java/androidx/compose/integration/demos/DemoApp.kt
index 4d1b553..7b5d026 100644
--- a/compose/integration-tests/demos/src/main/java/androidx/compose/integration/demos/DemoApp.kt
+++ b/compose/integration-tests/demos/src/main/java/androidx/compose/integration/demos/DemoApp.kt
@@ -54,7 +54,6 @@
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
-import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.DisposableEffect
@@ -90,7 +89,7 @@
var filterText by rememberSaveable { mutableStateOf("") }
- val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
+ val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
Scaffold(
topBar = {
diff --git a/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt b/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt
index 6c3d32d..70030c8 100644
--- a/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt
+++ b/compose/integration-tests/macrobenchmark/src/androidTest/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt
@@ -24,6 +24,7 @@
import androidx.benchmark.macro.junit4.MacrobenchmarkRule
import androidx.benchmark.perfetto.PerfettoCapture
import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -37,6 +38,7 @@
* a Perfetto trace.
*/
@OptIn(ExperimentalMetricApi::class)
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.R) // TODO(234351579): Support API < 30
class TrivialTracingBenchmark(private val composableName: String) {
@get:Rule
val benchmarkRule = MacrobenchmarkRule()
diff --git a/compose/material/material/src/androidMain/kotlin/androidx/compose/material/AndroidMenu.android.kt b/compose/material/material/src/androidMain/kotlin/androidx/compose/material/AndroidMenu.android.kt
index e03a11a..94c0373 100644
--- a/compose/material/material/src/androidMain/kotlin/androidx/compose/material/AndroidMenu.android.kt
+++ b/compose/material/material/src/androidMain/kotlin/androidx/compose/material/AndroidMenu.android.kt
@@ -70,7 +70,6 @@
* tapping outside the menu's bounds
* @param offset [DpOffset] to be added to the position of the menu
*/
-@Suppress("ModifierParameter")
@Composable
fun DropdownMenu(
expanded: Boolean,
diff --git a/compose/material3/material3/api/current.txt b/compose/material3/material3/api/current.txt
index 9d70821..f27d313 100644
--- a/compose/material3/material3/api/current.txt
+++ b/compose/material3/material3/api/current.txt
@@ -273,11 +273,11 @@
}
public final class FloatingActionButtonKt {
- method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean expanded, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation);
+ method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean expanded, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
method @androidx.compose.runtime.Composable public static void FloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void LargeFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void SmallFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void LargeFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void SmallFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
@androidx.compose.runtime.Immutable public final class IconButtonColors {
@@ -631,19 +631,6 @@
public final class TonalPaletteKt {
}
- @androidx.compose.runtime.Stable public final class TopAppBarColors {
- }
-
- public final class TopAppBarDefaults {
- method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors centerAlignedTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
- method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.WindowInsets getWindowInsets();
- method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors largeTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
- method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors mediumTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
- method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors smallTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
- property @androidx.compose.runtime.Composable public final androidx.compose.foundation.layout.WindowInsets windowInsets;
- field public static final androidx.compose.material3.TopAppBarDefaults INSTANCE;
- }
-
public final class TouchTargetKt {
}
diff --git a/compose/material3/material3/api/public_plus_experimental_current.txt b/compose/material3/material3/api/public_plus_experimental_current.txt
index 36ae554..714bfc0 100644
--- a/compose/material3/material3/api/public_plus_experimental_current.txt
+++ b/compose/material3/material3/api/public_plus_experimental_current.txt
@@ -414,11 +414,11 @@
}
public final class FloatingActionButtonKt {
- method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean expanded, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation);
+ method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean expanded, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
method @androidx.compose.runtime.Composable public static void FloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void LargeFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void SmallFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void LargeFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void SmallFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
@androidx.compose.runtime.Immutable public final class IconButtonColors {
@@ -885,17 +885,17 @@
public final class TonalPaletteKt {
}
- @androidx.compose.runtime.Stable public final class TopAppBarColors {
+ @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Stable public final class TopAppBarColors {
}
- public final class TopAppBarDefaults {
+ @androidx.compose.material3.ExperimentalMaterial3Api public final class TopAppBarDefaults {
method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors centerAlignedTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
- method @androidx.compose.material3.ExperimentalMaterial3Api public androidx.compose.material3.TopAppBarScrollBehavior enterAlwaysScrollBehavior(androidx.compose.material3.TopAppBarState state, optional kotlin.jvm.functions.Function0<java.lang.Boolean> canScroll);
- method @androidx.compose.material3.ExperimentalMaterial3Api public androidx.compose.material3.TopAppBarScrollBehavior exitUntilCollapsedScrollBehavior(androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float> decayAnimationSpec, androidx.compose.material3.TopAppBarState state, optional kotlin.jvm.functions.Function0<java.lang.Boolean> canScroll);
+ method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarScrollBehavior enterAlwaysScrollBehavior(optional androidx.compose.material3.TopAppBarState state, optional kotlin.jvm.functions.Function0<java.lang.Boolean> canScroll);
+ method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarScrollBehavior exitUntilCollapsedScrollBehavior(optional androidx.compose.material3.TopAppBarState state, optional kotlin.jvm.functions.Function0<java.lang.Boolean> canScroll);
method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.WindowInsets getWindowInsets();
method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors largeTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors mediumTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
- method @androidx.compose.material3.ExperimentalMaterial3Api public androidx.compose.material3.TopAppBarScrollBehavior pinnedScrollBehavior(androidx.compose.material3.TopAppBarState state, optional kotlin.jvm.functions.Function0<java.lang.Boolean> canScroll);
+ method @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarScrollBehavior pinnedScrollBehavior(optional androidx.compose.material3.TopAppBarState state, optional kotlin.jvm.functions.Function0<java.lang.Boolean> canScroll);
method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors smallTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
property @androidx.compose.runtime.Composable public final androidx.compose.foundation.layout.WindowInsets windowInsets;
field public static final androidx.compose.material3.TopAppBarDefaults INSTANCE;
diff --git a/compose/material3/material3/api/restricted_current.txt b/compose/material3/material3/api/restricted_current.txt
index 9d70821..f27d313 100644
--- a/compose/material3/material3/api/restricted_current.txt
+++ b/compose/material3/material3/api/restricted_current.txt
@@ -273,11 +273,11 @@
}
public final class FloatingActionButtonKt {
- method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean expanded, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation);
+ method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void ExtendedFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean expanded, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource);
method @androidx.compose.runtime.Composable public static void FloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void LargeFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
- method @androidx.compose.runtime.Composable public static void SmallFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void LargeFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+ method @androidx.compose.runtime.Composable public static void SmallFloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.Shape shape, optional long containerColor, optional long contentColor, optional androidx.compose.material3.FloatingActionButtonElevation elevation, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function0<kotlin.Unit> content);
}
@androidx.compose.runtime.Immutable public final class IconButtonColors {
@@ -631,19 +631,6 @@
public final class TonalPaletteKt {
}
- @androidx.compose.runtime.Stable public final class TopAppBarColors {
- }
-
- public final class TopAppBarDefaults {
- method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors centerAlignedTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
- method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.WindowInsets getWindowInsets();
- method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors largeTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
- method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors mediumTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
- method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors smallTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
- property @androidx.compose.runtime.Composable public final androidx.compose.foundation.layout.WindowInsets windowInsets;
- field public static final androidx.compose.material3.TopAppBarDefaults INSTANCE;
- }
-
public final class TouchTargetKt {
}
diff --git a/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/ui/common/CatalogScaffold.kt b/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/ui/common/CatalogScaffold.kt
index 885fb6e..c04e2ef 100644
--- a/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/ui/common/CatalogScaffold.kt
+++ b/compose/material3/material3/integration-tests/material3-catalog/src/main/java/androidx/compose/material3/catalog/library/ui/common/CatalogScaffold.kt
@@ -38,7 +38,6 @@
import androidx.compose.material3.catalog.library.util.TermsUrl
import androidx.compose.material3.catalog.library.util.openUrl
import androidx.compose.material3.contentColorFor
-import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.rememberCoroutineScope
@@ -93,8 +92,7 @@
scrimColor = SheetScrimColor
) {
val context = LocalContext.current
- val scrollBehavior =
- TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
+ val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
Scaffold(
topBar = {
CatalogTopAppBar(
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/AppBarSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/AppBarSamples.kt
index 78f9c38..e7463be 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/AppBarSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/AppBarSamples.kt
@@ -17,7 +17,6 @@
package androidx.compose.material3.samples
import androidx.annotation.Sampled
-import androidx.compose.animation.rememberSplineBasedDecay
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
@@ -43,7 +42,6 @@
import androidx.compose.material3.SmallTopAppBar
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
-import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
@@ -174,7 +172,7 @@
@Sampled
@Composable
fun PinnedSmallTopAppBar() {
- val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
+ val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
Scaffold(
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
@@ -240,7 +238,7 @@
@Sampled
@Composable
fun EnterAlwaysSmallTopAppBar() {
- val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarState())
+ val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
Scaffold(
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
@@ -299,11 +297,7 @@
@Sampled
@Composable
fun ExitUntilCollapsedMediumTopAppBar() {
- val decayAnimationSpec = rememberSplineBasedDecay<Float>()
- val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
- decayAnimationSpec,
- rememberTopAppBarState()
- )
+ val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
Scaffold(
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
@@ -362,11 +356,7 @@
@Sampled
@Composable
fun ExitUntilCollapsedLargeTopAppBar() {
- val decayAnimationSpec = rememberSplineBasedDecay<Float>()
- val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
- decayAnimationSpec,
- rememberTopAppBarState()
- )
+ val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
Scaffold(
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AppBarScreenshotTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AppBarScreenshotTest.kt
index 445bfa5..4c3ec55 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AppBarScreenshotTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AppBarScreenshotTest.kt
@@ -30,7 +30,6 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.test.ExperimentalTestApi
import androidx.compose.ui.test.captureToImage
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
@@ -47,7 +46,7 @@
@LargeTest
@RunWith(AndroidJUnit4::class)
@SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
-@OptIn(ExperimentalMaterial3Api::class, ExperimentalTestApi::class)
+@OptIn(ExperimentalMaterial3Api::class)
class AppBarScreenshotTest {
@get:Rule
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AppBarTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AppBarTest.kt
index b0ea432..2eed1ff 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AppBarTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/AppBarTest.kt
@@ -17,7 +17,6 @@
package androidx.compose.material3
import android.os.Build
-import androidx.compose.animation.rememberSplineBasedDecay
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
@@ -218,7 +217,7 @@
var expectedScrolledContainerColor: Color = Color.Unspecified
lateinit var scrollBehavior: TopAppBarScrollBehavior
rule.setMaterialContent(lightColorScheme()) {
- scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
+ scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
SmallTopAppBar(
modifier = Modifier.testTag(TopAppBarTestTag),
title = {
@@ -249,8 +248,7 @@
var scrollHeightOffsetPx = 0f
rule.setMaterialContent(lightColorScheme()) {
- scrollBehavior =
- TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarState())
+ scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
scrollHeightOffsetPx = with(LocalDensity.current) { scrollHeightOffsetDp.toPx() }
SmallTopAppBar(
modifier = Modifier.testTag(TopAppBarTestTag),
@@ -460,7 +458,7 @@
lateinit var scrollBehavior: TopAppBarScrollBehavior
rule.setMaterialContent(lightColorScheme()) {
- scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
+ scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
CenterAlignedTopAppBar(
modifier = Modifier.testTag(TopAppBarTestTag),
title = {
@@ -691,11 +689,7 @@
lateinit var state: LazyListState
rule.setMaterialContent(lightColorScheme()) {
state = rememberLazyListState()
- MultiPageContent(
- TopAppBarDefaults.enterAlwaysScrollBehavior(
- rememberTopAppBarState()
- ), state
- )
+ MultiPageContent(TopAppBarDefaults.enterAlwaysScrollBehavior(), state)
}
rule.onNodeWithTag(LazyListTag).performTouchInput { swipeLeft() }
@@ -715,12 +709,7 @@
lateinit var state: LazyListState
rule.setMaterialContent(lightColorScheme()) {
state = rememberLazyListState()
- MultiPageContent(
- TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
- rememberSplineBasedDecay(),
- rememberTopAppBarState()
- ), state
- )
+ MultiPageContent(TopAppBarDefaults.exitUntilCollapsedScrollBehavior(), state)
}
rule.onNodeWithTag(LazyListTag).performTouchInput { swipeLeft() }
@@ -741,7 +730,7 @@
rule.setMaterialContent(lightColorScheme()) {
state = rememberLazyListState()
MultiPageContent(
- TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()),
+ TopAppBarDefaults.pinnedScrollBehavior(),
state
)
}
@@ -765,9 +754,7 @@
title = {
Text("Title")
},
- scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(
- rememberTopAppBarState()
- )
+ scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
)
}
@@ -793,10 +780,7 @@
title = {
Text("Title")
},
- scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
- rememberSplineBasedDecay(),
- rememberTopAppBarState()
- )
+ scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
)
}
@@ -816,6 +800,47 @@
}
@Test
+ fun topAppBar_dragSnapToCollapsed() {
+ rule.setMaterialContentForSizeAssertions {
+ LargeTopAppBar(
+ modifier = Modifier.testTag(TopAppBarTestTag),
+ title = {
+ Text("Title")
+ },
+ scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
+ )
+ }
+
+ rule.onNodeWithTag(TopAppBarTestTag)
+ .assertHeightIsEqualTo(TopAppBarLargeTokens.ContainerHeight)
+
+ // Slightly drag up the app bar.
+ rule.onNodeWithTag(TopAppBarTestTag).performTouchInput {
+ down(Offset(x = 0f, y = height - 20f))
+ moveTo(Offset(x = 0f, y = height - 40f))
+ up()
+ }
+ rule.waitForIdle()
+
+ // Check that the app bar returned to its expanded size (i.e. fully expanded).
+ rule.onNodeWithTag(TopAppBarTestTag)
+ .assertHeightIsEqualTo(TopAppBarLargeTokens.ContainerHeight)
+
+ // Drag up the app bar to the point it should continue to collapse after.
+ rule.onNodeWithTag(TopAppBarTestTag).performTouchInput {
+ down(Offset(x = 0f, y = height - 20f))
+ moveTo(Offset(x = 0f, y = 40f))
+ up()
+ }
+ rule.waitForIdle()
+
+ // Check that the app bar collapsed to its small size constraints (i.e.
+ // TopAppBarSmallTokens.ContainerHeight).
+ rule.onNodeWithTag(TopAppBarTestTag)
+ .assertHeightIsEqualTo(TopAppBarSmallTokens.ContainerHeight)
+ }
+
+ @Test
fun state_restoresTopAppBarState() {
val restorationTester = StateRestorationTester(rule)
var topAppBarState: TopAppBarState? = null
@@ -1155,11 +1180,7 @@
var fullyCollapsedHeightOffsetPx = 0f
lateinit var scrollBehavior: TopAppBarScrollBehavior
rule.setMaterialContent(lightColorScheme()) {
- scrollBehavior =
- TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
- rememberSplineBasedDecay(),
- rememberTopAppBarState()
- )
+ scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
with(LocalDensity.current) {
partiallyCollapsedHeightOffsetPx = partiallyCollapsedOffsetDp.toPx()
fullyCollapsedHeightOffsetPx = fullyCollapsedOffsetDp.toPx()
@@ -1219,11 +1240,7 @@
var titleContentColor: Color = Color.Unspecified
lateinit var scrollBehavior: TopAppBarScrollBehavior
rule.setMaterialContent(lightColorScheme()) {
- scrollBehavior =
- TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
- rememberSplineBasedDecay(),
- rememberTopAppBarState()
- )
+ scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
// Using the mediumTopAppBarColors for both Medium and Large top app bars, as the
// current content color settings are the same.
>
@@ -1311,11 +1328,7 @@
var >
lateinit var scrollBehavior: TopAppBarScrollBehavior
rule.setMaterialContent(lightColorScheme()) {
- scrollBehavior =
- TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
- rememberSplineBasedDecay(),
- rememberTopAppBarState()
- )
+ scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
with(LocalDensity.current) {
>
fullyCollapsedHeightOffsetPx = fullyCollapsedOffsetDp.toPx()
diff --git a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/DividerUiTest.kt b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/DividerUiTest.kt
index 84d67c1..7de5206 100644
--- a/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/DividerUiTest.kt
+++ b/compose/material3/material3/src/androidAndroidTest/kotlin/androidx/compose/material3/DividerUiTest.kt
@@ -95,7 +95,7 @@
rule.setContent {
sizePx = with(LocalDensity.current) { size.toPx().roundToInt() }
dividerColor =
- MaterialTheme.colorScheme.surfaceVariant
+ MaterialTheme.colorScheme.outlineVariant
Box(modifier = Modifier.size(size).background(Color.Black)) {
Divider(
modifier = Modifier.testTag(testTag).fillMaxWidth(),
diff --git a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/AndroidAlertDialog.android.kt b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/AndroidAlertDialog.android.kt
index abe3066..96a767d 100644
--- a/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/AndroidAlertDialog.android.kt
+++ b/compose/material3/material3/src/androidMain/kotlin/androidx/compose/material3/AndroidAlertDialog.android.kt
@@ -132,7 +132,7 @@
val iconContentColor: Color @Composable get() = DialogTokens.IconColor.toColor()
/** The default title color for alert dialogs */
- val titleContentColor: Color @Composable get() = DialogTokens.SubheadColor.toColor()
+ val titleContentColor: Color @Composable get() = DialogTokens.HeadlineColor.toColor()
/** The default text color for alert dialogs */
val textContentColor: Color @Composable get() = DialogTokens.SupportingTextColor.toColor()
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AlertDialog.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AlertDialog.kt
index c1f3cba..093dc3a 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AlertDialog.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AlertDialog.kt
@@ -74,7 +74,7 @@
}
title?.let {
CompositionLocalProvider(LocalContentColor provides titleContentColor) {
- val textStyle = MaterialTheme.typography.fromToken(DialogTokens.SubheadFont)
+ val textStyle = MaterialTheme.typography.fromToken(DialogTokens.HeadlineFont)
ProvideTextStyle(textStyle) {
Box(
// Align the title to the center when an icon is present.
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AppBar.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AppBar.kt
index 9d693c9..f5c170d 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AppBar.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AppBar.kt
@@ -20,10 +20,11 @@
import androidx.compose.animation.core.AnimationState
import androidx.compose.animation.core.DecayAnimationSpec
import androidx.compose.animation.core.FastOutLinearInEasing
-import androidx.compose.animation.core.LinearOutSlowInEasing
+import androidx.compose.animation.core.Spring
import androidx.compose.animation.core.animateDecay
import androidx.compose.animation.core.animateTo
-import androidx.compose.animation.core.tween
+import androidx.compose.animation.core.spring
+import androidx.compose.animation.rememberSplineBasedDecay
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.draggable
import androidx.compose.foundation.gestures.rememberDraggableState
@@ -461,6 +462,7 @@
}
/** Contains default values used for the top app bar implementations. */
+@ExperimentalMaterial3Api
object TopAppBarDefaults {
/**
@@ -598,16 +600,16 @@
* updates its [TopAppBarState.contentOffset] accordingly.
*
* @param state the state object to be used to control or observe the top app bar's scroll
- * state. See also [rememberTopAppBarState] to create a state that is remembered across
- * compositions.
+ * state. See [rememberTopAppBarState] for a state that is remembered across compositions.
* @param canScroll a callback used to determine whether scroll events are to be handled by this
* pinned [TopAppBarScrollBehavior]
*/
@ExperimentalMaterial3Api
+ @Composable
fun pinnedScrollBehavior(
- state: TopAppBarState,
+ state: TopAppBarState = rememberTopAppBarState(),
canScroll: () -> Boolean = { true }
- ): TopAppBarScrollBehavior = PinnedScrollBehavior(state, canScroll)
+ ): TopAppBarScrollBehavior = PinnedScrollBehavior(state = state, canScroll = canScroll)
/**
* Returns a [TopAppBarScrollBehavior]. A top app bar that is set up with this
@@ -615,16 +617,21 @@
* immediately appear when the content is pulled down.
*
* @param state the state object to be used to control or observe the top app bar's scroll
- * state. See also [rememberTopAppBarState] to create a state that is remembered across
- * compositions.
+ * state. See [rememberTopAppBarState] for a state that is remembered across compositions.
* @param canScroll a callback used to determine whether scroll events are to be
* handled by this [EnterAlwaysScrollBehavior]
*/
@ExperimentalMaterial3Api
+ @Composable
fun enterAlwaysScrollBehavior(
- state: TopAppBarState,
+ state: TopAppBarState = rememberTopAppBarState(),
canScroll: () -> Boolean = { true }
- ): TopAppBarScrollBehavior = EnterAlwaysScrollBehavior(state, canScroll)
+ ): TopAppBarScrollBehavior =
+ EnterAlwaysScrollBehavior(
+ state = state,
+ flingAnimationSpec = rememberSplineBasedDecay(),
+ canScroll = canScroll
+ )
/**
* Returns a [TopAppBarScrollBehavior] that adjusts its properties to affect the colors and
@@ -634,26 +641,21 @@
* when the nested content is pulled up, and will expand back the collapsed area when the
* content is pulled all the way down.
*
- * @param decayAnimationSpec a [DecayAnimationSpec] that will be used by the top app bar motion
- * when the user flings the content. Preferably, this should match the animation spec used by
- * the scrollable content. See also [androidx.compose.animation.rememberSplineBasedDecay] for a
- * default [DecayAnimationSpec] that can be used with this behavior.
* @param state the state object to be used to control or observe the top app bar's scroll
- * state. See also [rememberTopAppBarState] to create a state that is remembered across
- * compositions.
+ * state. See [rememberTopAppBarState] for a state that is remembered across compositions.
* @param canScroll a callback used to determine whether scroll events are to be
* handled by this [ExitUntilCollapsedScrollBehavior]
*/
@ExperimentalMaterial3Api
+ @Composable
fun exitUntilCollapsedScrollBehavior(
- decayAnimationSpec: DecayAnimationSpec<Float>,
- state: TopAppBarState,
+ state: TopAppBarState = rememberTopAppBarState(),
canScroll: () -> Boolean = { true }
): TopAppBarScrollBehavior =
ExitUntilCollapsedScrollBehavior(
- state,
- decayAnimationSpec,
- canScroll
+ state = state,
+ flingAnimationSpec = rememberSplineBasedDecay(),
+ canScroll = canScroll
)
}
@@ -785,6 +787,64 @@
private var _heightOffset = mutableStateOf(initialHeightOffset)
}
+/**
+ * Represents the colors used by a top app bar in different states.
+ * This implementation animates the container color according to the top app bar scroll state. It
+ * does not animate the leading, headline, or trailing colors.
+ */
+@ExperimentalMaterial3Api
+@Stable
+class TopAppBarColors internal constructor(
+ private val containerColor: Color,
+ private val scrolledContainerColor: Color,
+ internal val navigationIconContentColor: Color,
+ internal val titleContentColor: Color,
+ internal val actionIconContentColor: Color,
+) {
+
+ /**
+ * Represents the container color used for the top app bar.
+ *
+ * A [colorTransitionFraction] provides a percentage value that can be used to generate a color.
+ * Usually, an app bar implementation will pass in a [colorTransitionFraction] read from
+ * the [TopAppBarState.collapsedFraction] or the [TopAppBarState.overlappedFraction].
+ *
+ * @param colorTransitionFraction a `0.0` to `1.0` value that represents a color transition
+ * percentage
+ */
+ @Composable
+ internal fun containerColor(colorTransitionFraction: Float): Color {
+ return lerp(
+ containerColor,
+ scrolledContainerColor,
+ FastOutLinearInEasing.transform(colorTransitionFraction)
+ )
+ }
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (other == null || other !is TopAppBarColors) return false
+
+ if (containerColor != other.containerColor) return false
+ if (scrolledContainerColor != other.scrolledContainerColor) return false
+ if (navigationIconContentColor != other.navigationIconContentColor) return false
+ if (titleContentColor != other.titleContentColor) return false
+ if (actionIconContentColor != other.actionIconContentColor) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = containerColor.hashCode()
+ result = 31 * result + scrolledContainerColor.hashCode()
+ result = 31 * result + navigationIconContentColor.hashCode()
+ result = 31 * result + titleContentColor.hashCode()
+ result = 31 * result + actionIconContentColor.hashCode()
+
+ return result
+ }
+}
+
/** Contains default values used for the bottom app bar implementations. */
object BottomAppBarDefaults {
@@ -867,10 +927,7 @@
val fraction = if (colorTransitionFraction > 0.01f) 1f else 0f
val appBarContainerColor by animateColorAsState(
targetValue = colors.containerColor(fraction),
- animationSpec = tween(
- durationMillis = TopAppBarAnimationDurationMillis,
- easing = LinearOutSlowInEasing
- )
+ animationSpec = spring(stiffness = Spring.StiffnessMediumLow)
)
// Wrap the given actions in a Row.
@@ -883,14 +940,17 @@
}
// Set up support for resizing the top app bar when vertically dragging the bar itself.
- val appBarDragModifier = Modifier.draggable(
- orientation = Orientation.Vertical,
- state = rememberDraggableState { delta ->
- if (scrollBehavior != null && !scrollBehavior.isPinned) {
+ val appBarDragModifier = if (scrollBehavior != null && !scrollBehavior.isPinned) {
+ Modifier.draggable(
+ orientation = Orientation.Vertical,
+ state = rememberDraggableState { delta ->
scrollBehavior.state.heightOffset = scrollBehavior.state.heightOffset + delta
- }
- }
- )
+ },
+ snapTopAppBar(scrollBehavior.state) }
+ )
+ } else {
+ Modifier
+ }
// Compose a Surface with a TopAppBarLayout content.
// The surface's background color is animated as specified above.
@@ -993,21 +1053,25 @@
val hideBottomRowSemantics = !hideTopRowSemantics
// Set up support for resizing the top app bar when vertically dragging the bar itself.
- val appBarDragModifier = Modifier.draggable(
- orientation = Orientation.Vertical,
- state = rememberDraggableState { delta ->
- if (scrollBehavior != null && !scrollBehavior.isPinned) {
+ val appBarDragModifier = if (scrollBehavior != null && !scrollBehavior.isPinned) {
+ Modifier.draggable(
+ orientation = Orientation.Vertical,
+ state = rememberDraggableState { delta ->
scrollBehavior.state.heightOffset = scrollBehavior.state.heightOffset + delta
- }
- }
- )
+ },
+ snapTopAppBar(scrollBehavior.state) }
+ )
+ } else {
+ Modifier
+ }
Surface(modifier = modifier.then(appBarDragModifier), color = appBarContainerColor) {
Column(
Modifier
.windowInsetsPadding(windowInsets)
// clip after padding so we don't know the title over the inset area
- .clipToBounds()) {
+ .clipToBounds()
+ ) {
TopAppBarLayout(
modifier = Modifier,
heightPx = pinnedHeightPx,
@@ -1200,66 +1264,10 @@
}
/**
- * Represents the colors used by a top app bar in different states.
- * This implementation animates the container color according to the top app bar scroll state. It
- * does not animate the leading, headline, or trailing colors.
- */
-@Stable
-class TopAppBarColors internal constructor(
- private val containerColor: Color,
- private val scrolledContainerColor: Color,
- internal val navigationIconContentColor: Color,
- internal val titleContentColor: Color,
- internal val actionIconContentColor: Color,
-) {
-
- /**
- * Represents the container color used for the top app bar.
- *
- * A [colorTransitionFraction] provides a percentage value that can be used to generate a color.
- * Usually, an app bar implementation will pass in a [colorTransitionFraction] read from
- * the [TopAppBarState.collapsedFraction] or the [TopAppBarState.overlappedFraction].
- *
- * @param colorTransitionFraction a `0.0` to `1.0` value that represents a color transition
- * percentage
- */
- @Composable
- internal fun containerColor(colorTransitionFraction: Float): Color {
- return lerp(
- containerColor,
- scrolledContainerColor,
- FastOutLinearInEasing.transform(colorTransitionFraction)
- )
- }
-
- override fun equals(other: Any?): Boolean {
- if (this === other) return true
- if (other == null || other !is TopAppBarColors) return false
-
- if (containerColor != other.containerColor) return false
- if (scrolledContainerColor != other.scrolledContainerColor) return false
- if (navigationIconContentColor != other.navigationIconContentColor) return false
- if (titleContentColor != other.titleContentColor) return false
- if (actionIconContentColor != other.actionIconContentColor) return false
-
- return true
- }
-
- override fun hashCode(): Int {
- var result = containerColor.hashCode()
- result = 31 * result + scrolledContainerColor.hashCode()
- result = 31 * result + navigationIconContentColor.hashCode()
- result = 31 * result + titleContentColor.hashCode()
- result = 31 * result + actionIconContentColor.hashCode()
-
- return result
- }
-}
-
-/**
* Returns a [TopAppBarScrollBehavior] that only adjusts its content offset, without adjusting any
* properties that affect the height of a top app bar.
*
+ * @param state a [TopAppBarState]
* @param canScroll a callback used to determine whether scroll events are to be
* handled by this [PinnedScrollBehavior]
*/
@@ -1296,12 +1304,17 @@
* A top app bar that is set up with this [TopAppBarScrollBehavior] will immediately collapse when
* the nested content is pulled up, and will immediately appear when the content is pulled down.
*
+ * @param state a [TopAppBarState]
+ * @param flingAnimationSpec a [DecayAnimationSpec] that will be used to animate the top app
+ * bar motion when the user flings the content and the app bar should collapse or expand at a
+ * similar fling velocity and decay
* @param canScroll a callback used to determine whether scroll events are to be
* handled by this [EnterAlwaysScrollBehavior]
*/
@OptIn(ExperimentalMaterial3Api::class)
private class EnterAlwaysScrollBehavior(
override var state: TopAppBarState,
+ val flingAnimationSpec: DecayAnimationSpec<Float>?,
val canScroll: () -> Boolean = { true }
) : TopAppBarScrollBehavior {
override val isPinned: Boolean = false
@@ -1337,6 +1350,22 @@
state.heightOffset = state.heightOffset + consumed.y
return Offset.Zero
}
+
+ override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity {
+ var result = super.onPostFling(consumed, available)
+ // Check if the app bar is partially collapsed/expanded.
+ // Note that we don't check for 0f due to float precision with the collapsedFraction
+ // calculation.
+ if (state.collapsedFraction > 0.01f && state.collapsedFraction < 1f) {
+ result += flingTopAppBar(
+ state = state,
+ initialVelocity = available.y,
+ flingAnimationSpec = flingAnimationSpec
+ )
+ snapTopAppBar(state)
+ }
+ return result
+ }
}
}
@@ -1348,17 +1377,17 @@
* the nested content is pulled up, and will expand back the collapsed area when the content is
* pulled all the way down.
*
- * @param decayAnimationSpec a [DecayAnimationSpec] that will be used by the top app bar motion
- * when the user flings the content. Preferably, this should match the animation spec used by the
- * scrollable content. See also [androidx.compose.animation.rememberSplineBasedDecay] for a
- * default [DecayAnimationSpec] that can be used with this behavior.
+ * @param state a [TopAppBarState]
+ * @param flingAnimationSpec a [DecayAnimationSpec] that will be used to animate the top app
+ * bar motion when the user flings the content and the app bar should collapse or expand at a
+ * similar fling velocity and decay
* @param canScroll a callback used to determine whether scroll events are to be
* handled by this [ExitUntilCollapsedScrollBehavior]
*/
@OptIn(ExperimentalMaterial3Api::class)
private class ExitUntilCollapsedScrollBehavior(
override val state: TopAppBarState,
- val decayAnimationSpec: DecayAnimationSpec<Float>,
+ val flingAnimationSpec: DecayAnimationSpec<Float>?,
val canScroll: () -> Boolean = { true }
) : TopAppBarScrollBehavior {
override val isPinned: Boolean = false
@@ -1411,19 +1440,17 @@
}
override suspend fun onPostFling(consumed: Velocity, available: Velocity): Velocity {
- val result = super.onPostFling(consumed, available)
- // TODO(b/179417109): We get positive Velocity when flinging up while the top app
- // bar is changing its height. Track b/179417109 for a fix.
- if ((available.y < 0f && state.contentOffset == 0f) ||
- (available.y > 0f && state.heightOffset < 0f)
- ) {
- return result +
- onTopBarFling(
- scrollBehavior = this@ExitUntilCollapsedScrollBehavior,
- initialVelocity = available.y,
- decayAnimationSpec = decayAnimationSpec,
- snap = true
- )
+ var result = super.onPostFling(consumed, available)
+ // Check if the app bar is partially collapsed/expanded.
+ // Note that we don't check for 0f due to float precision with the collapsedFraction
+ // calculation.
+ if (state.collapsedFraction > 0.01f && state.collapsedFraction < 1f) {
+ result += flingTopAppBar(
+ state = state,
+ initialVelocity = available.y,
+ flingAnimationSpec = flingAnimationSpec
+ )
+ snapTopAppBar(state)
}
return result
}
@@ -1431,47 +1458,46 @@
}
@OptIn(ExperimentalMaterial3Api::class)
-private suspend fun onTopBarFling(
- scrollBehavior: TopAppBarScrollBehavior,
+private suspend fun flingTopAppBar(
+ state: TopAppBarState,
initialVelocity: Float,
- decayAnimationSpec: DecayAnimationSpec<Float>,
- snap: Boolean
+ flingAnimationSpec: DecayAnimationSpec<Float>?
): Velocity {
- if (abs(initialVelocity) > 1f) {
- var remainingVelocity = initialVelocity
+ var remainingVelocity = initialVelocity
+ // In case there is an initial velocity that was left after a previous user fling, animate to
+ // continue the motion to expand or collapse the app bar.
+ if (flingAnimationSpec != null && abs(initialVelocity) > 1f) {
var lastValue = 0f
AnimationState(
initialValue = 0f,
initialVelocity = initialVelocity,
)
- .animateDecay(decayAnimationSpec) {
+ .animateDecay(flingAnimationSpec) {
val delta = value - lastValue
- val initialHeightOffset = scrollBehavior.state.heightOffset
- scrollBehavior.state.heightOffset = initialHeightOffset + delta
- val consumed = abs(initialHeightOffset - scrollBehavior.state.heightOffset)
+ val initialHeightOffset = state.heightOffset
+ state.heightOffset = initialHeightOffset + delta
+ val consumed = abs(initialHeightOffset - state.heightOffset)
lastValue = value
remainingVelocity = this.velocity
// avoid rounding errors and stop if anything is unconsumed
if (abs(delta - consumed) > 0.5f) this.cancelAnimation()
}
-
- if (snap &&
- scrollBehavior.state.heightOffset < 0 &&
- scrollBehavior.state.heightOffset > scrollBehavior.state.heightOffsetLimit
- ) {
- AnimationState(initialValue = scrollBehavior.state.heightOffset).animateTo(
- // Snap the top app bar height offset to have the bar completely collapse or
- // completely expand according to the initial velocity direction.
- if (initialVelocity > 0) 0f else scrollBehavior.state.heightOffsetLimit,
- animationSpec = tween(
- durationMillis = TopAppBarAnimationDurationMillis,
- easing = LinearOutSlowInEasing
- )
- ) { scrollBehavior.state.heightOffset = value }
- }
- return Velocity(0f, remainingVelocity)
}
- return Velocity.Zero
+ return Velocity(0f, remainingVelocity)
+}
+
+@OptIn(ExperimentalMaterial3Api::class)
+private suspend fun snapTopAppBar(state: TopAppBarState) {
+ // In case the app bar motion was stopped in a state where it's partially visible, snap it to
+ // the nearest state.
+ if (state.heightOffset < 0 &&
+ state.heightOffset > state.heightOffsetLimit
+ ) {
+ AnimationState(initialValue = state.heightOffset).animateTo(
+ if (state.collapsedFraction < 0.5f) 0f else state.heightOffsetLimit,
+ animationSpec = spring(stiffness = Spring.StiffnessMediumLow)
+ ) { state.heightOffset = value }
+ }
}
private val MediumTitleBottomPadding = 24.dp
@@ -1481,5 +1507,3 @@
// A title inset when the App-Bar is a Medium or Large one. Also used to size a spacer when the
// navigation icon is missing.
private val TopAppBarTitleInset = 16.dp - TopAppBarHorizontalPadding
-
-private const val TopAppBarAnimationDurationMillis = 500
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Chip.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Chip.kt
index 96ff4ad..ecee6e1 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Chip.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Chip.kt
@@ -1616,7 +1616,7 @@
private val disabledElevation: Dp
) {
/**
- * Represents the tonal elevation used in a chip, depending on [enabled], [selected], and
+ * Represents the tonal elevation used in a chip, depending on [enabled] and
* [interactionSource]. This should typically be the same value as the [shadowElevation].
*
* Tonal elevation is used to apply a color shift to the surface to give the it higher emphasis.
@@ -1637,7 +1637,7 @@
}
/**
- * Represents the shadow elevation used in a chip, depending on [enabled], [selected], and
+ * Represents the shadow elevation used in a chip, depending on [enabled] and
* [interactionSource]. This should typically be the same value as the [tonalElevation].
*
* Shadow elevation is used to apply a shadow around the surface to give it higher emphasis.
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt
index 40362cf..75933e7d 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt
@@ -143,9 +143,6 @@
*
* @param onClick called when this FAB is clicked
* @param modifier the [Modifier] to be applied to this FAB
- * @param interactionSource the [MutableInteractionSource] representing the stream of [Interaction]s
- * for this FAB. You can create and pass in your own `remember`ed instance to observe [Interaction]s
- * and customize the appearance / behavior of this FAB in different states.
* @param shape defines the shape of this FAB's container and shadow (when using [elevation])
* @param containerColor the color used for the background of this FAB. Use [Color.Transparent] to
* have no color.
@@ -156,17 +153,20 @@
* different states. This controls the size of the shadow below the FAB. Additionally, when the
* container color is [ColorScheme.surface], this controls the amount of primary color applied as an
* overlay. See also: [Surface].
+ * @param interactionSource the [MutableInteractionSource] representing the stream of [Interaction]s
+ * for this FAB. You can create and pass in your own `remember`ed instance to observe [Interaction]s
+ * and customize the appearance / behavior of this FAB in different states.
* @param content the content of this FAB, typically an [Icon]
*/
@Composable
fun SmallFloatingActionButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
- interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
shape: Shape = FloatingActionButtonDefaults.smallShape,
containerColor: Color = FloatingActionButtonDefaults.containerColor,
contentColor: Color = contentColorFor(containerColor),
elevation: FloatingActionButtonElevation = FloatingActionButtonDefaults.elevation(),
+ interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable () -> Unit,
) {
FloatingActionButton(
@@ -175,11 +175,11 @@
minWidth = FabPrimarySmallTokens.ContainerWidth,
minHeight = FabPrimarySmallTokens.ContainerHeight,
),
- interactionSource = interactionSource,
shape = shape,
containerColor = containerColor,
contentColor = contentColor,
elevation = elevation,
+ interactionSource = interactionSource,
content = content,
)
}
@@ -195,9 +195,6 @@
*
* @param onClick called when this FAB is clicked
* @param modifier the [Modifier] to be applied to this FAB
- * @param interactionSource the [MutableInteractionSource] representing the stream of [Interaction]s
- * for this FAB. You can create and pass in your own `remember`ed instance to observe [Interaction]s
- * and customize the appearance / behavior of this FAB in different states.
* @param shape defines the shape of this FAB's container and shadow (when using [elevation])
* @param containerColor the color used for the background of this FAB. Use [Color.Transparent] to
* have no color.
@@ -208,17 +205,20 @@
* different states. This controls the size of the shadow below the FAB. Additionally, when the
* container color is [ColorScheme.surface], this controls the amount of primary color applied as an
* overlay. See also: [Surface].
+ * @param interactionSource the [MutableInteractionSource] representing the stream of [Interaction]s
+ * for this FAB. You can create and pass in your own `remember`ed instance to observe [Interaction]s
+ * and customize the appearance / behavior of this FAB in different states.
* @param content the content of this FAB, typically an [Icon]
*/
@Composable
fun LargeFloatingActionButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
- interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
shape: Shape = FloatingActionButtonDefaults.largeShape,
containerColor: Color = FloatingActionButtonDefaults.containerColor,
contentColor: Color = contentColorFor(containerColor),
elevation: FloatingActionButtonElevation = FloatingActionButtonDefaults.elevation(),
+ interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable () -> Unit,
) {
FloatingActionButton(
@@ -227,11 +227,11 @@
minWidth = FabPrimaryLargeTokens.ContainerWidth,
minHeight = FabPrimaryLargeTokens.ContainerHeight,
),
- interactionSource = interactionSource,
shape = shape,
containerColor = containerColor,
contentColor = contentColor,
elevation = elevation,
+ interactionSource = interactionSource,
content = content,
)
}
@@ -250,9 +250,6 @@
*
* @param onClick called when this FAB is clicked
* @param modifier the [Modifier] to be applied to this FAB
- * @param interactionSource the [MutableInteractionSource] representing the stream of [Interaction]s
- * for this FAB. You can create and pass in your own `remember`ed instance to observe [Interaction]s
- * and customize the appearance / behavior of this FAB in different states.
* @param shape defines the shape of this FAB's container and shadow (when using [elevation])
* @param containerColor the color used for the background of this FAB. Use [Color.Transparent] to
* have no color.
@@ -263,27 +260,30 @@
* different states. This controls the size of the shadow below the FAB. Additionally, when the
* container color is [ColorScheme.surface], this controls the amount of primary color applied as an
* overlay. See also: [Surface].
+ * @param interactionSource the [MutableInteractionSource] representing the stream of [Interaction]s
+ * for this FAB. You can create and pass in your own `remember`ed instance to observe [Interaction]s
+ * and customize the appearance / behavior of this FAB in different states.
* @param content the content of this FAB, typically a [Text] label
*/
@Composable
fun ExtendedFloatingActionButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
- interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
shape: Shape = FloatingActionButtonDefaults.extendedFabShape,
containerColor: Color = FloatingActionButtonDefaults.containerColor,
contentColor: Color = contentColorFor(containerColor),
elevation: FloatingActionButtonElevation = FloatingActionButtonDefaults.elevation(),
+ interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
content: @Composable RowScope.() -> Unit,
) {
FloatingActionButton(
- modifier = modifier,
>
- interactionSource = interactionSource,
+ modifier = modifier,
shape = shape,
containerColor = containerColor,
contentColor = contentColor,
elevation = elevation,
+ interactionSource = interactionSource,
) {
Row(
modifier = Modifier
@@ -318,9 +318,6 @@
* @param modifier the [Modifier] to be applied to this FAB
* @param expanded controls the expansion state of this FAB. In an expanded state, the FAB will show
* both the [icon] and [text]. In a collapsed state, the FAB will show only the [icon].
- * @param interactionSource the [MutableInteractionSource] representing the stream of [Interaction]s
- * for this FAB. You can create and pass in your own `remember`ed instance to observe [Interaction]s
- * and customize the appearance / behavior of this FAB in different states.
* @param shape defines the shape of this FAB's container and shadow (when using [elevation])
* @param containerColor the color used for the background of this FAB. Use [Color.Transparent] to
* have no color.
@@ -331,6 +328,9 @@
* different states. This controls the size of the shadow below the FAB. Additionally, when the
* container color is [ColorScheme.surface], this controls the amount of primary color applied as an
* overlay. See also: [Surface].
+ * @param interactionSource the [MutableInteractionSource] representing the stream of [Interaction]s
+ * for this FAB. You can create and pass in your own `remember`ed instance to observe [Interaction]s
+ * and customize the appearance / behavior of this FAB in different states.
*/
@Composable
fun ExtendedFloatingActionButton(
@@ -339,20 +339,20 @@
onClick: () -> Unit,
modifier: Modifier = Modifier,
expanded: Boolean = true,
- interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
shape: Shape = FloatingActionButtonDefaults.extendedFabShape,
containerColor: Color = FloatingActionButtonDefaults.containerColor,
contentColor: Color = contentColorFor(containerColor),
elevation: FloatingActionButtonElevation = FloatingActionButtonDefaults.elevation(),
+ interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
) {
FloatingActionButton(
- modifier = modifier,
>
- interactionSource = interactionSource,
+ modifier = modifier,
shape = shape,
containerColor = containerColor,
contentColor = contentColor,
elevation = elevation,
+ interactionSource = interactionSource,
) {
val startPadding = if (expanded) ExtendedFabStartIconPadding else 0.dp
val endPadding = if (expanded) ExtendedFabTextPadding else 0.dp
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/AssistChipTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/AssistChipTokens.kt
index 481b9e8..b2c6f2c 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/AssistChipTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/AssistChipTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -55,4 +55,4 @@
val IconColor = ColorSchemeKeyTokens.Primary
val IconSize = 18.0.dp
val PressedIconColor = ColorSchemeKeyTokens.Primary
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/BadgeTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/BadgeTokens.kt
index 25da92a..97c4e3d 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/BadgeTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/BadgeTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/BottomAppBarTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/BottomAppBarTokens.kt
index 45cb254..00655a8 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/BottomAppBarTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/BottomAppBarTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_91
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -26,4 +26,4 @@
val ContainerHeight = 80.0.dp
val ContainerShape = ShapeKeyTokens.CornerNone
val ContainerSurfaceTintLayerColor = ColorSchemeKeyTokens.SurfaceTint
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/CircularProgressIndicatorTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/CircularProgressIndicatorTokens.kt
index 9be2de2..7e0ea7e 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/CircularProgressIndicatorTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/CircularProgressIndicatorTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -22,11 +22,11 @@
internal object CircularProgressIndicatorTokens {
val ActiveIndicatorColor = ColorSchemeKeyTokens.Primary
- val ActiveShape = ShapeTokens.CornerNone
+ val ActiveShape = ShapeKeyTokens.CornerNone
val ActiveIndicatorWidth = 4.0.dp
val FourColorActiveIndicatorFourColor = ColorSchemeKeyTokens.TertiaryContainer
val FourColorActiveIndicatorOneColor = ColorSchemeKeyTokens.Primary
val FourColorActiveIndicatorThreeColor = ColorSchemeKeyTokens.Tertiary
val FourColorActiveIndicatorTwoColor = ColorSchemeKeyTokens.PrimaryContainer
val Size = 48.0.dp
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/DialogTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/DialogTokens.kt
index 0fc01e5..fffa870 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/DialogTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/DialogTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_117
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -30,12 +30,10 @@
val ContainerElevation = ElevationTokens.Level3
val ContainerShape = ShapeKeyTokens.CornerExtraLarge
val ContainerSurfaceTintLayerColor = ColorSchemeKeyTokens.SurfaceTint
- val SubheadColor = ColorSchemeKeyTokens.OnSurface
- val SubheadFont = TypographyKeyTokens.HeadlineSmall
+ val HeadlineColor = ColorSchemeKeyTokens.OnSurface
+ val HeadlineFont = TypographyKeyTokens.HeadlineSmall
val SupportingTextColor = ColorSchemeKeyTokens.OnSurfaceVariant
val SupportingTextFont = TypographyKeyTokens.BodyMedium
- val DividerColor = ColorSchemeKeyTokens.Outline
- val DividerHeight = 1.0.dp
val IconColor = ColorSchemeKeyTokens.Secondary
val IconSize = 24.0.dp
}
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/DividerTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/DividerTokens.kt
index 508aa4e..a9bfc87 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/DividerTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/DividerTokens.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2021 The Android Open Source Project
+ * 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.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_103
+// VERSION: v0_117
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -21,6 +21,6 @@
import androidx.compose.ui.unit.dp
internal object DividerTokens {
- val Color = ColorSchemeKeyTokens.SurfaceVariant
+ val Color = ColorSchemeKeyTokens.OutlineVariant
val Thickness = 1.0.dp
}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ElevatedButtonTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ElevatedButtonTokens.kt
index bd81546..fcef087 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ElevatedButtonTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ElevatedButtonTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -46,4 +46,4 @@
val IconColor = ColorSchemeKeyTokens.Primary
val IconSize = 18.0.dp
val PressedIconColor = ColorSchemeKeyTokens.Primary
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ElevatedCardTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ElevatedCardTokens.kt
index eb5e195..ca4729a 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ElevatedCardTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ElevatedCardTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ElevationTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ElevationTokens.kt
index e134f3f..c80ff53 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ElevationTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ElevationTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ExtendedFabPrimaryTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ExtendedFabPrimaryTokens.kt
index b0457dc..1786948 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ExtendedFabPrimaryTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ExtendedFabPrimaryTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -42,4 +42,4 @@
val PressedContainerElevation = ElevationTokens.Level3
val PressedIconColor = ColorSchemeKeyTokens.OnPrimaryContainer
val PressedLabelTextColor = ColorSchemeKeyTokens.OnPrimaryContainer
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabPrimaryLargeTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabPrimaryLargeTokens.kt
index f2cf504..9d06a88 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabPrimaryLargeTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabPrimaryLargeTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -38,4 +38,4 @@
val LoweredPressedContainerElevation = ElevationTokens.Level1
val PressedContainerElevation = ElevationTokens.Level3
val PressedIconColor = ColorSchemeKeyTokens.OnPrimaryContainer
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabPrimarySmallTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabPrimarySmallTokens.kt
index bd1fb84..3cbd45db 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabPrimarySmallTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabPrimarySmallTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -38,4 +38,4 @@
val LoweredPressedContainerElevation = ElevationTokens.Level1
val PressedContainerElevation = ElevationTokens.Level3
val PressedIconColor = ColorSchemeKeyTokens.OnPrimaryContainer
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabPrimaryTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabPrimaryTokens.kt
index b02d229..2161f4c 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabPrimaryTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabPrimaryTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -38,4 +38,4 @@
val LoweredPressedContainerElevation = ElevationTokens.Level1
val PressedContainerElevation = ElevationTokens.Level3
val PressedIconColor = ColorSchemeKeyTokens.OnPrimaryContainer
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabSecondaryTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabSecondaryTokens.kt
index c54da1d..774995b 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabSecondaryTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FabSecondaryTokens.kt
@@ -13,11 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-// VERSION: v0_93
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
+
package androidx.compose.material3.tokens
+
import androidx.compose.ui.unit.dp
+
internal object FabSecondaryTokens {
val ContainerColor = ColorSchemeKeyTokens.SecondaryContainer
val ContainerElevation = ElevationTokens.Level3
@@ -36,4 +38,4 @@
val LoweredPressedContainerElevation = ElevationTokens.Level1
val PressedContainerElevation = ElevationTokens.Level3
val PressedIconColor = ColorSchemeKeyTokens.OnSecondaryContainer
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledAutocompleteTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledAutocompleteTokens.kt
index 2af3b58..88fe201 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledAutocompleteTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledAutocompleteTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -95,4 +95,4 @@
val FieldSupportingTextFont = TypographyKeyTokens.BodySmall
val TextFieldTrailingIconColor = ColorSchemeKeyTokens.OnSurfaceVariant
val TextFieldTrailingIconSize = 24.0.dp
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledButtonTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledButtonTokens.kt
index dc7509a..64cb2b1 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledButtonTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledButtonTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -30,8 +30,6 @@
const val DisabledContainerOpacity = 0.12f
val DisabledLabelTextColor = ColorSchemeKeyTokens.OnSurface
const val DisabledLabelTextOpacity = 0.38f
- val DraggedContainerElevation = ElevationTokens.Level3
- val DraggedLabelTextColor = ColorSchemeKeyTokens.OnPrimary
val FocusContainerElevation = ElevationTokens.Level0
val FocusLabelTextColor = ColorSchemeKeyTokens.OnPrimary
val HoverContainerElevation = ElevationTokens.Level1
@@ -42,10 +40,9 @@
val PressedLabelTextColor = ColorSchemeKeyTokens.OnPrimary
val DisabledIconColor = ColorSchemeKeyTokens.OnSurface
const val DisabledIconOpacity = 0.38f
- val DraggedIconColor = ColorSchemeKeyTokens.OnPrimary
val FocusIconColor = ColorSchemeKeyTokens.OnPrimary
val HoverIconColor = ColorSchemeKeyTokens.OnPrimary
val IconColor = ColorSchemeKeyTokens.OnPrimary
val IconSize = 18.0.dp
val PressedIconColor = ColorSchemeKeyTokens.OnPrimary
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledCardTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledCardTokens.kt
index 7b095f3..5dad463 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledCardTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledCardTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -33,4 +33,4 @@
val IconColor = ColorSchemeKeyTokens.Primary
val IconSize = 24.0.dp
val PressedContainerElevation = ElevationTokens.Level0
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledTextFieldTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledTextFieldTokens.kt
index 22d0af5..dc067dd 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledTextFieldTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledTextFieldTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -88,4 +88,4 @@
val SupportingFont = TypographyKeyTokens.BodySmall
val TrailingIconColor = ColorSchemeKeyTokens.OnSurfaceVariant
val TrailingIconSize = 24.0.dp
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledTonalButtonTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledTonalButtonTokens.kt
index b36379f..e53ae44 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledTonalButtonTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilledTonalButtonTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilterChipTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilterChipTokens.kt
index b88f808..20dec31 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilterChipTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/FilterChipTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -76,4 +76,4 @@
val UnselectedHoverIconColor = ColorSchemeKeyTokens.OnSurfaceVariant
val UnselectedIconColor = ColorSchemeKeyTokens.OnSurfaceVariant
val UnselectedPressedIconColor = ColorSchemeKeyTokens.OnSurfaceVariant
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/InputChipTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/InputChipTokens.kt
index 98af8af..d309ef6 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/InputChipTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/InputChipTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_101
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -76,4 +76,4 @@
val UnselectedHoverTrailingIconColor = ColorSchemeKeyTokens.OnSurfaceVariant
val UnselectedPressedTrailingIconColor = ColorSchemeKeyTokens.OnSurfaceVariant
val UnselectedTrailingIconColor = ColorSchemeKeyTokens.OnSurfaceVariant
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/LinearProgressIndicatorTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/LinearProgressIndicatorTokens.kt
index 04a0fa0..2fc4755 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/LinearProgressIndicatorTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/LinearProgressIndicatorTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ListTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ListTokens.kt
index a6508a5..b5a7be1 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ListTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ListTokens.kt
@@ -13,16 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_93
+// VERSION: v0_117
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
import androidx.compose.ui.unit.dp
-
internal object ListTokens {
- val DividerColor = ColorSchemeKeyTokens.Outline
- val DividerHeight = 1.0.dp
val ListItemContainerColor = ColorSchemeKeyTokens.Surface
val ListItemContainerElevation = ElevationTokens.Level0
val ListItemContainerHeight = 56.0.dp
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/MenuTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/MenuTokens.kt
index e21780f..fb1718e 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/MenuTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/MenuTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_117
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -25,8 +25,6 @@
val ContainerElevation = ElevationTokens.Level2
val ContainerShape = ShapeKeyTokens.CornerExtraSmall
val ContainerSurfaceTintLayerColor = ColorSchemeKeyTokens.SurfaceTint
- val DividerColor = ColorSchemeKeyTokens.SurfaceVariant
- val DividerHeight = 1.0.dp
val ListItemContainerHeight = 48.0.dp
val ListItemDisabledLabelTextColor = ColorSchemeKeyTokens.OnSurface
const val ListItemDisabledLabelTextOpacity = 0.38f
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/NavigationBarTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/NavigationBarTokens.kt
index 374b397..eecfc7e 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/NavigationBarTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/NavigationBarTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -48,4 +48,4 @@
val InactivePressedIconColor = ColorSchemeKeyTokens.OnSurface
val InactivePressedLabelTextColor = ColorSchemeKeyTokens.OnSurface
val LabelTextFont = TypographyKeyTokens.LabelMedium
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/NavigationDrawerTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/NavigationDrawerTokens.kt
index 66d8e0d..72c7a51 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/NavigationDrawerTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/NavigationDrawerTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_117
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -39,7 +39,6 @@
val ContainerShape = ShapeKeyTokens.CornerLargeEnd
val ContainerSurfaceTintLayerColor = ColorSchemeKeyTokens.SurfaceTint
val ContainerWidth = 360.0.dp
- val DividerColor = ColorSchemeKeyTokens.Outline
val HeadlineColor = ColorSchemeKeyTokens.OnSurfaceVariant
val HeadlineFont = TypographyKeyTokens.TitleSmall
val IconSize = 24.0.dp
@@ -55,6 +54,5 @@
val LargeBadgeLabelColor = ColorSchemeKeyTokens.OnSurfaceVariant
val LargeBadgeLabelFont = TypographyKeyTokens.LabelLarge
val ModalContainerElevation = ElevationTokens.Level1
- const val ScrimOpacity = 0.4f
val StandardContainerElevation = ElevationTokens.Level0
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/NavigationRailTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/NavigationRailTokens.kt
index 9d26c8a3..0fb4723 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/NavigationRailTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/NavigationRailTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -54,4 +54,4 @@
val MenuPressedIconColor = ColorSchemeKeyTokens.OnSurface
val NoLabelActiveIndicatorHeight = 56.0.dp
val NoLabelActiveIndicatorShape = ShapeKeyTokens.CornerFull
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedAutocompleteTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedAutocompleteTokens.kt
index 9b9b240..779a0ff 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedAutocompleteTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedAutocompleteTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -34,7 +34,7 @@
val TextFieldCaretColor = ColorSchemeKeyTokens.Primary
val TextFieldContainerColor = ColorSchemeKeyTokens.SurfaceVariant
val TextFieldContainerHeight = 56.0.dp
- val TextFieldContainerShape = ShapeKeyTokens.CornerExtraSmallTop
+ val TextFieldContainerShape = ShapeKeyTokens.CornerExtraSmall
val FieldDisabledInputTextColor = ColorSchemeKeyTokens.OnSurface
const val FieldDisabledInputTextOpacity = 0.38f
val FieldDisabledLabelTextColor = ColorSchemeKeyTokens.OnSurface
@@ -93,4 +93,4 @@
val FieldSupportingTextFont = TypographyKeyTokens.BodySmall
val TextFieldTrailingIconColor = ColorSchemeKeyTokens.OnSurfaceVariant
val TextFieldTrailingIconSize = 24.0.dp
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedButtonTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedButtonTokens.kt
index 086d710..97c36a5 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedButtonTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedButtonTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -44,4 +44,4 @@
val IconColor = ColorSchemeKeyTokens.Primary
val IconSize = 18.0.dp
val PressedIconColor = ColorSchemeKeyTokens.Primary
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedCardTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedCardTokens.kt
index 102500d..c99162b 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedCardTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedCardTokens.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2021 The Android Open Source Project
+ * 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.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedTextFieldTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedTextFieldTokens.kt
index 950bbf8..13f1d6b 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedTextFieldTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/OutlinedTextFieldTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/PaletteTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/PaletteTokens.kt
index 4657b1f..4384b14 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/PaletteTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/PaletteTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/PrimaryNavigationTabTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/PrimaryNavigationTabTokens.kt
index 59bdace..3fd0e91 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/PrimaryNavigationTabTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/PrimaryNavigationTabTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -50,4 +50,4 @@
val InactiveLabelTextColor = ColorSchemeKeyTokens.OnSurfaceVariant
val InactivePressedLabelTextColor = ColorSchemeKeyTokens.OnSurface
val LabelTextFont = TypographyKeyTokens.TitleSmall
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ShapeKeyTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ShapeKeyTokens.kt
index a0538d2..956f53a 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ShapeKeyTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ShapeKeyTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -30,4 +30,4 @@
CornerMedium,
CornerNone,
CornerSmall,
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ShapeTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ShapeTokens.kt
index b77685a..b4e3f61 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ShapeTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/ShapeTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -58,4 +58,4 @@
val CornerMedium = RoundedCornerShape(12.0.dp)
val CornerNone = RectangleShape
val CornerSmall = RoundedCornerShape(8.0.dp)
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/SliderTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/SliderTokens.kt
index 0bab299..5506511 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/SliderTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/SliderTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_117
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -22,7 +22,7 @@
internal object SliderTokens {
val ActiveTrackColor = ColorSchemeKeyTokens.Primary
- val ActiveTrackHeight = 6.0.dp
+ val ActiveTrackHeight = 4.0.dp
val ActiveTrackShape = ShapeKeyTokens.CornerFull
val DisabledActiveTrackColor = ColorSchemeKeyTokens.OnSurface
const val DisabledActiveTrackOpacity = 0.38f
@@ -59,4 +59,4 @@
const val TickMarksDisabledContainerOpacity = 0.38f
val TickMarksInactiveContainerColor = ColorSchemeKeyTokens.OnSurfaceVariant
const val TickMarksInactiveContainerOpacity = 0.38f
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/SnackbarTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/SnackbarTokens.kt
index 15d24be..ad7994a 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/SnackbarTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/SnackbarTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -38,4 +38,4 @@
val SupportingTextFont = TypographyKeyTokens.BodyMedium
val SingleLineContainerHeight = 48.0.dp
val TwoLinesContainerHeight = 68.0.dp
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/StateTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/StateTokens.kt
index 3607669..38925aa 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/StateTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/StateTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/SwitchTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/SwitchTokens.kt
index a0e061dd..a359c70 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/SwitchTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/SwitchTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_93
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -75,6 +75,7 @@
val UnselectedPressedTrackColor = ColorSchemeKeyTokens.SurfaceVariant
val UnselectedPressedTrackOutlineColor = ColorSchemeKeyTokens.Outline
val UnselectedTrackColor = ColorSchemeKeyTokens.SurfaceVariant
+ val UnselectedTrackOutlineColor = ColorSchemeKeyTokens.Outline
val IconHandleHeight = 24.0.dp
val IconHandleWidth = 24.0.dp
}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TextButtonTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TextButtonTokens.kt
index 5ebe3a1..90f2c21 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TextButtonTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TextButtonTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -37,4 +37,4 @@
val IconColor = ColorSchemeKeyTokens.Primary
val IconSize = 18.0.dp
val PressedIconColor = ColorSchemeKeyTokens.Primary
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarLargeTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarLargeTokens.kt
index c92d666..3713c50 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarLargeTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarLargeTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -32,4 +32,4 @@
val LeadingIconSize = 24.0.dp
val TrailingIconColor = ColorSchemeKeyTokens.OnSurfaceVariant
val TrailingIconSize = 24.0.dp
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarMediumTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarMediumTokens.kt
index 51a9051..b2045a5 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarMediumTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarMediumTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -32,4 +32,4 @@
val LeadingIconSize = 24.0.dp
val TrailingIconColor = ColorSchemeKeyTokens.OnSurfaceVariant
val TrailingIconSize = 24.0.dp
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarSmallCenteredTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarSmallCenteredTokens.kt
index 36135eb..b684952 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarSmallCenteredTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarSmallCenteredTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarSmallTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarSmallTokens.kt
index 84fe498..ebd8114 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarSmallTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TopAppBarSmallTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -33,4 +33,4 @@
val >
val TrailingIconColor = ColorSchemeKeyTokens.OnSurfaceVariant
val TrailingIconSize = 24.0.dp
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypeScaleTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypeScaleTokens.kt
index 18945aa..0073539 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypeScaleTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypeScaleTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypefaceTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypefaceTokens.kt
index 49e3fe6..c5facaa 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypefaceTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypefaceTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypographyKeyTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypographyKeyTokens.kt
index 5f976f6..848d7a2 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypographyKeyTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypographyKeyTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -34,4 +34,4 @@
TitleLarge,
TitleMedium,
TitleSmall,
-}
+}
\ No newline at end of file
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypographyTokens.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypographyTokens.kt
index 41e0e18..403ced0 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypographyTokens.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/TypographyTokens.kt
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-// VERSION: v0_92
+// VERSION: v0_103
// GENERATED CODE - DO NOT MODIFY BY HAND
package androidx.compose.material3.tokens
@@ -21,109 +21,124 @@
import androidx.compose.ui.text.TextStyle
internal object TypographyTokens {
- val BodyLarge = TextStyle(
- fontFamily = TypeScaleTokens.BodyLargeFont,
- fontWeight = TypeScaleTokens.BodyLargeWeight,
- fontSize = TypeScaleTokens.BodyLargeSize,
- lineHeight = TypeScaleTokens.BodyLargeLineHeight,
- letterSpacing = TypeScaleTokens.BodyLargeTracking,
- )
- val BodyMedium = TextStyle(
- fontFamily = TypeScaleTokens.BodyMediumFont,
- fontWeight = TypeScaleTokens.BodyMediumWeight,
- fontSize = TypeScaleTokens.BodyMediumSize,
- lineHeight = TypeScaleTokens.BodyMediumLineHeight,
- letterSpacing = TypeScaleTokens.BodyMediumTracking,
- )
- val BodySmall = TextStyle(
- fontFamily = TypeScaleTokens.BodySmallFont,
- fontWeight = TypeScaleTokens.BodySmallWeight,
- fontSize = TypeScaleTokens.BodySmallSize,
- lineHeight = TypeScaleTokens.BodySmallLineHeight,
- letterSpacing = TypeScaleTokens.BodySmallTracking,
- )
- val DisplayLarge = TextStyle(
- fontFamily = TypeScaleTokens.DisplayLargeFont,
- fontWeight = TypeScaleTokens.DisplayLargeWeight,
- fontSize = TypeScaleTokens.DisplayLargeSize,
- lineHeight = TypeScaleTokens.DisplayLargeLineHeight,
- letterSpacing = TypeScaleTokens.DisplayLargeTracking,
- )
- val DisplayMedium = TextStyle(
- fontFamily = TypeScaleTokens.DisplayMediumFont,
- fontWeight = TypeScaleTokens.DisplayMediumWeight,
- fontSize = TypeScaleTokens.DisplayMediumSize,
- lineHeight = TypeScaleTokens.DisplayMediumLineHeight,
- letterSpacing = TypeScaleTokens.DisplayMediumTracking,
- )
- val DisplaySmall = TextStyle(
- fontFamily = TypeScaleTokens.DisplaySmallFont,
- fontWeight = TypeScaleTokens.DisplaySmallWeight,
- fontSize = TypeScaleTokens.DisplaySmallSize,
- lineHeight = TypeScaleTokens.DisplaySmallLineHeight,
- letterSpacing = TypeScaleTokens.DisplaySmallTracking,
- )
- val HeadlineLarge = TextStyle(
- fontFamily = TypeScaleTokens.HeadlineLargeFont,
- fontWeight = TypeScaleTokens.HeadlineLargeWeight,
- fontSize = TypeScaleTokens.HeadlineLargeSize,
- lineHeight = TypeScaleTokens.HeadlineLargeLineHeight,
- letterSpacing = TypeScaleTokens.HeadlineLargeTracking,
- )
- val HeadlineMedium = TextStyle(
- fontFamily = TypeScaleTokens.HeadlineMediumFont,
- fontWeight = TypeScaleTokens.HeadlineMediumWeight,
- fontSize = TypeScaleTokens.HeadlineMediumSize,
- lineHeight = TypeScaleTokens.HeadlineMediumLineHeight,
- letterSpacing = TypeScaleTokens.HeadlineMediumTracking,
- )
- val HeadlineSmall = TextStyle(
- fontFamily = TypeScaleTokens.HeadlineSmallFont,
- fontWeight = TypeScaleTokens.HeadlineSmallWeight,
- fontSize = TypeScaleTokens.HeadlineSmallSize,
- lineHeight = TypeScaleTokens.HeadlineSmallLineHeight,
- letterSpacing = TypeScaleTokens.HeadlineSmallTracking,
- )
- val LabelLarge = TextStyle(
- fontFamily = TypeScaleTokens.LabelLargeFont,
- fontWeight = TypeScaleTokens.LabelLargeWeight,
- fontSize = TypeScaleTokens.LabelLargeSize,
- lineHeight = TypeScaleTokens.LabelLargeLineHeight,
- letterSpacing = TypeScaleTokens.LabelLargeTracking,
- )
- val LabelMedium = TextStyle(
- fontFamily = TypeScaleTokens.LabelMediumFont,
- fontWeight = TypeScaleTokens.LabelMediumWeight,
- fontSize = TypeScaleTokens.LabelMediumSize,
- lineHeight = TypeScaleTokens.LabelMediumLineHeight,
- letterSpacing = TypeScaleTokens.LabelMediumTracking,
- )
- val LabelSmall = TextStyle(
- fontFamily = TypeScaleTokens.LabelSmallFont,
- fontWeight = TypeScaleTokens.LabelSmallWeight,
- fontSize = TypeScaleTokens.LabelSmallSize,
- lineHeight = TypeScaleTokens.LabelSmallLineHeight,
- letterSpacing = TypeScaleTokens.LabelSmallTracking,
- )
- val TitleLarge = TextStyle(
- fontFamily = TypeScaleTokens.TitleLargeFont,
- fontWeight = TypeScaleTokens.TitleLargeWeight,
- fontSize = TypeScaleTokens.TitleLargeSize,
- lineHeight = TypeScaleTokens.TitleLargeLineHeight,
- letterSpacing = TypeScaleTokens.TitleLargeTracking,
- )
- val TitleMedium = TextStyle(
- fontFamily = TypeScaleTokens.TitleMediumFont,
- fontWeight = TypeScaleTokens.TitleMediumWeight,
- fontSize = TypeScaleTokens.TitleMediumSize,
- lineHeight = TypeScaleTokens.TitleMediumLineHeight,
- letterSpacing = TypeScaleTokens.TitleMediumTracking,
- )
- val TitleSmall = TextStyle(
- fontFamily = TypeScaleTokens.TitleSmallFont,
- fontWeight = TypeScaleTokens.TitleSmallWeight,
- fontSize = TypeScaleTokens.TitleSmallSize,
- lineHeight = TypeScaleTokens.TitleSmallLineHeight,
- letterSpacing = TypeScaleTokens.TitleSmallTracking,
- )
-}
+ val BodyLarge =
+ TextStyle(
+ fontFamily = TypeScaleTokens.BodyLargeFont,
+ fontWeight = TypeScaleTokens.BodyLargeWeight,
+ fontSize = TypeScaleTokens.BodyLargeSize,
+ lineHeight = TypeScaleTokens.BodyLargeLineHeight,
+ letterSpacing = TypeScaleTokens.BodyLargeTracking,
+ )
+ val BodyMedium =
+ TextStyle(
+ fontFamily = TypeScaleTokens.BodyMediumFont,
+ fontWeight = TypeScaleTokens.BodyMediumWeight,
+ fontSize = TypeScaleTokens.BodyMediumSize,
+ lineHeight = TypeScaleTokens.BodyMediumLineHeight,
+ letterSpacing = TypeScaleTokens.BodyMediumTracking,
+ )
+ val BodySmall =
+ TextStyle(
+ fontFamily = TypeScaleTokens.BodySmallFont,
+ fontWeight = TypeScaleTokens.BodySmallWeight,
+ fontSize = TypeScaleTokens.BodySmallSize,
+ lineHeight = TypeScaleTokens.BodySmallLineHeight,
+ letterSpacing = TypeScaleTokens.BodySmallTracking,
+ )
+ val DisplayLarge =
+ TextStyle(
+ fontFamily = TypeScaleTokens.DisplayLargeFont,
+ fontWeight = TypeScaleTokens.DisplayLargeWeight,
+ fontSize = TypeScaleTokens.DisplayLargeSize,
+ lineHeight = TypeScaleTokens.DisplayLargeLineHeight,
+ letterSpacing = TypeScaleTokens.DisplayLargeTracking,
+ )
+ val DisplayMedium =
+ TextStyle(
+ fontFamily = TypeScaleTokens.DisplayMediumFont,
+ fontWeight = TypeScaleTokens.DisplayMediumWeight,
+ fontSize = TypeScaleTokens.DisplayMediumSize,
+ lineHeight = TypeScaleTokens.DisplayMediumLineHeight,
+ letterSpacing = TypeScaleTokens.DisplayMediumTracking,
+ )
+ val DisplaySmall =
+ TextStyle(
+ fontFamily = TypeScaleTokens.DisplaySmallFont,
+ fontWeight = TypeScaleTokens.DisplaySmallWeight,
+ fontSize = TypeScaleTokens.DisplaySmallSize,
+ lineHeight = TypeScaleTokens.DisplaySmallLineHeight,
+ letterSpacing = TypeScaleTokens.DisplaySmallTracking,
+ )
+ val HeadlineLarge =
+ TextStyle(
+ fontFamily = TypeScaleTokens.HeadlineLargeFont,
+ fontWeight = TypeScaleTokens.HeadlineLargeWeight,
+ fontSize = TypeScaleTokens.HeadlineLargeSize,
+ lineHeight = TypeScaleTokens.HeadlineLargeLineHeight,
+ letterSpacing = TypeScaleTokens.HeadlineLargeTracking,
+ )
+ val HeadlineMedium =
+ TextStyle(
+ fontFamily = TypeScaleTokens.HeadlineMediumFont,
+ fontWeight = TypeScaleTokens.HeadlineMediumWeight,
+ fontSize = TypeScaleTokens.HeadlineMediumSize,
+ lineHeight = TypeScaleTokens.HeadlineMediumLineHeight,
+ letterSpacing = TypeScaleTokens.HeadlineMediumTracking,
+ )
+ val HeadlineSmall =
+ TextStyle(
+ fontFamily = TypeScaleTokens.HeadlineSmallFont,
+ fontWeight = TypeScaleTokens.HeadlineSmallWeight,
+ fontSize = TypeScaleTokens.HeadlineSmallSize,
+ lineHeight = TypeScaleTokens.HeadlineSmallLineHeight,
+ letterSpacing = TypeScaleTokens.HeadlineSmallTracking,
+ )
+ val LabelLarge =
+ TextStyle(
+ fontFamily = TypeScaleTokens.LabelLargeFont,
+ fontWeight = TypeScaleTokens.LabelLargeWeight,
+ fontSize = TypeScaleTokens.LabelLargeSize,
+ lineHeight = TypeScaleTokens.LabelLargeLineHeight,
+ letterSpacing = TypeScaleTokens.LabelLargeTracking,
+ )
+ val LabelMedium =
+ TextStyle(
+ fontFamily = TypeScaleTokens.LabelMediumFont,
+ fontWeight = TypeScaleTokens.LabelMediumWeight,
+ fontSize = TypeScaleTokens.LabelMediumSize,
+ lineHeight = TypeScaleTokens.LabelMediumLineHeight,
+ letterSpacing = TypeScaleTokens.LabelMediumTracking,
+ )
+ val LabelSmall =
+ TextStyle(
+ fontFamily = TypeScaleTokens.LabelSmallFont,
+ fontWeight = TypeScaleTokens.LabelSmallWeight,
+ fontSize = TypeScaleTokens.LabelSmallSize,
+ lineHeight = TypeScaleTokens.LabelSmallLineHeight,
+ letterSpacing = TypeScaleTokens.LabelSmallTracking,
+ )
+ val TitleLarge =
+ TextStyle(
+ fontFamily = TypeScaleTokens.TitleLargeFont,
+ fontWeight = TypeScaleTokens.TitleLargeWeight,
+ fontSize = TypeScaleTokens.TitleLargeSize,
+ lineHeight = TypeScaleTokens.TitleLargeLineHeight,
+ letterSpacing = TypeScaleTokens.TitleLargeTracking,
+ )
+ val TitleMedium =
+ TextStyle(
+ fontFamily = TypeScaleTokens.TitleMediumFont,
+ fontWeight = TypeScaleTokens.TitleMediumWeight,
+ fontSize = TypeScaleTokens.TitleMediumSize,
+ lineHeight = TypeScaleTokens.TitleMediumLineHeight,
+ letterSpacing = TypeScaleTokens.TitleMediumTracking,
+ )
+ val TitleSmall =
+ TextStyle(
+ fontFamily = TypeScaleTokens.TitleSmallFont,
+ fontWeight = TypeScaleTokens.TitleSmallWeight,
+ fontSize = TypeScaleTokens.TitleSmallSize,
+ lineHeight = TypeScaleTokens.TitleSmallLineHeight,
+ letterSpacing = TypeScaleTokens.TitleSmallTracking,
+ )
+}
\ No newline at end of file
diff --git a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/LiveEditApiTests.kt b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/LiveEditApiTests.kt
index 6d17f5f..3e04f55 100644
--- a/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/LiveEditApiTests.kt
+++ b/compose/runtime/runtime/integration-tests/src/androidAndroidTest/kotlin/androidx/compose/runtime/LiveEditApiTests.kt
@@ -19,13 +19,17 @@
import androidx.compose.material.Text
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.MediumTest
+import com.google.common.truth.Truth.assertThat
+import org.junit.After
import org.junit.Assert.assertTrue
+import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
var someData = mutableStateOf(0)
+@OptIn(InternalComposeApi::class)
@RunWith(AndroidJUnit4::class)
class LiveEditApiTests : BaseComposeTest() {
@get:Rule
@@ -35,6 +39,20 @@
invalidateGroupsWithKey(key)
}
+ private fun compositionErrors(): List<Pair<Exception, Boolean>> =
+ currentCompositionErrors()
+
+ @Before
+ fun setUp() {
+ // ensures recomposer knows that hot reload is on
+ invalidateGroupsWithKey(-1)
+ }
+
+ @After
+ fun tearDown() {
+ clearCompositionErrors()
+ }
+
// IMPORTANT: This must be the first test as the lambda key will change if the lambda is
// moved this file.
@Test
@@ -169,6 +187,211 @@
)
}
}
+
+ @Test
+ @MediumTest
+ fun throwError_doesntCrash() {
+ activity.show {
+ TestError()
+ }
+
+ activity.waitForAFrame()
+
+ // Invalidate error scope
+ run {
+ val errorStart = errorInvoked
+ invalidateGroup(errorKey)
+
+ assertTrue(
+ "TestError should have been invoked",
+ errorInvoked > errorStart
+ )
+ }
+ }
+
+ @Test
+ @MediumTest
+ fun throwError_invalidatesOnlyAfterHotReloadCall() {
+ val shouldThrow = mutableStateOf(true)
+
+ activity.show {
+ TestError { shouldThrow.value }
+ }
+
+ activity.waitForAFrame()
+
+ run {
+ val errorStart = errorInvoked
+ shouldThrow.value = false
+
+ activity.waitForAFrame()
+
+ assertTrue(
+ "TestError should not have been invoked",
+ errorInvoked == errorStart
+ )
+
+ invalidateGroup(errorKey)
+ assertTrue(
+ "TestError should have been invoked",
+ errorInvoked > errorStart
+ )
+ }
+ }
+
+ @Test
+ @MediumTest
+ fun throwError_recompose_doesntCrash() {
+ val shouldThrow = mutableStateOf(false)
+ activity.show {
+ TestError { shouldThrow.value }
+ }
+
+ activity.waitForAFrame()
+
+ run {
+ var errors = compositionErrors()
+ assertThat(errors).isEmpty()
+
+ shouldThrow.value = true
+ activity.waitForAFrame()
+
+ errors = compositionErrors()
+ assertThat(errors).hasSize(1)
+ assertThat(errors[0].first.message).isEqualTo("Test crash!")
+ assertThat(errors[0].second).isEqualTo(true)
+ }
+ }
+
+ @Test
+ @MediumTest
+ fun throwError_recompose_clearErrorOnInvalidate() {
+ var shouldThrow by mutableStateOf(false)
+ activity.show {
+ TestError { shouldThrow }
+ }
+
+ activity.waitForAFrame()
+
+ run {
+ var errors = compositionErrors()
+ assertThat(errors).isEmpty()
+
+ shouldThrow = true
+ activity.waitForAFrame()
+
+ errors = compositionErrors()
+ assertThat(errors).hasSize(1)
+
+ shouldThrow = false
+ invalidateGroupsWithKey(errorKey)
+
+ errors = compositionErrors()
+ assertThat(errors).isEmpty()
+ }
+ }
+
+ @Test
+ @MediumTest
+ fun throwError_returnsCurrentError() {
+ var shouldThrow by mutableStateOf(true)
+ activity.show {
+ TestError { shouldThrow }
+ }
+
+ activity.waitForAFrame()
+
+ run {
+ var errors = compositionErrors()
+ assertThat(errors).hasSize(1)
+ assertThat(errors[0].first.message).isEqualTo("Test crash!")
+ assertThat(errors[0].second).isEqualTo(true)
+
+ shouldThrow = false
+ invalidateGroup(errorKey)
+
+ errors = compositionErrors()
+ assertThat(errors).isEmpty()
+ }
+ }
+
+ @Test
+ @MediumTest
+ fun throwErrorInEffect_doesntCrash() {
+ activity.show {
+ TestEffectError()
+ }
+
+ activity.waitForAFrame()
+
+ run {
+ var errors = compositionErrors()
+ assertThat(errors).hasSize(1)
+ assertThat(errors[0].first.message).isEqualTo("Effect error!")
+ assertThat(errors[0].second).isEqualTo(false)
+
+ val start = effectErrorInvoked
+ simulateHotReload(Unit)
+
+ assertTrue("TestEffectError should be invoked!", effectErrorInvoked > start)
+
+ errors = compositionErrors()
+ assertThat(errors).hasSize(1)
+ assertThat(errors[0].first.message).isEqualTo("Effect error!")
+ assertThat(errors[0].second).isEqualTo(false)
+ }
+ }
+
+ @Test
+ @MediumTest
+ fun throwErrorInEffect_doesntRecoverOnInvalidate() {
+ var shouldThrow = true
+ activity.show {
+ TestEffectError { shouldThrow }
+ }
+
+ activity.waitForAFrame()
+
+ run {
+ val start = effectErrorInvoked
+ val errors = compositionErrors()
+ assertThat(errors).hasSize(1)
+ assertThat(errors[0].first.message).isEqualTo("Effect error!")
+ assertThat(errors[0].second).isEqualTo(false)
+
+ shouldThrow = false
+ invalidateGroup(effectErrorKey)
+
+ assertTrue("TestEffectError should not be invoked!", effectErrorInvoked == start)
+ }
+ }
+
+ @Test
+ @MediumTest
+ fun throwErrorInEffect_recoversOnReload() {
+ var shouldThrow = true
+ activity.show {
+ TestEffectError { shouldThrow }
+ }
+
+ activity.waitForAFrame()
+
+ run {
+ val start = effectErrorInvoked
+ var errors = compositionErrors()
+ assertThat(errors).hasSize(1)
+ assertThat(errors[0].first.message).isEqualTo("Effect error!")
+ assertThat(errors[0].second).isEqualTo(false)
+
+ shouldThrow = false
+ simulateHotReload(Unit)
+
+ assertTrue("TestEffectError should be invoked!", effectErrorInvoked > start)
+
+ errors = compositionErrors()
+ assertThat(errors).hasSize(0)
+ }
+ }
}
const val someFunctionKey = -1580285603 // Extracted from .class file
@@ -256,4 +479,28 @@
RestartableWrapper {
ReadOnly()
}
+}
+
+private const val errorKey = -0x3d6d007a // Extracted from .class file
+private var errorInvoked = 0
+@Composable
+fun TestError(shouldThrow: () -> Boolean = { true }) {
+ errorInvoked++
+
+ if (shouldThrow()) {
+ error("Test crash!")
+ }
+}
+
+private const val effectErrorKey = -0x43852062 // Extracted from .class file
+private var effectErrorInvoked = 0
+@Composable
+fun TestEffectError(shouldThrow: () -> Boolean = { true }) {
+ effectErrorInvoked++
+
+ SideEffect {
+ if (shouldThrow()) {
+ error("Effect error!")
+ }
+ }
}
\ No newline at end of file
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
index 122eb3c..228062f 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
@@ -28,5 +28,5 @@
* IMPORTANT: Whenever updating this value, please make sure to also update `versionTable` and
* `minimumRuntimeVersionInt` in `VersionChecker.kt` of the compiler.
*/
- const val version: Int = 8200
+ const val version: Int = 8300
}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
index d7d4ddd..4e06f54 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
@@ -1416,10 +1416,14 @@
entersStack.clear()
providersInvalidStack.clear()
providerUpdates.clear()
- reader.close()
+ if (!reader.closed) { reader.close() }
+ if (!writer.closed) { writer.close() }
+ createFreshInsertTable()
compoundKeyHash = 0
childrenComposing = 0
nodeExpected = false
+ inserting = false
+ reusing = false
isComposing = false
forciblyRecompose = false
}
@@ -2798,53 +2802,73 @@
// All movable content has a compound hash value rooted at the content itself so the hash
// value doesn't change as the content moves in the tree.
val savedCompoundKeyHash = compoundKeyHash
- compoundKeyHash = movableContentKey
- if (inserting) writer.markGroup()
+ try {
+ compoundKeyHash = movableContentKey
- // Capture the local providers at the point of the invocation. This allows detecting
- // changes to the locals as the value moves well as enables finding the correct providers
- // when applying late changes which might be very complicated otherwise.
- val providersChanged = if (inserting) false else reader.groupAux != locals
- if (providersChanged) providerUpdates[reader.currentGroup] = locals
- start(compositionLocalMapKey, compositionLocalMap, false, locals)
+ if (inserting) writer.markGroup()
- // Either insert a place-holder to be inserted later (either created new or moved from
- // another location) or (re)compose the movable content. This is forced if a new value
- // needs to be created as a late change.
- if (inserting && !force) {
- writerHasAProvider = true
- providerCache = null
+ // Capture the local providers at the point of the invocation. This allows detecting
+ // changes to the locals as the value moves well as enables finding the correct providers
+ // when applying late changes which might be very complicated otherwise.
+ val providersChanged = if (inserting) false else reader.groupAux != locals
+ if (providersChanged) providerUpdates[reader.currentGroup] = locals
+ start(compositionLocalMapKey, compositionLocalMap, false, locals)
- // Create an anchor to the movable group
- val anchor = writer.anchor(writer.parent(writer.parent))
- val reference = MovableContentStateReference(
- content,
- parameter,
- composition,
- insertTable,
- anchor,
- emptyList(),
- currentCompositionLocalScope()
- )
- parentContext.insertMovableContent(reference)
- } else {
- val savedProvidersInvalid = providersInvalid
- providersInvalid = providersChanged
- invokeComposable(this, { content.content(parameter) })
- providersInvalid = savedProvidersInvalid
+ // Either insert a place-holder to be inserted later (either created new or moved from
+ // another location) or (re)compose the movable content. This is forced if a new value
+ // needs to be created as a late change.
+ if (inserting && !force) {
+ writerHasAProvider = true
+ providerCache = null
+
+ // Create an anchor to the movable group
+ val anchor = writer.anchor(writer.parent(writer.parent))
+ val reference = MovableContentStateReference(
+ content,
+ parameter,
+ composition,
+ insertTable,
+ anchor,
+ emptyList(),
+ currentCompositionLocalScope()
+ )
+ parentContext.insertMovableContent(reference)
+ } else {
+ val savedProvidersInvalid = providersInvalid
+ providersInvalid = providersChanged
+ invokeComposable(this, { content.content(parameter) })
+ providersInvalid = savedProvidersInvalid
+ }
+ } finally {
+ // Restore the state back to what is expected by the caller.
+ endGroup()
+ compoundKeyHash = savedCompoundKeyHash
+ endMovableGroup()
}
-
- // Restore the state back to what is expected by the caller.
- endGroup()
- compoundKeyHash = savedCompoundKeyHash
- endMovableGroup()
}
@InternalComposeApi
override fun insertMovableContentReferences(
references: List<Pair<MovableContentStateReference, MovableContentStateReference?>>
) {
+ var completed = false
+ try {
+ insertMovableContentGuarded(references)
+ completed = true
+ } finally {
+ if (completed) {
+ cleanUpCompose()
+ } else {
+ // if we finished with error, cleanup more aggressively
+ abortRoot()
+ }
+ }
+ }
+
+ private fun insertMovableContentGuarded(
+ references: List<Pair<MovableContentStateReference, MovableContentStateReference?>>
+ ) {
fun positionToParentOf(slots: SlotWriter, applier: Applier<Any?>, index: Int) {
while (!slots.indexInParent(index)) {
slots.skipToGroupEnd()
@@ -2988,7 +3012,7 @@
// Copy the slot table into the anchor location
record { _, slots, _ ->
val state = resolvedState ?: parentContext.movableContentStateResolve(from)
- ?: composeRuntimeError("Could not resolve state for movable content")
+ ?: composeRuntimeError("Could not resolve state for movable content")
// The slot table contains the movable content group plus the group
// containing the movable content's table which then contains the actual
@@ -3054,7 +3078,6 @@
}
writersReaderDelta = 0
}
- cleanUpCompose()
}
private inline fun <R> withChanges(newChanges: MutableList<Change>, block: () -> R): R {
@@ -3632,6 +3655,10 @@
clearUpdatedNodeCounts()
}
+ internal fun verifyConsistent() {
+ insertTable.verifyWellFormed()
+ }
+
private var previousRemove = -1
private var previousMoveFrom = -1
private var previousMoveTo = -1
@@ -4271,6 +4298,8 @@
@PublishedApi
internal const val reuseKey = 207
+internal class ComposeRuntimeError(override val message: String) : IllegalStateException()
+
internal inline fun runtimeCheck(value: Boolean, lazyMessage: () -> Any) {
if (!value) {
val message = lazyMessage()
@@ -4281,7 +4310,7 @@
internal fun runtimeCheck(value: Boolean) = runtimeCheck(value) { "Check failed" }
internal fun composeRuntimeError(message: String): Nothing {
- error(
+ throw ComposeRuntimeError(
"Compose Runtime internal error. Unexpected or incorrect use of the Compose " +
"internal runtime API ($message). Please report to Google or use " +
"https://goo.gle/compose-feedback"
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt
index 65a96b1..a32afee 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt
@@ -543,14 +543,16 @@
null -> {
// Do nothing, just start composing.
}
- PendingApplyNoModifications -> error("pending composition has not been applied")
+ PendingApplyNoModifications -> {
+ composeRuntimeError("pending composition has not been applied")
+ }
is Set<*> -> {
addPendingInvalidationsLocked(toRecord as Set<Any>, forgetConditionalScopes = true)
}
is Array<*> -> for (changed in toRecord as Array<Set<Any>>) {
addPendingInvalidationsLocked(changed, forgetConditionalScopes = true)
}
- else -> error("corrupt pendingModifications drain: $pendingModifications")
+ else -> composeRuntimeError("corrupt pendingModifications drain: $pendingModifications")
}
}
@@ -566,10 +568,10 @@
is Array<*> -> for (changed in toRecord as Array<Set<Any>>) {
addPendingInvalidationsLocked(changed, forgetConditionalScopes = false)
}
- null -> error(
+ null -> composeRuntimeError(
"calling recordModificationsOf and applyChanges concurrently is not supported"
)
- else -> error(
+ else -> composeRuntimeError(
"corrupt pendingModifications drain: $pendingModifications"
)
}
@@ -578,10 +580,12 @@
override fun composeContent(content: @Composable () -> Unit) {
// TODO: This should raise a signal to any currently running recompose calls
// to halt and return
- trackAbandonedValues {
+ guardChanges {
synchronized(lock) {
drainPendingModificationsForCompositionLocked()
- composer.composeContent(takeInvalidations(), content)
+ guardInvalidationsLocked { invalidations ->
+ composer.composeContent(invalidations, content)
+ }
}
}
}
@@ -744,10 +748,12 @@
override fun recompose(): Boolean = synchronized(lock) {
drainPendingModificationsForCompositionLocked()
- trackAbandonedValues {
- composer.recompose(takeInvalidations()).also { shouldDrain ->
- // Apply would normally do this for us; do it now if apply shouldn't happen.
- if (!shouldDrain) drainPendingModificationsLocked()
+ guardChanges {
+ guardInvalidationsLocked { invalidations ->
+ composer.recompose(invalidations).also { shouldDrain ->
+ // Apply would normally do this for us; do it now if apply shouldn't happen.
+ if (!shouldDrain) drainPendingModificationsLocked()
+ }
}
}
}
@@ -756,7 +762,7 @@
references: List<Pair<MovableContentStateReference, MovableContentStateReference?>>
) {
runtimeCheck(references.fastAll { it.first.composition == this })
- trackAbandonedValues {
+ guardChanges {
composer.insertMovableContentReferences(references)
}
}
@@ -812,30 +818,63 @@
override fun applyChanges() {
synchronized(lock) {
- applyChangesInLocked(changes)
- drainPendingModificationsLocked()
+ guardChanges {
+ applyChangesInLocked(changes)
+ drainPendingModificationsLocked()
+ }
}
}
override fun applyLateChanges() {
synchronized(lock) {
- if (lateChanges.isNotEmpty()) {
- applyChangesInLocked(lateChanges)
+ guardChanges {
+ if (lateChanges.isNotEmpty()) {
+ applyChangesInLocked(lateChanges)
+ }
}
}
}
override fun changesApplied() {
synchronized(lock) {
- composer.changesApplied()
+ guardChanges {
+ composer.changesApplied()
- // By this time all abandon objects should be notified that they have been abandoned.
- if (this.abandonSet.isNotEmpty()) {
- RememberEventDispatcher(abandonSet).dispatchAbandons()
+ // By this time all abandon objects should be notified that they have been abandoned.
+ if (this.abandonSet.isNotEmpty()) {
+ RememberEventDispatcher(abandonSet).dispatchAbandons()
+ }
}
}
}
+ private inline fun <T> guardInvalidationsLocked(
+ block: (changes: IdentityArrayMap<RecomposeScopeImpl, IdentityArraySet<Any>?>) -> T
+ ): T {
+ val invalidations = takeInvalidations()
+ return try {
+ block(invalidations)
+ } catch (e: Exception) {
+ this.invalidations = invalidations
+ throw e
+ }
+ }
+
+ private inline fun <T> guardChanges(block: () -> T): T =
+ try {
+ trackAbandonedValues(block)
+ } catch (e: Exception) {
+ abandonChanges()
+ throw e
+ }
+
+ private fun abandonChanges() {
+ pendingModifications.set(null)
+ changes.clear()
+ lateChanges.clear()
+ abandonSet.clear()
+ }
+
override fun invalidateAll() {
synchronized(lock) {
slotTable.slots.forEach { (it as? RecomposeScopeImpl)?.invalidate() }
@@ -845,6 +884,7 @@
override fun verifyConsistent() {
synchronized(lock) {
if (!isComposing) {
+ composer.verifyConsistent()
slotTable.verifyWellFormed()
validateRecomposeScopeAnchors(slotTable)
}
@@ -1094,6 +1134,16 @@
internal fun invalidateGroupsWithKey(key: Int) {
return Recomposer.invalidateGroupsWithKey(key)
}
+
+ @TestOnly
+ internal fun getCurrentErrors(): List<RecomposerErrorInfo> {
+ return Recomposer.getCurrentErrors()
+ }
+
+ @TestOnly
+ internal fun clearErrors() {
+ return Recomposer.clearErrors()
+ }
}
}
@@ -1109,6 +1159,22 @@
@TestOnly
fun invalidateGroupsWithKey(key: Int) = HotReloader.invalidateGroupsWithKey(key)
+/**
+ * @suppress
+ */
+// suppressing for test-only api
+@Suppress("ListIterator")
+@TestOnly
+fun currentCompositionErrors(): List<Pair<Exception, Boolean>> =
+ HotReloader.getCurrentErrors()
+ .map { it.cause to it.recoverable }
+
+/**
+ * @suppress
+ */
+@TestOnly
+fun clearCompositionErrors() = HotReloader.clearErrors()
+
private fun <K : Any, V : Any> IdentityArrayMap<K, IdentityArraySet<V>?>.addValue(
key: K,
value: V
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Recomposer.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Recomposer.kt
index efe1d06..c4b90f1 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Recomposer.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Recomposer.kt
@@ -99,6 +99,24 @@
}
/**
+ * Read only information about [Recomposer] error state.
+ */
+@InternalComposeApi
+internal interface RecomposerErrorInfo {
+ /**
+ * Exception which forced recomposition to halt.
+ */
+ val cause: Exception
+
+ /**
+ * Whether composition can recover from the error by itself.
+ * If the error is not recoverable, recomposer will not react to invalidate calls
+ * until state is reloaded.
+ */
+ val recoverable: Boolean
+}
+
+/**
* The scheduler for performing recomposition and applying updates to one or more [Composition]s.
*/
// RedundantVisibilityModifier suppressed because metalava picks up internal function overrides
@@ -246,6 +264,7 @@
private var workContinuation: CancellableContinuation<Unit>? = null
private var concurrentCompositionsOutstanding = 0
private var isClosed: Boolean = false
+ private var errorState: RecomposerErrorState? = null
// End properties guarded by stateLock
private val _state = MutableStateFlow(State.Inactive)
@@ -267,6 +286,9 @@
}
val newState = when {
+ errorState != null -> {
+ State.Inactive
+ }
runnerJob == null -> {
snapshotInvalidations.clear()
compositionInvalidations.clear()
@@ -318,6 +340,11 @@
get() = this@Recomposer.hasPendingWork
override val changeCount: Long
get() = this@Recomposer.changeCount
+ val currentError: RecomposerErrorInfo?
+ get() = synchronized(stateLock) {
+ this@Recomposer.errorState
+ }
+
fun invalidateGroupsWithKey(key: Int) {
val compositions: List<ControlledComposition> = synchronized(stateLock) {
knownCompositions.toMutableList()
@@ -334,6 +361,9 @@
.fastMapNotNull { it as? CompositionImpl }
.fastMap { HotReloadable(it).apply { clearContent() } }
}
+
+ fun getAndResetErrorState(): RecomposerErrorState? =
+ this@Recomposer.getAndResetErrorState()
}
private class HotReloadable(
@@ -350,13 +380,23 @@
composition.composable = composable
}
- fun recompose() {
- if (composition.isRoot) {
+ fun recompose(rootOnly: Boolean = true) {
+ if (rootOnly) {
+ if (composition.isRoot) {
+ composition.setContent(composable)
+ }
+ } else {
composition.setContent(composable)
}
}
}
+ private class RecomposerErrorState(
+ val failedInitialComposition: HotReloadable?,
+ override val recoverable: Boolean,
+ override val cause: Exception
+ ) : RecomposerErrorInfo
+
private val recomposerInfo = RecomposerInfoImpl()
/**
@@ -424,6 +464,14 @@
val toLateApply = mutableSetOf<ControlledComposition>()
val toComplete = mutableSetOf<ControlledComposition>()
+ fun clearRecompositionState() {
+ toRecompose.clear()
+ toInsert.clear()
+ toApply.clear()
+ toLateApply.clear()
+ toComplete.clear()
+ }
+
fun fillToInsert() {
toInsert.clear()
synchronized(stateLock) {
@@ -486,6 +534,10 @@
toApply += it
}
}
+ } catch (e: Exception) {
+ processCompositionError(e, recoverable = true)
+ clearRecompositionState()
+ return@withFrameNanos
} finally {
toRecompose.clear()
}
@@ -508,10 +560,16 @@
}
if (toRecompose.isEmpty()) {
- fillToInsert()
- while (toInsert.isNotEmpty()) {
- toLateApply += performInsertValues(toInsert, modifiedValues)
+ try {
fillToInsert()
+ while (toInsert.isNotEmpty()) {
+ toLateApply += performInsertValues(toInsert, modifiedValues)
+ fillToInsert()
+ }
+ } catch (e: Exception) {
+ processCompositionError(e, recoverable = true)
+ clearRecompositionState()
+ return@withFrameNanos
}
}
}
@@ -525,6 +583,10 @@
toApply.fastForEach { composition ->
composition.applyChanges()
}
+ } catch (e: Exception) {
+ processCompositionError(e)
+ clearRecompositionState()
+ return@withFrameNanos
} finally {
toApply.clear()
}
@@ -536,6 +598,10 @@
toLateApply.forEach { composition ->
composition.applyLateChanges()
}
+ } catch (e: Exception) {
+ processCompositionError(e)
+ clearRecompositionState()
+ return@withFrameNanos
} finally {
toLateApply.clear()
}
@@ -546,6 +612,10 @@
toComplete.forEach { composition ->
composition.changesApplied()
}
+ } catch (e: Exception) {
+ processCompositionError(e)
+ clearRecompositionState()
+ return@withFrameNanos
} finally {
toComplete.clear()
}
@@ -561,6 +631,48 @@
}
}
+ private fun processCompositionError(
+ e: Exception,
+ failedInitialComposition: ControlledComposition? = null,
+ recoverable: Boolean = false,
+ ) {
+ if (_hotReloadEnabled.get() && e !is ComposeRuntimeError) {
+ synchronized(stateLock) {
+ compositionsAwaitingApply.clear()
+ compositionInvalidations.clear()
+ snapshotInvalidations.clear()
+
+ compositionValuesAwaitingInsert.clear()
+ compositionValuesRemoved.clear()
+ compositionValueStatesAvailable.clear()
+
+ errorState = RecomposerErrorState(
+ failedInitialComposition = (failedInitialComposition as? CompositionImpl)?.let {
+ HotReloadable(it)
+ },
+ recoverable = recoverable,
+ cause = e
+ )
+
+ deriveStateLocked()
+ }
+ } else {
+ throw e
+ }
+ }
+
+ private fun getAndResetErrorState(): RecomposerErrorState? {
+ val errorState = synchronized(stateLock) {
+ val error = errorState
+ if (error != null) {
+ errorState = null
+ deriveStateLocked()
+ }
+ error
+ }
+ return errorState
+ }
+
/**
* Await the invalidation of any associated [Composer]s, recompose them, and apply their
* changes to their associated [Composition]s if recomposition is successful.
@@ -807,9 +919,15 @@
content: @Composable () -> Unit
) {
val composerWasComposing = composition.isComposing
- composing(composition, null) {
- composition.composeContent(content)
+ try {
+ composing(composition, null) {
+ composition.composeContent(content)
+ }
+ } catch (e: Exception) {
+ processCompositionError(e, composition, recoverable = true)
+ return
}
+
// TODO(b/143755743)
if (!composerWasComposing) {
Snapshot.notifyObjectsInitialized()
@@ -823,9 +941,23 @@
}
}
- performInitialMovableContentInserts(composition)
- composition.applyChanges()
- composition.applyLateChanges()
+ try {
+ performInitialMovableContentInserts(composition)
+ } catch (e: Exception) {
+ processCompositionError(e, composition, recoverable = true)
+ synchronized(stateLock) {
+ knownCompositions -= composition
+ }
+ return
+ }
+
+ try {
+ composition.applyChanges()
+ composition.applyLateChanges()
+ } catch (e: Exception) {
+ processCompositionError(e)
+ return
+ }
if (!composerWasComposing) {
// Ensure that any state objects created during applyChanges are seen as changed
@@ -888,7 +1020,6 @@
composing(composition, modifiedValues) {
// Map insert movable content to movable content states that have been released
// during `performRecompose`.
- // during `performRecompose`.
val pairs = synchronized(stateLock) {
refs.fastMap { reference ->
reference to
@@ -1077,6 +1208,8 @@
private val _runningRecomposers = MutableStateFlow(persistentSetOf<RecomposerInfoImpl>())
+ private val _hotReloadEnabled = AtomicReference(false)
+
/**
* An observable [Set] of [RecomposerInfo]s for currently
* [running][runRecomposeAndApplyChanges] [Recomposer]s.
@@ -1085,6 +1218,10 @@
val runningRecomposers: StateFlow<Set<RecomposerInfo>>
get() = _runningRecomposers
+ internal fun setHotReloadEnabled(value: Boolean) {
+ _hotReloadEnabled.set(value)
+ }
+
private fun addRunning(info: RecomposerInfoImpl) {
while (true) {
val old = _runningRecomposers.value
@@ -1104,21 +1241,58 @@
internal fun saveStateAndDisposeForHotReload(): Any {
// NOTE: when we move composition/recomposition onto multiple threads, we will want
// to ensure that we pause recompositions before this call.
+ _hotReloadEnabled.set(true)
return _runningRecomposers.value.flatMap { it.saveStateAndDisposeForHotReload() }
}
internal fun loadStateAndComposeForHotReload(token: Any) {
// NOTE: when we move composition/recomposition onto multiple threads, we will want
// to ensure that we pause recompositions before this call.
+ _hotReloadEnabled.set(true)
+
+ val errorStates = _runningRecomposers.value.map {
+ it.getAndResetErrorState()
+ }
+
@Suppress("UNCHECKED_CAST")
val holders = token as List<HotReloadable>
holders.fastForEach { it.resetContent() }
holders.fastForEach { it.recompose() }
+
+ errorStates.fastForEach {
+ it?.failedInitialComposition?.let { c ->
+ c.resetContent()
+ c.recompose(rootOnly = false)
+ }
+ }
}
internal fun invalidateGroupsWithKey(key: Int) {
+ _hotReloadEnabled.set(true)
_runningRecomposers.value.forEach {
+ if (it.currentError?.recoverable == false) {
+ return@forEach
+ }
+
+ val errorState = it.getAndResetErrorState()
+
it.invalidateGroupsWithKey(key)
+
+ errorState?.failedInitialComposition?.let { c ->
+ c.resetContent()
+ c.recompose(rootOnly = false)
+ }
+ }
+ }
+
+ internal fun getCurrentErrors(): List<RecomposerErrorInfo> =
+ _runningRecomposers.value.mapNotNull {
+ it.currentError
+ }
+
+ internal fun clearErrors() {
+ _runningRecomposers.value.mapNotNull {
+ it.getAndResetErrorState()
}
}
}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt
index 8764766..c5a0450 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt
@@ -248,7 +248,7 @@
* Close [reader].
*/
internal fun close(reader: SlotReader) {
- require(reader.table === this && readers > 0) { "Unexpected reader close()" }
+ runtimeCheck(reader.table === this && readers > 0) { "Unexpected reader close()" }
readers--
}
@@ -647,6 +647,12 @@
private val slotsSize: Int = table.slotsSize
/**
+ * True if the reader has been closed
+ */
+ var closed: Boolean = false
+ private set
+
+ /**
* The current group that will be started with [startGroup] or skipped with [skipGroup].
*/
var currentGroup = 0
@@ -898,7 +904,10 @@
* Close the slot reader. After all [SlotReader]s have been closed the [SlotTable] a
* [SlotWriter] can be created.
*/
- fun close() = table.close(this)
+ fun close() {
+ closed = true
+ table.close(this)
+ }
/**
* Start a group.
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArraySet.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArraySet.kt
index 6b31b4e..6bfd57c 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArraySet.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArraySet.kt
@@ -91,9 +91,7 @@
* Remove all values from the set.
*/
fun clear() {
- for (i in 0 until size) {
- values[i] = null
- }
+ values.fill(null)
size = 0
}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt
index 2e0396c..b7f31f9 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt
@@ -21,6 +21,7 @@
import androidx.compose.runtime.TestOnly
import androidx.compose.runtime.collection.IdentityArrayIntMap
import androidx.compose.runtime.collection.IdentityArrayMap
+import androidx.compose.runtime.collection.IdentityArraySet
import androidx.compose.runtime.collection.IdentityScopeMap
import androidx.compose.runtime.collection.mutableVectorOf
import androidx.compose.runtime.observeDerivedStateRecalculations
@@ -261,7 +262,7 @@
/**
* Scopes that were invalidated during previous apply step.
*/
- private val invalidated = hashSetOf<Any>()
+ private val invalidated = IdentityArraySet<Any>()
// derived state handling
@@ -417,7 +418,7 @@
// Invalidate only if currentValue is different than observed on read
if (!policy.equivalent(derivedState.currentValue, previousValue)) {
valueToScopes.forEachScopeOf(derivedState) { scope ->
- invalidated += scope
+ invalidated.add(scope)
hasValues = true
}
}
@@ -425,7 +426,7 @@
}
valueToScopes.forEachScopeOf(value) { scope ->
- invalidated += scope
+ invalidated.add(scope)
hasValues = true
}
}
@@ -436,7 +437,7 @@
* Call [onChanged] for previously invalidated scopes.
*/
fun notifyInvalidatedScopes() {
- invalidated.forEach(onChanged)
+ invalidated.fastForEach(onChanged)
invalidated.clear()
}
}
diff --git a/compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/LiveEditTests.kt b/compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/LiveEditTests.kt
index 6e7b05e..3e2426c 100644
--- a/compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/LiveEditTests.kt
+++ b/compose/runtime/runtime/src/jvmTest/kotlin/androidx/compose/runtime/LiveEditTests.kt
@@ -18,12 +18,25 @@
import androidx.compose.runtime.mock.Text
import androidx.compose.runtime.mock.compositionTest
+import org.junit.After
import org.junit.Assert
+import org.junit.Before
import org.junit.Ignore
import org.junit.Test
class LiveEditTests {
+ @Before
+ fun setUp() {
+ Recomposer.setHotReloadEnabled(true)
+ }
+
+ @After
+ fun tearDown() {
+ clearCompositionErrors()
+ Recomposer.setHotReloadEnabled(true)
+ }
+
@Test
fun testRestartableFunctionPreservesParentAndSiblingState() = liveEditTest {
EnsureStatePreservedAndNotRecomposed("a")
@@ -130,6 +143,323 @@
Text("Hello World")
}
}
+
+ @Test
+ fun testThrowing_initialComposition() = liveEditTest {
+ RestartGroup {
+ MarkAsTarget()
+ // Fail once per each reload
+ expectError("throwInCompose", 2)
+ // Composed once - failed once
+ Expect(
+ "throw",
+ compose = 2,
+ >
+ >
+ >
+ )
+ error("throwInCompose")
+ }
+ }
+
+ @Test
+ fun testThrowing_recomposition() {
+ var recomposeCount = 0
+ liveEditTest(reloadCount = 2) {
+ RestartGroup {
+ MarkAsTarget()
+
+ // only failed on 2nd recomposition
+ expectError("throwInCompose", 1)
+ // Composed 3 times, failed once
+ Expect(
+ "throw",
+ compose = 3,
+ >
+ >
+ >
+ )
+
+ recomposeCount++
+ if (recomposeCount == 2) {
+ error("throwInCompose")
+ }
+ }
+ }
+ }
+
+ @Test
+ fun testThrowing_initialComposition_sideEffect() {
+ liveEditTest {
+ RestartGroup {
+ MarkAsTarget()
+
+ // The error is not recoverable, so reload doesn't fix the error
+ expectError("throwInEffect", 1)
+
+ // Composition happens as usual
+ Expect(
+ "a",
+ compose = 1,
+ >
+ >
+ >
+ )
+
+ SideEffect {
+ error("throwInEffect")
+ }
+ }
+ }
+ }
+
+ @Test
+ fun testThrowing_recomposition_sideEffect() {
+ var recomposeCount = 0
+ liveEditTest {
+ RestartGroup {
+ MarkAsTarget()
+
+ // The error is not recoverable, so reload doesn't fix the error
+ expectError("throwInEffect", 1)
+
+ // Composition happens as usual
+ Expect(
+ "a",
+ compose = 2,
+ >
+ >
+ >
+ )
+
+ recomposeCount++
+
+ SideEffect {
+ if (recomposeCount == 2) {
+ error("throwInEffect")
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ fun testThrowing_initialComposition_remembered() {
+ liveEditTest {
+ RestartGroup {
+ MarkAsTarget()
+
+ // The error is not recoverable, so reload doesn't fix the error
+ expectError("throwOnRemember", 1)
+
+ // remembers as usual
+ Expect(
+ "a",
+ compose = 1,
+ >
+ >
+ >
+ )
+
+ remember {
+ object : RememberObserver {
+ override fun onRemembered() {
+ error("throwOnRemember")
+ }
+ override fun onForgotten() {}
+ override fun onAbandoned() {}
+ }
+ }
+
+ // The rest of remembers fail
+ Expect(
+ "b",
+ compose = 1,
+ >
+ >
+ >
+ )
+ }
+ }
+ }
+
+ @Test
+ fun testThrowing_recomposition_remembered() {
+ var recomposeCount = 0
+ liveEditTest {
+ RestartGroup {
+ MarkAsTarget()
+
+ // The error is not recoverable, so reload doesn't fix the error
+ expectError("throwOnRemember", 1)
+
+ recomposeCount++
+
+ // remembers as usual
+ Expect(
+ "a",
+ compose = 2,
+ >
+ >
+ >
+ )
+
+ remember {
+ object : RememberObserver {
+ override fun onRemembered() {
+ if (recomposeCount == 2) {
+ error("throwOnRemember")
+ }
+ }
+ override fun onForgotten() {}
+ override fun onAbandoned() {}
+ }
+ }
+
+ // The rest of remembers fail
+ Expect(
+ "b",
+ compose = 2,
+ >
+ // todo: ensure forgotten is not dispatched for abandons?
+ >
+ >
+ )
+ }
+ }
+ }
+
+ @Test
+ fun testThrowing_invalidationsCarriedAfterCrash() {
+ var recomposeCount = 0
+ val state = mutableStateOf(0)
+ liveEditTest(reloadCount = 2) {
+ RestartGroup {
+ RestartGroup {
+ MarkAsTarget()
+
+ // Only error the first time
+ expectError("throwInComposition", 1)
+
+ if (recomposeCount == 0) {
+ // invalidate sibling group below in first composition
+ state.value += 1
+ }
+
+ if (recomposeCount++ == 1) {
+ // crash after first reload
+ error("throwInComposition")
+ }
+ }
+ }
+
+ RestartGroup {
+ // read state
+ state.value
+
+ // composed initially + invalidated by crashed composition
+ Expect(
+ "state",
+ compose = 2,
+ >
+ >
+ >
+ )
+ }
+ }
+ }
+
+ @Test
+ fun testThrowing_movableContent() {
+ liveEditTest {
+ RestartGroup {
+ MarkAsTarget()
+
+ expectError("throwInMovableContent", 2)
+
+ val content = remember {
+ movableContentOf {
+ error("throwInMovableContent")
+ }
+ }
+
+ content()
+ }
+ }
+ }
+
+ @Test
+ fun testThrowing_movableContent_recomposition() {
+ var recomposeCount = 0
+ liveEditTest(reloadCount = 2) {
+ RestartGroup {
+ MarkAsTarget()
+
+ expectError("throwInMovableContent", 1)
+
+ val content = remember {
+ movableContentOf {
+ Expect(
+ "movable",
+ compose = 3,
+ >
+ >
+ >
+ )
+
+ if (recomposeCount == 1) {
+ error("throwInMovableContent")
+ }
+ }
+ }
+
+ content()
+
+ recomposeCount++
+ }
+ }
+ }
+
+ @Test
+ fun testThrowing_movableContent_throwAfterMove() {
+ var recomposeCount = 0
+ liveEditTest(reloadCount = 2) {
+ expectError("throwInMovableContent", 1)
+
+ val content = remember {
+ movableContentOf {
+ recomposeCount++
+ Expect(
+ "movable",
+ compose = 4,
+ >
+ >
+ >
+ )
+
+ if (recomposeCount == 1) {
+ error("throwInMovableContent")
+ }
+ }
+ }
+
+ RestartGroup {
+ MarkAsTarget()
+
+ if (recomposeCount == 0) {
+ content()
+ }
+ }
+
+ RestartGroup {
+ MarkAsTarget()
+
+ if (recomposeCount > 0) {
+ content()
+ }
+ }
+ }
+ }
}
@Composable
@@ -237,19 +567,52 @@
addTargetKey((currentComposer as ComposerImpl).parentKey())
}
-fun liveEditTest(fn: @Composable LiveEditTestScope.() -> Unit) = compositionTest {
+@OptIn(InternalComposeApi::class)
+fun liveEditTest(
+ reloadCount: Int = 1,
+ fn: @Composable LiveEditTestScope.() -> Unit,
+) = compositionTest {
with(LiveEditTestScope()) {
- compose { fn(this) }
- invalidateTargets()
- advance()
+ addCheck {
+ (composition as? ControlledComposition)?.verifyConsistent()
+ }
+
+ recordErrors {
+ compose { fn(this) }
+ }
+
+ repeat(reloadCount) {
+ invalidateTargets()
+ recordErrors {
+ advance()
+ }
+ }
+
runChecks()
}
}
+@OptIn(InternalComposeApi::class)
+private inline fun LiveEditTestScope.recordErrors(
+ block: () -> Unit
+) {
+ try {
+ block()
+ } catch (e: ComposeRuntimeError) {
+ throw e
+ } catch (e: Exception) {
+ addError(e)
+ }
+ currentCompositionErrors().forEach {
+ addError(it.first)
+ }
+}
+
@Stable
class LiveEditTestScope {
private val targetKeys = mutableSetOf<Int>()
private val checks = mutableListOf<() -> Unit>()
+ private val errors = mutableSetOf<Exception>()
private val logs = mutableListOf<Pair<String, String>>()
fun invalidateTargets() {
@@ -271,13 +634,18 @@
fun log(ref: String, msg: String) {
logs.add(ref to msg)
}
- fun addLogCheck(ref: String, validate: (List<String>) -> Unit) {
- checks.add {
- validate(logs.filter { it.first == ref }.map { it.second }.toList())
- }
+
+ fun addError(e: Exception) {
+ errors.add(e)
}
+
+ fun addCheck(check: () -> Unit) {
+ checks.add(check)
+ }
+
fun expectLogCount(ref: String, msg: String, expected: Int) {
- addLogCheck(ref) { logs ->
+ addCheck {
+ val logs = logs.filter { it.first == ref }.map { it.second }.toList()
val actual = logs.filter { m -> m == msg }.count()
Assert.assertEquals(
"Ref '$ref' had an unexpected # of '$msg' logs",
@@ -286,4 +654,15 @@
)
}
}
+
+ fun expectError(message: String, count: Int) {
+ addCheck {
+ val errors = errors.filter { it.message == message }
+ Assert.assertEquals(
+ "Got ${errors.size} errors with $message",
+ count,
+ errors.size
+ )
+ }
+ }
}
diff --git a/core/core-google-shortcuts/build.gradle b/core/core-google-shortcuts/build.gradle
index d1da793..751c880 100644
--- a/core/core-google-shortcuts/build.gradle
+++ b/core/core-google-shortcuts/build.gradle
@@ -39,8 +39,8 @@
implementation "com.google.android.gms:play-services-appindex:16.1.0"
implementation("com.google.crypto.tink:tink-android:1.5.0")
- implementation projectOrArtifact(":appsearch:appsearch")
- implementation projectOrArtifact(":appsearch:appsearch-builtin-types")
+ implementation "androidx.appsearch:appsearch:1.1.0-alpha01"
+ implementation "androidx.appsearch:appsearch-builtin-types:1.1.0-alpha01"
androidTestImplementation(libs.testExtJunit)
androidTestImplementation(libs.testCore)
diff --git a/core/core-remoteviews/api/1.0.0-beta03.txt b/core/core-remoteviews/api/1.0.0-beta03.txt
new file mode 100644
index 0000000..58dee29
--- /dev/null
+++ b/core/core-remoteviews/api/1.0.0-beta03.txt
@@ -0,0 +1,294 @@
+// Signature format: 4.0
+package androidx.core.widget {
+
+ public final class AppWidgetManagerCompat {
+ method public static android.widget.RemoteViews createExactSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static android.widget.RemoteViews createResponsiveSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ }
+
+ public final class RemoteViewsCompat {
+ method public static void setChronometerBase(android.widget.RemoteViews, @IdRes int viewId, long base);
+ method public static void setChronometerFormat(android.widget.RemoteViews, @IdRes int viewId, String? format);
+ method @RequiresApi(31) public static void setCompoundButtonDrawable(android.widget.RemoteViews, @IdRes int viewId, @DrawableRes int resId);
+ method @RequiresApi(31) public static void setCompoundButtonIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
+ method @RequiresApi(31) public static void setCompoundButtonTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? tintMode);
+ method @RequiresApi(31) public static void setCompoundButtonTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setCompoundButtonTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
+ method @RequiresApi(31) public static void setCompoundButtonTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setCompoundButtonTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setFrameLayoutForegroundGravity(android.widget.RemoteViews, @IdRes int viewId, int foregroundGravity);
+ method public static void setFrameLayoutMeasureAllChildren(android.widget.RemoteViews, @IdRes int viewId, boolean measureAll);
+ method @RequiresApi(31) public static void setGridLayoutAlignmentMode(android.widget.RemoteViews, @IdRes int viewId, int alignmentMode);
+ method @RequiresApi(31) public static void setGridLayoutColumnCount(android.widget.RemoteViews, @IdRes int viewId, int columnCount);
+ method @RequiresApi(31) public static void setGridLayoutRowCount(android.widget.RemoteViews, @IdRes int viewId, int rowCount);
+ method @RequiresApi(31) public static void setGridViewColumnWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setGridViewColumnWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int columnWidth);
+ method @RequiresApi(31) public static void setGridViewColumnWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int columnWidth);
+ method @RequiresApi(31) public static void setGridViewGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
+ method @RequiresApi(31) public static void setGridViewHorizontalSpacing(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setGridViewHorizontalSpacingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setGridViewHorizontalSpacingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setGridViewNumColumns(android.widget.RemoteViews, @IdRes int viewId, int numColumns);
+ method @RequiresApi(31) public static void setGridViewStretchMode(android.widget.RemoteViews, @IdRes int viewId, int stretchMode);
+ method @RequiresApi(31) public static void setGridViewVerticalSpacing(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setGridViewVerticalSpacingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setGridViewVerticalSpacingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setImageViewAdjustViewBounds(android.widget.RemoteViews, @IdRes int viewId, boolean adjustViewBounds);
+ method public static void setImageViewColorFilter(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setImageViewColorFilter(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setImageViewColorFilterAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setImageViewColorFilterResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setImageViewImageAlpha(android.widget.RemoteViews, @IdRes int viewId, int alpha);
+ method public static void setImageViewImageLevel(android.widget.RemoteViews, @IdRes int viewId, int level);
+ method @RequiresApi(31) public static void setImageViewImageTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setImageViewImageTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
+ method @RequiresApi(31) public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setImageViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setImageViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
+ method @RequiresApi(31) public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setImageViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setImageViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setLinearLayoutBaselineAligned(android.widget.RemoteViews, @IdRes int viewId, boolean baselineAligned);
+ method public static void setLinearLayoutBaselineAlignedChildIndex(android.widget.RemoteViews, @IdRes int viewId, int i);
+ method public static void setLinearLayoutGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
+ method public static void setLinearLayoutHorizontalGravity(android.widget.RemoteViews, @IdRes int viewId, int horizontalGravity);
+ method public static void setLinearLayoutMeasureWithLargestChildEnabled(android.widget.RemoteViews, @IdRes int viewId, boolean enabled);
+ method public static void setLinearLayoutVerticalGravity(android.widget.RemoteViews, @IdRes int viewId, int verticalGravity);
+ method public static void setLinearLayoutWeightSum(android.widget.RemoteViews, @IdRes int viewId, float weightSum);
+ method public static void setProgressBarIndeterminate(android.widget.RemoteViews, @IdRes int viewId, boolean indeterminate);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setProgressBarMax(android.widget.RemoteViews, @IdRes int viewId, int max);
+ method @RequiresApi(26) public static void setProgressBarMin(android.widget.RemoteViews, @IdRes int viewId, int min);
+ method public static void setProgressBarProgress(android.widget.RemoteViews, @IdRes int viewId, int progress);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setProgressBarProgressTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setProgressBarProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setProgressBarProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setProgressBarProgressTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setProgressBarProgressTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setProgressBarSecondaryProgress(android.widget.RemoteViews, @IdRes int viewId, int secondaryProgress);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
+ method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setProgressBarStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setRelativeLayoutGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
+ method public static void setRelativeLayoutHorizontalGravity(android.widget.RemoteViews, @IdRes int viewId, int horizontalGravity);
+ method public static void setRelativeLayoutIgnoreGravity(android.widget.RemoteViews, @IdRes int viewId, @IdRes int childViewId);
+ method public static void setRelativeLayoutVerticalGravity(android.widget.RemoteViews, @IdRes int viewId, int verticalGravity);
+ method public static void setRemoteAdapter(android.content.Context context, android.widget.RemoteViews remoteViews, int appWidgetId, @IdRes int viewId, androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems items);
+ method @RequiresApi(31) public static void setSwitchMinWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setSwitchMinWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setSwitchMinWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchPadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setSwitchPaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setSwitchPaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchShowText(android.widget.RemoteViews, @IdRes int viewId, boolean showText);
+ method @RequiresApi(31) public static void setSwitchSplitTrack(android.widget.RemoteViews, @IdRes int viewId, boolean splitTrack);
+ method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
+ method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOffAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
+ method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOnAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
+ method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? notNight, android.graphics.drawable.Icon? night);
+ method @RequiresApi(31) public static void setSwitchThumbResource(android.widget.RemoteViews, @IdRes int viewId, @DrawableRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbTextPadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setSwitchThumbTextPaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbTextPaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setSwitchThumbTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setSwitchThumbTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
+ method @RequiresApi(31) public static void setSwitchThumbTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchTrackIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
+ method @RequiresApi(31) public static void setSwitchTrackIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? notNight, android.graphics.drawable.Icon? night);
+ method @RequiresApi(31) public static void setSwitchTrackResource(android.widget.RemoteViews, @IdRes int viewId, @DrawableRes int resId);
+ method @RequiresApi(31) public static void setSwitchTrackTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
+ method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setSwitchTrackTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
+ method @RequiresApi(31) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextClockFormat12HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
+ method @RequiresApi(31) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextClockFormat24HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(17) public static void setTextClockTimeZone(android.widget.RemoteViews, @IdRes int viewId, String? timeZone);
+ method @RequiresApi(31) public static void setTextViewAllCaps(android.widget.RemoteViews, @IdRes int viewId, boolean allCaps);
+ method public static void setTextViewAutoLinkMask(android.widget.RemoteViews, @IdRes int viewId, int mask);
+ method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
+ method @RequiresApi(31) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewEms(android.widget.RemoteViews, @IdRes int viewId, int ems);
+ method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
+ method @RequiresApi(31) public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextViewErrorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(21) public static void setTextViewFontFeatureSettings(android.widget.RemoteViews, @IdRes int viewId, String fontFeatureSettings);
+ method @RequiresApi(31) public static void setTextViewGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
+ method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
+ method @RequiresApi(31) public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setTextViewHighlightColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setTextViewHighlightColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
+ method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextViewHintAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setTextViewHintTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setTextViewHintTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setTextViewJustificationMode(android.widget.RemoteViews, @IdRes int viewId, int justificationMode);
+ method @RequiresApi(21) public static void setTextViewLetterSpacing(android.widget.RemoteViews, @IdRes int viewId, float letterSpacing);
+ method @RequiresApi(31) public static void setTextViewLineHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewLineHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewLineHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewLines(android.widget.RemoteViews, @IdRes int viewId, int lines);
+ method public static void setTextViewLinkTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setTextViewLinkTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setTextViewLinkTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setTextViewLinkTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setTextViewLinksClickable(android.widget.RemoteViews, @IdRes int viewId, boolean whether);
+ method public static void setTextViewMaxEms(android.widget.RemoteViews, @IdRes int viewId, int maxems);
+ method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
+ method @RequiresApi(31) public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewMaxLines(android.widget.RemoteViews, @IdRes int viewId, int maxLines);
+ method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
+ method @RequiresApi(31) public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewMinEms(android.widget.RemoteViews, @IdRes int viewId, int minems);
+ method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
+ method @RequiresApi(31) public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewMinHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewMinHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewMinLines(android.widget.RemoteViews, @IdRes int viewId, int minLines);
+ method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
+ method @RequiresApi(31) public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewMinWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewMinWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewPaintFlags(android.widget.RemoteViews, @IdRes int viewId, int flags);
+ method public static void setTextViewSelectAllOnFocus(android.widget.RemoteViews, @IdRes int viewId, boolean selectAllOnFocus);
+ method public static void setTextViewSingleLine(android.widget.RemoteViews, @IdRes int viewId, boolean singleLine);
+ method public static void setTextViewText(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextViewTextAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList colors);
+ method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList notNight, android.content.res.ColorStateList night);
+ method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setTextViewTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setTextViewTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setTextViewTextScaleX(android.widget.RemoteViews, @IdRes int viewId, float size);
+ method @RequiresApi(31) public static void setTextViewTextSizeDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewTextSizeDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
+ method @RequiresApi(31) public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewAlpha(android.widget.RemoteViews, @IdRes int viewId, float alpha);
+ method public static void setViewBackgroundColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setViewBackgroundColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setViewBackgroundColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setViewBackgroundColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setViewBackgroundResource(android.widget.RemoteViews, @IdRes int viewId, @DrawableRes int resId);
+ method @RequiresApi(31) public static void setViewBackgroundTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setViewBackgroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewClipToOutline(android.widget.RemoteViews, @IdRes int viewId, boolean clipToOutline);
+ method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
+ method @RequiresApi(31) public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setViewContentDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewElevationDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(24) public static void setViewEnabled(android.widget.RemoteViews, @IdRes int viewId, boolean enabled);
+ method @RequiresApi(31) public static void setViewFocusable(android.widget.RemoteViews, @IdRes int viewId, boolean focusable);
+ method @RequiresApi(31) public static void setViewFocusable(android.widget.RemoteViews, @IdRes int viewId, int focusable);
+ method @RequiresApi(31) public static void setViewFocusableInTouchMode(android.widget.RemoteViews, @IdRes int viewId, boolean focusableInTouchMode);
+ method @RequiresApi(31) public static void setViewFocusedByDefault(android.widget.RemoteViews, @IdRes int viewId, boolean isFocusedByDefault);
+ method @RequiresApi(31) public static void setViewForegroundTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setViewForegroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(17) public static void setViewLayoutDirection(android.widget.RemoteViews, @IdRes int viewId, int layoutDirection);
+ method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
+ method @RequiresApi(31) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewMinimumHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewMinimumHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewMinimumWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewMinimumWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewMinimumWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewPivotX(android.widget.RemoteViews, @IdRes int viewId, float pivotX);
+ method @RequiresApi(31) public static void setViewPivotY(android.widget.RemoteViews, @IdRes int viewId, float pivotY);
+ method @RequiresApi(31) public static void setViewRotation(android.widget.RemoteViews, @IdRes int viewId, float rotation);
+ method @RequiresApi(31) public static void setViewRotationX(android.widget.RemoteViews, @IdRes int viewId, float rotationX);
+ method @RequiresApi(31) public static void setViewRotationY(android.widget.RemoteViews, @IdRes int viewId, float rotationY);
+ method @RequiresApi(31) public static void setViewScaleX(android.widget.RemoteViews, @IdRes int viewId, float scaleX);
+ method @RequiresApi(31) public static void setViewScaleY(android.widget.RemoteViews, @IdRes int viewId, float scaleY);
+ method @RequiresApi(31) public static void setViewScrollIndicators(android.widget.RemoteViews, @IdRes int viewId, int scrollIndicators);
+ method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
+ method @RequiresApi(31) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setViewStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(16) public static void setViewStubInflatedId(android.widget.RemoteViews, @IdRes int viewId, int inflatedId);
+ method @RequiresApi(16) public static void setViewStubLayoutResource(android.widget.RemoteViews, @IdRes int viewId, @LayoutRes int layoutResource);
+ method @RequiresApi(31) public static void setViewTranslationXDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewTranslationXDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationXDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationYDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewTranslationYDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationYDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationZDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewTranslationZDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationZDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ field public static final androidx.core.widget.RemoteViewsCompat INSTANCE;
+ }
+
+ public static final class RemoteViewsCompat.RemoteCollectionItems {
+ method public int getItemCount();
+ method public long getItemId(int position);
+ method public android.widget.RemoteViews getItemView(int position);
+ method public int getViewTypeCount();
+ method public boolean hasStableIds();
+ property public final int itemCount;
+ property public final int viewTypeCount;
+ }
+
+ public static final class RemoteViewsCompat.RemoteCollectionItems.Builder {
+ ctor public RemoteViewsCompat.RemoteCollectionItems.Builder();
+ method public androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems.Builder addItem(long id, android.widget.RemoteViews view);
+ method public androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems build();
+ method public androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems.Builder setHasStableIds(boolean hasStableIds);
+ method public androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems.Builder setViewTypeCount(int viewTypeCount);
+ }
+
+}
+
diff --git a/core/core-remoteviews/api/public_plus_experimental_1.0.0-beta03.txt b/core/core-remoteviews/api/public_plus_experimental_1.0.0-beta03.txt
new file mode 100644
index 0000000..58dee29
--- /dev/null
+++ b/core/core-remoteviews/api/public_plus_experimental_1.0.0-beta03.txt
@@ -0,0 +1,294 @@
+// Signature format: 4.0
+package androidx.core.widget {
+
+ public final class AppWidgetManagerCompat {
+ method public static android.widget.RemoteViews createExactSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static android.widget.RemoteViews createResponsiveSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ }
+
+ public final class RemoteViewsCompat {
+ method public static void setChronometerBase(android.widget.RemoteViews, @IdRes int viewId, long base);
+ method public static void setChronometerFormat(android.widget.RemoteViews, @IdRes int viewId, String? format);
+ method @RequiresApi(31) public static void setCompoundButtonDrawable(android.widget.RemoteViews, @IdRes int viewId, @DrawableRes int resId);
+ method @RequiresApi(31) public static void setCompoundButtonIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
+ method @RequiresApi(31) public static void setCompoundButtonTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? tintMode);
+ method @RequiresApi(31) public static void setCompoundButtonTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setCompoundButtonTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
+ method @RequiresApi(31) public static void setCompoundButtonTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setCompoundButtonTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setFrameLayoutForegroundGravity(android.widget.RemoteViews, @IdRes int viewId, int foregroundGravity);
+ method public static void setFrameLayoutMeasureAllChildren(android.widget.RemoteViews, @IdRes int viewId, boolean measureAll);
+ method @RequiresApi(31) public static void setGridLayoutAlignmentMode(android.widget.RemoteViews, @IdRes int viewId, int alignmentMode);
+ method @RequiresApi(31) public static void setGridLayoutColumnCount(android.widget.RemoteViews, @IdRes int viewId, int columnCount);
+ method @RequiresApi(31) public static void setGridLayoutRowCount(android.widget.RemoteViews, @IdRes int viewId, int rowCount);
+ method @RequiresApi(31) public static void setGridViewColumnWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setGridViewColumnWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int columnWidth);
+ method @RequiresApi(31) public static void setGridViewColumnWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int columnWidth);
+ method @RequiresApi(31) public static void setGridViewGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
+ method @RequiresApi(31) public static void setGridViewHorizontalSpacing(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setGridViewHorizontalSpacingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setGridViewHorizontalSpacingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setGridViewNumColumns(android.widget.RemoteViews, @IdRes int viewId, int numColumns);
+ method @RequiresApi(31) public static void setGridViewStretchMode(android.widget.RemoteViews, @IdRes int viewId, int stretchMode);
+ method @RequiresApi(31) public static void setGridViewVerticalSpacing(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setGridViewVerticalSpacingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setGridViewVerticalSpacingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setImageViewAdjustViewBounds(android.widget.RemoteViews, @IdRes int viewId, boolean adjustViewBounds);
+ method public static void setImageViewColorFilter(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setImageViewColorFilter(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setImageViewColorFilterAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setImageViewColorFilterResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setImageViewImageAlpha(android.widget.RemoteViews, @IdRes int viewId, int alpha);
+ method public static void setImageViewImageLevel(android.widget.RemoteViews, @IdRes int viewId, int level);
+ method @RequiresApi(31) public static void setImageViewImageTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setImageViewImageTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
+ method @RequiresApi(31) public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setImageViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setImageViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
+ method @RequiresApi(31) public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setImageViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setImageViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setLinearLayoutBaselineAligned(android.widget.RemoteViews, @IdRes int viewId, boolean baselineAligned);
+ method public static void setLinearLayoutBaselineAlignedChildIndex(android.widget.RemoteViews, @IdRes int viewId, int i);
+ method public static void setLinearLayoutGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
+ method public static void setLinearLayoutHorizontalGravity(android.widget.RemoteViews, @IdRes int viewId, int horizontalGravity);
+ method public static void setLinearLayoutMeasureWithLargestChildEnabled(android.widget.RemoteViews, @IdRes int viewId, boolean enabled);
+ method public static void setLinearLayoutVerticalGravity(android.widget.RemoteViews, @IdRes int viewId, int verticalGravity);
+ method public static void setLinearLayoutWeightSum(android.widget.RemoteViews, @IdRes int viewId, float weightSum);
+ method public static void setProgressBarIndeterminate(android.widget.RemoteViews, @IdRes int viewId, boolean indeterminate);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setProgressBarMax(android.widget.RemoteViews, @IdRes int viewId, int max);
+ method @RequiresApi(26) public static void setProgressBarMin(android.widget.RemoteViews, @IdRes int viewId, int min);
+ method public static void setProgressBarProgress(android.widget.RemoteViews, @IdRes int viewId, int progress);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setProgressBarProgressTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setProgressBarProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setProgressBarProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setProgressBarProgressTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setProgressBarProgressTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setProgressBarSecondaryProgress(android.widget.RemoteViews, @IdRes int viewId, int secondaryProgress);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
+ method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setProgressBarStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setRelativeLayoutGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
+ method public static void setRelativeLayoutHorizontalGravity(android.widget.RemoteViews, @IdRes int viewId, int horizontalGravity);
+ method public static void setRelativeLayoutIgnoreGravity(android.widget.RemoteViews, @IdRes int viewId, @IdRes int childViewId);
+ method public static void setRelativeLayoutVerticalGravity(android.widget.RemoteViews, @IdRes int viewId, int verticalGravity);
+ method public static void setRemoteAdapter(android.content.Context context, android.widget.RemoteViews remoteViews, int appWidgetId, @IdRes int viewId, androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems items);
+ method @RequiresApi(31) public static void setSwitchMinWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setSwitchMinWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setSwitchMinWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchPadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setSwitchPaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setSwitchPaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchShowText(android.widget.RemoteViews, @IdRes int viewId, boolean showText);
+ method @RequiresApi(31) public static void setSwitchSplitTrack(android.widget.RemoteViews, @IdRes int viewId, boolean splitTrack);
+ method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
+ method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOffAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
+ method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOnAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
+ method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? notNight, android.graphics.drawable.Icon? night);
+ method @RequiresApi(31) public static void setSwitchThumbResource(android.widget.RemoteViews, @IdRes int viewId, @DrawableRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbTextPadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setSwitchThumbTextPaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbTextPaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setSwitchThumbTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setSwitchThumbTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
+ method @RequiresApi(31) public static void setSwitchThumbTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchTrackIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
+ method @RequiresApi(31) public static void setSwitchTrackIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? notNight, android.graphics.drawable.Icon? night);
+ method @RequiresApi(31) public static void setSwitchTrackResource(android.widget.RemoteViews, @IdRes int viewId, @DrawableRes int resId);
+ method @RequiresApi(31) public static void setSwitchTrackTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
+ method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setSwitchTrackTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
+ method @RequiresApi(31) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextClockFormat12HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
+ method @RequiresApi(31) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextClockFormat24HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(17) public static void setTextClockTimeZone(android.widget.RemoteViews, @IdRes int viewId, String? timeZone);
+ method @RequiresApi(31) public static void setTextViewAllCaps(android.widget.RemoteViews, @IdRes int viewId, boolean allCaps);
+ method public static void setTextViewAutoLinkMask(android.widget.RemoteViews, @IdRes int viewId, int mask);
+ method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
+ method @RequiresApi(31) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewEms(android.widget.RemoteViews, @IdRes int viewId, int ems);
+ method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
+ method @RequiresApi(31) public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextViewErrorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(21) public static void setTextViewFontFeatureSettings(android.widget.RemoteViews, @IdRes int viewId, String fontFeatureSettings);
+ method @RequiresApi(31) public static void setTextViewGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
+ method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
+ method @RequiresApi(31) public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setTextViewHighlightColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setTextViewHighlightColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
+ method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextViewHintAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setTextViewHintTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setTextViewHintTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setTextViewJustificationMode(android.widget.RemoteViews, @IdRes int viewId, int justificationMode);
+ method @RequiresApi(21) public static void setTextViewLetterSpacing(android.widget.RemoteViews, @IdRes int viewId, float letterSpacing);
+ method @RequiresApi(31) public static void setTextViewLineHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewLineHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewLineHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewLines(android.widget.RemoteViews, @IdRes int viewId, int lines);
+ method public static void setTextViewLinkTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setTextViewLinkTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setTextViewLinkTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setTextViewLinkTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setTextViewLinksClickable(android.widget.RemoteViews, @IdRes int viewId, boolean whether);
+ method public static void setTextViewMaxEms(android.widget.RemoteViews, @IdRes int viewId, int maxems);
+ method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
+ method @RequiresApi(31) public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewMaxLines(android.widget.RemoteViews, @IdRes int viewId, int maxLines);
+ method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
+ method @RequiresApi(31) public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewMinEms(android.widget.RemoteViews, @IdRes int viewId, int minems);
+ method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
+ method @RequiresApi(31) public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewMinHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewMinHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewMinLines(android.widget.RemoteViews, @IdRes int viewId, int minLines);
+ method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
+ method @RequiresApi(31) public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewMinWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewMinWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewPaintFlags(android.widget.RemoteViews, @IdRes int viewId, int flags);
+ method public static void setTextViewSelectAllOnFocus(android.widget.RemoteViews, @IdRes int viewId, boolean selectAllOnFocus);
+ method public static void setTextViewSingleLine(android.widget.RemoteViews, @IdRes int viewId, boolean singleLine);
+ method public static void setTextViewText(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextViewTextAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList colors);
+ method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList notNight, android.content.res.ColorStateList night);
+ method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setTextViewTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setTextViewTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setTextViewTextScaleX(android.widget.RemoteViews, @IdRes int viewId, float size);
+ method @RequiresApi(31) public static void setTextViewTextSizeDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewTextSizeDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
+ method @RequiresApi(31) public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewAlpha(android.widget.RemoteViews, @IdRes int viewId, float alpha);
+ method public static void setViewBackgroundColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setViewBackgroundColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setViewBackgroundColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setViewBackgroundColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setViewBackgroundResource(android.widget.RemoteViews, @IdRes int viewId, @DrawableRes int resId);
+ method @RequiresApi(31) public static void setViewBackgroundTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setViewBackgroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewClipToOutline(android.widget.RemoteViews, @IdRes int viewId, boolean clipToOutline);
+ method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
+ method @RequiresApi(31) public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setViewContentDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewElevationDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(24) public static void setViewEnabled(android.widget.RemoteViews, @IdRes int viewId, boolean enabled);
+ method @RequiresApi(31) public static void setViewFocusable(android.widget.RemoteViews, @IdRes int viewId, boolean focusable);
+ method @RequiresApi(31) public static void setViewFocusable(android.widget.RemoteViews, @IdRes int viewId, int focusable);
+ method @RequiresApi(31) public static void setViewFocusableInTouchMode(android.widget.RemoteViews, @IdRes int viewId, boolean focusableInTouchMode);
+ method @RequiresApi(31) public static void setViewFocusedByDefault(android.widget.RemoteViews, @IdRes int viewId, boolean isFocusedByDefault);
+ method @RequiresApi(31) public static void setViewForegroundTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setViewForegroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(17) public static void setViewLayoutDirection(android.widget.RemoteViews, @IdRes int viewId, int layoutDirection);
+ method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
+ method @RequiresApi(31) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewMinimumHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewMinimumHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewMinimumWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewMinimumWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewMinimumWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewPivotX(android.widget.RemoteViews, @IdRes int viewId, float pivotX);
+ method @RequiresApi(31) public static void setViewPivotY(android.widget.RemoteViews, @IdRes int viewId, float pivotY);
+ method @RequiresApi(31) public static void setViewRotation(android.widget.RemoteViews, @IdRes int viewId, float rotation);
+ method @RequiresApi(31) public static void setViewRotationX(android.widget.RemoteViews, @IdRes int viewId, float rotationX);
+ method @RequiresApi(31) public static void setViewRotationY(android.widget.RemoteViews, @IdRes int viewId, float rotationY);
+ method @RequiresApi(31) public static void setViewScaleX(android.widget.RemoteViews, @IdRes int viewId, float scaleX);
+ method @RequiresApi(31) public static void setViewScaleY(android.widget.RemoteViews, @IdRes int viewId, float scaleY);
+ method @RequiresApi(31) public static void setViewScrollIndicators(android.widget.RemoteViews, @IdRes int viewId, int scrollIndicators);
+ method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
+ method @RequiresApi(31) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setViewStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(16) public static void setViewStubInflatedId(android.widget.RemoteViews, @IdRes int viewId, int inflatedId);
+ method @RequiresApi(16) public static void setViewStubLayoutResource(android.widget.RemoteViews, @IdRes int viewId, @LayoutRes int layoutResource);
+ method @RequiresApi(31) public static void setViewTranslationXDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewTranslationXDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationXDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationYDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewTranslationYDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationYDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationZDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewTranslationZDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationZDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ field public static final androidx.core.widget.RemoteViewsCompat INSTANCE;
+ }
+
+ public static final class RemoteViewsCompat.RemoteCollectionItems {
+ method public int getItemCount();
+ method public long getItemId(int position);
+ method public android.widget.RemoteViews getItemView(int position);
+ method public int getViewTypeCount();
+ method public boolean hasStableIds();
+ property public final int itemCount;
+ property public final int viewTypeCount;
+ }
+
+ public static final class RemoteViewsCompat.RemoteCollectionItems.Builder {
+ ctor public RemoteViewsCompat.RemoteCollectionItems.Builder();
+ method public androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems.Builder addItem(long id, android.widget.RemoteViews view);
+ method public androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems build();
+ method public androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems.Builder setHasStableIds(boolean hasStableIds);
+ method public androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems.Builder setViewTypeCount(int viewTypeCount);
+ }
+
+}
+
diff --git a/core/core-remoteviews/api/res-1.0.0-beta03.txt b/core/core-remoteviews/api/res-1.0.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/core/core-remoteviews/api/res-1.0.0-beta03.txt
diff --git a/core/core-remoteviews/api/restricted_1.0.0-beta03.txt b/core/core-remoteviews/api/restricted_1.0.0-beta03.txt
new file mode 100644
index 0000000..479f021
--- /dev/null
+++ b/core/core-remoteviews/api/restricted_1.0.0-beta03.txt
@@ -0,0 +1,298 @@
+// Signature format: 4.0
+package androidx.core.widget {
+
+ public final class AppWidgetManagerCompat {
+ method public static android.widget.RemoteViews createExactSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static android.widget.RemoteViews createResponsiveSizeAppWidget(android.appwidget.AppWidgetManager appWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ method public static void updateAppWidget(android.appwidget.AppWidgetManager, int appWidgetId, java.util.Collection<androidx.core.util.SizeFCompat> dpSizes, kotlin.jvm.functions.Function1<? super androidx.core.util.SizeFCompat,? extends android.widget.RemoteViews> factory);
+ }
+
+ public final class RemoteViewsCompat {
+ method public static void setChronometerBase(android.widget.RemoteViews, @IdRes int viewId, long base);
+ method public static void setChronometerFormat(android.widget.RemoteViews, @IdRes int viewId, String? format);
+ method @RequiresApi(31) public static void setCompoundButtonDrawable(android.widget.RemoteViews, @IdRes int viewId, @DrawableRes int resId);
+ method @RequiresApi(31) public static void setCompoundButtonIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
+ method @RequiresApi(31) public static void setCompoundButtonTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? tintMode);
+ method @RequiresApi(31) public static void setCompoundButtonTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setCompoundButtonTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
+ method @RequiresApi(31) public static void setCompoundButtonTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setCompoundButtonTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setFrameLayoutForegroundGravity(android.widget.RemoteViews, @IdRes int viewId, int foregroundGravity);
+ method public static void setFrameLayoutMeasureAllChildren(android.widget.RemoteViews, @IdRes int viewId, boolean measureAll);
+ method @RequiresApi(31) public static void setGridLayoutAlignmentMode(android.widget.RemoteViews, @IdRes int viewId, int alignmentMode);
+ method @RequiresApi(31) public static void setGridLayoutColumnCount(android.widget.RemoteViews, @IdRes int viewId, int columnCount);
+ method @RequiresApi(31) public static void setGridLayoutRowCount(android.widget.RemoteViews, @IdRes int viewId, int rowCount);
+ method @RequiresApi(31) public static void setGridViewColumnWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setGridViewColumnWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int columnWidth);
+ method @RequiresApi(31) public static void setGridViewColumnWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int columnWidth);
+ method @RequiresApi(31) public static void setGridViewGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
+ method @RequiresApi(31) public static void setGridViewHorizontalSpacing(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setGridViewHorizontalSpacingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setGridViewHorizontalSpacingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setGridViewNumColumns(android.widget.RemoteViews, @IdRes int viewId, int numColumns);
+ method @RequiresApi(31) public static void setGridViewStretchMode(android.widget.RemoteViews, @IdRes int viewId, int stretchMode);
+ method @RequiresApi(31) public static void setGridViewVerticalSpacing(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setGridViewVerticalSpacingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setGridViewVerticalSpacingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setImageViewAdjustViewBounds(android.widget.RemoteViews, @IdRes int viewId, boolean adjustViewBounds);
+ method public static void setImageViewColorFilter(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setImageViewColorFilter(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setImageViewColorFilterAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setImageViewColorFilterResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setImageViewImageAlpha(android.widget.RemoteViews, @IdRes int viewId, int alpha);
+ method public static void setImageViewImageLevel(android.widget.RemoteViews, @IdRes int viewId, int level);
+ method @RequiresApi(31) public static void setImageViewImageTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setImageViewImageTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setImageViewImageTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
+ method @RequiresApi(31) public static void setImageViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setImageViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setImageViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
+ method @RequiresApi(31) public static void setImageViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setImageViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setImageViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setLinearLayoutBaselineAligned(android.widget.RemoteViews, @IdRes int viewId, boolean baselineAligned);
+ method public static void setLinearLayoutBaselineAlignedChildIndex(android.widget.RemoteViews, @IdRes int viewId, int i);
+ method public static void setLinearLayoutGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
+ method public static void setLinearLayoutHorizontalGravity(android.widget.RemoteViews, @IdRes int viewId, int horizontalGravity);
+ method public static void setLinearLayoutMeasureWithLargestChildEnabled(android.widget.RemoteViews, @IdRes int viewId, boolean enabled);
+ method public static void setLinearLayoutVerticalGravity(android.widget.RemoteViews, @IdRes int viewId, int verticalGravity);
+ method public static void setLinearLayoutWeightSum(android.widget.RemoteViews, @IdRes int viewId, float weightSum);
+ method public static void setProgressBarIndeterminate(android.widget.RemoteViews, @IdRes int viewId, boolean indeterminate);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setProgressBarIndeterminateTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setProgressBarMax(android.widget.RemoteViews, @IdRes int viewId, int max);
+ method @RequiresApi(26) public static void setProgressBarMin(android.widget.RemoteViews, @IdRes int viewId, int min);
+ method public static void setProgressBarProgress(android.widget.RemoteViews, @IdRes int viewId, int progress);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setProgressBarProgressBackgroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setProgressBarProgressTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setProgressBarProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setProgressBarProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setProgressBarProgressTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setProgressBarProgressTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setProgressBarSecondaryProgress(android.widget.RemoteViews, @IdRes int viewId, int secondaryProgress);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setProgressBarSecondaryProgressTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
+ method @RequiresApi(31) public static void setProgressBarStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setProgressBarStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setRelativeLayoutGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
+ method public static void setRelativeLayoutHorizontalGravity(android.widget.RemoteViews, @IdRes int viewId, int horizontalGravity);
+ method public static void setRelativeLayoutIgnoreGravity(android.widget.RemoteViews, @IdRes int viewId, @IdRes int childViewId);
+ method public static void setRelativeLayoutVerticalGravity(android.widget.RemoteViews, @IdRes int viewId, int verticalGravity);
+ method public static void setRemoteAdapter(android.content.Context context, android.widget.RemoteViews remoteViews, int appWidgetId, @IdRes int viewId, androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems items);
+ method @RequiresApi(31) public static void setSwitchMinWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setSwitchMinWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setSwitchMinWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchPadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setSwitchPaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setSwitchPaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchShowText(android.widget.RemoteViews, @IdRes int viewId, boolean showText);
+ method @RequiresApi(31) public static void setSwitchSplitTrack(android.widget.RemoteViews, @IdRes int viewId, boolean splitTrack);
+ method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOff);
+ method @RequiresApi(31) public static void setSwitchTextOff(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOffAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, CharSequence? textOn);
+ method @RequiresApi(31) public static void setSwitchTextOn(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setSwitchTextOnAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
+ method @RequiresApi(31) public static void setSwitchThumbIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? notNight, android.graphics.drawable.Icon? night);
+ method @RequiresApi(31) public static void setSwitchThumbResource(android.widget.RemoteViews, @IdRes int viewId, @DrawableRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbTextPadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setSwitchThumbTextPaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbTextPaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setSwitchThumbTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setSwitchThumbTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
+ method @RequiresApi(31) public static void setSwitchThumbTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setSwitchThumbTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setSwitchTrackIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? icon);
+ method @RequiresApi(31) public static void setSwitchTrackIcon(android.widget.RemoteViews, @IdRes int viewId, android.graphics.drawable.Icon? notNight, android.graphics.drawable.Icon? night);
+ method @RequiresApi(31) public static void setSwitchTrackResource(android.widget.RemoteViews, @IdRes int viewId, @DrawableRes int resId);
+ method @RequiresApi(31) public static void setSwitchTrackTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNight, android.content.res.ColorStateList? night);
+ method @RequiresApi(31) public static void setSwitchTrackTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setSwitchTrackTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
+ method @RequiresApi(31) public static void setTextClockFormat12Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextClockFormat12HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(17) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, CharSequence? format);
+ method @RequiresApi(31) public static void setTextClockFormat24Hour(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextClockFormat24HourAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(17) public static void setTextClockTimeZone(android.widget.RemoteViews, @IdRes int viewId, String? timeZone);
+ method @RequiresApi(31) public static void setTextViewAllCaps(android.widget.RemoteViews, @IdRes int viewId, boolean allCaps);
+ method public static void setTextViewAutoLinkMask(android.widget.RemoteViews, @IdRes int viewId, int mask);
+ method @RequiresApi(16) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, @Px int pad);
+ method @RequiresApi(31) public static void setTextViewCompoundDrawablePadding(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewCompoundDrawablePaddingDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewEms(android.widget.RemoteViews, @IdRes int viewId, int ems);
+ method public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, CharSequence? error);
+ method @RequiresApi(31) public static void setTextViewError(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextViewErrorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(21) public static void setTextViewFontFeatureSettings(android.widget.RemoteViews, @IdRes int viewId, String fontFeatureSettings);
+ method @RequiresApi(31) public static void setTextViewGravity(android.widget.RemoteViews, @IdRes int viewId, int gravity);
+ method public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
+ method @RequiresApi(31) public static void setTextViewHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setTextViewHighlightColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setTextViewHighlightColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setTextViewHighlightColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, CharSequence? hint);
+ method public static void setTextViewHint(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextViewHintAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setTextViewHintTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setTextViewHintTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setTextViewHintTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setTextViewJustificationMode(android.widget.RemoteViews, @IdRes int viewId, int justificationMode);
+ method @RequiresApi(21) public static void setTextViewLetterSpacing(android.widget.RemoteViews, @IdRes int viewId, float letterSpacing);
+ method @RequiresApi(31) public static void setTextViewLineHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewLineHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewLineHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewLines(android.widget.RemoteViews, @IdRes int viewId, int lines);
+ method public static void setTextViewLinkTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setTextViewLinkTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setTextViewLinkTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setTextViewLinkTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setTextViewLinksClickable(android.widget.RemoteViews, @IdRes int viewId, boolean whether);
+ method public static void setTextViewMaxEms(android.widget.RemoteViews, @IdRes int viewId, int maxems);
+ method public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int maxHeight);
+ method @RequiresApi(31) public static void setTextViewMaxHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewMaxHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewMaxHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewMaxLines(android.widget.RemoteViews, @IdRes int viewId, int maxLines);
+ method public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int maxWidth);
+ method @RequiresApi(31) public static void setTextViewMaxWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewMaxWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewMaxWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewMinEms(android.widget.RemoteViews, @IdRes int viewId, int minems);
+ method public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
+ method @RequiresApi(31) public static void setTextViewMinHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewMinHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewMinHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewMinLines(android.widget.RemoteViews, @IdRes int viewId, int minLines);
+ method public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int minWidth);
+ method @RequiresApi(31) public static void setTextViewMinWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewMinWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewMinWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewPaintFlags(android.widget.RemoteViews, @IdRes int viewId, int flags);
+ method public static void setTextViewSelectAllOnFocus(android.widget.RemoteViews, @IdRes int viewId, boolean selectAllOnFocus);
+ method public static void setTextViewSingleLine(android.widget.RemoteViews, @IdRes int viewId, boolean singleLine);
+ method public static void setTextViewText(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setTextViewTextAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList colors);
+ method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList notNight, android.content.res.ColorStateList night);
+ method @RequiresApi(31) public static void setTextViewTextColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setTextViewTextColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setTextViewTextColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setTextViewTextScaleX(android.widget.RemoteViews, @IdRes int viewId, float size);
+ method @RequiresApi(31) public static void setTextViewTextSizeDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewTextSizeDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, @Px int pixels);
+ method @RequiresApi(31) public static void setTextViewWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setTextViewWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setTextViewWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewAlpha(android.widget.RemoteViews, @IdRes int viewId, float alpha);
+ method public static void setViewBackgroundColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int color);
+ method @RequiresApi(31) public static void setViewBackgroundColor(android.widget.RemoteViews, @IdRes int viewId, @ColorInt int notNight, @ColorInt int night);
+ method @RequiresApi(31) public static void setViewBackgroundColorAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method public static void setViewBackgroundColorResource(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method public static void setViewBackgroundResource(android.widget.RemoteViews, @IdRes int viewId, @DrawableRes int resId);
+ method @RequiresApi(31) public static void setViewBackgroundTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setViewBackgroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setViewBackgroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewClipToOutline(android.widget.RemoteViews, @IdRes int viewId, boolean clipToOutline);
+ method public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? contentDescription);
+ method @RequiresApi(31) public static void setViewContentDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setViewContentDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewElevationDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewElevationDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(24) public static void setViewEnabled(android.widget.RemoteViews, @IdRes int viewId, boolean enabled);
+ method @RequiresApi(31) public static void setViewFocusable(android.widget.RemoteViews, @IdRes int viewId, boolean focusable);
+ method @RequiresApi(31) public static void setViewFocusable(android.widget.RemoteViews, @IdRes int viewId, int focusable);
+ method @RequiresApi(31) public static void setViewFocusableInTouchMode(android.widget.RemoteViews, @IdRes int viewId, boolean focusableInTouchMode);
+ method @RequiresApi(31) public static void setViewFocusedByDefault(android.widget.RemoteViews, @IdRes int viewId, boolean isFocusedByDefault);
+ method @RequiresApi(31) public static void setViewForegroundTintBlendMode(android.widget.RemoteViews, @IdRes int viewId, android.graphics.BlendMode? blendMode);
+ method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? tint);
+ method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, android.content.res.ColorStateList? notNightTint, android.content.res.ColorStateList? nightTint);
+ method @RequiresApi(31) public static void setViewForegroundTintList(android.widget.RemoteViews, @IdRes int viewId, @ColorRes int resId);
+ method @RequiresApi(31) public static void setViewForegroundTintListAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(17) public static void setViewLayoutDirection(android.widget.RemoteViews, @IdRes int viewId, int layoutDirection);
+ method @RequiresApi(24) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, @Px int minHeight);
+ method @RequiresApi(31) public static void setViewMinimumHeight(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewMinimumHeightDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewMinimumHeightDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewMinimumWidth(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewMinimumWidthDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewMinimumWidthDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewPivotX(android.widget.RemoteViews, @IdRes int viewId, float pivotX);
+ method @RequiresApi(31) public static void setViewPivotY(android.widget.RemoteViews, @IdRes int viewId, float pivotY);
+ method @RequiresApi(31) public static void setViewRotation(android.widget.RemoteViews, @IdRes int viewId, float rotation);
+ method @RequiresApi(31) public static void setViewRotationX(android.widget.RemoteViews, @IdRes int viewId, float rotationX);
+ method @RequiresApi(31) public static void setViewRotationY(android.widget.RemoteViews, @IdRes int viewId, float rotationY);
+ method @RequiresApi(31) public static void setViewScaleX(android.widget.RemoteViews, @IdRes int viewId, float scaleX);
+ method @RequiresApi(31) public static void setViewScaleY(android.widget.RemoteViews, @IdRes int viewId, float scaleY);
+ method @RequiresApi(31) public static void setViewScrollIndicators(android.widget.RemoteViews, @IdRes int viewId, int scrollIndicators);
+ method @RequiresApi(30) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, CharSequence? stateDescription);
+ method @RequiresApi(31) public static void setViewStateDescription(android.widget.RemoteViews, @IdRes int viewId, @StringRes int resId);
+ method @RequiresApi(31) public static void setViewStateDescriptionAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(16) public static void setViewStubInflatedId(android.widget.RemoteViews, @IdRes int viewId, int inflatedId);
+ method @RequiresApi(16) public static void setViewStubLayoutResource(android.widget.RemoteViews, @IdRes int viewId, @LayoutRes int layoutResource);
+ method @RequiresApi(31) public static void setViewTranslationXDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewTranslationXDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationXDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationYDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewTranslationYDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationYDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationZDimen(android.widget.RemoteViews, @IdRes int viewId, float value, int unit);
+ method @RequiresApi(31) public static void setViewTranslationZDimen(android.widget.RemoteViews, @IdRes int viewId, @DimenRes int resId);
+ method @RequiresApi(31) public static void setViewTranslationZDimenAttr(android.widget.RemoteViews, @IdRes int viewId, @AttrRes int resId);
+ field public static final androidx.core.widget.RemoteViewsCompat INSTANCE;
+ }
+
+ public static final class RemoteViewsCompat.RemoteCollectionItems {
+ method public int getItemCount();
+ method public long getItemId(int position);
+ method public android.widget.RemoteViews getItemView(int position);
+ method public int getViewTypeCount();
+ method public boolean hasStableIds();
+ property public final int itemCount;
+ property public final int viewTypeCount;
+ }
+
+ public static final class RemoteViewsCompat.RemoteCollectionItems.Builder {
+ ctor public RemoteViewsCompat.RemoteCollectionItems.Builder();
+ method public androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems.Builder addItem(long id, android.widget.RemoteViews view);
+ method public androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems build();
+ method public androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems.Builder setHasStableIds(boolean hasStableIds);
+ method public androidx.core.widget.RemoteViewsCompat.RemoteCollectionItems.Builder setViewTypeCount(int viewTypeCount);
+ }
+
+ @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class RemoteViewsCompatService extends android.widget.RemoteViewsService {
+ method public android.widget.RemoteViewsService.RemoteViewsFactory onGetViewFactory(android.content.Intent intent);
+ }
+
+}
+
diff --git a/docs-public/build.gradle b/docs-public/build.gradle
index 198de14..accad37 100644
--- a/docs-public/build.gradle
+++ b/docs-public/build.gradle
@@ -107,15 +107,15 @@
docs("androidx.core.uwb:uwb:1.0.0-alpha03")
docs("androidx.core.uwb:uwb-rxjava3:1.0.0-alpha03")
docs("androidx.core:core-google-shortcuts:1.1.0-alpha02")
- docs("androidx.core:core-performance:1.0.0-alpha02")
- samples("androidx.core:core-performance-samples:1.0.0-alpha02")
+ docs("androidx.core:core-performance:1.0.0-alpha03")
+ samples("androidx.core:core-performance-samples:1.0.0-alpha03")
docs("androidx.core:core-remoteviews:1.0.0-beta02")
- 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.9.0-beta01")
- docs("androidx.core:core-ktx:1.9.0-alpha05")
- docs("androidx.core:core-splashscreen:1.0.0")
+ docs("androidx.core:core-role:1.2.0-alpha01")
+ docs("androidx.core:core-animation:1.0.0-beta02")
+ docs("androidx.core:core-animation-testing:1.0.0-beta01")
+ docs("androidx.core:core:1.9.0-rc01")
+ docs("androidx.core:core-ktx:1.9.0-rc01")
+ docs("androidx.core:core-splashscreen:1.1.0-alpha01")
docs("androidx.cursoradapter:cursoradapter:1.0.0")
docs("androidx.customview:customview:1.2.0-alpha01")
docs("androidx.customview:customview-poolingcontainer:1.0.0-rc01")
diff --git a/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerBackHandlingTest.kt b/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerBackHandlingTest.kt
index f9f638f..4a24651 100644
--- a/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerBackHandlingTest.kt
+++ b/drawerlayout/drawerlayout/src/androidTest/java/androidx/drawerlayout/widget/DrawerBackHandlingTest.kt
@@ -57,6 +57,15 @@
}
listener.reset()
+ // Make sure we have focus, which in turn ensures we receive key events.
+ activityScenarioRule.withActivity {
+ drawerLayout.requestFocus()
+ }
+
+ PollingCheck.waitFor {
+ drawerLayout.hasFocus()
+ }
+
// Ensure that back pressed dispatcher callback is registered on T+.
if (Build.VERSION.SDK_INT >= 33) {
Assert.assertTrue(drawerLayout.isBackInvokedCallbackRegistered)
diff --git a/glance/glance-appwidget/integration-tests/template-demos/src/main/AndroidManifest.xml b/glance/glance-appwidget/integration-tests/template-demos/src/main/AndroidManifest.xml
index 4f61b07..714f730 100644
--- a/glance/glance-appwidget/integration-tests/template-demos/src/main/AndroidManifest.xml
+++ b/glance/glance-appwidget/integration-tests/template-demos/src/main/AndroidManifest.xml
@@ -35,10 +35,38 @@
</receiver>
<receiver
- android:name="androidx.glance.appwidget.template.demos.GalleryDemoWidgetReceiver"
+ android:name="androidx.glance.appwidget.template.demos.SmallImageGalleryReceiver"
android:enabled="@bool/glance_appwidget_available"
android:exported="false"
- android:label="@string/gallery_template_name">
+ android:label="@string/small_image_gallery">
+ <intent-filter>
+ <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
+ <action android:name="android.intent.action.LOCALE_CHANGED" />
+ </intent-filter>
+ <meta-data
+ android:name="android.appwidget.provider"
+ android:resource="@xml/default_app_widget_info" />
+ </receiver>
+
+ <receiver
+ android:name="androidx.glance.appwidget.template.demos.MediumImageGalleryReceiver"
+ android:enabled="@bool/glance_appwidget_available"
+ android:exported="false"
+ android:label="@string/medium_image_gallery">
+ <intent-filter>
+ <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
+ <action android:name="android.intent.action.LOCALE_CHANGED" />
+ </intent-filter>
+ <meta-data
+ android:name="android.appwidget.provider"
+ android:resource="@xml/default_app_widget_info" />
+ </receiver>
+
+ <receiver
+ android:name="androidx.glance.appwidget.template.demos.LargeImageGalleryReceiver"
+ android:enabled="@bool/glance_appwidget_available"
+ android:exported="false"
+ android:label="@string/large_image_gallery">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.intent.action.LOCALE_CHANGED" />
diff --git a/glance/glance-appwidget/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/GalleryDemoWidget.kt b/glance/glance-appwidget/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/GalleryDemoWidget.kt
index 58496d2..2c00db6 100644
--- a/glance/glance-appwidget/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/GalleryDemoWidget.kt
+++ b/glance/glance-appwidget/integration-tests/template-demos/src/main/java/androidx/glance/appwidget/template/demos/GalleryDemoWidget.kt
@@ -25,9 +25,11 @@
import androidx.glance.appwidget.template.GalleryTemplate
import androidx.glance.appwidget.template.GlanceTemplateAppWidget
import androidx.glance.template.ActionBlock
+import androidx.glance.template.AspectRatio
import androidx.glance.template.GalleryTemplateData
import androidx.glance.template.HeaderBlock
import androidx.glance.template.ImageBlock
+import androidx.glance.template.ImageSize
import androidx.glance.template.TemplateImageWithDescription
import androidx.glance.template.TemplateText
import androidx.glance.template.TemplateTextButton
@@ -35,13 +37,58 @@
import androidx.glance.template.TextType
/**
- * A widget that uses [GalleryTemplate].
+ * Gallery demo for the default Small sized images with 1:1 aspect ratio and left-to-right main
+ * text/image block flow using data and gallery template from [BaseGalleryTemplateWidget].
*/
-class GalleryTemplateWidget : GlanceTemplateAppWidget() {
+class SmallGalleryTemplateDemoWidget : BaseGalleryTemplateWidget() {
+ @Composable
+ override fun TemplateContent() = GalleryTemplateContent()
+}
+
+/**
+ * Gallery demo for the Medium sized images with 16:9 aspect ratio and right-to-left main
+ * text/image block flow using data and gallery template from [BaseGalleryTemplateWidget].
+ */
+class MediumGalleryTemplateDemoWidget : BaseGalleryTemplateWidget() {
+ @Composable
+ override fun TemplateContent() =
+ GalleryTemplateContent(ImageSize.Medium, AspectRatio.Ratio16x9, false)
+}
+
+/**
+ * Gallery demo for the Large sized images with 2:3 aspect ratio and left-to-right main
+ * text/image block flow using data and gallery template from [BaseGalleryTemplateWidget].
+ */
+class LargeGalleryTemplateDemoWidget : BaseGalleryTemplateWidget() {
+ @Composable
+ override fun TemplateContent() = GalleryTemplateContent(ImageSize.Large, AspectRatio.Ratio2x3)
+}
+
+class SmallImageGalleryReceiver : GlanceAppWidgetReceiver() {
+ override val glanceAppWidget: GlanceAppWidget = SmallGalleryTemplateDemoWidget()
+}
+
+class MediumImageGalleryReceiver : GlanceAppWidgetReceiver() {
+ override val glanceAppWidget: GlanceAppWidget = MediumGalleryTemplateDemoWidget()
+}
+
+class LargeImageGalleryReceiver : GlanceAppWidgetReceiver() {
+ override val glanceAppWidget: GlanceAppWidget = LargeGalleryTemplateDemoWidget()
+}
+
+/**
+ * Base Gallery Demo widget binding [GalleryTemplateData] to [GalleryTemplate] layout.
+ * It is overridable by gallery image aspect ratio, image size, and main blocks ordering.
+ */
+abstract class BaseGalleryTemplateWidget : GlanceTemplateAppWidget() {
override val sizeMode = SizeMode.Exact
@Composable
- override fun TemplateContent() {
+ internal fun GalleryTemplateContent(
+ imageSize: ImageSize = ImageSize.Small,
+ aspectRatio: AspectRatio = AspectRatio.Ratio1x1,
+ isMainTextBlockFirst: Boolean = true,
+ ) {
val galleryContent = mutableListOf<TemplateImageWithDescription>()
for (i in 1..30) {
galleryContent.add(
@@ -64,7 +111,7 @@
text1 = TemplateText("Title1", TextType.Title),
text2 = TemplateText("Headline1", TextType.Headline),
text3 = TemplateText("Label1", TextType.Label),
- priority = 0,
+ priority = if (isMainTextBlockFirst) 0 else 1,
),
mainImageBlock = ImageBlock(
images = listOf(
@@ -73,7 +120,7 @@
"test image"
)
),
- priority = 1,
+ priority = if (isMainTextBlockFirst) 1 else 0,
),
mainActionBlock = ActionBlock(
actionButtons = listOf(
@@ -89,13 +136,10 @@
),
galleryImageBlock = ImageBlock(
images = galleryContent,
- priority = 2,
+ aspectRatio = aspectRatio,
+ size = imageSize,
),
)
)
}
}
-
-class GalleryDemoWidgetReceiver : GlanceAppWidgetReceiver() {
- override val glanceAppWidget: GlanceAppWidget = GalleryTemplateWidget()
-}
diff --git a/glance/glance-appwidget/integration-tests/template-demos/src/main/res/values/strings.xml b/glance/glance-appwidget/integration-tests/template-demos/src/main/res/values/strings.xml
index 8277be9..4ee5288 100644
--- a/glance/glance-appwidget/integration-tests/template-demos/src/main/res/values/strings.xml
+++ b/glance/glance-appwidget/integration-tests/template-demos/src/main/res/values/strings.xml
@@ -19,8 +19,6 @@
<!-- Name of the app widgets -->
<string name="single_entity_template_widget_name"><u>Single Entity Template demo</u></string>
- <string name="gallery_template_name"><u>Gallery demo</u></string>
- <string name="list_template_widget_name"><u>List Template demo</u></string>
<string name="override_widget_name"><u>Template layout override demo</u></string>
<string name="template_data_saved_message">Saved</string>
@@ -32,4 +30,9 @@
<string name="list_style_with_header">List Template with header demo</string>
<string name="list_style_no_header">List Template with no header demo</string>
<string name="list_style_brief">List Template with no header demo in brief info</string>
+
+ <!-- Sample of the Gallery Template widgets -->
+ <string name="small_image_gallery">Gallery Template with small 1:1 images, text first</string>
+ <string name="medium_image_gallery">Gallery Template with medium 16:9 images, text last</string>
+ <string name="large_image_gallery">Gallery Template with large 2:3 images, text first</string>
</resources>
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/StartActivityIntentAction.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/StartActivityIntentAction.kt
index 9e01c9d..304c2bb 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/StartActivityIntentAction.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/action/StartActivityIntentAction.kt
@@ -34,6 +34,17 @@
*
* This action is supported by app widgets only.
*
+ * The given intent will be wrapped in a [PendingIntent]. This means that if you create multiple
+ * actions with this function, they will be conflated unless the underlying intents are
+ * distinct from one another, as defined by [Intent.filterEquals]. For example, if you create two
+ * [Intent]s that target the same Activity but only differ by parameters, they will get conflated
+ * (the PendingIntent created by the first call to actionStartActivity will be overwritten by the
+ * second). A simple way to avoid this is to set a unique data URI on these intents, so that they
+ * are distinct as defined by [Intent.filterEquals]. There is more information in the class
+ * documentation for [PendingIntent]. This is taken care of by the library for the
+ * [androidx.glance.action.actionStartActivity] overloads defined in the androidx.glance.action
+ * package.
+ *
* @param intent the intent used to launch the activity
* @param parameters the parameters associated with the action. Parameter values will be added to
* the activity intent, keyed by the parameter key name string.
diff --git a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GalleryTemplateLayouts.kt b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GalleryTemplateLayouts.kt
index df1ca96..d59b2d4 100644
--- a/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GalleryTemplateLayouts.kt
+++ b/glance/glance-appwidget/src/androidMain/kotlin/androidx/glance/appwidget/template/GalleryTemplateLayouts.kt
@@ -74,19 +74,11 @@
@Composable
private fun WidgetLayoutHorizontal(data: GalleryTemplateData) {
- Row(modifier = createTopLevelModifier(data)) {
- Column(
- modifier = GlanceModifier.defaultWeight().fillMaxHeight()
- ) {
- HeaderBlockTemplate(data.header)
- Spacer(modifier = GlanceModifier.height(16.dp).defaultWeight())
- TextBlockTemplate(data.mainTextBlock)
- ActionBlockTemplate(data.mainActionBlock)
- }
- SingleImageBlockTemplate(
- data.mainImageBlock,
- GlanceModifier.fillMaxHeight().defaultWeight()
- )
+ Row(
+ modifier = createTopLevelModifier(data),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ MainEntity(data, GlanceModifier.defaultWeight().fillMaxHeight())
}
}
@@ -120,17 +112,7 @@
modifier = createCardModifier(),
verticalAlignment = Alignment.CenterVertically
) {
- Column(
- modifier = GlanceModifier.defaultWeight()
- ) {
- HeaderBlockTemplate(data.header)
- Spacer(modifier = GlanceModifier.height(16.dp).defaultWeight())
- TextBlockTemplate(data.mainTextBlock)
- ActionBlockTemplate(data.mainActionBlock)
- }
- SingleImageBlockTemplate(
- data.mainImageBlock
- )
+ MainEntity(data, GlanceModifier.defaultWeight())
}
Row(
modifier = createCardModifier(),
@@ -160,7 +142,8 @@
isImmersive: Boolean = false
): GlanceModifier {
var modifier = GlanceModifier
- .fillMaxSize().background(LocalTemplateColors.current.surface)
+ .fillMaxSize().padding(16.dp).cornerRadius(16.dp)
+ .background(LocalTemplateColors.current.primaryContainer)
if (isImmersive && data.mainImageBlock.images.isNotEmpty()) {
val mainImage = data.mainImageBlock.images[0]
modifier = modifier.background(mainImage.image, ContentScale.Crop)
@@ -172,3 +155,27 @@
@Composable
private fun createCardModifier() = GlanceModifier.fillMaxWidth().padding(16.dp).cornerRadius(16.dp)
.background(LocalTemplateColors.current.primaryContainer)
+
+@Composable
+private fun HeaderAndTextBlocks(data: GalleryTemplateData, modifier: GlanceModifier) {
+ Column(modifier = modifier) {
+ HeaderBlockTemplate(data.header)
+ Spacer(modifier = GlanceModifier.height(16.dp).defaultWeight())
+ TextBlockTemplate(data.mainTextBlock)
+ ActionBlockTemplate(data.mainActionBlock)
+ }
+}
+
+@Composable
+private fun MainEntity(data: GalleryTemplateData, modifier: GlanceModifier) {
+ // Show first block by lower numbered priority
+ if (data.mainTextBlock.priority <= data.mainImageBlock.priority) {
+ HeaderAndTextBlocks(data, modifier)
+ Spacer(modifier = GlanceModifier.width(16.dp))
+ SingleImageBlockTemplate(data.mainImageBlock)
+ } else {
+ SingleImageBlockTemplate(data.mainImageBlock)
+ Spacer(modifier = GlanceModifier.width(16.dp))
+ HeaderAndTextBlocks(data, modifier)
+ }
+}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 40ef84d..36bd56e 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -34,7 +34,7 @@
kotlinBenchmark = "0.4.4"
kotlinNative = "1.7.10"
kotlinCompileTesting = "1.4.1"
-kotlinCoroutines = "1.6.1"
+kotlinCoroutines = "1.6.4"
kotlinSerialization = "1.3.3"
ksp = "1.7.10-1.0.6"
ktlint = "0.46.0-20220520.192227-74"
diff --git a/health/connect/connect-client/api/current.txt b/health/connect/connect-client/api/current.txt
index a6bf526..4dc90d3 100644
--- a/health/connect/connect-client/api/current.txt
+++ b/health/connect/connect-client/api/current.txt
@@ -1303,19 +1303,19 @@
}
public final class Metadata {
- ctor public Metadata(optional String? uid, optional androidx.health.connect.client.records.metadata.DataOrigin dataOrigin, optional java.time.Instant lastModifiedTime, optional String? clientId, optional long clientVersion, optional androidx.health.connect.client.records.metadata.Device? device);
+ ctor public Metadata(optional String uid, optional androidx.health.connect.client.records.metadata.DataOrigin dataOrigin, optional java.time.Instant lastModifiedTime, optional String? clientId, optional long clientVersion, optional androidx.health.connect.client.records.metadata.Device? device);
method public String? getClientId();
method public long getClientVersion();
method public androidx.health.connect.client.records.metadata.DataOrigin getDataOrigin();
method public androidx.health.connect.client.records.metadata.Device? getDevice();
method public java.time.Instant getLastModifiedTime();
- method public String? getUid();
+ method public String getUid();
property public final String? clientId;
property public final long clientVersion;
property public final androidx.health.connect.client.records.metadata.DataOrigin dataOrigin;
property public final androidx.health.connect.client.records.metadata.Device? device;
property public final java.time.Instant lastModifiedTime;
- property public final String? uid;
+ property public final String uid;
}
}
diff --git a/health/connect/connect-client/api/public_plus_experimental_current.txt b/health/connect/connect-client/api/public_plus_experimental_current.txt
index a6bf526..4dc90d3 100644
--- a/health/connect/connect-client/api/public_plus_experimental_current.txt
+++ b/health/connect/connect-client/api/public_plus_experimental_current.txt
@@ -1303,19 +1303,19 @@
}
public final class Metadata {
- ctor public Metadata(optional String? uid, optional androidx.health.connect.client.records.metadata.DataOrigin dataOrigin, optional java.time.Instant lastModifiedTime, optional String? clientId, optional long clientVersion, optional androidx.health.connect.client.records.metadata.Device? device);
+ ctor public Metadata(optional String uid, optional androidx.health.connect.client.records.metadata.DataOrigin dataOrigin, optional java.time.Instant lastModifiedTime, optional String? clientId, optional long clientVersion, optional androidx.health.connect.client.records.metadata.Device? device);
method public String? getClientId();
method public long getClientVersion();
method public androidx.health.connect.client.records.metadata.DataOrigin getDataOrigin();
method public androidx.health.connect.client.records.metadata.Device? getDevice();
method public java.time.Instant getLastModifiedTime();
- method public String? getUid();
+ method public String getUid();
property public final String? clientId;
property public final long clientVersion;
property public final androidx.health.connect.client.records.metadata.DataOrigin dataOrigin;
property public final androidx.health.connect.client.records.metadata.Device? device;
property public final java.time.Instant lastModifiedTime;
- property public final String? uid;
+ property public final String uid;
}
}
diff --git a/health/connect/connect-client/api/restricted_current.txt b/health/connect/connect-client/api/restricted_current.txt
index 5ff06aa..b0afe55 100644
--- a/health/connect/connect-client/api/restricted_current.txt
+++ b/health/connect/connect-client/api/restricted_current.txt
@@ -1326,19 +1326,19 @@
}
public final class Metadata {
- ctor public Metadata(optional String? uid, optional androidx.health.connect.client.records.metadata.DataOrigin dataOrigin, optional java.time.Instant lastModifiedTime, optional String? clientId, optional long clientVersion, optional androidx.health.connect.client.records.metadata.Device? device);
+ ctor public Metadata(optional String uid, optional androidx.health.connect.client.records.metadata.DataOrigin dataOrigin, optional java.time.Instant lastModifiedTime, optional String? clientId, optional long clientVersion, optional androidx.health.connect.client.records.metadata.Device? device);
method public String? getClientId();
method public long getClientVersion();
method public androidx.health.connect.client.records.metadata.DataOrigin getDataOrigin();
method public androidx.health.connect.client.records.metadata.Device? getDevice();
method public java.time.Instant getLastModifiedTime();
- method public String? getUid();
+ method public String getUid();
property public final String? clientId;
property public final long clientVersion;
property public final androidx.health.connect.client.records.metadata.DataOrigin dataOrigin;
property public final androidx.health.connect.client.records.metadata.Device? device;
property public final java.time.Instant lastModifiedTime;
- property public final String? uid;
+ property public final String uid;
}
}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt
index 4672ac8..53ed952 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/ProtoToRecordUtils.kt
@@ -79,7 +79,7 @@
internal val DataProto.DataPoint.metadata: Metadata
get() =
Metadata(
- uid = if (hasUid()) uid else null,
+ uid = if (hasUid()) uid else Metadata.EMPTY_UID,
dataOrigin = DataOrigin(dataOrigin.applicationId),
lastModifiedTime = Instant.ofEpochMilli(updateTimeMillis),
clientId = if (hasClientId()) clientId else null,
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt
index d870a75..e8bd828 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/converters/records/RecordToProtoUtils.kt
@@ -52,7 +52,9 @@
@SuppressWarnings("GoodTime") // Suppress GoodTime for serialize/de-serialize.
private fun DataProto.DataPoint.Builder.setMetadata(metadata: Metadata) = apply {
- metadata.uid?.let { setUid(it) }
+ if (metadata.uid != Metadata.EMPTY_UID) {
+ setUid(metadata.uid)
+ }
if (metadata.dataOrigin.packageName.isNotEmpty()) {
setDataOrigin(
DataProto.DataOrigin.newBuilder()
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/Metadata.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/Metadata.kt
index 25c27a7..8f97dff 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/Metadata.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/Metadata.kt
@@ -16,21 +16,30 @@
package androidx.health.connect.client.records.metadata
import java.time.Instant
+import androidx.health.connect.client.records.Record
-/** Set of shared metadata fields for [androidx.health.data.client.records.Record]. */
+/** Set of shared metadata fields for [Record]. */
@SuppressWarnings("NewApi") // Temporary until we can enable java8 desugaring effectively.
public class Metadata(
/**
* Unique identifier of this data, assigned by the Android Health Platform at insertion time.
+ * When [Record] is created before insertion, this takes a sentinel value, any assigned value
+ * will be ignored.
*/
- public val uid: String? = null,
+ public val uid: String = EMPTY_UID,
/**
* Where the data comes from, such as application information originally generated this data.
+ * When [Record] is created before insertion, this contains a sentinel value, any assigned value
+ * will be ignored. After insertion, this will be populated with inserted application.
*/
public val dataOrigin: DataOrigin = DataOrigin(""),
- /** Automatically populated to when data was last modified (or originally created). */
+ /**
+ * Automatically populated to when data was last modified (or originally created).
+ * When [Record] is created before inserted, this contains a sentinel value, any assigned value
+ * will be ignored.
+ */
public val lastModifiedTime: Instant = Instant.EPOCH,
/**
@@ -73,7 +82,7 @@
}
override fun hashCode(): Int {
- var result = uid?.hashCode() ?: 0
+ var result = uid.hashCode()
result = 31 * result + dataOrigin.hashCode()
result = 31 * result + lastModifiedTime.hashCode()
result = 31 * result + (clientId?.hashCode() ?: 0)
@@ -83,6 +92,8 @@
}
internal companion object {
+ internal const val EMPTY_UID: String = ""
+
/** A default instance of metadata with no fields initialised. */
@JvmField internal val EMPTY = Metadata()
}
diff --git a/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java b/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
index 491edec..76142bc 100644
--- a/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
+++ b/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
@@ -35,16 +35,21 @@
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
-/** Instrumentation test for JsSandboxService. */
+/** Instrumentation test for JavaScriptSandbox. */
@RunWith(AndroidJUnit4.class)
public class WebViewJavaScriptSandboxTest {
+ // This value is somewhat arbitrary. It might need bumping if V8 snapshots become significantly
+ // larger in future. However, we don't want it too large as that will make the tests slower and
+ // require more memory.
+ private static final long REASONABLE_HEAP_SIZE = 100 * 1024 * 1024;
+
private boolean canCreateJsSandbox() throws Throwable {
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
JavaScriptSandbox jsSandbox;
try {
- jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
+ jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
} catch (ExecutionException e) {
return false;
}
@@ -66,16 +71,15 @@
final String expected = "PASS";
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
- JavaScriptIsolate jsIsolate = jsSandbox.createIsolate();
- ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
- String result = resultFuture.get(5, TimeUnit.SECONDS);
- jsIsolate.close();
- jsSandbox.close();
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
+ JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+ ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
+ String result = resultFuture.get(5, TimeUnit.SECONDS);
- Assert.assertEquals(expected, result);
+ Assert.assertEquals(expected, result);
+ }
}
@Test
@@ -85,18 +89,18 @@
final String expected = "PASS";
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
- JavaScriptIsolate jsIsolate1 = jsSandbox.createIsolate();
- JavaScriptIsolate jsIsolate2 = jsSandbox.createIsolate();
- jsIsolate1.close();
- ListenableFuture<String> resultFuture = jsIsolate2.evaluateJavaScriptAsync(code);
- String result = resultFuture.get(5, TimeUnit.SECONDS);
- jsIsolate2.close();
- jsSandbox.close();
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
+ JavaScriptIsolate jsIsolate1 = jsSandbox.createIsolate()) {
+ JavaScriptIsolate jsIsolate2 = jsSandbox.createIsolate();
+ jsIsolate2.close();
- Assert.assertEquals(expected, result);
+ ListenableFuture<String> resultFuture = jsIsolate1.evaluateJavaScriptAsync(code);
+ String result = resultFuture.get(5, TimeUnit.SECONDS);
+
+ Assert.assertEquals(expected, result);
+ }
}
@Test
@@ -109,21 +113,19 @@
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
- JavaScriptIsolate jsIsolate1 = jsSandbox.createIsolate();
- ListenableFuture<String> resultFuture1 = jsIsolate1.evaluateJavaScriptAsync(code1);
- String result1 = resultFuture1.get(5, TimeUnit.SECONDS);
- JavaScriptIsolate jsIsolate2 = jsSandbox.createIsolate();
- ListenableFuture<String> resultFuture2 = jsIsolate2.evaluateJavaScriptAsync(code2);
- String result2 = resultFuture2.get(5, TimeUnit.SECONDS);
- jsIsolate1.close();
- jsIsolate2.close();
- jsSandbox.close();
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
+ JavaScriptIsolate jsIsolate1 = jsSandbox.createIsolate();
+ JavaScriptIsolate jsIsolate2 = jsSandbox.createIsolate()) {
+ ListenableFuture<String> resultFuture1 = jsIsolate1.evaluateJavaScriptAsync(code1);
+ String result1 = resultFuture1.get(5, TimeUnit.SECONDS);
+ ListenableFuture<String> resultFuture2 = jsIsolate2.evaluateJavaScriptAsync(code2);
+ String result2 = resultFuture2.get(5, TimeUnit.SECONDS);
- Assert.assertEquals(expected1, result1);
- Assert.assertEquals(expected2, result2);
+ Assert.assertEquals(expected1, result1);
+ Assert.assertEquals(expected2, result2);
+ }
}
@Test
@@ -135,21 +137,19 @@
final String expected2 = "undefined PASS";
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
- JavaScriptIsolate jsIsolate1 = jsSandbox.createIsolate();
- ListenableFuture<String> resultFuture1 = jsIsolate1.evaluateJavaScriptAsync(code1);
- String result1 = resultFuture1.get(5, TimeUnit.SECONDS);
- JavaScriptIsolate jsIsolate2 = jsSandbox.createIsolate();
- ListenableFuture<String> resultFuture2 = jsIsolate2.evaluateJavaScriptAsync(code2);
- String result2 = resultFuture2.get(5, TimeUnit.SECONDS);
- jsIsolate1.close();
- jsIsolate2.close();
- jsSandbox.close();
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
+ JavaScriptIsolate jsIsolate1 = jsSandbox.createIsolate();
+ JavaScriptIsolate jsIsolate2 = jsSandbox.createIsolate()) {
+ ListenableFuture<String> resultFuture1 = jsIsolate1.evaluateJavaScriptAsync(code1);
+ String result1 = resultFuture1.get(5, TimeUnit.SECONDS);
+ ListenableFuture<String> resultFuture2 = jsIsolate2.evaluateJavaScriptAsync(code2);
+ String result2 = resultFuture2.get(5, TimeUnit.SECONDS);
- Assert.assertEquals(expected1, result1);
- Assert.assertEquals(expected2, result2);
+ Assert.assertEquals(expected1, result1);
+ Assert.assertEquals(expected2, result2);
+ }
}
@Test
@@ -161,19 +161,18 @@
final String expected2 = "PASS PASS";
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
- JavaScriptIsolate jsIsolate1 = jsSandbox.createIsolate();
- ListenableFuture<String> resultFuture1 = jsIsolate1.evaluateJavaScriptAsync(code1);
- String result1 = resultFuture1.get(5, TimeUnit.SECONDS);
- ListenableFuture<String> resultFuture2 = jsIsolate1.evaluateJavaScriptAsync(code2);
- String result2 = resultFuture2.get(5, TimeUnit.SECONDS);
- jsIsolate1.close();
- jsSandbox.close();
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
+ JavaScriptIsolate jsIsolate1 = jsSandbox.createIsolate()) {
+ ListenableFuture<String> resultFuture1 = jsIsolate1.evaluateJavaScriptAsync(code1);
+ String result1 = resultFuture1.get(5, TimeUnit.SECONDS);
+ ListenableFuture<String> resultFuture2 = jsIsolate1.evaluateJavaScriptAsync(code2);
+ String result2 = resultFuture2.get(5, TimeUnit.SECONDS);
- Assert.assertEquals(expected1, result1);
- Assert.assertEquals(expected2, result2);
+ Assert.assertEquals(expected1, result1);
+ Assert.assertEquals(expected2, result2);
+ }
}
@Test
@@ -183,24 +182,24 @@
final String contains = "RandomLinkError";
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
- JavaScriptIsolate jsIsolate = jsSandbox.createIsolate();
- ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
- boolean isOfCorrectType = false;
- String error = "";
- try {
- String result = resultFuture.get(5, TimeUnit.SECONDS);
- } catch (ExecutionException e) {
- isOfCorrectType = e.getCause().getClass().equals(EvaluationFailedException.class);
- error = e.getCause().getMessage();
- }
- jsIsolate.close();
- jsSandbox.close();
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
+ JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+ ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
+ boolean isOfCorrectType = false;
+ String error = "";
+ try {
+ resultFuture.get(5, TimeUnit.SECONDS);
+ Assert.fail("Should have thrown.");
+ } catch (ExecutionException e) {
+ isOfCorrectType = e.getCause().getClass().equals(EvaluationFailedException.class);
+ error = e.getCause().getMessage();
+ }
- Assert.assertTrue(isOfCorrectType);
- Assert.assertTrue(error.contains(contains));
+ Assert.assertTrue(isOfCorrectType);
+ Assert.assertTrue(error.contains(contains));
+ }
}
@Test
@@ -209,24 +208,26 @@
final String code = "while(true){}";
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
- Assume.assumeTrue(
- jsSandbox.isFeatureSupported(JavaScriptSandbox.JS_FEATURE_ISOLATE_TERMINATION));
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS)) {
+ Assume.assumeTrue(jsSandbox.isFeatureSupported(
+ JavaScriptSandbox.JS_FEATURE_ISOLATE_TERMINATION));
- JavaScriptIsolate jsIsolate = jsSandbox.createIsolate();
- ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
- boolean isOfCorrectType = false;
- try {
- jsIsolate.close();
- String result = resultFuture.get(5, TimeUnit.SECONDS);
- } catch (ExecutionException e) {
- isOfCorrectType = e.getCause().getClass().equals(IsolateTerminatedException.class);
+ ListenableFuture<String> resultFuture;
+ try (JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+ resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
+ }
+
+ try {
+ resultFuture.get(5, TimeUnit.SECONDS);
+ Assert.fail("Should have thrown.");
+ } catch (ExecutionException e) {
+ if (!(e.getCause() instanceof IsolateTerminatedException)) {
+ throw e;
+ }
+ }
}
- jsSandbox.close();
-
- Assert.assertTrue(isOfCorrectType);
}
@Test
@@ -236,30 +237,31 @@
final int num_of_evaluations = 10;
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
- Assume.assumeTrue(
- jsSandbox.isFeatureSupported(JavaScriptSandbox.JS_FEATURE_ISOLATE_TERMINATION));
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS)) {
+ Assume.assumeTrue(jsSandbox.isFeatureSupported(
+ JavaScriptSandbox.JS_FEATURE_ISOLATE_TERMINATION));
- JavaScriptIsolate jsIsolate = jsSandbox.createIsolate();
- Vector<ListenableFuture<String>> resultFutures = new Vector<ListenableFuture<String>>();
- for (int i = 0; i < num_of_evaluations; i++) {
- ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
- resultFutures.add(resultFuture);
- }
- jsIsolate.close();
-
- for (int i = 0; i < num_of_evaluations; i++) {
- boolean isOfCorrectType = false;
- try {
- String result = resultFutures.elementAt(i).get(5, TimeUnit.SECONDS);
- } catch (ExecutionException e) {
- isOfCorrectType = e.getCause().getClass().equals(IsolateTerminatedException.class);
+ Vector<ListenableFuture<String>> resultFutures = new Vector<ListenableFuture<String>>();
+ try (JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+ for (int i = 0; i < num_of_evaluations; i++) {
+ ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
+ resultFutures.add(resultFuture);
+ }
}
- Assert.assertTrue(isOfCorrectType);
+
+ for (int i = 0; i < num_of_evaluations; i++) {
+ try {
+ resultFutures.elementAt(i).get(5, TimeUnit.SECONDS);
+ Assert.fail("Should have thrown.");
+ } catch (ExecutionException e) {
+ if (!(e.getCause() instanceof IsolateTerminatedException)) {
+ throw e;
+ }
+ }
+ }
}
- jsSandbox.close();
}
@Test
@@ -275,15 +277,14 @@
+ " return ab2str(value);"
+ "});";
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- try (JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
- JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
- Assume.assumeTrue(
- jsSandbox.isFeatureSupported(JavaScriptSandbox.JS_FEATURE_PROMISE_RETURN));
- Assume.assumeTrue(
- jsSandbox.isFeatureSupported(
- JavaScriptSandbox.JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER));
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
+ JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+ Assume.assumeTrue(jsSandbox.isFeatureSupported(
+ JavaScriptSandbox.JS_FEATURE_PROMISE_RETURN));
+ Assume.assumeTrue(jsSandbox.isFeatureSupported(
+ JavaScriptSandbox.JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER));
boolean provideNamedDataReturn = jsIsolate.provideNamedData("id-1", bytes);
Assert.assertTrue(provideNamedDataReturn);
@@ -307,17 +308,16 @@
+ " });"
+ "});";
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- try (JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
- Assume.assumeTrue(
- jsSandbox.isFeatureSupported(JavaScriptSandbox.JS_FEATURE_PROMISE_RETURN));
- Assume.assumeTrue(
- jsSandbox.isFeatureSupported(
- JavaScriptSandbox.JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER));
- Assume.assumeTrue(
- jsSandbox.isFeatureSupported(JavaScriptSandbox.JS_FEATURE_WASM_COMPILATION));
+ Assume.assumeTrue(jsSandbox.isFeatureSupported(
+ JavaScriptSandbox.JS_FEATURE_PROMISE_RETURN));
+ Assume.assumeTrue(jsSandbox.isFeatureSupported(
+ JavaScriptSandbox.JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER));
+ Assume.assumeTrue(jsSandbox.isFeatureSupported(
+ JavaScriptSandbox.JS_FEATURE_WASM_COMPILATION));
boolean provideNamedDataReturn = jsIsolate.provideNamedData("id-1", bytes);
Assert.assertTrue(provideNamedDataReturn);
@@ -334,9 +334,9 @@
final String code = "Promise.resolve(\"PASS\")";
final String expected = "PASS";
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- try (JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
Assume.assumeTrue(
jsSandbox.isFeatureSupported(JavaScriptSandbox.JS_FEATURE_PROMISE_RETURN));
@@ -360,12 +360,12 @@
final String expected = "PASS";
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- try (JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
- Assume.assumeTrue(
- jsSandbox.isFeatureSupported(JavaScriptSandbox.JS_FEATURE_PROMISE_RETURN));
+ Assume.assumeTrue(jsSandbox.isFeatureSupported(
+ JavaScriptSandbox.JS_FEATURE_PROMISE_RETURN));
ListenableFuture<String> resultFuture1 = jsIsolate.evaluateJavaScriptAsync(code1);
ListenableFuture<String> resultFuture2 = jsIsolate.evaluateJavaScriptAsync(code2);
@@ -396,12 +396,12 @@
+ " });"
+ "});";
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- try (JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
- Assume.assumeTrue(
- jsSandbox.isFeatureSupported(JavaScriptSandbox.JS_FEATURE_PROMISE_RETURN));
+ Assume.assumeTrue(jsSandbox.isFeatureSupported(
+ JavaScriptSandbox.JS_FEATURE_PROMISE_RETURN));
Assume.assumeTrue(jsSandbox.isFeatureSupported(
JavaScriptSandbox.JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER));
@@ -430,18 +430,18 @@
final String contains = "RandomLinkError";
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- try (JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
- Assume.assumeTrue(
- jsSandbox.isFeatureSupported(JavaScriptSandbox.JS_FEATURE_PROMISE_RETURN));
+ Assume.assumeTrue(jsSandbox.isFeatureSupported(
+ JavaScriptSandbox.JS_FEATURE_PROMISE_RETURN));
Assume.assumeTrue(jsSandbox.isFeatureSupported(
JavaScriptSandbox.JS_FEATURE_PROVIDE_CONSUME_ARRAY_BUFFER));
ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
try {
- String result = resultFuture.get(5, TimeUnit.SECONDS);
+ resultFuture.get(5, TimeUnit.SECONDS);
Assert.fail("Should have thrown.");
} catch (ExecutionException e) {
if (!(e.getCause() instanceof EvaluationFailedException)) {
@@ -458,18 +458,19 @@
final String code = "while(true){}";
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS);
- JavaScriptIsolate jsIsolate = jsSandbox.createIsolate();
- ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
- try {
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
+ JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+ ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
jsSandbox.close();
- resultFuture.get(5, TimeUnit.SECONDS);
- Assert.fail("Should have thrown.");
- } catch (ExecutionException e) {
- if (!(e.getCause() instanceof IsolateTerminatedException)) {
- throw e;
+ try {
+ resultFuture.get(5, TimeUnit.SECONDS);
+ Assert.fail("Should have thrown.");
+ } catch (ExecutionException e) {
+ if (!(e.getCause() instanceof IsolateTerminatedException)) {
+ throw e;
+ }
}
}
}
@@ -479,14 +480,15 @@
public void testMultipleSandboxesCannotCoexist() throws Throwable {
Context context = ApplicationProvider.getApplicationContext();
final String contains = "already bound";
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture1 =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture1 =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- try (JavaScriptSandbox jsSandbox1 = JsSandboxFuture1.get(5, TimeUnit.SECONDS)) {
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture2 =
+ try (JavaScriptSandbox jsSandbox1 = jsSandboxFuture1.get(5, TimeUnit.SECONDS)) {
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture2 =
JavaScriptSandbox.createConnectedInstanceAsync(context);
try {
- JavaScriptSandbox jsSandbox2 = JsSandboxFuture2.get(5, TimeUnit.SECONDS);
- Assert.fail("Should have thrown.");
+ try (JavaScriptSandbox jsSandbox2 = jsSandboxFuture2.get(5, TimeUnit.SECONDS)) {
+ Assert.fail("Should have thrown.");
+ }
} catch (ExecutionException e) {
if (!(e.getCause() instanceof RuntimeException)) {
throw e;
@@ -501,41 +503,85 @@
public void testSandboxCanBeCreatedAfterClosed() throws Throwable {
final String code = "\"PASS\"";
final String expected = "PASS";
+ final int num_of_startups = 2;
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture1 =
- JavaScriptSandbox.createConnectedInstanceAsync(context);
- JavaScriptSandbox jsSandbox1 = JsSandboxFuture1.get(5, TimeUnit.SECONDS);
- jsSandbox1.close();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture2 =
- JavaScriptSandbox.createConnectedInstanceAsync(context);
- try (JavaScriptSandbox jsSandbox2 = JsSandboxFuture2.get(5, TimeUnit.SECONDS);
- JavaScriptIsolate jsIsolate = jsSandbox2.createIsolate()) {
- ListenableFuture<String> resultFuture1 = jsIsolate.evaluateJavaScriptAsync(code);
- String result = resultFuture1.get(5, TimeUnit.SECONDS);
+ for (int i = 0; i < num_of_startups; i++) {
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
+ JavaScriptSandbox.createConnectedInstanceAsync(context);
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS);
+ JavaScriptIsolate jsIsolate = jsSandbox.createIsolate()) {
+ ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
+ String result = resultFuture.get(5, TimeUnit.SECONDS);
- Assert.assertEquals(expected, result);
+ Assert.assertEquals(expected, result);
+ }
}
}
@Test
@MediumTest
- public void testHeapSize() throws Throwable {
- final String code = "const buffer = new ArrayBuffer(500000000);"
- + "\"PASS\"";
+ public void testHeapSizeAdjustment() throws Throwable {
+ final String code = "\"PASS\"";
+ final String expected = "PASS";
+ final long[] heapSizes = {
+ 0,
+ REASONABLE_HEAP_SIZE,
+ REASONABLE_HEAP_SIZE - 1,
+ REASONABLE_HEAP_SIZE + 1,
+ REASONABLE_HEAP_SIZE + 4095,
+ REASONABLE_HEAP_SIZE + 4096,
+ REASONABLE_HEAP_SIZE + 65535,
+ REASONABLE_HEAP_SIZE + 65536,
+ 1L << 50,
+ };
Context context = ApplicationProvider.getApplicationContext();
- ListenableFuture<JavaScriptSandbox> JsSandboxFuture =
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
JavaScriptSandbox.createConnectedInstanceAsync(context);
- try (JavaScriptSandbox jsSandbox = JsSandboxFuture.get(5, TimeUnit.SECONDS)) {
- Assume.assumeTrue(
- jsSandbox.isFeatureSupported(
- JavaScriptSandbox.JS_FEATURE_ISOLATE_MAX_HEAP_SIZE));
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS)) {
+ Assume.assumeTrue(jsSandbox.isFeatureSupported(
+ JavaScriptSandbox.JS_FEATURE_ISOLATE_MAX_HEAP_SIZE));
+ for (long heapSize : heapSizes) {
+ IsolateStartupParameters isolateStartupParameters = new IsolateStartupParameters();
+ isolateStartupParameters.setMaxHeapSizeBytes(heapSize);
+ try (JavaScriptIsolate jsIsolate =
+ jsSandbox.createIsolate(isolateStartupParameters)) {
+ ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
+ String result = resultFuture.get(5, TimeUnit.SECONDS);
+ Assert.assertEquals(expected, result);
+ } catch (Throwable e) {
+ throw new AssertionError(
+ "Failed to evaluate JavaScript using max heap size setting " + heapSize,
+ e);
+ }
+ }
+ }
+ }
+
+ @Test
+ @MediumTest
+ public void testHeapSizeEnforced() throws Throwable {
+ final long maxHeapSize = REASONABLE_HEAP_SIZE;
+ // We need to beat the v8 optimizer to ensure it really allocates the required memory.
+ // Note that we're allocating an array of elements - not bytes.
+ final String code = "this.array = Array(" + maxHeapSize + ").fill(Math.random(), 0);"
+ + "var arrayLength = this.array.length;"
+ + "var sum = 0;"
+ + "for (var i = 0; i < arrayLength; i++) {"
+ + " sum+=this.array[i];"
+ + "}";
+ Context context = ApplicationProvider.getApplicationContext();
+ ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
+ JavaScriptSandbox.createConnectedInstanceAsync(context);
+ try (JavaScriptSandbox jsSandbox = jsSandboxFuture.get(5, TimeUnit.SECONDS)) {
+ Assume.assumeTrue(jsSandbox.isFeatureSupported(
+ JavaScriptSandbox.JS_FEATURE_ISOLATE_MAX_HEAP_SIZE));
IsolateStartupParameters isolateStartupParameters = new IsolateStartupParameters();
- isolateStartupParameters.setMaxHeapSizeBytes(10000);
+ isolateStartupParameters.setMaxHeapSizeBytes(maxHeapSize);
try (JavaScriptIsolate jsIsolate = jsSandbox.createIsolate(isolateStartupParameters)) {
ListenableFuture<String> resultFuture = jsIsolate.evaluateJavaScriptAsync(code);
try {
- resultFuture.get(5, TimeUnit.SECONDS);
+ resultFuture.get(10, TimeUnit.SECONDS);
Assert.fail("Should have thrown.");
} catch (ExecutionException e) {
if (!(e.getCause() instanceof SandboxDeadException)) {
diff --git a/javascriptengine/javascriptengine/src/main/aidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl b/javascriptengine/javascriptengine/src/main/aidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
index 157b4cc..07d33c1 100644
--- a/javascriptengine/javascriptengine/src/main/aidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
+++ b/javascriptengine/javascriptengine/src/main/aidl/org/chromium/android_webview/js_sandbox/common/IJsSandboxService.aidl
@@ -42,6 +42,10 @@
*/
const String WASM_FROM_ARRAY_BUFFER = "WASM_FROM_ARRAY_BUFFER";
+ /**
+ * Feature flag indicating that isolate creation can take a parameter
+ * to set the maximum heap size limit of the isolate.
+ */
const String ISOLATE_MAX_HEAP_SIZE_LIMIT = "ISOLATE_MAX_HEAP_SIZE_LIMIT";
/**
diff --git a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateStartupParameters.java b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateStartupParameters.java
index 5e13f74..eb9edc6 100644
--- a/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateStartupParameters.java
+++ b/javascriptengine/javascriptengine/src/main/java/androidx/javascriptengine/IsolateStartupParameters.java
@@ -35,6 +35,10 @@
* <p>
* If a value higher than the device specific maximum heap size limit is supplied, this limit
* will be used as the maximum heap size.
+ * <p>
+ * The applied limit may not be exact. For example, the limit may internally be rounded up to
+ * some multiple of bytes, be increased to some minimum value, or reduced to some maximum
+ * supported value.
*
* @param size heap size in bytes
*/
diff --git a/libraryversions.toml b/libraryversions.toml
index 7a07f36..3489b50 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -1,10 +1,10 @@
[versions]
-ACTIVITY = "1.6.0-beta01"
+ACTIVITY = "1.6.0-rc01"
ADS_IDENTIFIER = "1.0.0-alpha05"
ANNOTATION = "1.5.0-beta01"
ANNOTATION_EXPERIMENTAL = "1.3.0-rc01"
-APPCOMPAT = "1.6.0-beta01"
-APPSEARCH = "1.1.0-alpha01"
+APPCOMPAT = "1.6.0-beta02"
+APPSEARCH = "1.1.0-alpha02"
ARCH_CORE = "2.2.0-alpha01"
ASYNCLAYOUTINFLATER = "1.1.0-alpha01"
AUTOFILL = "1.2.0-beta02"
@@ -18,9 +18,9 @@
CARDVIEW = "1.1.0-alpha01"
CAR_APP = "1.3.0-alpha02"
COLLECTION = "1.3.0-alpha03"
-COMPOSE = "1.3.0-alpha03"
-COMPOSE_COMPILER = "1.3.0-rc02"
-COMPOSE_MATERIAL3 = "1.0.0-alpha16"
+COMPOSE = "1.3.0-alpha04"
+COMPOSE_COMPILER = "1.3.1"
+COMPOSE_MATERIAL3 = "1.0.0-alpha17"
COMPOSE_RUNTIME_TRACING = "1.0.0-alpha01"
CONTENTPAGER = "1.1.0-alpha01"
COORDINATORLAYOUT = "1.3.0-alpha01"
@@ -31,10 +31,10 @@
CORE_GOOGLE_SHORTCUTS = "1.1.0-alpha02"
CORE_I18N = "1.0.0-alpha01"
CORE_PERFORMANCE = "1.0.0-alpha03"
-CORE_REMOTEVIEWS = "1.0.0-beta02"
+CORE_REMOTEVIEWS = "1.0.0-beta03"
CORE_ROLE = "1.2.0-alpha01"
CORE_SPLASHSCREEN = "1.1.0-alpha01"
-CORE_UWB = "1.0.0-alpha03"
+CORE_UWB = "1.0.0-alpha04"
CURSORADAPTER = "1.1.0-alpha01"
CUSTOMVIEW = "1.2.0-alpha02"
CUSTOMVIEW_POOLINGCONTAINER = "1.1.0-alpha01"
@@ -50,7 +50,7 @@
EXIFINTERFACE = "1.4.0-alpha01"
FRAGMENT = "1.6.0-alpha02"
FUTURES = "1.2.0-alpha01"
-GLANCE = "1.0.0-alpha04"
+GLANCE = "1.0.0-alpha05"
GLANCE_TEMPLATE = "1.0.0-alpha01"
GRAPHICS = "1.0.0-alpha01"
GRIDLAYOUT = "1.1.0-alpha01"
@@ -61,7 +61,7 @@
HILT_NAVIGATION_COMPOSE = "1.1.0-alpha01"
INSPECTION = "1.0.0"
INTERPOLATOR = "1.1.0-alpha01"
-JAVASCRIPTENGINE = "1.0.0-alpha01"
+JAVASCRIPTENGINE = "1.0.0-alpha02"
LEANBACK = "1.2.0-alpha03"
LEANBACK_GRID = "1.0.0-alpha02"
LEANBACK_PAGING = "1.1.0-alpha10"
@@ -77,8 +77,8 @@
MEDIAROUTER = "1.4.0-alpha01"
METRICS = "1.0.0-alpha04"
NAVIGATION = "2.6.0-alpha01"
-PAGING = "3.2.0-alpha02"
-PAGING_COMPOSE = "1.0.0-alpha16"
+PAGING = "3.2.0-alpha03"
+PAGING_COMPOSE = "1.0.0-alpha17"
PALETTE = "1.1.0-alpha01"
PERCENTLAYOUT = "1.1.0-alpha01"
PREFERENCE = "1.3.0-alpha01"
@@ -86,7 +86,7 @@
PRIVACYSANDBOX_TOOLS = "1.0.0-alpha01"
PROFILEINSTALLER = "1.3.0-alpha01"
RECOMMENDATION = "1.1.0-alpha01"
-RECYCLERVIEW = "1.3.0-beta02"
+RECYCLERVIEW = "1.3.0-beta03"
RECYCLERVIEW_SELECTION = "1.2.0-alpha02"
REMOTECALLBACK = "1.0.0-alpha02"
RESOURCEINSPECTION = "1.1.0-alpha01"
@@ -103,7 +103,7 @@
SLICE_BUILDERS_KTX = "1.0.0-alpha08"
SLICE_REMOTECALLBACK = "1.0.0-alpha01"
SLIDINGPANELAYOUT = "1.3.0-alpha01"
-SQLITE = "2.3.0-alpha04"
+SQLITE = "2.3.0-alpha05"
SQLITE_INSPECTOR = "2.1.0-alpha01"
STARTUP = "1.2.0-alpha02"
SWIPEREFRESHLAYOUT = "1.2.0-alpha01"
@@ -123,19 +123,19 @@
VIEWPAGER = "1.1.0-alpha02"
VIEWPAGER2 = "1.2.0-alpha01"
WEAR = "1.3.0-alpha03"
-WEAR_COMPOSE = "1.1.0-alpha03"
+WEAR_COMPOSE = "1.1.0-alpha04"
WEAR_INPUT = "1.2.0-alpha03"
WEAR_INPUT_TESTING = "1.2.0-alpha03"
WEAR_ONGOING = "1.1.0-alpha01"
WEAR_PHONE_INTERACTIONS = "1.1.0-alpha04"
WEAR_REMOTE_INTERACTIONS = "1.1.0-alpha01"
-WEAR_TILES = "1.1.0-rc01"
-WEAR_WATCHFACE = "1.2.0-alpha01"
+WEAR_TILES = "1.2.0-alpha01"
+WEAR_WATCHFACE = "1.2.0-alpha02"
WEBKIT = "1.6.0-alpha01"
WINDOW = "1.1.0-alpha04"
WINDOW_EXTENSIONS = "1.1.0-alpha01"
WINDOW_SIDECAR = "1.0.0-rc01"
-WORK = "2.8.0-alpha03"
+WORK = "2.8.0-alpha04"
[groups]
ACTIVITY = { group = "androidx.activity", atomicGroupVersion = "versions.ACTIVITY" }
diff --git a/recyclerview/recyclerview/api/1.3.0-beta03.txt b/recyclerview/recyclerview/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..7e45fbb
--- /dev/null
+++ b/recyclerview/recyclerview/api/1.3.0-beta03.txt
@@ -0,0 +1,1092 @@
+// Signature format: 4.0
+package androidx.recyclerview.widget {
+
+ public final class AdapterListUpdateCallback implements androidx.recyclerview.widget.ListUpdateCallback {
+ ctor public AdapterListUpdateCallback(androidx.recyclerview.widget.RecyclerView.Adapter);
+ method public void onChanged(int, int, Object!);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public final class AsyncDifferConfig<T> {
+ method public java.util.concurrent.Executor getBackgroundThreadExecutor();
+ method public androidx.recyclerview.widget.DiffUtil.ItemCallback<T!> getDiffCallback();
+ }
+
+ public static final class AsyncDifferConfig.Builder<T> {
+ ctor public AsyncDifferConfig.Builder(androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
+ method public androidx.recyclerview.widget.AsyncDifferConfig<T!> build();
+ method public androidx.recyclerview.widget.AsyncDifferConfig.Builder<T!> setBackgroundThreadExecutor(java.util.concurrent.Executor?);
+ }
+
+ public class AsyncListDiffer<T> {
+ ctor public AsyncListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
+ ctor public AsyncListDiffer(androidx.recyclerview.widget.ListUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T!>);
+ method public void addListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T!>);
+ method public java.util.List<T!> getCurrentList();
+ method public void removeListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T!>);
+ method public void submitList(java.util.List<T!>?);
+ method public void submitList(java.util.List<T!>?, Runnable?);
+ }
+
+ public static interface AsyncListDiffer.ListListener<T> {
+ method public void onCurrentListChanged(java.util.List<T!>, java.util.List<T!>);
+ }
+
+ public class AsyncListUtil<T> {
+ ctor public AsyncListUtil(Class<T!>, int, androidx.recyclerview.widget.AsyncListUtil.DataCallback<T!>, androidx.recyclerview.widget.AsyncListUtil.ViewCallback);
+ method public T? getItem(int);
+ method public int getItemCount();
+ method public void onRangeChanged();
+ method public void refresh();
+ }
+
+ public abstract static class AsyncListUtil.DataCallback<T> {
+ ctor public AsyncListUtil.DataCallback();
+ method @WorkerThread public abstract void fillData(T![], int, int);
+ method @WorkerThread public int getMaxCachedTiles();
+ method @WorkerThread public void recycleData(T![], int);
+ method @WorkerThread public abstract int refreshData();
+ }
+
+ public abstract static class AsyncListUtil.ViewCallback {
+ ctor public AsyncListUtil.ViewCallback();
+ method @UiThread public void extendRangeInto(int[], int[], int);
+ method @UiThread public abstract void getItemRangeInto(int[]);
+ method @UiThread public abstract void onDataRefresh();
+ method @UiThread public abstract void onItemLoaded(int);
+ field public static final int HINT_SCROLL_ASC = 2; // 0x2
+ field public static final int HINT_SCROLL_DESC = 1; // 0x1
+ field public static final int HINT_SCROLL_NONE = 0; // 0x0
+ }
+
+ public class BatchingListUpdateCallback implements androidx.recyclerview.widget.ListUpdateCallback {
+ ctor public BatchingListUpdateCallback(androidx.recyclerview.widget.ListUpdateCallback);
+ method public void dispatchLastEvent();
+ method public void onChanged(int, int, Object!);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public final class ConcatAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder> {
+ ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
+ ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.ConcatAdapter.Config, androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
+ ctor public ConcatAdapter(java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
+ ctor public ConcatAdapter(androidx.recyclerview.widget.ConcatAdapter.Config, java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
+ method public boolean addAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
+ method public boolean addAdapter(int, androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
+ method public java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>> getAdapters();
+ method public int getItemCount();
+ method public android.util.Pair<androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!,java.lang.Integer!> getWrappedAdapterAndPosition(int);
+ method public void onBindViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder, int);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method public boolean onFailedToRecycleView(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onViewAttachedToWindow(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onViewDetachedFromWindow(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onViewRecycled(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public boolean removeAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
+ }
+
+ public static final class ConcatAdapter.Config {
+ field public static final androidx.recyclerview.widget.ConcatAdapter.Config DEFAULT;
+ field public final boolean isolateViewTypes;
+ field public final androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode stableIdMode;
+ }
+
+ public static final class ConcatAdapter.Config.Builder {
+ ctor public ConcatAdapter.Config.Builder();
+ method public androidx.recyclerview.widget.ConcatAdapter.Config build();
+ method public androidx.recyclerview.widget.ConcatAdapter.Config.Builder setIsolateViewTypes(boolean);
+ method public androidx.recyclerview.widget.ConcatAdapter.Config.Builder setStableIdMode(androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode);
+ }
+
+ public enum ConcatAdapter.Config.StableIdMode {
+ enum_constant public static final androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode ISOLATED_STABLE_IDS;
+ enum_constant public static final androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode NO_STABLE_IDS;
+ enum_constant public static final androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode SHARED_STABLE_IDS;
+ }
+
+ public class DefaultItemAnimator extends androidx.recyclerview.widget.SimpleItemAnimator {
+ ctor public DefaultItemAnimator();
+ method public boolean animateAdd(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder!, androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+ method public boolean animateMove(androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+ method public boolean animateRemove(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void endAnimation(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void endAnimations();
+ method public boolean isRunning();
+ method public void runPendingAnimations();
+ }
+
+ public class DiffUtil {
+ method public static androidx.recyclerview.widget.DiffUtil.DiffResult calculateDiff(androidx.recyclerview.widget.DiffUtil.Callback);
+ method public static androidx.recyclerview.widget.DiffUtil.DiffResult calculateDiff(androidx.recyclerview.widget.DiffUtil.Callback, boolean);
+ }
+
+ public abstract static class DiffUtil.Callback {
+ ctor public DiffUtil.Callback();
+ method public abstract boolean areContentsTheSame(int, int);
+ method public abstract boolean areItemsTheSame(int, int);
+ method public Object? getChangePayload(int, int);
+ method public abstract int getNewListSize();
+ method public abstract int getOldListSize();
+ }
+
+ public static class DiffUtil.DiffResult {
+ method public int convertNewPositionToOld(@IntRange(from=0) int);
+ method public int convertOldPositionToNew(@IntRange(from=0) int);
+ method public void dispatchUpdatesTo(androidx.recyclerview.widget.RecyclerView.Adapter);
+ method public void dispatchUpdatesTo(androidx.recyclerview.widget.ListUpdateCallback);
+ field public static final int NO_POSITION = -1; // 0xffffffff
+ }
+
+ public abstract static class DiffUtil.ItemCallback<T> {
+ ctor public DiffUtil.ItemCallback();
+ method public abstract boolean areContentsTheSame(T, T);
+ method public abstract boolean areItemsTheSame(T, T);
+ method public Object? getChangePayload(T, T);
+ }
+
+ public class DividerItemDecoration extends androidx.recyclerview.widget.RecyclerView.ItemDecoration {
+ ctor public DividerItemDecoration(android.content.Context!, int);
+ method public android.graphics.drawable.Drawable? getDrawable();
+ method public void setDrawable(android.graphics.drawable.Drawable);
+ method public void setOrientation(int);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public class GridLayoutManager extends androidx.recyclerview.widget.LinearLayoutManager {
+ ctor public GridLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+ ctor public GridLayoutManager(android.content.Context!, int);
+ ctor public GridLayoutManager(android.content.Context!, int, int, boolean);
+ method public int getSpanCount();
+ method public androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup! getSpanSizeLookup();
+ method public boolean isUsingSpansToEstimateScrollbarDimensions();
+ method public void setSpanCount(int);
+ method public void setSpanSizeLookup(androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup!);
+ method public void setUsingSpansToEstimateScrollbarDimensions(boolean);
+ field public static final int DEFAULT_SPAN_COUNT = -1; // 0xffffffff
+ }
+
+ public static final class GridLayoutManager.DefaultSpanSizeLookup extends androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup {
+ ctor public GridLayoutManager.DefaultSpanSizeLookup();
+ method public int getSpanSize(int);
+ }
+
+ public static class GridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
+ ctor public GridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public GridLayoutManager.LayoutParams(int, int);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public GridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public int getSpanIndex();
+ method public int getSpanSize();
+ field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+ }
+
+ public abstract static class GridLayoutManager.SpanSizeLookup {
+ ctor public GridLayoutManager.SpanSizeLookup();
+ method public int getSpanGroupIndex(int, int);
+ method public int getSpanIndex(int, int);
+ method public abstract int getSpanSize(int);
+ method public void invalidateSpanGroupIndexCache();
+ method public void invalidateSpanIndexCache();
+ method public boolean isSpanGroupIndexCacheEnabled();
+ method public boolean isSpanIndexCacheEnabled();
+ method public void setSpanGroupIndexCacheEnabled(boolean);
+ method public void setSpanIndexCacheEnabled(boolean);
+ }
+
+ public class ItemTouchHelper extends androidx.recyclerview.widget.RecyclerView.ItemDecoration implements androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener {
+ ctor public ItemTouchHelper(androidx.recyclerview.widget.ItemTouchHelper.Callback);
+ method public void attachToRecyclerView(androidx.recyclerview.widget.RecyclerView?);
+ method public void onChildViewAttachedToWindow(android.view.View);
+ method public void onChildViewDetachedFromWindow(android.view.View);
+ method public void startDrag(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void startSwipe(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ field public static final int ACTION_STATE_DRAG = 2; // 0x2
+ field public static final int ACTION_STATE_IDLE = 0; // 0x0
+ field public static final int ACTION_STATE_SWIPE = 1; // 0x1
+ field public static final int ANIMATION_TYPE_DRAG = 8; // 0x8
+ field public static final int ANIMATION_TYPE_SWIPE_CANCEL = 4; // 0x4
+ field public static final int ANIMATION_TYPE_SWIPE_SUCCESS = 2; // 0x2
+ field public static final int DOWN = 2; // 0x2
+ field public static final int END = 32; // 0x20
+ field public static final int LEFT = 4; // 0x4
+ field public static final int RIGHT = 8; // 0x8
+ field public static final int START = 16; // 0x10
+ field public static final int UP = 1; // 0x1
+ }
+
+ public abstract static class ItemTouchHelper.Callback {
+ ctor public ItemTouchHelper.Callback();
+ method public boolean canDropOver(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder! chooseDropTarget(androidx.recyclerview.widget.RecyclerView.ViewHolder, java.util.List<androidx.recyclerview.widget.RecyclerView.ViewHolder!>, int, int);
+ method public void clearView(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public int convertToAbsoluteDirection(int, int);
+ method public static int convertToRelativeDirection(int, int);
+ method public long getAnimationDuration(androidx.recyclerview.widget.RecyclerView, int, float, float);
+ method public int getBoundingBoxMargin();
+ method public static androidx.recyclerview.widget.ItemTouchUIUtil getDefaultUIUtil();
+ method public float getMoveThreshold(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public abstract int getMovementFlags(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public float getSwipeEscapeVelocity(float);
+ method public float getSwipeThreshold(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public float getSwipeVelocityThreshold(float);
+ method public int interpolateOutOfBoundsScroll(androidx.recyclerview.widget.RecyclerView, int, int, int, long);
+ method public boolean isItemViewSwipeEnabled();
+ method public boolean isLongPressDragEnabled();
+ method public static int makeFlag(int, int);
+ method public static int makeMovementFlags(int, int);
+ method public void onChildDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, float, float, int, boolean);
+ method public void onChildDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder!, float, float, int, boolean);
+ method public abstract boolean onMove(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onMoved(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, int, androidx.recyclerview.widget.RecyclerView.ViewHolder, int, int, int);
+ method public void onSelectedChanged(androidx.recyclerview.widget.RecyclerView.ViewHolder?, int);
+ method public abstract void onSwiped(androidx.recyclerview.widget.RecyclerView.ViewHolder, int);
+ field public static final int DEFAULT_DRAG_ANIMATION_DURATION = 200; // 0xc8
+ field public static final int DEFAULT_SWIPE_ANIMATION_DURATION = 250; // 0xfa
+ }
+
+ public abstract static class ItemTouchHelper.SimpleCallback extends androidx.recyclerview.widget.ItemTouchHelper.Callback {
+ ctor public ItemTouchHelper.SimpleCallback(int, int);
+ method public int getDragDirs(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public int getMovementFlags(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public int getSwipeDirs(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void setDefaultDragDirs(int);
+ method public void setDefaultSwipeDirs(int);
+ }
+
+ public static interface ItemTouchHelper.ViewDropHandler {
+ method public void prepareForDrop(android.view.View, android.view.View, int, int);
+ }
+
+ public interface ItemTouchUIUtil {
+ method public void clearView(android.view.View!);
+ method public void onDraw(android.graphics.Canvas!, androidx.recyclerview.widget.RecyclerView!, android.view.View!, float, float, int, boolean);
+ method public void onDrawOver(android.graphics.Canvas!, androidx.recyclerview.widget.RecyclerView!, android.view.View!, float, float, int, boolean);
+ method public void onSelected(android.view.View!);
+ }
+
+ public class LinearLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.widget.ItemTouchHelper.ViewDropHandler androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+ ctor public LinearLayoutManager(android.content.Context!);
+ ctor public LinearLayoutManager(android.content.Context!, int, boolean);
+ ctor public LinearLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+ method protected void calculateExtraLayoutSpace(androidx.recyclerview.widget.RecyclerView.State, int[]);
+ method public android.graphics.PointF! computeScrollVectorForPosition(int);
+ method public int findFirstCompletelyVisibleItemPosition();
+ method public int findFirstVisibleItemPosition();
+ method public int findLastCompletelyVisibleItemPosition();
+ method public int findLastVisibleItemPosition();
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
+ method @Deprecated protected int getExtraLayoutSpace(androidx.recyclerview.widget.RecyclerView.State!);
+ method public int getInitialPrefetchItemCount();
+ method public int getOrientation();
+ method public boolean getRecycleChildrenOnDetach();
+ method public boolean getReverseLayout();
+ method public boolean getStackFromEnd();
+ method protected boolean isLayoutRTL();
+ method public boolean isSmoothScrollbarEnabled();
+ method public void prepareForDrop(android.view.View, android.view.View, int, int);
+ method public void scrollToPositionWithOffset(int, int);
+ method public void setInitialPrefetchItemCount(int);
+ method public void setOrientation(int);
+ method public void setRecycleChildrenOnDetach(boolean);
+ method public void setReverseLayout(boolean);
+ method public void setSmoothScrollbarEnabled(boolean);
+ method public void setStackFromEnd(boolean);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int INVALID_OFFSET = -2147483648; // 0x80000000
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ protected static class LinearLayoutManager.LayoutChunkResult {
+ ctor protected LinearLayoutManager.LayoutChunkResult();
+ field public int mConsumed;
+ field public boolean mFinished;
+ field public boolean mFocusable;
+ field public boolean mIgnoreConsumed;
+ }
+
+ public class LinearSmoothScroller extends androidx.recyclerview.widget.RecyclerView.SmoothScroller {
+ ctor public LinearSmoothScroller(android.content.Context!);
+ method public int calculateDtToFit(int, int, int, int, int);
+ method public int calculateDxToMakeVisible(android.view.View!, int);
+ method public int calculateDyToMakeVisible(android.view.View!, int);
+ method protected float calculateSpeedPerPixel(android.util.DisplayMetrics!);
+ method protected int calculateTimeForDeceleration(int);
+ method protected int calculateTimeForScrolling(int);
+ method protected int getHorizontalSnapPreference();
+ method protected int getVerticalSnapPreference();
+ method protected void onSeekTargetStep(int, int, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
+ method protected void onStart();
+ method protected void onStop();
+ method protected void onTargetFound(android.view.View!, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
+ method protected void updateActionForInterimTarget(androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
+ field public static final int SNAP_TO_ANY = 0; // 0x0
+ field public static final int SNAP_TO_END = 1; // 0x1
+ field public static final int SNAP_TO_START = -1; // 0xffffffff
+ field protected final android.view.animation.DecelerateInterpolator! mDecelerateInterpolator;
+ field protected int mInterimTargetDx;
+ field protected int mInterimTargetDy;
+ field protected final android.view.animation.LinearInterpolator! mLinearInterpolator;
+ field protected android.graphics.PointF! mTargetVector;
+ }
+
+ public class LinearSnapHelper extends androidx.recyclerview.widget.SnapHelper {
+ ctor public LinearSnapHelper();
+ method public int[]! calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+ method public android.view.View! findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
+ }
+
+ public abstract class ListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
+ ctor protected ListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
+ ctor protected ListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T!>);
+ method public java.util.List<T!> getCurrentList();
+ method protected T! getItem(int);
+ method public int getItemCount();
+ method public void onCurrentListChanged(java.util.List<T!>, java.util.List<T!>);
+ method public void submitList(java.util.List<T!>?);
+ method public void submitList(java.util.List<T!>?, Runnable?);
+ }
+
+ public interface ListUpdateCallback {
+ method public void onChanged(int, int, Object?);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public abstract class OrientationHelper {
+ method public static androidx.recyclerview.widget.OrientationHelper! createHorizontalHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public static androidx.recyclerview.widget.OrientationHelper! createOrientationHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int);
+ method public static androidx.recyclerview.widget.OrientationHelper! createVerticalHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public abstract int getDecoratedEnd(android.view.View!);
+ method public abstract int getDecoratedMeasurement(android.view.View!);
+ method public abstract int getDecoratedMeasurementInOther(android.view.View!);
+ method public abstract int getDecoratedStart(android.view.View!);
+ method public abstract int getEnd();
+ method public abstract int getEndAfterPadding();
+ method public abstract int getEndPadding();
+ method public androidx.recyclerview.widget.RecyclerView.LayoutManager! getLayoutManager();
+ method public abstract int getMode();
+ method public abstract int getModeInOther();
+ method public abstract int getStartAfterPadding();
+ method public abstract int getTotalSpace();
+ method public int getTotalSpaceChange();
+ method public abstract int getTransformedEndWithDecoration(android.view.View!);
+ method public abstract int getTransformedStartWithDecoration(android.view.View!);
+ method public abstract void offsetChild(android.view.View!, int);
+ method public abstract void offsetChildren(int);
+ method public void onLayoutComplete();
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ field protected final androidx.recyclerview.widget.RecyclerView.LayoutManager! mLayoutManager;
+ }
+
+ public class PagerSnapHelper extends androidx.recyclerview.widget.SnapHelper {
+ ctor public PagerSnapHelper();
+ method public int[]? calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+ method public android.view.View? findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
+ }
+
+ public class RecyclerView extends android.view.ViewGroup implements androidx.core.view.NestedScrollingChild2 androidx.core.view.NestedScrollingChild3 androidx.core.view.ScrollingView {
+ ctor public RecyclerView(android.content.Context);
+ ctor public RecyclerView(android.content.Context, android.util.AttributeSet?);
+ ctor public RecyclerView(android.content.Context, android.util.AttributeSet?, int);
+ method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration, int);
+ method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration);
+ method public void addOnChildAttachStateChangeListener(androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener);
+ method public void addOnItemTouchListener(androidx.recyclerview.widget.RecyclerView.OnItemTouchListener);
+ method public void addOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener);
+ method public void addRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener);
+ method public void clearOnChildAttachStateChangeListeners();
+ method public void clearOnScrollListeners();
+ method public int computeHorizontalScrollExtent();
+ method public int computeHorizontalScrollOffset();
+ method public int computeHorizontalScrollRange();
+ method public int computeVerticalScrollExtent();
+ method public int computeVerticalScrollOffset();
+ method public int computeVerticalScrollRange();
+ method public boolean dispatchNestedPreScroll(int, int, int[]!, int[]!, int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]!, int);
+ method public final void dispatchNestedScroll(int, int, int, int, int[]!, int, int[]);
+ method public boolean drawChild(android.graphics.Canvas!, android.view.View!, long);
+ method public android.view.View? findChildViewUnder(float, float);
+ method public android.view.View? findContainingItemView(android.view.View);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findContainingViewHolder(android.view.View);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForAdapterPosition(int);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder! findViewHolderForItemId(long);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForLayoutPosition(int);
+ method @Deprecated public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForPosition(int);
+ method public boolean fling(int, int);
+ method public androidx.recyclerview.widget.RecyclerView.Adapter? getAdapter();
+ method public int getChildAdapterPosition(android.view.View);
+ method public long getChildItemId(android.view.View);
+ method public int getChildLayoutPosition(android.view.View);
+ method @Deprecated public int getChildPosition(android.view.View);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder! getChildViewHolder(android.view.View);
+ method public androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate? getCompatAccessibilityDelegate();
+ method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+ method public androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory getEdgeEffectFactory();
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator? getItemAnimator();
+ method public androidx.recyclerview.widget.RecyclerView.ItemDecoration getItemDecorationAt(int);
+ method public int getItemDecorationCount();
+ method public androidx.recyclerview.widget.RecyclerView.LayoutManager? getLayoutManager();
+ method public int getMaxFlingVelocity();
+ method public int getMinFlingVelocity();
+ method public androidx.recyclerview.widget.RecyclerView.OnFlingListener? getOnFlingListener();
+ method public boolean getPreserveFocusAfterLayout();
+ method public androidx.recyclerview.widget.RecyclerView.RecycledViewPool getRecycledViewPool();
+ method public int getScrollState();
+ method public boolean hasFixedSize();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean hasPendingAdapterUpdates();
+ method public void invalidateItemDecorations();
+ method public boolean isAnimating();
+ method public boolean isComputingLayout();
+ method @Deprecated public boolean isLayoutFrozen();
+ method public final boolean isLayoutSuppressed();
+ method public void nestedScrollBy(int, int);
+ method public void offsetChildrenHorizontal(@Px int);
+ method public void offsetChildrenVertical(@Px int);
+ method public void onChildAttachedToWindow(android.view.View);
+ method public void onChildDetachedFromWindow(android.view.View);
+ method public void onDraw(android.graphics.Canvas!);
+ method public void onScrollStateChanged(int);
+ method public void onScrolled(@Px int, @Px int);
+ method public void removeItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration);
+ method public void removeItemDecorationAt(int);
+ method public void removeOnChildAttachStateChangeListener(androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener);
+ method public void removeOnItemTouchListener(androidx.recyclerview.widget.RecyclerView.OnItemTouchListener);
+ method public void removeOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener);
+ method public void removeRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener);
+ method public void scrollToPosition(int);
+ method public void setAccessibilityDelegateCompat(androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate?);
+ method public void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
+ method public void setChildDrawingOrderCallback(androidx.recyclerview.widget.RecyclerView.ChildDrawingOrderCallback?);
+ method public void setEdgeEffectFactory(androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory);
+ method public void setHasFixedSize(boolean);
+ method public void setItemAnimator(androidx.recyclerview.widget.RecyclerView.ItemAnimator?);
+ method public void setItemViewCacheSize(int);
+ method @Deprecated public void setLayoutFrozen(boolean);
+ method public void setLayoutManager(androidx.recyclerview.widget.RecyclerView.LayoutManager?);
+ method @Deprecated public void setLayoutTransition(android.animation.LayoutTransition!);
+ method public void setOnFlingListener(androidx.recyclerview.widget.RecyclerView.OnFlingListener?);
+ method @Deprecated public void setOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener?);
+ method public void setPreserveFocusAfterLayout(boolean);
+ method public void setRecycledViewPool(androidx.recyclerview.widget.RecyclerView.RecycledViewPool?);
+ method @Deprecated public void setRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener?);
+ method public void setScrollingTouchSlop(int);
+ method public void setViewCacheExtension(androidx.recyclerview.widget.RecyclerView.ViewCacheExtension?);
+ method public void smoothScrollBy(@Px int, @Px int);
+ method public void smoothScrollBy(@Px int, @Px int, android.view.animation.Interpolator?);
+ method public void smoothScrollBy(@Px int, @Px int, android.view.animation.Interpolator?, int);
+ method public void smoothScrollToPosition(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ method public void stopScroll();
+ method public final void suppressLayout(boolean);
+ method public void swapAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?, boolean);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int INVALID_TYPE = -1; // 0xffffffff
+ field public static final long NO_ID = -1L; // 0xffffffffffffffffL
+ field public static final int NO_POSITION = -1; // 0xffffffff
+ field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
+ field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+ field public static final int SCROLL_STATE_SETTLING = 2; // 0x2
+ field public static final int TOUCH_SLOP_DEFAULT = 0; // 0x0
+ field public static final int TOUCH_SLOP_PAGING = 1; // 0x1
+ field public static final int UNDEFINED_DURATION = -2147483648; // 0x80000000
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public abstract static class RecyclerView.Adapter<VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> {
+ ctor public RecyclerView.Adapter();
+ method public final void bindViewHolder(VH, int);
+ method public final VH createViewHolder(android.view.ViewGroup, int);
+ method public int findRelativeAdapterPositionIn(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>, androidx.recyclerview.widget.RecyclerView.ViewHolder, int);
+ method public abstract int getItemCount();
+ method public long getItemId(int);
+ method public int getItemViewType(int);
+ method public final androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy getStateRestorationPolicy();
+ method public final boolean hasObservers();
+ method public final boolean hasStableIds();
+ method public final void notifyDataSetChanged();
+ method public final void notifyItemChanged(int);
+ method public final void notifyItemChanged(int, Object?);
+ method public final void notifyItemInserted(int);
+ method public final void notifyItemMoved(int, int);
+ method public final void notifyItemRangeChanged(int, int);
+ method public final void notifyItemRangeChanged(int, int, Object?);
+ method public final void notifyItemRangeInserted(int, int);
+ method public final void notifyItemRangeRemoved(int, int);
+ method public final void notifyItemRemoved(int);
+ method public void onAttachedToRecyclerView(androidx.recyclerview.widget.RecyclerView);
+ method public abstract void onBindViewHolder(VH, int);
+ method public void onBindViewHolder(VH, int, java.util.List<java.lang.Object!>);
+ method public abstract VH onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onDetachedFromRecyclerView(androidx.recyclerview.widget.RecyclerView);
+ method public boolean onFailedToRecycleView(VH);
+ method public void onViewAttachedToWindow(VH);
+ method public void onViewDetachedFromWindow(VH);
+ method public void onViewRecycled(VH);
+ method public void registerAdapterDataObserver(androidx.recyclerview.widget.RecyclerView.AdapterDataObserver);
+ method public void setHasStableIds(boolean);
+ method public void setStateRestorationPolicy(androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy);
+ method public void unregisterAdapterDataObserver(androidx.recyclerview.widget.RecyclerView.AdapterDataObserver);
+ }
+
+ public enum RecyclerView.Adapter.StateRestorationPolicy {
+ enum_constant public static final androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy ALLOW;
+ enum_constant public static final androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy PREVENT;
+ enum_constant public static final androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy PREVENT_WHEN_EMPTY;
+ }
+
+ public abstract static class RecyclerView.AdapterDataObserver {
+ ctor public RecyclerView.AdapterDataObserver();
+ method public void onChanged();
+ method public void onItemRangeChanged(int, int);
+ method public void onItemRangeChanged(int, int, Object?);
+ method public void onItemRangeInserted(int, int);
+ method public void onItemRangeMoved(int, int, int);
+ method public void onItemRangeRemoved(int, int);
+ method public void onStateRestorationPolicyChanged();
+ }
+
+ public static interface RecyclerView.ChildDrawingOrderCallback {
+ method public int onGetChildDrawingOrder(int, int);
+ }
+
+ public static class RecyclerView.EdgeEffectFactory {
+ ctor public RecyclerView.EdgeEffectFactory();
+ method protected android.widget.EdgeEffect createEdgeEffect(androidx.recyclerview.widget.RecyclerView, @androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.EdgeDirection int);
+ field public static final int DIRECTION_BOTTOM = 3; // 0x3
+ field public static final int DIRECTION_LEFT = 0; // 0x0
+ field public static final int DIRECTION_RIGHT = 2; // 0x2
+ field public static final int DIRECTION_TOP = 1; // 0x1
+ }
+
+ @IntDef({androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_LEFT, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_TOP, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_RIGHT, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_BOTTOM}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RecyclerView.EdgeEffectFactory.EdgeDirection {
+ }
+
+ public abstract static class RecyclerView.ItemAnimator {
+ ctor public RecyclerView.ItemAnimator();
+ method public abstract boolean animateAppearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateDisappearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?);
+ method public abstract boolean animatePersistence(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public boolean canReuseUpdatedViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public boolean canReuseUpdatedViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder, java.util.List<java.lang.Object!>);
+ method public final void dispatchAnimationFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAnimationStarted(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAnimationsFinished();
+ method public abstract void endAnimation(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public abstract void endAnimations();
+ method public long getAddDuration();
+ method public long getChangeDuration();
+ method public long getMoveDuration();
+ method public long getRemoveDuration();
+ method public abstract boolean isRunning();
+ method public final boolean isRunning(androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener?);
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo obtainHolderInfo();
+ method public void onAnimationFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onAnimationStarted(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPostLayoutInformation(androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPreLayoutInformation(androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.ViewHolder, @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges int, java.util.List<java.lang.Object!>);
+ method public abstract void runPendingAnimations();
+ method public void setAddDuration(long);
+ method public void setChangeDuration(long);
+ method public void setMoveDuration(long);
+ method public void setRemoveDuration(long);
+ field public static final int FLAG_APPEARED_IN_PRE_LAYOUT = 4096; // 0x1000
+ field public static final int FLAG_CHANGED = 2; // 0x2
+ field public static final int FLAG_INVALIDATED = 4; // 0x4
+ field public static final int FLAG_MOVED = 2048; // 0x800
+ field public static final int FLAG_REMOVED = 8; // 0x8
+ }
+
+ @IntDef(flag=true, value={androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_CHANGED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_REMOVED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_MOVED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_INVALIDATED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_APPEARED_IN_PRE_LAYOUT}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RecyclerView.ItemAnimator.AdapterChanges {
+ }
+
+ public static interface RecyclerView.ItemAnimator.ItemAnimatorFinishedListener {
+ method public void onAnimationsFinished();
+ }
+
+ public static class RecyclerView.ItemAnimator.ItemHolderInfo {
+ ctor public RecyclerView.ItemAnimator.ItemHolderInfo();
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(androidx.recyclerview.widget.RecyclerView.ViewHolder, @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges int);
+ field public int bottom;
+ field @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges public int changeFlags;
+ field public int left;
+ field public int right;
+ field public int top;
+ }
+
+ public abstract static class RecyclerView.ItemDecoration {
+ ctor public RecyclerView.ItemDecoration();
+ method @Deprecated public void getItemOffsets(android.graphics.Rect, int, androidx.recyclerview.widget.RecyclerView);
+ method public void getItemOffsets(android.graphics.Rect, android.view.View, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method @Deprecated public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
+ method public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method @Deprecated public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
+ }
+
+ public abstract static class RecyclerView.LayoutManager {
+ ctor public RecyclerView.LayoutManager();
+ method public void addDisappearingView(android.view.View!);
+ method public void addDisappearingView(android.view.View!, int);
+ method public void addView(android.view.View!);
+ method public void addView(android.view.View!, int);
+ method public void assertInLayoutOrScroll(String!);
+ method public void assertNotInLayoutOrScroll(String!);
+ method public void attachView(android.view.View, int, androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public void attachView(android.view.View, int);
+ method public void attachView(android.view.View);
+ method public void calculateItemDecorationsForChild(android.view.View, android.graphics.Rect);
+ method public boolean canScrollHorizontally();
+ method public boolean canScrollVertically();
+ method public boolean checkLayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public static int chooseSize(int, int, int);
+ method public void collectAdjacentPrefetchPositions(int, int, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry!);
+ method public void collectInitialPrefetchPositions(int, androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry!);
+ method public int computeHorizontalScrollExtent(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeHorizontalScrollOffset(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeHorizontalScrollRange(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeVerticalScrollExtent(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeVerticalScrollOffset(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeVerticalScrollRange(androidx.recyclerview.widget.RecyclerView.State);
+ method public void detachAndScrapAttachedViews(androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void detachAndScrapView(android.view.View, androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void detachAndScrapViewAt(int, androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void detachView(android.view.View);
+ method public void detachViewAt(int);
+ method public void endAnimation(android.view.View!);
+ method public android.view.View? findContainingItemView(android.view.View);
+ method public android.view.View? findViewByPosition(int);
+ method public abstract androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.content.Context!, android.util.AttributeSet!);
+ method public int getBaseline();
+ method public int getBottomDecorationHeight(android.view.View);
+ method public android.view.View? getChildAt(int);
+ method public int getChildCount();
+ method @Deprecated public static int getChildMeasureSpec(int, int, int, boolean);
+ method public static int getChildMeasureSpec(int, int, int, int, boolean);
+ method public boolean getClipToPadding();
+ method public int getColumnCountForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public int getDecoratedBottom(android.view.View);
+ method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+ method public int getDecoratedLeft(android.view.View);
+ method public int getDecoratedMeasuredHeight(android.view.View);
+ method public int getDecoratedMeasuredWidth(android.view.View);
+ method public int getDecoratedRight(android.view.View);
+ method public int getDecoratedTop(android.view.View);
+ method public android.view.View? getFocusedChild();
+ method @Px public int getHeight();
+ method public int getHeightMode();
+ method public int getItemCount();
+ method public int getItemViewType(android.view.View);
+ method public int getLayoutDirection();
+ method public int getLeftDecorationWidth(android.view.View);
+ method @Px public int getMinimumHeight();
+ method @Px public int getMinimumWidth();
+ method @Px public int getPaddingBottom();
+ method @Px public int getPaddingEnd();
+ method @Px public int getPaddingLeft();
+ method @Px public int getPaddingRight();
+ method @Px public int getPaddingStart();
+ method @Px public int getPaddingTop();
+ method public int getPosition(android.view.View);
+ method public static androidx.recyclerview.widget.RecyclerView.LayoutManager.Properties! getProperties(android.content.Context, android.util.AttributeSet?, int, int);
+ method public int getRightDecorationWidth(android.view.View);
+ method public int getRowCountForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public int getSelectionModeForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public int getTopDecorationHeight(android.view.View);
+ method public void getTransformedBoundingBox(android.view.View, boolean, android.graphics.Rect);
+ method @Px public int getWidth();
+ method public int getWidthMode();
+ method public boolean hasFocus();
+ method public void ignoreView(android.view.View);
+ method public boolean isAttachedToWindow();
+ method public boolean isAutoMeasureEnabled();
+ method public boolean isFocused();
+ method public final boolean isItemPrefetchEnabled();
+ method public boolean isLayoutHierarchical(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public boolean isMeasurementCacheEnabled();
+ method public boolean isSmoothScrolling();
+ method public boolean isViewPartiallyVisible(android.view.View, boolean, boolean);
+ method public void layoutDecorated(android.view.View, int, int, int, int);
+ method public void layoutDecoratedWithMargins(android.view.View, int, int, int, int);
+ method public void measureChild(android.view.View, int, int);
+ method public void measureChildWithMargins(android.view.View, int, int);
+ method public void moveView(int, int);
+ method public void offsetChildrenHorizontal(@Px int);
+ method public void offsetChildrenVertical(@Px int);
+ method public void onAdapterChanged(androidx.recyclerview.widget.RecyclerView.Adapter?, androidx.recyclerview.widget.RecyclerView.Adapter?);
+ method public boolean onAddFocusables(androidx.recyclerview.widget.RecyclerView, java.util.ArrayList<android.view.View!>, int, int);
+ method @CallSuper public void onAttachedToWindow(androidx.recyclerview.widget.RecyclerView!);
+ method @Deprecated public void onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView!);
+ method @CallSuper public void onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView!, androidx.recyclerview.widget.RecyclerView.Recycler!);
+ method public android.view.View? onFocusSearchFailed(android.view.View, int, androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityEvent(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onInitializeAccessibilityNodeInfoForItem(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+ method public android.view.View? onInterceptFocusSearch(android.view.View, int);
+ method public void onItemsAdded(androidx.recyclerview.widget.RecyclerView, int, int);
+ method public void onItemsChanged(androidx.recyclerview.widget.RecyclerView);
+ method public void onItemsMoved(androidx.recyclerview.widget.RecyclerView, int, int, int);
+ method public void onItemsRemoved(androidx.recyclerview.widget.RecyclerView, int, int);
+ method public void onItemsUpdated(androidx.recyclerview.widget.RecyclerView, int, int);
+ method public void onItemsUpdated(androidx.recyclerview.widget.RecyclerView, int, int, Object?);
+ method public void onLayoutChildren(androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+ method public void onLayoutCompleted(androidx.recyclerview.widget.RecyclerView.State!);
+ method public void onMeasure(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, int, int);
+ method @Deprecated public boolean onRequestChildFocus(androidx.recyclerview.widget.RecyclerView, android.view.View, android.view.View?);
+ method public boolean onRequestChildFocus(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State, android.view.View, android.view.View?);
+ method public void onRestoreInstanceState(android.os.Parcelable!);
+ method public android.os.Parcelable? onSaveInstanceState();
+ method public void onScrollStateChanged(int);
+ method public boolean performAccessibilityAction(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, int, android.os.Bundle?);
+ method public boolean performAccessibilityActionForItem(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.View, int, android.os.Bundle?);
+ method public void postOnAnimation(Runnable!);
+ method public void removeAllViews();
+ method public void removeAndRecycleAllViews(androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void removeAndRecycleView(android.view.View, androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void removeAndRecycleViewAt(int, androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public boolean removeCallbacks(Runnable!);
+ method public void removeDetachedView(android.view.View);
+ method public void removeView(android.view.View!);
+ method public void removeViewAt(int);
+ method public boolean requestChildRectangleOnScreen(androidx.recyclerview.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean);
+ method public boolean requestChildRectangleOnScreen(androidx.recyclerview.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean, boolean);
+ method public void requestLayout();
+ method public void requestSimpleAnimationsInNextLayout();
+ method public int scrollHorizontallyBy(int, androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+ method public void scrollToPosition(int);
+ method public int scrollVerticallyBy(int, androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+ method @Deprecated public void setAutoMeasureEnabled(boolean);
+ method public final void setItemPrefetchEnabled(boolean);
+ method public void setMeasuredDimension(android.graphics.Rect!, int, int);
+ method public void setMeasuredDimension(int, int);
+ method public void setMeasurementCacheEnabled(boolean);
+ method public void smoothScrollToPosition(androidx.recyclerview.widget.RecyclerView!, androidx.recyclerview.widget.RecyclerView.State!, int);
+ method public void startSmoothScroll(androidx.recyclerview.widget.RecyclerView.SmoothScroller!);
+ method public void stopIgnoringView(android.view.View);
+ method public boolean supportsPredictiveItemAnimations();
+ }
+
+ public static interface RecyclerView.LayoutManager.LayoutPrefetchRegistry {
+ method public void addPosition(int, int);
+ }
+
+ public static class RecyclerView.LayoutManager.Properties {
+ ctor public RecyclerView.LayoutManager.Properties();
+ field public int orientation;
+ field public boolean reverseLayout;
+ field public int spanCount;
+ field public boolean stackFromEnd;
+ }
+
+ public static class RecyclerView.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public RecyclerView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public RecyclerView.LayoutParams(int, int);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public RecyclerView.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public int getAbsoluteAdapterPosition();
+ method public int getBindingAdapterPosition();
+ method @Deprecated public int getViewAdapterPosition();
+ method public int getViewLayoutPosition();
+ method @Deprecated public int getViewPosition();
+ method public boolean isItemChanged();
+ method public boolean isItemRemoved();
+ method public boolean isViewInvalid();
+ method public boolean viewNeedsUpdate();
+ }
+
+ public static interface RecyclerView.OnChildAttachStateChangeListener {
+ method public void onChildViewAttachedToWindow(android.view.View);
+ method public void onChildViewDetachedFromWindow(android.view.View);
+ }
+
+ public abstract static class RecyclerView.OnFlingListener {
+ ctor public RecyclerView.OnFlingListener();
+ method public abstract boolean onFling(int, int);
+ }
+
+ public static interface RecyclerView.OnItemTouchListener {
+ method public boolean onInterceptTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+ method public void onRequestDisallowInterceptTouchEvent(boolean);
+ method public void onTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+ }
+
+ public abstract static class RecyclerView.OnScrollListener {
+ ctor public RecyclerView.OnScrollListener();
+ method public void onScrollStateChanged(androidx.recyclerview.widget.RecyclerView, int);
+ method public void onScrolled(androidx.recyclerview.widget.RecyclerView, int, int);
+ }
+
+ public static class RecyclerView.RecycledViewPool {
+ ctor public RecyclerView.RecycledViewPool();
+ method public void clear();
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder? getRecycledView(int);
+ method public int getRecycledViewCount(int);
+ method public void putRecycledView(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void setMaxRecycledViews(int, int);
+ }
+
+ public final class RecyclerView.Recycler {
+ ctor public RecyclerView.Recycler();
+ method public void bindViewToPosition(android.view.View, int);
+ method public void clear();
+ method public int convertPreLayoutPositionToPostLayout(int);
+ method public java.util.List<androidx.recyclerview.widget.RecyclerView.ViewHolder!> getScrapList();
+ method public android.view.View getViewForPosition(int);
+ method public void recycleView(android.view.View);
+ method public void setViewCacheSize(int);
+ }
+
+ public static interface RecyclerView.RecyclerListener {
+ method public void onViewRecycled(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ }
+
+ public static class RecyclerView.SimpleOnItemTouchListener implements androidx.recyclerview.widget.RecyclerView.OnItemTouchListener {
+ ctor public RecyclerView.SimpleOnItemTouchListener();
+ method public boolean onInterceptTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+ method public void onRequestDisallowInterceptTouchEvent(boolean);
+ method public void onTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+ }
+
+ public abstract static class RecyclerView.SmoothScroller {
+ ctor public RecyclerView.SmoothScroller();
+ method public android.graphics.PointF? computeScrollVectorForPosition(int);
+ method public android.view.View! findViewByPosition(int);
+ method public int getChildCount();
+ method public int getChildPosition(android.view.View!);
+ method public androidx.recyclerview.widget.RecyclerView.LayoutManager? getLayoutManager();
+ method public int getTargetPosition();
+ method @Deprecated public void instantScrollToPosition(int);
+ method public boolean isPendingInitialRun();
+ method public boolean isRunning();
+ method protected void normalize(android.graphics.PointF);
+ method protected void onChildAttachedToWindow(android.view.View!);
+ method protected abstract void onSeekTargetStep(@Px int, @Px int, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action);
+ method protected abstract void onStart();
+ method protected abstract void onStop();
+ method protected abstract void onTargetFound(android.view.View, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action);
+ method public void setTargetPosition(int);
+ method protected final void stop();
+ }
+
+ public static class RecyclerView.SmoothScroller.Action {
+ ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int);
+ ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int, int);
+ ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int, int, android.view.animation.Interpolator?);
+ method public int getDuration();
+ method @Px public int getDx();
+ method @Px public int getDy();
+ method public android.view.animation.Interpolator? getInterpolator();
+ method public void jumpTo(int);
+ method public void setDuration(int);
+ method public void setDx(@Px int);
+ method public void setDy(@Px int);
+ method public void setInterpolator(android.view.animation.Interpolator?);
+ method public void update(@Px int, @Px int, int, android.view.animation.Interpolator?);
+ field public static final int UNDEFINED_DURATION = -2147483648; // 0x80000000
+ }
+
+ public static interface RecyclerView.SmoothScroller.ScrollVectorProvider {
+ method public android.graphics.PointF? computeScrollVectorForPosition(int);
+ }
+
+ public static class RecyclerView.State {
+ ctor public RecyclerView.State();
+ method public boolean didStructureChange();
+ method public <T> T! get(int);
+ method public int getItemCount();
+ method public int getRemainingScrollHorizontal();
+ method public int getRemainingScrollVertical();
+ method public int getTargetScrollPosition();
+ method public boolean hasTargetScrollPosition();
+ method public boolean isMeasuring();
+ method public boolean isPreLayout();
+ method public void put(int, Object!);
+ method public void remove(int);
+ method public boolean willRunPredictiveAnimations();
+ method public boolean willRunSimpleAnimations();
+ }
+
+ public abstract static class RecyclerView.ViewCacheExtension {
+ ctor public RecyclerView.ViewCacheExtension();
+ method public abstract android.view.View? getViewForPositionAndType(androidx.recyclerview.widget.RecyclerView.Recycler, int, int);
+ }
+
+ public abstract static class RecyclerView.ViewHolder {
+ ctor public RecyclerView.ViewHolder(android.view.View);
+ method public final int getAbsoluteAdapterPosition();
+ method @Deprecated public final int getAdapterPosition();
+ method public final androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>? getBindingAdapter();
+ method public final int getBindingAdapterPosition();
+ method public final long getItemId();
+ method public final int getItemViewType();
+ method public final int getLayoutPosition();
+ method public final int getOldPosition();
+ method @Deprecated public final int getPosition();
+ method public final boolean isRecyclable();
+ method public final void setIsRecyclable(boolean);
+ field public final android.view.View itemView;
+ }
+
+ public class RecyclerViewAccessibilityDelegate extends androidx.core.view.AccessibilityDelegateCompat {
+ ctor public RecyclerViewAccessibilityDelegate(androidx.recyclerview.widget.RecyclerView);
+ method public androidx.core.view.AccessibilityDelegateCompat getItemDelegate();
+ }
+
+ public static class RecyclerViewAccessibilityDelegate.ItemDelegate extends androidx.core.view.AccessibilityDelegateCompat {
+ ctor public RecyclerViewAccessibilityDelegate.ItemDelegate(androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate);
+ }
+
+ public abstract class SimpleItemAnimator extends androidx.recyclerview.widget.RecyclerView.ItemAnimator {
+ ctor public SimpleItemAnimator();
+ method public abstract boolean animateAdd(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public boolean animateAppearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder!, androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+ method public boolean animateDisappearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?);
+ method public abstract boolean animateMove(androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+ method public boolean animatePersistence(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateRemove(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchAddFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchAddStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchChangeFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+ method public final void dispatchChangeStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+ method public final void dispatchMoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchMoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchRemoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchRemoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public boolean getSupportsChangeAnimations();
+ method public void onAddFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onAddStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onChangeFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+ method public void onChangeStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+ method public void onMoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onMoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onRemoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onRemoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void setSupportsChangeAnimations(boolean);
+ }
+
+ public abstract class SnapHelper extends androidx.recyclerview.widget.RecyclerView.OnFlingListener {
+ ctor public SnapHelper();
+ method public void attachToRecyclerView(androidx.recyclerview.widget.RecyclerView?) throws java.lang.IllegalStateException;
+ method public abstract int[]? calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+ method public int[]! calculateScrollDistance(int, int);
+ method protected androidx.recyclerview.widget.RecyclerView.SmoothScroller? createScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager);
+ method @Deprecated protected androidx.recyclerview.widget.LinearSmoothScroller? createSnapScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager);
+ method public abstract android.view.View? findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public abstract int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
+ method public boolean onFling(int, int);
+ }
+
+ public class SortedList<T> {
+ ctor public SortedList(Class<T!>, androidx.recyclerview.widget.SortedList.Callback<T!>);
+ ctor public SortedList(Class<T!>, androidx.recyclerview.widget.SortedList.Callback<T!>, int);
+ method public int add(T!);
+ method public void addAll(T![], boolean);
+ method public void addAll(T!...);
+ method public void addAll(java.util.Collection<T!>);
+ method public void beginBatchedUpdates();
+ method public void clear();
+ method public void endBatchedUpdates();
+ method public T! get(int) throws java.lang.IndexOutOfBoundsException;
+ method public int indexOf(T!);
+ method public void recalculatePositionOfItemAt(int);
+ method public boolean remove(T!);
+ method public T! removeItemAt(int);
+ method public void replaceAll(T![], boolean);
+ method public void replaceAll(T!...);
+ method public void replaceAll(java.util.Collection<T!>);
+ method public int size();
+ method public void updateItemAt(int, T!);
+ field public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ public static class SortedList.BatchedCallback<T2> extends androidx.recyclerview.widget.SortedList.Callback<T2> {
+ ctor public SortedList.BatchedCallback(androidx.recyclerview.widget.SortedList.Callback<T2!>!);
+ method public boolean areContentsTheSame(T2!, T2!);
+ method public boolean areItemsTheSame(T2!, T2!);
+ method public int compare(T2!, T2!);
+ method public void dispatchLastEvent();
+ method public void onChanged(int, int);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public abstract static class SortedList.Callback<T2> implements java.util.Comparator<T2> androidx.recyclerview.widget.ListUpdateCallback {
+ ctor public SortedList.Callback();
+ method public abstract boolean areContentsTheSame(T2!, T2!);
+ method public abstract boolean areItemsTheSame(T2!, T2!);
+ method public abstract int compare(T2!, T2!);
+ method public Object? getChangePayload(T2!, T2!);
+ method public abstract void onChanged(int, int);
+ method public void onChanged(int, int, Object!);
+ }
+
+ public abstract class SortedListAdapterCallback<T2> extends androidx.recyclerview.widget.SortedList.Callback<T2> {
+ ctor public SortedListAdapterCallback(androidx.recyclerview.widget.RecyclerView.Adapter<?>!);
+ method public void onChanged(int, int);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public class StaggeredGridLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+ ctor public StaggeredGridLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+ ctor public StaggeredGridLayoutManager(int, int);
+ method public android.graphics.PointF! computeScrollVectorForPosition(int);
+ method public int[]! findFirstCompletelyVisibleItemPositions(int[]!);
+ method public int[]! findFirstVisibleItemPositions(int[]!);
+ method public int[]! findLastCompletelyVisibleItemPositions(int[]!);
+ method public int[]! findLastVisibleItemPositions(int[]!);
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
+ method public int getGapStrategy();
+ method public int getOrientation();
+ method public boolean getReverseLayout();
+ method public int getSpanCount();
+ method public void invalidateSpanAssignments();
+ method public void scrollToPositionWithOffset(int, int);
+ method public void setGapStrategy(int);
+ method public void setOrientation(int);
+ method public void setReverseLayout(boolean);
+ method public void setSpanCount(int);
+ field @Deprecated public static final int GAP_HANDLING_LAZY = 1; // 0x1
+ field public static final int GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS = 2; // 0x2
+ field public static final int GAP_HANDLING_NONE = 0; // 0x0
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static class StaggeredGridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public final int getSpanIndex();
+ method public boolean isFullSpan();
+ method public void setFullSpan(boolean);
+ field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+ }
+
+}
+
diff --git a/recyclerview/recyclerview/api/public_plus_experimental_1.3.0-beta03.txt b/recyclerview/recyclerview/api/public_plus_experimental_1.3.0-beta03.txt
new file mode 100644
index 0000000..7e45fbb
--- /dev/null
+++ b/recyclerview/recyclerview/api/public_plus_experimental_1.3.0-beta03.txt
@@ -0,0 +1,1092 @@
+// Signature format: 4.0
+package androidx.recyclerview.widget {
+
+ public final class AdapterListUpdateCallback implements androidx.recyclerview.widget.ListUpdateCallback {
+ ctor public AdapterListUpdateCallback(androidx.recyclerview.widget.RecyclerView.Adapter);
+ method public void onChanged(int, int, Object!);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public final class AsyncDifferConfig<T> {
+ method public java.util.concurrent.Executor getBackgroundThreadExecutor();
+ method public androidx.recyclerview.widget.DiffUtil.ItemCallback<T!> getDiffCallback();
+ }
+
+ public static final class AsyncDifferConfig.Builder<T> {
+ ctor public AsyncDifferConfig.Builder(androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
+ method public androidx.recyclerview.widget.AsyncDifferConfig<T!> build();
+ method public androidx.recyclerview.widget.AsyncDifferConfig.Builder<T!> setBackgroundThreadExecutor(java.util.concurrent.Executor?);
+ }
+
+ public class AsyncListDiffer<T> {
+ ctor public AsyncListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
+ ctor public AsyncListDiffer(androidx.recyclerview.widget.ListUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T!>);
+ method public void addListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T!>);
+ method public java.util.List<T!> getCurrentList();
+ method public void removeListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T!>);
+ method public void submitList(java.util.List<T!>?);
+ method public void submitList(java.util.List<T!>?, Runnable?);
+ }
+
+ public static interface AsyncListDiffer.ListListener<T> {
+ method public void onCurrentListChanged(java.util.List<T!>, java.util.List<T!>);
+ }
+
+ public class AsyncListUtil<T> {
+ ctor public AsyncListUtil(Class<T!>, int, androidx.recyclerview.widget.AsyncListUtil.DataCallback<T!>, androidx.recyclerview.widget.AsyncListUtil.ViewCallback);
+ method public T? getItem(int);
+ method public int getItemCount();
+ method public void onRangeChanged();
+ method public void refresh();
+ }
+
+ public abstract static class AsyncListUtil.DataCallback<T> {
+ ctor public AsyncListUtil.DataCallback();
+ method @WorkerThread public abstract void fillData(T![], int, int);
+ method @WorkerThread public int getMaxCachedTiles();
+ method @WorkerThread public void recycleData(T![], int);
+ method @WorkerThread public abstract int refreshData();
+ }
+
+ public abstract static class AsyncListUtil.ViewCallback {
+ ctor public AsyncListUtil.ViewCallback();
+ method @UiThread public void extendRangeInto(int[], int[], int);
+ method @UiThread public abstract void getItemRangeInto(int[]);
+ method @UiThread public abstract void onDataRefresh();
+ method @UiThread public abstract void onItemLoaded(int);
+ field public static final int HINT_SCROLL_ASC = 2; // 0x2
+ field public static final int HINT_SCROLL_DESC = 1; // 0x1
+ field public static final int HINT_SCROLL_NONE = 0; // 0x0
+ }
+
+ public class BatchingListUpdateCallback implements androidx.recyclerview.widget.ListUpdateCallback {
+ ctor public BatchingListUpdateCallback(androidx.recyclerview.widget.ListUpdateCallback);
+ method public void dispatchLastEvent();
+ method public void onChanged(int, int, Object!);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public final class ConcatAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder> {
+ ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
+ ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.ConcatAdapter.Config, androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
+ ctor public ConcatAdapter(java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
+ ctor public ConcatAdapter(androidx.recyclerview.widget.ConcatAdapter.Config, java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
+ method public boolean addAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
+ method public boolean addAdapter(int, androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
+ method public java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>> getAdapters();
+ method public int getItemCount();
+ method public android.util.Pair<androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!,java.lang.Integer!> getWrappedAdapterAndPosition(int);
+ method public void onBindViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder, int);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method public boolean onFailedToRecycleView(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onViewAttachedToWindow(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onViewDetachedFromWindow(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onViewRecycled(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public boolean removeAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
+ }
+
+ public static final class ConcatAdapter.Config {
+ field public static final androidx.recyclerview.widget.ConcatAdapter.Config DEFAULT;
+ field public final boolean isolateViewTypes;
+ field public final androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode stableIdMode;
+ }
+
+ public static final class ConcatAdapter.Config.Builder {
+ ctor public ConcatAdapter.Config.Builder();
+ method public androidx.recyclerview.widget.ConcatAdapter.Config build();
+ method public androidx.recyclerview.widget.ConcatAdapter.Config.Builder setIsolateViewTypes(boolean);
+ method public androidx.recyclerview.widget.ConcatAdapter.Config.Builder setStableIdMode(androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode);
+ }
+
+ public enum ConcatAdapter.Config.StableIdMode {
+ enum_constant public static final androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode ISOLATED_STABLE_IDS;
+ enum_constant public static final androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode NO_STABLE_IDS;
+ enum_constant public static final androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode SHARED_STABLE_IDS;
+ }
+
+ public class DefaultItemAnimator extends androidx.recyclerview.widget.SimpleItemAnimator {
+ ctor public DefaultItemAnimator();
+ method public boolean animateAdd(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder!, androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+ method public boolean animateMove(androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+ method public boolean animateRemove(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void endAnimation(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void endAnimations();
+ method public boolean isRunning();
+ method public void runPendingAnimations();
+ }
+
+ public class DiffUtil {
+ method public static androidx.recyclerview.widget.DiffUtil.DiffResult calculateDiff(androidx.recyclerview.widget.DiffUtil.Callback);
+ method public static androidx.recyclerview.widget.DiffUtil.DiffResult calculateDiff(androidx.recyclerview.widget.DiffUtil.Callback, boolean);
+ }
+
+ public abstract static class DiffUtil.Callback {
+ ctor public DiffUtil.Callback();
+ method public abstract boolean areContentsTheSame(int, int);
+ method public abstract boolean areItemsTheSame(int, int);
+ method public Object? getChangePayload(int, int);
+ method public abstract int getNewListSize();
+ method public abstract int getOldListSize();
+ }
+
+ public static class DiffUtil.DiffResult {
+ method public int convertNewPositionToOld(@IntRange(from=0) int);
+ method public int convertOldPositionToNew(@IntRange(from=0) int);
+ method public void dispatchUpdatesTo(androidx.recyclerview.widget.RecyclerView.Adapter);
+ method public void dispatchUpdatesTo(androidx.recyclerview.widget.ListUpdateCallback);
+ field public static final int NO_POSITION = -1; // 0xffffffff
+ }
+
+ public abstract static class DiffUtil.ItemCallback<T> {
+ ctor public DiffUtil.ItemCallback();
+ method public abstract boolean areContentsTheSame(T, T);
+ method public abstract boolean areItemsTheSame(T, T);
+ method public Object? getChangePayload(T, T);
+ }
+
+ public class DividerItemDecoration extends androidx.recyclerview.widget.RecyclerView.ItemDecoration {
+ ctor public DividerItemDecoration(android.content.Context!, int);
+ method public android.graphics.drawable.Drawable? getDrawable();
+ method public void setDrawable(android.graphics.drawable.Drawable);
+ method public void setOrientation(int);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public class GridLayoutManager extends androidx.recyclerview.widget.LinearLayoutManager {
+ ctor public GridLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+ ctor public GridLayoutManager(android.content.Context!, int);
+ ctor public GridLayoutManager(android.content.Context!, int, int, boolean);
+ method public int getSpanCount();
+ method public androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup! getSpanSizeLookup();
+ method public boolean isUsingSpansToEstimateScrollbarDimensions();
+ method public void setSpanCount(int);
+ method public void setSpanSizeLookup(androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup!);
+ method public void setUsingSpansToEstimateScrollbarDimensions(boolean);
+ field public static final int DEFAULT_SPAN_COUNT = -1; // 0xffffffff
+ }
+
+ public static final class GridLayoutManager.DefaultSpanSizeLookup extends androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup {
+ ctor public GridLayoutManager.DefaultSpanSizeLookup();
+ method public int getSpanSize(int);
+ }
+
+ public static class GridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
+ ctor public GridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public GridLayoutManager.LayoutParams(int, int);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public GridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public int getSpanIndex();
+ method public int getSpanSize();
+ field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+ }
+
+ public abstract static class GridLayoutManager.SpanSizeLookup {
+ ctor public GridLayoutManager.SpanSizeLookup();
+ method public int getSpanGroupIndex(int, int);
+ method public int getSpanIndex(int, int);
+ method public abstract int getSpanSize(int);
+ method public void invalidateSpanGroupIndexCache();
+ method public void invalidateSpanIndexCache();
+ method public boolean isSpanGroupIndexCacheEnabled();
+ method public boolean isSpanIndexCacheEnabled();
+ method public void setSpanGroupIndexCacheEnabled(boolean);
+ method public void setSpanIndexCacheEnabled(boolean);
+ }
+
+ public class ItemTouchHelper extends androidx.recyclerview.widget.RecyclerView.ItemDecoration implements androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener {
+ ctor public ItemTouchHelper(androidx.recyclerview.widget.ItemTouchHelper.Callback);
+ method public void attachToRecyclerView(androidx.recyclerview.widget.RecyclerView?);
+ method public void onChildViewAttachedToWindow(android.view.View);
+ method public void onChildViewDetachedFromWindow(android.view.View);
+ method public void startDrag(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void startSwipe(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ field public static final int ACTION_STATE_DRAG = 2; // 0x2
+ field public static final int ACTION_STATE_IDLE = 0; // 0x0
+ field public static final int ACTION_STATE_SWIPE = 1; // 0x1
+ field public static final int ANIMATION_TYPE_DRAG = 8; // 0x8
+ field public static final int ANIMATION_TYPE_SWIPE_CANCEL = 4; // 0x4
+ field public static final int ANIMATION_TYPE_SWIPE_SUCCESS = 2; // 0x2
+ field public static final int DOWN = 2; // 0x2
+ field public static final int END = 32; // 0x20
+ field public static final int LEFT = 4; // 0x4
+ field public static final int RIGHT = 8; // 0x8
+ field public static final int START = 16; // 0x10
+ field public static final int UP = 1; // 0x1
+ }
+
+ public abstract static class ItemTouchHelper.Callback {
+ ctor public ItemTouchHelper.Callback();
+ method public boolean canDropOver(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder! chooseDropTarget(androidx.recyclerview.widget.RecyclerView.ViewHolder, java.util.List<androidx.recyclerview.widget.RecyclerView.ViewHolder!>, int, int);
+ method public void clearView(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public int convertToAbsoluteDirection(int, int);
+ method public static int convertToRelativeDirection(int, int);
+ method public long getAnimationDuration(androidx.recyclerview.widget.RecyclerView, int, float, float);
+ method public int getBoundingBoxMargin();
+ method public static androidx.recyclerview.widget.ItemTouchUIUtil getDefaultUIUtil();
+ method public float getMoveThreshold(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public abstract int getMovementFlags(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public float getSwipeEscapeVelocity(float);
+ method public float getSwipeThreshold(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public float getSwipeVelocityThreshold(float);
+ method public int interpolateOutOfBoundsScroll(androidx.recyclerview.widget.RecyclerView, int, int, int, long);
+ method public boolean isItemViewSwipeEnabled();
+ method public boolean isLongPressDragEnabled();
+ method public static int makeFlag(int, int);
+ method public static int makeMovementFlags(int, int);
+ method public void onChildDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, float, float, int, boolean);
+ method public void onChildDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder!, float, float, int, boolean);
+ method public abstract boolean onMove(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onMoved(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, int, androidx.recyclerview.widget.RecyclerView.ViewHolder, int, int, int);
+ method public void onSelectedChanged(androidx.recyclerview.widget.RecyclerView.ViewHolder?, int);
+ method public abstract void onSwiped(androidx.recyclerview.widget.RecyclerView.ViewHolder, int);
+ field public static final int DEFAULT_DRAG_ANIMATION_DURATION = 200; // 0xc8
+ field public static final int DEFAULT_SWIPE_ANIMATION_DURATION = 250; // 0xfa
+ }
+
+ public abstract static class ItemTouchHelper.SimpleCallback extends androidx.recyclerview.widget.ItemTouchHelper.Callback {
+ ctor public ItemTouchHelper.SimpleCallback(int, int);
+ method public int getDragDirs(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public int getMovementFlags(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public int getSwipeDirs(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void setDefaultDragDirs(int);
+ method public void setDefaultSwipeDirs(int);
+ }
+
+ public static interface ItemTouchHelper.ViewDropHandler {
+ method public void prepareForDrop(android.view.View, android.view.View, int, int);
+ }
+
+ public interface ItemTouchUIUtil {
+ method public void clearView(android.view.View!);
+ method public void onDraw(android.graphics.Canvas!, androidx.recyclerview.widget.RecyclerView!, android.view.View!, float, float, int, boolean);
+ method public void onDrawOver(android.graphics.Canvas!, androidx.recyclerview.widget.RecyclerView!, android.view.View!, float, float, int, boolean);
+ method public void onSelected(android.view.View!);
+ }
+
+ public class LinearLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.widget.ItemTouchHelper.ViewDropHandler androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+ ctor public LinearLayoutManager(android.content.Context!);
+ ctor public LinearLayoutManager(android.content.Context!, int, boolean);
+ ctor public LinearLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+ method protected void calculateExtraLayoutSpace(androidx.recyclerview.widget.RecyclerView.State, int[]);
+ method public android.graphics.PointF! computeScrollVectorForPosition(int);
+ method public int findFirstCompletelyVisibleItemPosition();
+ method public int findFirstVisibleItemPosition();
+ method public int findLastCompletelyVisibleItemPosition();
+ method public int findLastVisibleItemPosition();
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
+ method @Deprecated protected int getExtraLayoutSpace(androidx.recyclerview.widget.RecyclerView.State!);
+ method public int getInitialPrefetchItemCount();
+ method public int getOrientation();
+ method public boolean getRecycleChildrenOnDetach();
+ method public boolean getReverseLayout();
+ method public boolean getStackFromEnd();
+ method protected boolean isLayoutRTL();
+ method public boolean isSmoothScrollbarEnabled();
+ method public void prepareForDrop(android.view.View, android.view.View, int, int);
+ method public void scrollToPositionWithOffset(int, int);
+ method public void setInitialPrefetchItemCount(int);
+ method public void setOrientation(int);
+ method public void setRecycleChildrenOnDetach(boolean);
+ method public void setReverseLayout(boolean);
+ method public void setSmoothScrollbarEnabled(boolean);
+ method public void setStackFromEnd(boolean);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int INVALID_OFFSET = -2147483648; // 0x80000000
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ protected static class LinearLayoutManager.LayoutChunkResult {
+ ctor protected LinearLayoutManager.LayoutChunkResult();
+ field public int mConsumed;
+ field public boolean mFinished;
+ field public boolean mFocusable;
+ field public boolean mIgnoreConsumed;
+ }
+
+ public class LinearSmoothScroller extends androidx.recyclerview.widget.RecyclerView.SmoothScroller {
+ ctor public LinearSmoothScroller(android.content.Context!);
+ method public int calculateDtToFit(int, int, int, int, int);
+ method public int calculateDxToMakeVisible(android.view.View!, int);
+ method public int calculateDyToMakeVisible(android.view.View!, int);
+ method protected float calculateSpeedPerPixel(android.util.DisplayMetrics!);
+ method protected int calculateTimeForDeceleration(int);
+ method protected int calculateTimeForScrolling(int);
+ method protected int getHorizontalSnapPreference();
+ method protected int getVerticalSnapPreference();
+ method protected void onSeekTargetStep(int, int, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
+ method protected void onStart();
+ method protected void onStop();
+ method protected void onTargetFound(android.view.View!, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
+ method protected void updateActionForInterimTarget(androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
+ field public static final int SNAP_TO_ANY = 0; // 0x0
+ field public static final int SNAP_TO_END = 1; // 0x1
+ field public static final int SNAP_TO_START = -1; // 0xffffffff
+ field protected final android.view.animation.DecelerateInterpolator! mDecelerateInterpolator;
+ field protected int mInterimTargetDx;
+ field protected int mInterimTargetDy;
+ field protected final android.view.animation.LinearInterpolator! mLinearInterpolator;
+ field protected android.graphics.PointF! mTargetVector;
+ }
+
+ public class LinearSnapHelper extends androidx.recyclerview.widget.SnapHelper {
+ ctor public LinearSnapHelper();
+ method public int[]! calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+ method public android.view.View! findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
+ }
+
+ public abstract class ListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
+ ctor protected ListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
+ ctor protected ListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T!>);
+ method public java.util.List<T!> getCurrentList();
+ method protected T! getItem(int);
+ method public int getItemCount();
+ method public void onCurrentListChanged(java.util.List<T!>, java.util.List<T!>);
+ method public void submitList(java.util.List<T!>?);
+ method public void submitList(java.util.List<T!>?, Runnable?);
+ }
+
+ public interface ListUpdateCallback {
+ method public void onChanged(int, int, Object?);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public abstract class OrientationHelper {
+ method public static androidx.recyclerview.widget.OrientationHelper! createHorizontalHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public static androidx.recyclerview.widget.OrientationHelper! createOrientationHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int);
+ method public static androidx.recyclerview.widget.OrientationHelper! createVerticalHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public abstract int getDecoratedEnd(android.view.View!);
+ method public abstract int getDecoratedMeasurement(android.view.View!);
+ method public abstract int getDecoratedMeasurementInOther(android.view.View!);
+ method public abstract int getDecoratedStart(android.view.View!);
+ method public abstract int getEnd();
+ method public abstract int getEndAfterPadding();
+ method public abstract int getEndPadding();
+ method public androidx.recyclerview.widget.RecyclerView.LayoutManager! getLayoutManager();
+ method public abstract int getMode();
+ method public abstract int getModeInOther();
+ method public abstract int getStartAfterPadding();
+ method public abstract int getTotalSpace();
+ method public int getTotalSpaceChange();
+ method public abstract int getTransformedEndWithDecoration(android.view.View!);
+ method public abstract int getTransformedStartWithDecoration(android.view.View!);
+ method public abstract void offsetChild(android.view.View!, int);
+ method public abstract void offsetChildren(int);
+ method public void onLayoutComplete();
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ field protected final androidx.recyclerview.widget.RecyclerView.LayoutManager! mLayoutManager;
+ }
+
+ public class PagerSnapHelper extends androidx.recyclerview.widget.SnapHelper {
+ ctor public PagerSnapHelper();
+ method public int[]? calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+ method public android.view.View? findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
+ }
+
+ public class RecyclerView extends android.view.ViewGroup implements androidx.core.view.NestedScrollingChild2 androidx.core.view.NestedScrollingChild3 androidx.core.view.ScrollingView {
+ ctor public RecyclerView(android.content.Context);
+ ctor public RecyclerView(android.content.Context, android.util.AttributeSet?);
+ ctor public RecyclerView(android.content.Context, android.util.AttributeSet?, int);
+ method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration, int);
+ method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration);
+ method public void addOnChildAttachStateChangeListener(androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener);
+ method public void addOnItemTouchListener(androidx.recyclerview.widget.RecyclerView.OnItemTouchListener);
+ method public void addOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener);
+ method public void addRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener);
+ method public void clearOnChildAttachStateChangeListeners();
+ method public void clearOnScrollListeners();
+ method public int computeHorizontalScrollExtent();
+ method public int computeHorizontalScrollOffset();
+ method public int computeHorizontalScrollRange();
+ method public int computeVerticalScrollExtent();
+ method public int computeVerticalScrollOffset();
+ method public int computeVerticalScrollRange();
+ method public boolean dispatchNestedPreScroll(int, int, int[]!, int[]!, int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]!, int);
+ method public final void dispatchNestedScroll(int, int, int, int, int[]!, int, int[]);
+ method public boolean drawChild(android.graphics.Canvas!, android.view.View!, long);
+ method public android.view.View? findChildViewUnder(float, float);
+ method public android.view.View? findContainingItemView(android.view.View);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findContainingViewHolder(android.view.View);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForAdapterPosition(int);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder! findViewHolderForItemId(long);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForLayoutPosition(int);
+ method @Deprecated public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForPosition(int);
+ method public boolean fling(int, int);
+ method public androidx.recyclerview.widget.RecyclerView.Adapter? getAdapter();
+ method public int getChildAdapterPosition(android.view.View);
+ method public long getChildItemId(android.view.View);
+ method public int getChildLayoutPosition(android.view.View);
+ method @Deprecated public int getChildPosition(android.view.View);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder! getChildViewHolder(android.view.View);
+ method public androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate? getCompatAccessibilityDelegate();
+ method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+ method public androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory getEdgeEffectFactory();
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator? getItemAnimator();
+ method public androidx.recyclerview.widget.RecyclerView.ItemDecoration getItemDecorationAt(int);
+ method public int getItemDecorationCount();
+ method public androidx.recyclerview.widget.RecyclerView.LayoutManager? getLayoutManager();
+ method public int getMaxFlingVelocity();
+ method public int getMinFlingVelocity();
+ method public androidx.recyclerview.widget.RecyclerView.OnFlingListener? getOnFlingListener();
+ method public boolean getPreserveFocusAfterLayout();
+ method public androidx.recyclerview.widget.RecyclerView.RecycledViewPool getRecycledViewPool();
+ method public int getScrollState();
+ method public boolean hasFixedSize();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean hasPendingAdapterUpdates();
+ method public void invalidateItemDecorations();
+ method public boolean isAnimating();
+ method public boolean isComputingLayout();
+ method @Deprecated public boolean isLayoutFrozen();
+ method public final boolean isLayoutSuppressed();
+ method public void nestedScrollBy(int, int);
+ method public void offsetChildrenHorizontal(@Px int);
+ method public void offsetChildrenVertical(@Px int);
+ method public void onChildAttachedToWindow(android.view.View);
+ method public void onChildDetachedFromWindow(android.view.View);
+ method public void onDraw(android.graphics.Canvas!);
+ method public void onScrollStateChanged(int);
+ method public void onScrolled(@Px int, @Px int);
+ method public void removeItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration);
+ method public void removeItemDecorationAt(int);
+ method public void removeOnChildAttachStateChangeListener(androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener);
+ method public void removeOnItemTouchListener(androidx.recyclerview.widget.RecyclerView.OnItemTouchListener);
+ method public void removeOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener);
+ method public void removeRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener);
+ method public void scrollToPosition(int);
+ method public void setAccessibilityDelegateCompat(androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate?);
+ method public void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
+ method public void setChildDrawingOrderCallback(androidx.recyclerview.widget.RecyclerView.ChildDrawingOrderCallback?);
+ method public void setEdgeEffectFactory(androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory);
+ method public void setHasFixedSize(boolean);
+ method public void setItemAnimator(androidx.recyclerview.widget.RecyclerView.ItemAnimator?);
+ method public void setItemViewCacheSize(int);
+ method @Deprecated public void setLayoutFrozen(boolean);
+ method public void setLayoutManager(androidx.recyclerview.widget.RecyclerView.LayoutManager?);
+ method @Deprecated public void setLayoutTransition(android.animation.LayoutTransition!);
+ method public void setOnFlingListener(androidx.recyclerview.widget.RecyclerView.OnFlingListener?);
+ method @Deprecated public void setOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener?);
+ method public void setPreserveFocusAfterLayout(boolean);
+ method public void setRecycledViewPool(androidx.recyclerview.widget.RecyclerView.RecycledViewPool?);
+ method @Deprecated public void setRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener?);
+ method public void setScrollingTouchSlop(int);
+ method public void setViewCacheExtension(androidx.recyclerview.widget.RecyclerView.ViewCacheExtension?);
+ method public void smoothScrollBy(@Px int, @Px int);
+ method public void smoothScrollBy(@Px int, @Px int, android.view.animation.Interpolator?);
+ method public void smoothScrollBy(@Px int, @Px int, android.view.animation.Interpolator?, int);
+ method public void smoothScrollToPosition(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ method public void stopScroll();
+ method public final void suppressLayout(boolean);
+ method public void swapAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?, boolean);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int INVALID_TYPE = -1; // 0xffffffff
+ field public static final long NO_ID = -1L; // 0xffffffffffffffffL
+ field public static final int NO_POSITION = -1; // 0xffffffff
+ field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
+ field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+ field public static final int SCROLL_STATE_SETTLING = 2; // 0x2
+ field public static final int TOUCH_SLOP_DEFAULT = 0; // 0x0
+ field public static final int TOUCH_SLOP_PAGING = 1; // 0x1
+ field public static final int UNDEFINED_DURATION = -2147483648; // 0x80000000
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public abstract static class RecyclerView.Adapter<VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> {
+ ctor public RecyclerView.Adapter();
+ method public final void bindViewHolder(VH, int);
+ method public final VH createViewHolder(android.view.ViewGroup, int);
+ method public int findRelativeAdapterPositionIn(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>, androidx.recyclerview.widget.RecyclerView.ViewHolder, int);
+ method public abstract int getItemCount();
+ method public long getItemId(int);
+ method public int getItemViewType(int);
+ method public final androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy getStateRestorationPolicy();
+ method public final boolean hasObservers();
+ method public final boolean hasStableIds();
+ method public final void notifyDataSetChanged();
+ method public final void notifyItemChanged(int);
+ method public final void notifyItemChanged(int, Object?);
+ method public final void notifyItemInserted(int);
+ method public final void notifyItemMoved(int, int);
+ method public final void notifyItemRangeChanged(int, int);
+ method public final void notifyItemRangeChanged(int, int, Object?);
+ method public final void notifyItemRangeInserted(int, int);
+ method public final void notifyItemRangeRemoved(int, int);
+ method public final void notifyItemRemoved(int);
+ method public void onAttachedToRecyclerView(androidx.recyclerview.widget.RecyclerView);
+ method public abstract void onBindViewHolder(VH, int);
+ method public void onBindViewHolder(VH, int, java.util.List<java.lang.Object!>);
+ method public abstract VH onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onDetachedFromRecyclerView(androidx.recyclerview.widget.RecyclerView);
+ method public boolean onFailedToRecycleView(VH);
+ method public void onViewAttachedToWindow(VH);
+ method public void onViewDetachedFromWindow(VH);
+ method public void onViewRecycled(VH);
+ method public void registerAdapterDataObserver(androidx.recyclerview.widget.RecyclerView.AdapterDataObserver);
+ method public void setHasStableIds(boolean);
+ method public void setStateRestorationPolicy(androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy);
+ method public void unregisterAdapterDataObserver(androidx.recyclerview.widget.RecyclerView.AdapterDataObserver);
+ }
+
+ public enum RecyclerView.Adapter.StateRestorationPolicy {
+ enum_constant public static final androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy ALLOW;
+ enum_constant public static final androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy PREVENT;
+ enum_constant public static final androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy PREVENT_WHEN_EMPTY;
+ }
+
+ public abstract static class RecyclerView.AdapterDataObserver {
+ ctor public RecyclerView.AdapterDataObserver();
+ method public void onChanged();
+ method public void onItemRangeChanged(int, int);
+ method public void onItemRangeChanged(int, int, Object?);
+ method public void onItemRangeInserted(int, int);
+ method public void onItemRangeMoved(int, int, int);
+ method public void onItemRangeRemoved(int, int);
+ method public void onStateRestorationPolicyChanged();
+ }
+
+ public static interface RecyclerView.ChildDrawingOrderCallback {
+ method public int onGetChildDrawingOrder(int, int);
+ }
+
+ public static class RecyclerView.EdgeEffectFactory {
+ ctor public RecyclerView.EdgeEffectFactory();
+ method protected android.widget.EdgeEffect createEdgeEffect(androidx.recyclerview.widget.RecyclerView, @androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.EdgeDirection int);
+ field public static final int DIRECTION_BOTTOM = 3; // 0x3
+ field public static final int DIRECTION_LEFT = 0; // 0x0
+ field public static final int DIRECTION_RIGHT = 2; // 0x2
+ field public static final int DIRECTION_TOP = 1; // 0x1
+ }
+
+ @IntDef({androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_LEFT, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_TOP, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_RIGHT, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_BOTTOM}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RecyclerView.EdgeEffectFactory.EdgeDirection {
+ }
+
+ public abstract static class RecyclerView.ItemAnimator {
+ ctor public RecyclerView.ItemAnimator();
+ method public abstract boolean animateAppearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateDisappearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?);
+ method public abstract boolean animatePersistence(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public boolean canReuseUpdatedViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public boolean canReuseUpdatedViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder, java.util.List<java.lang.Object!>);
+ method public final void dispatchAnimationFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAnimationStarted(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAnimationsFinished();
+ method public abstract void endAnimation(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public abstract void endAnimations();
+ method public long getAddDuration();
+ method public long getChangeDuration();
+ method public long getMoveDuration();
+ method public long getRemoveDuration();
+ method public abstract boolean isRunning();
+ method public final boolean isRunning(androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener?);
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo obtainHolderInfo();
+ method public void onAnimationFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onAnimationStarted(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPostLayoutInformation(androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPreLayoutInformation(androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.ViewHolder, @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges int, java.util.List<java.lang.Object!>);
+ method public abstract void runPendingAnimations();
+ method public void setAddDuration(long);
+ method public void setChangeDuration(long);
+ method public void setMoveDuration(long);
+ method public void setRemoveDuration(long);
+ field public static final int FLAG_APPEARED_IN_PRE_LAYOUT = 4096; // 0x1000
+ field public static final int FLAG_CHANGED = 2; // 0x2
+ field public static final int FLAG_INVALIDATED = 4; // 0x4
+ field public static final int FLAG_MOVED = 2048; // 0x800
+ field public static final int FLAG_REMOVED = 8; // 0x8
+ }
+
+ @IntDef(flag=true, value={androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_CHANGED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_REMOVED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_MOVED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_INVALIDATED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_APPEARED_IN_PRE_LAYOUT}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RecyclerView.ItemAnimator.AdapterChanges {
+ }
+
+ public static interface RecyclerView.ItemAnimator.ItemAnimatorFinishedListener {
+ method public void onAnimationsFinished();
+ }
+
+ public static class RecyclerView.ItemAnimator.ItemHolderInfo {
+ ctor public RecyclerView.ItemAnimator.ItemHolderInfo();
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(androidx.recyclerview.widget.RecyclerView.ViewHolder, @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges int);
+ field public int bottom;
+ field @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges public int changeFlags;
+ field public int left;
+ field public int right;
+ field public int top;
+ }
+
+ public abstract static class RecyclerView.ItemDecoration {
+ ctor public RecyclerView.ItemDecoration();
+ method @Deprecated public void getItemOffsets(android.graphics.Rect, int, androidx.recyclerview.widget.RecyclerView);
+ method public void getItemOffsets(android.graphics.Rect, android.view.View, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method @Deprecated public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
+ method public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method @Deprecated public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
+ }
+
+ public abstract static class RecyclerView.LayoutManager {
+ ctor public RecyclerView.LayoutManager();
+ method public void addDisappearingView(android.view.View!);
+ method public void addDisappearingView(android.view.View!, int);
+ method public void addView(android.view.View!);
+ method public void addView(android.view.View!, int);
+ method public void assertInLayoutOrScroll(String!);
+ method public void assertNotInLayoutOrScroll(String!);
+ method public void attachView(android.view.View, int, androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public void attachView(android.view.View, int);
+ method public void attachView(android.view.View);
+ method public void calculateItemDecorationsForChild(android.view.View, android.graphics.Rect);
+ method public boolean canScrollHorizontally();
+ method public boolean canScrollVertically();
+ method public boolean checkLayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public static int chooseSize(int, int, int);
+ method public void collectAdjacentPrefetchPositions(int, int, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry!);
+ method public void collectInitialPrefetchPositions(int, androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry!);
+ method public int computeHorizontalScrollExtent(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeHorizontalScrollOffset(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeHorizontalScrollRange(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeVerticalScrollExtent(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeVerticalScrollOffset(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeVerticalScrollRange(androidx.recyclerview.widget.RecyclerView.State);
+ method public void detachAndScrapAttachedViews(androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void detachAndScrapView(android.view.View, androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void detachAndScrapViewAt(int, androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void detachView(android.view.View);
+ method public void detachViewAt(int);
+ method public void endAnimation(android.view.View!);
+ method public android.view.View? findContainingItemView(android.view.View);
+ method public android.view.View? findViewByPosition(int);
+ method public abstract androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.content.Context!, android.util.AttributeSet!);
+ method public int getBaseline();
+ method public int getBottomDecorationHeight(android.view.View);
+ method public android.view.View? getChildAt(int);
+ method public int getChildCount();
+ method @Deprecated public static int getChildMeasureSpec(int, int, int, boolean);
+ method public static int getChildMeasureSpec(int, int, int, int, boolean);
+ method public boolean getClipToPadding();
+ method public int getColumnCountForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public int getDecoratedBottom(android.view.View);
+ method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+ method public int getDecoratedLeft(android.view.View);
+ method public int getDecoratedMeasuredHeight(android.view.View);
+ method public int getDecoratedMeasuredWidth(android.view.View);
+ method public int getDecoratedRight(android.view.View);
+ method public int getDecoratedTop(android.view.View);
+ method public android.view.View? getFocusedChild();
+ method @Px public int getHeight();
+ method public int getHeightMode();
+ method public int getItemCount();
+ method public int getItemViewType(android.view.View);
+ method public int getLayoutDirection();
+ method public int getLeftDecorationWidth(android.view.View);
+ method @Px public int getMinimumHeight();
+ method @Px public int getMinimumWidth();
+ method @Px public int getPaddingBottom();
+ method @Px public int getPaddingEnd();
+ method @Px public int getPaddingLeft();
+ method @Px public int getPaddingRight();
+ method @Px public int getPaddingStart();
+ method @Px public int getPaddingTop();
+ method public int getPosition(android.view.View);
+ method public static androidx.recyclerview.widget.RecyclerView.LayoutManager.Properties! getProperties(android.content.Context, android.util.AttributeSet?, int, int);
+ method public int getRightDecorationWidth(android.view.View);
+ method public int getRowCountForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public int getSelectionModeForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public int getTopDecorationHeight(android.view.View);
+ method public void getTransformedBoundingBox(android.view.View, boolean, android.graphics.Rect);
+ method @Px public int getWidth();
+ method public int getWidthMode();
+ method public boolean hasFocus();
+ method public void ignoreView(android.view.View);
+ method public boolean isAttachedToWindow();
+ method public boolean isAutoMeasureEnabled();
+ method public boolean isFocused();
+ method public final boolean isItemPrefetchEnabled();
+ method public boolean isLayoutHierarchical(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public boolean isMeasurementCacheEnabled();
+ method public boolean isSmoothScrolling();
+ method public boolean isViewPartiallyVisible(android.view.View, boolean, boolean);
+ method public void layoutDecorated(android.view.View, int, int, int, int);
+ method public void layoutDecoratedWithMargins(android.view.View, int, int, int, int);
+ method public void measureChild(android.view.View, int, int);
+ method public void measureChildWithMargins(android.view.View, int, int);
+ method public void moveView(int, int);
+ method public void offsetChildrenHorizontal(@Px int);
+ method public void offsetChildrenVertical(@Px int);
+ method public void onAdapterChanged(androidx.recyclerview.widget.RecyclerView.Adapter?, androidx.recyclerview.widget.RecyclerView.Adapter?);
+ method public boolean onAddFocusables(androidx.recyclerview.widget.RecyclerView, java.util.ArrayList<android.view.View!>, int, int);
+ method @CallSuper public void onAttachedToWindow(androidx.recyclerview.widget.RecyclerView!);
+ method @Deprecated public void onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView!);
+ method @CallSuper public void onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView!, androidx.recyclerview.widget.RecyclerView.Recycler!);
+ method public android.view.View? onFocusSearchFailed(android.view.View, int, androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityEvent(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onInitializeAccessibilityNodeInfoForItem(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+ method public android.view.View? onInterceptFocusSearch(android.view.View, int);
+ method public void onItemsAdded(androidx.recyclerview.widget.RecyclerView, int, int);
+ method public void onItemsChanged(androidx.recyclerview.widget.RecyclerView);
+ method public void onItemsMoved(androidx.recyclerview.widget.RecyclerView, int, int, int);
+ method public void onItemsRemoved(androidx.recyclerview.widget.RecyclerView, int, int);
+ method public void onItemsUpdated(androidx.recyclerview.widget.RecyclerView, int, int);
+ method public void onItemsUpdated(androidx.recyclerview.widget.RecyclerView, int, int, Object?);
+ method public void onLayoutChildren(androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+ method public void onLayoutCompleted(androidx.recyclerview.widget.RecyclerView.State!);
+ method public void onMeasure(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, int, int);
+ method @Deprecated public boolean onRequestChildFocus(androidx.recyclerview.widget.RecyclerView, android.view.View, android.view.View?);
+ method public boolean onRequestChildFocus(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State, android.view.View, android.view.View?);
+ method public void onRestoreInstanceState(android.os.Parcelable!);
+ method public android.os.Parcelable? onSaveInstanceState();
+ method public void onScrollStateChanged(int);
+ method public boolean performAccessibilityAction(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, int, android.os.Bundle?);
+ method public boolean performAccessibilityActionForItem(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.View, int, android.os.Bundle?);
+ method public void postOnAnimation(Runnable!);
+ method public void removeAllViews();
+ method public void removeAndRecycleAllViews(androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void removeAndRecycleView(android.view.View, androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void removeAndRecycleViewAt(int, androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public boolean removeCallbacks(Runnable!);
+ method public void removeDetachedView(android.view.View);
+ method public void removeView(android.view.View!);
+ method public void removeViewAt(int);
+ method public boolean requestChildRectangleOnScreen(androidx.recyclerview.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean);
+ method public boolean requestChildRectangleOnScreen(androidx.recyclerview.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean, boolean);
+ method public void requestLayout();
+ method public void requestSimpleAnimationsInNextLayout();
+ method public int scrollHorizontallyBy(int, androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+ method public void scrollToPosition(int);
+ method public int scrollVerticallyBy(int, androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+ method @Deprecated public void setAutoMeasureEnabled(boolean);
+ method public final void setItemPrefetchEnabled(boolean);
+ method public void setMeasuredDimension(android.graphics.Rect!, int, int);
+ method public void setMeasuredDimension(int, int);
+ method public void setMeasurementCacheEnabled(boolean);
+ method public void smoothScrollToPosition(androidx.recyclerview.widget.RecyclerView!, androidx.recyclerview.widget.RecyclerView.State!, int);
+ method public void startSmoothScroll(androidx.recyclerview.widget.RecyclerView.SmoothScroller!);
+ method public void stopIgnoringView(android.view.View);
+ method public boolean supportsPredictiveItemAnimations();
+ }
+
+ public static interface RecyclerView.LayoutManager.LayoutPrefetchRegistry {
+ method public void addPosition(int, int);
+ }
+
+ public static class RecyclerView.LayoutManager.Properties {
+ ctor public RecyclerView.LayoutManager.Properties();
+ field public int orientation;
+ field public boolean reverseLayout;
+ field public int spanCount;
+ field public boolean stackFromEnd;
+ }
+
+ public static class RecyclerView.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public RecyclerView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public RecyclerView.LayoutParams(int, int);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public RecyclerView.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public int getAbsoluteAdapterPosition();
+ method public int getBindingAdapterPosition();
+ method @Deprecated public int getViewAdapterPosition();
+ method public int getViewLayoutPosition();
+ method @Deprecated public int getViewPosition();
+ method public boolean isItemChanged();
+ method public boolean isItemRemoved();
+ method public boolean isViewInvalid();
+ method public boolean viewNeedsUpdate();
+ }
+
+ public static interface RecyclerView.OnChildAttachStateChangeListener {
+ method public void onChildViewAttachedToWindow(android.view.View);
+ method public void onChildViewDetachedFromWindow(android.view.View);
+ }
+
+ public abstract static class RecyclerView.OnFlingListener {
+ ctor public RecyclerView.OnFlingListener();
+ method public abstract boolean onFling(int, int);
+ }
+
+ public static interface RecyclerView.OnItemTouchListener {
+ method public boolean onInterceptTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+ method public void onRequestDisallowInterceptTouchEvent(boolean);
+ method public void onTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+ }
+
+ public abstract static class RecyclerView.OnScrollListener {
+ ctor public RecyclerView.OnScrollListener();
+ method public void onScrollStateChanged(androidx.recyclerview.widget.RecyclerView, int);
+ method public void onScrolled(androidx.recyclerview.widget.RecyclerView, int, int);
+ }
+
+ public static class RecyclerView.RecycledViewPool {
+ ctor public RecyclerView.RecycledViewPool();
+ method public void clear();
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder? getRecycledView(int);
+ method public int getRecycledViewCount(int);
+ method public void putRecycledView(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void setMaxRecycledViews(int, int);
+ }
+
+ public final class RecyclerView.Recycler {
+ ctor public RecyclerView.Recycler();
+ method public void bindViewToPosition(android.view.View, int);
+ method public void clear();
+ method public int convertPreLayoutPositionToPostLayout(int);
+ method public java.util.List<androidx.recyclerview.widget.RecyclerView.ViewHolder!> getScrapList();
+ method public android.view.View getViewForPosition(int);
+ method public void recycleView(android.view.View);
+ method public void setViewCacheSize(int);
+ }
+
+ public static interface RecyclerView.RecyclerListener {
+ method public void onViewRecycled(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ }
+
+ public static class RecyclerView.SimpleOnItemTouchListener implements androidx.recyclerview.widget.RecyclerView.OnItemTouchListener {
+ ctor public RecyclerView.SimpleOnItemTouchListener();
+ method public boolean onInterceptTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+ method public void onRequestDisallowInterceptTouchEvent(boolean);
+ method public void onTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+ }
+
+ public abstract static class RecyclerView.SmoothScroller {
+ ctor public RecyclerView.SmoothScroller();
+ method public android.graphics.PointF? computeScrollVectorForPosition(int);
+ method public android.view.View! findViewByPosition(int);
+ method public int getChildCount();
+ method public int getChildPosition(android.view.View!);
+ method public androidx.recyclerview.widget.RecyclerView.LayoutManager? getLayoutManager();
+ method public int getTargetPosition();
+ method @Deprecated public void instantScrollToPosition(int);
+ method public boolean isPendingInitialRun();
+ method public boolean isRunning();
+ method protected void normalize(android.graphics.PointF);
+ method protected void onChildAttachedToWindow(android.view.View!);
+ method protected abstract void onSeekTargetStep(@Px int, @Px int, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action);
+ method protected abstract void onStart();
+ method protected abstract void onStop();
+ method protected abstract void onTargetFound(android.view.View, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action);
+ method public void setTargetPosition(int);
+ method protected final void stop();
+ }
+
+ public static class RecyclerView.SmoothScroller.Action {
+ ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int);
+ ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int, int);
+ ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int, int, android.view.animation.Interpolator?);
+ method public int getDuration();
+ method @Px public int getDx();
+ method @Px public int getDy();
+ method public android.view.animation.Interpolator? getInterpolator();
+ method public void jumpTo(int);
+ method public void setDuration(int);
+ method public void setDx(@Px int);
+ method public void setDy(@Px int);
+ method public void setInterpolator(android.view.animation.Interpolator?);
+ method public void update(@Px int, @Px int, int, android.view.animation.Interpolator?);
+ field public static final int UNDEFINED_DURATION = -2147483648; // 0x80000000
+ }
+
+ public static interface RecyclerView.SmoothScroller.ScrollVectorProvider {
+ method public android.graphics.PointF? computeScrollVectorForPosition(int);
+ }
+
+ public static class RecyclerView.State {
+ ctor public RecyclerView.State();
+ method public boolean didStructureChange();
+ method public <T> T! get(int);
+ method public int getItemCount();
+ method public int getRemainingScrollHorizontal();
+ method public int getRemainingScrollVertical();
+ method public int getTargetScrollPosition();
+ method public boolean hasTargetScrollPosition();
+ method public boolean isMeasuring();
+ method public boolean isPreLayout();
+ method public void put(int, Object!);
+ method public void remove(int);
+ method public boolean willRunPredictiveAnimations();
+ method public boolean willRunSimpleAnimations();
+ }
+
+ public abstract static class RecyclerView.ViewCacheExtension {
+ ctor public RecyclerView.ViewCacheExtension();
+ method public abstract android.view.View? getViewForPositionAndType(androidx.recyclerview.widget.RecyclerView.Recycler, int, int);
+ }
+
+ public abstract static class RecyclerView.ViewHolder {
+ ctor public RecyclerView.ViewHolder(android.view.View);
+ method public final int getAbsoluteAdapterPosition();
+ method @Deprecated public final int getAdapterPosition();
+ method public final androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>? getBindingAdapter();
+ method public final int getBindingAdapterPosition();
+ method public final long getItemId();
+ method public final int getItemViewType();
+ method public final int getLayoutPosition();
+ method public final int getOldPosition();
+ method @Deprecated public final int getPosition();
+ method public final boolean isRecyclable();
+ method public final void setIsRecyclable(boolean);
+ field public final android.view.View itemView;
+ }
+
+ public class RecyclerViewAccessibilityDelegate extends androidx.core.view.AccessibilityDelegateCompat {
+ ctor public RecyclerViewAccessibilityDelegate(androidx.recyclerview.widget.RecyclerView);
+ method public androidx.core.view.AccessibilityDelegateCompat getItemDelegate();
+ }
+
+ public static class RecyclerViewAccessibilityDelegate.ItemDelegate extends androidx.core.view.AccessibilityDelegateCompat {
+ ctor public RecyclerViewAccessibilityDelegate.ItemDelegate(androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate);
+ }
+
+ public abstract class SimpleItemAnimator extends androidx.recyclerview.widget.RecyclerView.ItemAnimator {
+ ctor public SimpleItemAnimator();
+ method public abstract boolean animateAdd(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public boolean animateAppearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder!, androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+ method public boolean animateDisappearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?);
+ method public abstract boolean animateMove(androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+ method public boolean animatePersistence(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateRemove(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchAddFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchAddStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchChangeFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+ method public final void dispatchChangeStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+ method public final void dispatchMoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchMoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchRemoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchRemoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public boolean getSupportsChangeAnimations();
+ method public void onAddFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onAddStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onChangeFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+ method public void onChangeStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+ method public void onMoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onMoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onRemoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onRemoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void setSupportsChangeAnimations(boolean);
+ }
+
+ public abstract class SnapHelper extends androidx.recyclerview.widget.RecyclerView.OnFlingListener {
+ ctor public SnapHelper();
+ method public void attachToRecyclerView(androidx.recyclerview.widget.RecyclerView?) throws java.lang.IllegalStateException;
+ method public abstract int[]? calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+ method public int[]! calculateScrollDistance(int, int);
+ method protected androidx.recyclerview.widget.RecyclerView.SmoothScroller? createScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager);
+ method @Deprecated protected androidx.recyclerview.widget.LinearSmoothScroller? createSnapScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager);
+ method public abstract android.view.View? findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public abstract int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
+ method public boolean onFling(int, int);
+ }
+
+ public class SortedList<T> {
+ ctor public SortedList(Class<T!>, androidx.recyclerview.widget.SortedList.Callback<T!>);
+ ctor public SortedList(Class<T!>, androidx.recyclerview.widget.SortedList.Callback<T!>, int);
+ method public int add(T!);
+ method public void addAll(T![], boolean);
+ method public void addAll(T!...);
+ method public void addAll(java.util.Collection<T!>);
+ method public void beginBatchedUpdates();
+ method public void clear();
+ method public void endBatchedUpdates();
+ method public T! get(int) throws java.lang.IndexOutOfBoundsException;
+ method public int indexOf(T!);
+ method public void recalculatePositionOfItemAt(int);
+ method public boolean remove(T!);
+ method public T! removeItemAt(int);
+ method public void replaceAll(T![], boolean);
+ method public void replaceAll(T!...);
+ method public void replaceAll(java.util.Collection<T!>);
+ method public int size();
+ method public void updateItemAt(int, T!);
+ field public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ public static class SortedList.BatchedCallback<T2> extends androidx.recyclerview.widget.SortedList.Callback<T2> {
+ ctor public SortedList.BatchedCallback(androidx.recyclerview.widget.SortedList.Callback<T2!>!);
+ method public boolean areContentsTheSame(T2!, T2!);
+ method public boolean areItemsTheSame(T2!, T2!);
+ method public int compare(T2!, T2!);
+ method public void dispatchLastEvent();
+ method public void onChanged(int, int);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public abstract static class SortedList.Callback<T2> implements java.util.Comparator<T2> androidx.recyclerview.widget.ListUpdateCallback {
+ ctor public SortedList.Callback();
+ method public abstract boolean areContentsTheSame(T2!, T2!);
+ method public abstract boolean areItemsTheSame(T2!, T2!);
+ method public abstract int compare(T2!, T2!);
+ method public Object? getChangePayload(T2!, T2!);
+ method public abstract void onChanged(int, int);
+ method public void onChanged(int, int, Object!);
+ }
+
+ public abstract class SortedListAdapterCallback<T2> extends androidx.recyclerview.widget.SortedList.Callback<T2> {
+ ctor public SortedListAdapterCallback(androidx.recyclerview.widget.RecyclerView.Adapter<?>!);
+ method public void onChanged(int, int);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public class StaggeredGridLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+ ctor public StaggeredGridLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+ ctor public StaggeredGridLayoutManager(int, int);
+ method public android.graphics.PointF! computeScrollVectorForPosition(int);
+ method public int[]! findFirstCompletelyVisibleItemPositions(int[]!);
+ method public int[]! findFirstVisibleItemPositions(int[]!);
+ method public int[]! findLastCompletelyVisibleItemPositions(int[]!);
+ method public int[]! findLastVisibleItemPositions(int[]!);
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
+ method public int getGapStrategy();
+ method public int getOrientation();
+ method public boolean getReverseLayout();
+ method public int getSpanCount();
+ method public void invalidateSpanAssignments();
+ method public void scrollToPositionWithOffset(int, int);
+ method public void setGapStrategy(int);
+ method public void setOrientation(int);
+ method public void setReverseLayout(boolean);
+ method public void setSpanCount(int);
+ field @Deprecated public static final int GAP_HANDLING_LAZY = 1; // 0x1
+ field public static final int GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS = 2; // 0x2
+ field public static final int GAP_HANDLING_NONE = 0; // 0x0
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static class StaggeredGridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public final int getSpanIndex();
+ method public boolean isFullSpan();
+ method public void setFullSpan(boolean);
+ field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+ }
+
+}
+
diff --git a/recyclerview/recyclerview/api/res-1.3.0-beta03.txt b/recyclerview/recyclerview/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..475bfc43
--- /dev/null
+++ b/recyclerview/recyclerview/api/res-1.3.0-beta03.txt
@@ -0,0 +1,9 @@
+attr fastScrollEnabled
+attr fastScrollHorizontalThumbDrawable
+attr fastScrollHorizontalTrackDrawable
+attr fastScrollVerticalThumbDrawable
+attr fastScrollVerticalTrackDrawable
+attr layoutManager
+attr reverseLayout
+attr spanCount
+attr stackFromEnd
diff --git a/recyclerview/recyclerview/api/restricted_1.3.0-beta03.txt b/recyclerview/recyclerview/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..ac7b64b
--- /dev/null
+++ b/recyclerview/recyclerview/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,1095 @@
+// Signature format: 4.0
+package androidx.recyclerview.widget {
+
+ public final class AdapterListUpdateCallback implements androidx.recyclerview.widget.ListUpdateCallback {
+ ctor public AdapterListUpdateCallback(androidx.recyclerview.widget.RecyclerView.Adapter);
+ method public void onChanged(int, int, Object!);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public final class AsyncDifferConfig<T> {
+ method public java.util.concurrent.Executor getBackgroundThreadExecutor();
+ method public androidx.recyclerview.widget.DiffUtil.ItemCallback<T!> getDiffCallback();
+ }
+
+ public static final class AsyncDifferConfig.Builder<T> {
+ ctor public AsyncDifferConfig.Builder(androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
+ method public androidx.recyclerview.widget.AsyncDifferConfig<T!> build();
+ method public androidx.recyclerview.widget.AsyncDifferConfig.Builder<T!> setBackgroundThreadExecutor(java.util.concurrent.Executor?);
+ }
+
+ public class AsyncListDiffer<T> {
+ ctor public AsyncListDiffer(androidx.recyclerview.widget.RecyclerView.Adapter, androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
+ ctor public AsyncListDiffer(androidx.recyclerview.widget.ListUpdateCallback, androidx.recyclerview.widget.AsyncDifferConfig<T!>);
+ method public void addListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T!>);
+ method public java.util.List<T!> getCurrentList();
+ method public void removeListListener(androidx.recyclerview.widget.AsyncListDiffer.ListListener<T!>);
+ method public void submitList(java.util.List<T!>?);
+ method public void submitList(java.util.List<T!>?, Runnable?);
+ }
+
+ public static interface AsyncListDiffer.ListListener<T> {
+ method public void onCurrentListChanged(java.util.List<T!>, java.util.List<T!>);
+ }
+
+ public class AsyncListUtil<T> {
+ ctor public AsyncListUtil(Class<T!>, int, androidx.recyclerview.widget.AsyncListUtil.DataCallback<T!>, androidx.recyclerview.widget.AsyncListUtil.ViewCallback);
+ method public T? getItem(int);
+ method public int getItemCount();
+ method public void onRangeChanged();
+ method public void refresh();
+ }
+
+ public abstract static class AsyncListUtil.DataCallback<T> {
+ ctor public AsyncListUtil.DataCallback();
+ method @WorkerThread public abstract void fillData(T![], int, int);
+ method @WorkerThread public int getMaxCachedTiles();
+ method @WorkerThread public void recycleData(T![], int);
+ method @WorkerThread public abstract int refreshData();
+ }
+
+ public abstract static class AsyncListUtil.ViewCallback {
+ ctor public AsyncListUtil.ViewCallback();
+ method @UiThread public void extendRangeInto(int[], int[], int);
+ method @UiThread public abstract void getItemRangeInto(int[]);
+ method @UiThread public abstract void onDataRefresh();
+ method @UiThread public abstract void onItemLoaded(int);
+ field public static final int HINT_SCROLL_ASC = 2; // 0x2
+ field public static final int HINT_SCROLL_DESC = 1; // 0x1
+ field public static final int HINT_SCROLL_NONE = 0; // 0x0
+ }
+
+ public class BatchingListUpdateCallback implements androidx.recyclerview.widget.ListUpdateCallback {
+ ctor public BatchingListUpdateCallback(androidx.recyclerview.widget.ListUpdateCallback);
+ method public void dispatchLastEvent();
+ method public void onChanged(int, int, Object!);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public final class ConcatAdapter extends androidx.recyclerview.widget.RecyclerView.Adapter<androidx.recyclerview.widget.RecyclerView.ViewHolder> {
+ ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
+ ctor @java.lang.SafeVarargs public ConcatAdapter(androidx.recyclerview.widget.ConcatAdapter.Config, androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!...);
+ ctor public ConcatAdapter(java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
+ ctor public ConcatAdapter(androidx.recyclerview.widget.ConcatAdapter.Config, java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>>);
+ method public boolean addAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
+ method public boolean addAdapter(int, androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
+ method public java.util.List<? extends androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>> getAdapters();
+ method public int getItemCount();
+ method public android.util.Pair<androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>!,java.lang.Integer!> getWrappedAdapterAndPosition(int);
+ method public void onBindViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder, int);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder onCreateViewHolder(android.view.ViewGroup, int);
+ method public boolean onFailedToRecycleView(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onViewAttachedToWindow(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onViewDetachedFromWindow(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onViewRecycled(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public boolean removeAdapter(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>);
+ }
+
+ public static final class ConcatAdapter.Config {
+ field public static final androidx.recyclerview.widget.ConcatAdapter.Config DEFAULT;
+ field public final boolean isolateViewTypes;
+ field public final androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode stableIdMode;
+ }
+
+ public static final class ConcatAdapter.Config.Builder {
+ ctor public ConcatAdapter.Config.Builder();
+ method public androidx.recyclerview.widget.ConcatAdapter.Config build();
+ method public androidx.recyclerview.widget.ConcatAdapter.Config.Builder setIsolateViewTypes(boolean);
+ method public androidx.recyclerview.widget.ConcatAdapter.Config.Builder setStableIdMode(androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode);
+ }
+
+ public enum ConcatAdapter.Config.StableIdMode {
+ enum_constant public static final androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode ISOLATED_STABLE_IDS;
+ enum_constant public static final androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode NO_STABLE_IDS;
+ enum_constant public static final androidx.recyclerview.widget.ConcatAdapter.Config.StableIdMode SHARED_STABLE_IDS;
+ }
+
+ public class DefaultItemAnimator extends androidx.recyclerview.widget.SimpleItemAnimator {
+ ctor public DefaultItemAnimator();
+ method public boolean animateAdd(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder!, androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+ method public boolean animateMove(androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+ method public boolean animateRemove(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void endAnimation(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void endAnimations();
+ method public boolean isRunning();
+ method public void runPendingAnimations();
+ }
+
+ public class DiffUtil {
+ method public static androidx.recyclerview.widget.DiffUtil.DiffResult calculateDiff(androidx.recyclerview.widget.DiffUtil.Callback);
+ method public static androidx.recyclerview.widget.DiffUtil.DiffResult calculateDiff(androidx.recyclerview.widget.DiffUtil.Callback, boolean);
+ }
+
+ public abstract static class DiffUtil.Callback {
+ ctor public DiffUtil.Callback();
+ method public abstract boolean areContentsTheSame(int, int);
+ method public abstract boolean areItemsTheSame(int, int);
+ method public Object? getChangePayload(int, int);
+ method public abstract int getNewListSize();
+ method public abstract int getOldListSize();
+ }
+
+ public static class DiffUtil.DiffResult {
+ method public int convertNewPositionToOld(@IntRange(from=0) int);
+ method public int convertOldPositionToNew(@IntRange(from=0) int);
+ method public void dispatchUpdatesTo(androidx.recyclerview.widget.RecyclerView.Adapter);
+ method public void dispatchUpdatesTo(androidx.recyclerview.widget.ListUpdateCallback);
+ field public static final int NO_POSITION = -1; // 0xffffffff
+ }
+
+ public abstract static class DiffUtil.ItemCallback<T> {
+ ctor public DiffUtil.ItemCallback();
+ method public abstract boolean areContentsTheSame(T, T);
+ method public abstract boolean areItemsTheSame(T, T);
+ method public Object? getChangePayload(T, T);
+ }
+
+ public class DividerItemDecoration extends androidx.recyclerview.widget.RecyclerView.ItemDecoration {
+ ctor public DividerItemDecoration(android.content.Context!, int);
+ method public android.graphics.drawable.Drawable? getDrawable();
+ method public void setDrawable(android.graphics.drawable.Drawable);
+ method public void setOrientation(int);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public class GridLayoutManager extends androidx.recyclerview.widget.LinearLayoutManager {
+ ctor public GridLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+ ctor public GridLayoutManager(android.content.Context!, int);
+ ctor public GridLayoutManager(android.content.Context!, int, @androidx.recyclerview.widget.RecyclerView.Orientation int, boolean);
+ method public int getSpanCount();
+ method public androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup! getSpanSizeLookup();
+ method public boolean isUsingSpansToEstimateScrollbarDimensions();
+ method public void setSpanCount(int);
+ method public void setSpanSizeLookup(androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup!);
+ method public void setUsingSpansToEstimateScrollbarDimensions(boolean);
+ field public static final int DEFAULT_SPAN_COUNT = -1; // 0xffffffff
+ }
+
+ public static final class GridLayoutManager.DefaultSpanSizeLookup extends androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup {
+ ctor public GridLayoutManager.DefaultSpanSizeLookup();
+ method public int getSpanSize(int);
+ }
+
+ public static class GridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
+ ctor public GridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public GridLayoutManager.LayoutParams(int, int);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public GridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public GridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public int getSpanIndex();
+ method public int getSpanSize();
+ field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+ }
+
+ public abstract static class GridLayoutManager.SpanSizeLookup {
+ ctor public GridLayoutManager.SpanSizeLookup();
+ method public int getSpanGroupIndex(int, int);
+ method public int getSpanIndex(int, int);
+ method public abstract int getSpanSize(int);
+ method public void invalidateSpanGroupIndexCache();
+ method public void invalidateSpanIndexCache();
+ method public boolean isSpanGroupIndexCacheEnabled();
+ method public boolean isSpanIndexCacheEnabled();
+ method public void setSpanGroupIndexCacheEnabled(boolean);
+ method public void setSpanIndexCacheEnabled(boolean);
+ }
+
+ public class ItemTouchHelper extends androidx.recyclerview.widget.RecyclerView.ItemDecoration implements androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener {
+ ctor public ItemTouchHelper(androidx.recyclerview.widget.ItemTouchHelper.Callback);
+ method public void attachToRecyclerView(androidx.recyclerview.widget.RecyclerView?);
+ method public void onChildViewAttachedToWindow(android.view.View);
+ method public void onChildViewDetachedFromWindow(android.view.View);
+ method public void startDrag(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void startSwipe(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ field public static final int ACTION_STATE_DRAG = 2; // 0x2
+ field public static final int ACTION_STATE_IDLE = 0; // 0x0
+ field public static final int ACTION_STATE_SWIPE = 1; // 0x1
+ field public static final int ANIMATION_TYPE_DRAG = 8; // 0x8
+ field public static final int ANIMATION_TYPE_SWIPE_CANCEL = 4; // 0x4
+ field public static final int ANIMATION_TYPE_SWIPE_SUCCESS = 2; // 0x2
+ field public static final int DOWN = 2; // 0x2
+ field public static final int END = 32; // 0x20
+ field public static final int LEFT = 4; // 0x4
+ field public static final int RIGHT = 8; // 0x8
+ field public static final int START = 16; // 0x10
+ field public static final int UP = 1; // 0x1
+ }
+
+ public abstract static class ItemTouchHelper.Callback {
+ ctor public ItemTouchHelper.Callback();
+ method public boolean canDropOver(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder! chooseDropTarget(androidx.recyclerview.widget.RecyclerView.ViewHolder, java.util.List<androidx.recyclerview.widget.RecyclerView.ViewHolder!>, int, int);
+ method public void clearView(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public int convertToAbsoluteDirection(int, int);
+ method public static int convertToRelativeDirection(int, int);
+ method public long getAnimationDuration(androidx.recyclerview.widget.RecyclerView, int, float, float);
+ method public int getBoundingBoxMargin();
+ method public static androidx.recyclerview.widget.ItemTouchUIUtil getDefaultUIUtil();
+ method public float getMoveThreshold(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public abstract int getMovementFlags(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public float getSwipeEscapeVelocity(float);
+ method public float getSwipeThreshold(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public float getSwipeVelocityThreshold(float);
+ method public int interpolateOutOfBoundsScroll(androidx.recyclerview.widget.RecyclerView, int, int, int, long);
+ method public boolean isItemViewSwipeEnabled();
+ method public boolean isLongPressDragEnabled();
+ method public static int makeFlag(int, int);
+ method public static int makeMovementFlags(int, int);
+ method public void onChildDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, float, float, int, boolean);
+ method public void onChildDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder!, float, float, int, boolean);
+ method public abstract boolean onMove(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onMoved(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder, int, androidx.recyclerview.widget.RecyclerView.ViewHolder, int, int, int);
+ method public void onSelectedChanged(androidx.recyclerview.widget.RecyclerView.ViewHolder?, int);
+ method public abstract void onSwiped(androidx.recyclerview.widget.RecyclerView.ViewHolder, int);
+ field public static final int DEFAULT_DRAG_ANIMATION_DURATION = 200; // 0xc8
+ field public static final int DEFAULT_SWIPE_ANIMATION_DURATION = 250; // 0xfa
+ }
+
+ public abstract static class ItemTouchHelper.SimpleCallback extends androidx.recyclerview.widget.ItemTouchHelper.Callback {
+ ctor public ItemTouchHelper.SimpleCallback(int, int);
+ method public int getDragDirs(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public int getMovementFlags(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public int getSwipeDirs(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void setDefaultDragDirs(int);
+ method public void setDefaultSwipeDirs(int);
+ }
+
+ public static interface ItemTouchHelper.ViewDropHandler {
+ method public void prepareForDrop(android.view.View, android.view.View, int, int);
+ }
+
+ public interface ItemTouchUIUtil {
+ method public void clearView(android.view.View!);
+ method public void onDraw(android.graphics.Canvas!, androidx.recyclerview.widget.RecyclerView!, android.view.View!, float, float, int, boolean);
+ method public void onDrawOver(android.graphics.Canvas!, androidx.recyclerview.widget.RecyclerView!, android.view.View!, float, float, int, boolean);
+ method public void onSelected(android.view.View!);
+ }
+
+ public class LinearLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.widget.ItemTouchHelper.ViewDropHandler androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+ ctor public LinearLayoutManager(android.content.Context!);
+ ctor public LinearLayoutManager(android.content.Context!, @androidx.recyclerview.widget.RecyclerView.Orientation int, boolean);
+ ctor public LinearLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+ method protected void calculateExtraLayoutSpace(androidx.recyclerview.widget.RecyclerView.State, int[]);
+ method public android.graphics.PointF! computeScrollVectorForPosition(int);
+ method public int findFirstCompletelyVisibleItemPosition();
+ method public int findFirstVisibleItemPosition();
+ method public int findLastCompletelyVisibleItemPosition();
+ method public int findLastVisibleItemPosition();
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
+ method @Deprecated protected int getExtraLayoutSpace(androidx.recyclerview.widget.RecyclerView.State!);
+ method public int getInitialPrefetchItemCount();
+ method @androidx.recyclerview.widget.RecyclerView.Orientation public int getOrientation();
+ method public boolean getRecycleChildrenOnDetach();
+ method public boolean getReverseLayout();
+ method public boolean getStackFromEnd();
+ method protected boolean isLayoutRTL();
+ method public boolean isSmoothScrollbarEnabled();
+ method public void prepareForDrop(android.view.View, android.view.View, int, int);
+ method public void scrollToPositionWithOffset(int, int);
+ method public void setInitialPrefetchItemCount(int);
+ method public void setOrientation(@androidx.recyclerview.widget.RecyclerView.Orientation int);
+ method public void setRecycleChildrenOnDetach(boolean);
+ method public void setReverseLayout(boolean);
+ method public void setSmoothScrollbarEnabled(boolean);
+ method public void setStackFromEnd(boolean);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int INVALID_OFFSET = -2147483648; // 0x80000000
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ protected static class LinearLayoutManager.LayoutChunkResult {
+ ctor protected LinearLayoutManager.LayoutChunkResult();
+ field public int mConsumed;
+ field public boolean mFinished;
+ field public boolean mFocusable;
+ field public boolean mIgnoreConsumed;
+ }
+
+ public class LinearSmoothScroller extends androidx.recyclerview.widget.RecyclerView.SmoothScroller {
+ ctor public LinearSmoothScroller(android.content.Context!);
+ method public int calculateDtToFit(int, int, int, int, int);
+ method public int calculateDxToMakeVisible(android.view.View!, int);
+ method public int calculateDyToMakeVisible(android.view.View!, int);
+ method protected float calculateSpeedPerPixel(android.util.DisplayMetrics!);
+ method protected int calculateTimeForDeceleration(int);
+ method protected int calculateTimeForScrolling(int);
+ method protected int getHorizontalSnapPreference();
+ method protected int getVerticalSnapPreference();
+ method protected void onSeekTargetStep(int, int, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
+ method protected void onStart();
+ method protected void onStop();
+ method protected void onTargetFound(android.view.View!, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
+ method protected void updateActionForInterimTarget(androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action!);
+ field public static final int SNAP_TO_ANY = 0; // 0x0
+ field public static final int SNAP_TO_END = 1; // 0x1
+ field public static final int SNAP_TO_START = -1; // 0xffffffff
+ field protected final android.view.animation.DecelerateInterpolator! mDecelerateInterpolator;
+ field protected int mInterimTargetDx;
+ field protected int mInterimTargetDy;
+ field protected final android.view.animation.LinearInterpolator! mLinearInterpolator;
+ field protected android.graphics.PointF! mTargetVector;
+ }
+
+ public class LinearSnapHelper extends androidx.recyclerview.widget.SnapHelper {
+ ctor public LinearSnapHelper();
+ method public int[]! calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+ method public android.view.View! findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
+ }
+
+ public abstract class ListAdapter<T, VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> extends androidx.recyclerview.widget.RecyclerView.Adapter<VH> {
+ ctor protected ListAdapter(androidx.recyclerview.widget.DiffUtil.ItemCallback<T!>);
+ ctor protected ListAdapter(androidx.recyclerview.widget.AsyncDifferConfig<T!>);
+ method public java.util.List<T!> getCurrentList();
+ method protected T! getItem(int);
+ method public int getItemCount();
+ method public void onCurrentListChanged(java.util.List<T!>, java.util.List<T!>);
+ method public void submitList(java.util.List<T!>?);
+ method public void submitList(java.util.List<T!>?, Runnable?);
+ }
+
+ public interface ListUpdateCallback {
+ method public void onChanged(int, int, Object?);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public abstract class OrientationHelper {
+ method public static androidx.recyclerview.widget.OrientationHelper! createHorizontalHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public static androidx.recyclerview.widget.OrientationHelper! createOrientationHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!, @androidx.recyclerview.widget.RecyclerView.Orientation int);
+ method public static androidx.recyclerview.widget.OrientationHelper! createVerticalHelper(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public abstract int getDecoratedEnd(android.view.View!);
+ method public abstract int getDecoratedMeasurement(android.view.View!);
+ method public abstract int getDecoratedMeasurementInOther(android.view.View!);
+ method public abstract int getDecoratedStart(android.view.View!);
+ method public abstract int getEnd();
+ method public abstract int getEndAfterPadding();
+ method public abstract int getEndPadding();
+ method public androidx.recyclerview.widget.RecyclerView.LayoutManager! getLayoutManager();
+ method public abstract int getMode();
+ method public abstract int getModeInOther();
+ method public abstract int getStartAfterPadding();
+ method public abstract int getTotalSpace();
+ method public int getTotalSpaceChange();
+ method public abstract int getTransformedEndWithDecoration(android.view.View!);
+ method public abstract int getTransformedStartWithDecoration(android.view.View!);
+ method public abstract void offsetChild(android.view.View!, int);
+ method public abstract void offsetChildren(int);
+ method public void onLayoutComplete();
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ field protected final androidx.recyclerview.widget.RecyclerView.LayoutManager! mLayoutManager;
+ }
+
+ public class PagerSnapHelper extends androidx.recyclerview.widget.SnapHelper {
+ ctor public PagerSnapHelper();
+ method public int[]? calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+ method public android.view.View? findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
+ }
+
+ public class RecyclerView extends android.view.ViewGroup implements androidx.core.view.NestedScrollingChild2 androidx.core.view.NestedScrollingChild3 androidx.core.view.ScrollingView {
+ ctor public RecyclerView(android.content.Context);
+ ctor public RecyclerView(android.content.Context, android.util.AttributeSet?);
+ ctor public RecyclerView(android.content.Context, android.util.AttributeSet?, int);
+ method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration, int);
+ method public void addItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration);
+ method public void addOnChildAttachStateChangeListener(androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener);
+ method public void addOnItemTouchListener(androidx.recyclerview.widget.RecyclerView.OnItemTouchListener);
+ method public void addOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener);
+ method public void addRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener);
+ method public void clearOnChildAttachStateChangeListeners();
+ method public void clearOnScrollListeners();
+ method public int computeHorizontalScrollExtent();
+ method public int computeHorizontalScrollOffset();
+ method public int computeHorizontalScrollRange();
+ method public int computeVerticalScrollExtent();
+ method public int computeVerticalScrollOffset();
+ method public int computeVerticalScrollRange();
+ method public boolean dispatchNestedPreScroll(int, int, int[]!, int[]!, int);
+ method public boolean dispatchNestedScroll(int, int, int, int, int[]!, int);
+ method public final void dispatchNestedScroll(int, int, int, int, int[]!, int, int[]);
+ method public boolean drawChild(android.graphics.Canvas!, android.view.View!, long);
+ method public android.view.View? findChildViewUnder(float, float);
+ method public android.view.View? findContainingItemView(android.view.View);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findContainingViewHolder(android.view.View);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForAdapterPosition(int);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder! findViewHolderForItemId(long);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForLayoutPosition(int);
+ method @Deprecated public androidx.recyclerview.widget.RecyclerView.ViewHolder? findViewHolderForPosition(int);
+ method public boolean fling(int, int);
+ method public androidx.recyclerview.widget.RecyclerView.Adapter? getAdapter();
+ method public int getChildAdapterPosition(android.view.View);
+ method public long getChildItemId(android.view.View);
+ method public int getChildLayoutPosition(android.view.View);
+ method @Deprecated public int getChildPosition(android.view.View);
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder! getChildViewHolder(android.view.View);
+ method public androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate? getCompatAccessibilityDelegate();
+ method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+ method public androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory getEdgeEffectFactory();
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator? getItemAnimator();
+ method public androidx.recyclerview.widget.RecyclerView.ItemDecoration getItemDecorationAt(int);
+ method public int getItemDecorationCount();
+ method public androidx.recyclerview.widget.RecyclerView.LayoutManager? getLayoutManager();
+ method public int getMaxFlingVelocity();
+ method public int getMinFlingVelocity();
+ method public androidx.recyclerview.widget.RecyclerView.OnFlingListener? getOnFlingListener();
+ method public boolean getPreserveFocusAfterLayout();
+ method public androidx.recyclerview.widget.RecyclerView.RecycledViewPool getRecycledViewPool();
+ method public int getScrollState();
+ method public boolean hasFixedSize();
+ method public boolean hasNestedScrollingParent(int);
+ method public boolean hasPendingAdapterUpdates();
+ method public void invalidateItemDecorations();
+ method public boolean isAnimating();
+ method public boolean isComputingLayout();
+ method @Deprecated public boolean isLayoutFrozen();
+ method public final boolean isLayoutSuppressed();
+ method public void nestedScrollBy(int, int);
+ method public void offsetChildrenHorizontal(@Px int);
+ method public void offsetChildrenVertical(@Px int);
+ method public void onChildAttachedToWindow(android.view.View);
+ method public void onChildDetachedFromWindow(android.view.View);
+ method public void onDraw(android.graphics.Canvas!);
+ method public void onScrollStateChanged(int);
+ method public void onScrolled(@Px int, @Px int);
+ method public void removeItemDecoration(androidx.recyclerview.widget.RecyclerView.ItemDecoration);
+ method public void removeItemDecorationAt(int);
+ method public void removeOnChildAttachStateChangeListener(androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListener);
+ method public void removeOnItemTouchListener(androidx.recyclerview.widget.RecyclerView.OnItemTouchListener);
+ method public void removeOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener);
+ method public void removeRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener);
+ method public void scrollToPosition(int);
+ method public void setAccessibilityDelegateCompat(androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate?);
+ method public void setAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?);
+ method public void setChildDrawingOrderCallback(androidx.recyclerview.widget.RecyclerView.ChildDrawingOrderCallback?);
+ method public void setEdgeEffectFactory(androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory);
+ method public void setHasFixedSize(boolean);
+ method public void setItemAnimator(androidx.recyclerview.widget.RecyclerView.ItemAnimator?);
+ method public void setItemViewCacheSize(int);
+ method @Deprecated public void setLayoutFrozen(boolean);
+ method public void setLayoutManager(androidx.recyclerview.widget.RecyclerView.LayoutManager?);
+ method @Deprecated public void setLayoutTransition(android.animation.LayoutTransition!);
+ method public void setOnFlingListener(androidx.recyclerview.widget.RecyclerView.OnFlingListener?);
+ method @Deprecated public void setOnScrollListener(androidx.recyclerview.widget.RecyclerView.OnScrollListener?);
+ method public void setPreserveFocusAfterLayout(boolean);
+ method public void setRecycledViewPool(androidx.recyclerview.widget.RecyclerView.RecycledViewPool?);
+ method @Deprecated public void setRecyclerListener(androidx.recyclerview.widget.RecyclerView.RecyclerListener?);
+ method public void setScrollingTouchSlop(int);
+ method public void setViewCacheExtension(androidx.recyclerview.widget.RecyclerView.ViewCacheExtension?);
+ method public void smoothScrollBy(@Px int, @Px int);
+ method public void smoothScrollBy(@Px int, @Px int, android.view.animation.Interpolator?);
+ method public void smoothScrollBy(@Px int, @Px int, android.view.animation.Interpolator?, int);
+ method public void smoothScrollToPosition(int);
+ method public boolean startNestedScroll(int, int);
+ method public void stopNestedScroll(int);
+ method public void stopScroll();
+ method public final void suppressLayout(boolean);
+ method public void swapAdapter(androidx.recyclerview.widget.RecyclerView.Adapter?, boolean);
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int INVALID_TYPE = -1; // 0xffffffff
+ field public static final long NO_ID = -1L; // 0xffffffffffffffffL
+ field public static final int NO_POSITION = -1; // 0xffffffff
+ field public static final int SCROLL_STATE_DRAGGING = 1; // 0x1
+ field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+ field public static final int SCROLL_STATE_SETTLING = 2; // 0x2
+ field public static final int TOUCH_SLOP_DEFAULT = 0; // 0x0
+ field public static final int TOUCH_SLOP_PAGING = 1; // 0x1
+ field public static final int UNDEFINED_DURATION = -2147483648; // 0x80000000
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public abstract static class RecyclerView.Adapter<VH extends androidx.recyclerview.widget.RecyclerView.ViewHolder> {
+ ctor public RecyclerView.Adapter();
+ method public final void bindViewHolder(VH, int);
+ method public final VH createViewHolder(android.view.ViewGroup, int);
+ method public int findRelativeAdapterPositionIn(androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>, androidx.recyclerview.widget.RecyclerView.ViewHolder, int);
+ method public abstract int getItemCount();
+ method public long getItemId(int);
+ method public int getItemViewType(int);
+ method public final androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy getStateRestorationPolicy();
+ method public final boolean hasObservers();
+ method public final boolean hasStableIds();
+ method public final void notifyDataSetChanged();
+ method public final void notifyItemChanged(int);
+ method public final void notifyItemChanged(int, Object?);
+ method public final void notifyItemInserted(int);
+ method public final void notifyItemMoved(int, int);
+ method public final void notifyItemRangeChanged(int, int);
+ method public final void notifyItemRangeChanged(int, int, Object?);
+ method public final void notifyItemRangeInserted(int, int);
+ method public final void notifyItemRangeRemoved(int, int);
+ method public final void notifyItemRemoved(int);
+ method public void onAttachedToRecyclerView(androidx.recyclerview.widget.RecyclerView);
+ method public abstract void onBindViewHolder(VH, int);
+ method public void onBindViewHolder(VH, int, java.util.List<java.lang.Object!>);
+ method public abstract VH onCreateViewHolder(android.view.ViewGroup, int);
+ method public void onDetachedFromRecyclerView(androidx.recyclerview.widget.RecyclerView);
+ method public boolean onFailedToRecycleView(VH);
+ method public void onViewAttachedToWindow(VH);
+ method public void onViewDetachedFromWindow(VH);
+ method public void onViewRecycled(VH);
+ method public void registerAdapterDataObserver(androidx.recyclerview.widget.RecyclerView.AdapterDataObserver);
+ method public void setHasStableIds(boolean);
+ method public void setStateRestorationPolicy(androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy);
+ method public void unregisterAdapterDataObserver(androidx.recyclerview.widget.RecyclerView.AdapterDataObserver);
+ }
+
+ public enum RecyclerView.Adapter.StateRestorationPolicy {
+ enum_constant public static final androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy ALLOW;
+ enum_constant public static final androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy PREVENT;
+ enum_constant public static final androidx.recyclerview.widget.RecyclerView.Adapter.StateRestorationPolicy PREVENT_WHEN_EMPTY;
+ }
+
+ public abstract static class RecyclerView.AdapterDataObserver {
+ ctor public RecyclerView.AdapterDataObserver();
+ method public void onChanged();
+ method public void onItemRangeChanged(int, int);
+ method public void onItemRangeChanged(int, int, Object?);
+ method public void onItemRangeInserted(int, int);
+ method public void onItemRangeMoved(int, int, int);
+ method public void onItemRangeRemoved(int, int);
+ method public void onStateRestorationPolicyChanged();
+ }
+
+ public static interface RecyclerView.ChildDrawingOrderCallback {
+ method public int onGetChildDrawingOrder(int, int);
+ }
+
+ public static class RecyclerView.EdgeEffectFactory {
+ ctor public RecyclerView.EdgeEffectFactory();
+ method protected android.widget.EdgeEffect createEdgeEffect(androidx.recyclerview.widget.RecyclerView, @androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.EdgeDirection int);
+ field public static final int DIRECTION_BOTTOM = 3; // 0x3
+ field public static final int DIRECTION_LEFT = 0; // 0x0
+ field public static final int DIRECTION_RIGHT = 2; // 0x2
+ field public static final int DIRECTION_TOP = 1; // 0x1
+ }
+
+ @IntDef({androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_LEFT, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_TOP, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_RIGHT, androidx.recyclerview.widget.RecyclerView.EdgeEffectFactory.DIRECTION_BOTTOM}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RecyclerView.EdgeEffectFactory.EdgeDirection {
+ }
+
+ public abstract static class RecyclerView.ItemAnimator {
+ ctor public RecyclerView.ItemAnimator();
+ method public abstract boolean animateAppearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateDisappearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?);
+ method public abstract boolean animatePersistence(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public boolean canReuseUpdatedViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public boolean canReuseUpdatedViewHolder(androidx.recyclerview.widget.RecyclerView.ViewHolder, java.util.List<java.lang.Object!>);
+ method public final void dispatchAnimationFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAnimationStarted(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public final void dispatchAnimationsFinished();
+ method public abstract void endAnimation(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public abstract void endAnimations();
+ method public long getAddDuration();
+ method public long getChangeDuration();
+ method public long getMoveDuration();
+ method public long getRemoveDuration();
+ method public abstract boolean isRunning();
+ method public final boolean isRunning(androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemAnimatorFinishedListener?);
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo obtainHolderInfo();
+ method public void onAnimationFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public void onAnimationStarted(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPostLayoutInformation(androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo recordPreLayoutInformation(androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.ViewHolder, @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges int, java.util.List<java.lang.Object!>);
+ method public abstract void runPendingAnimations();
+ method public void setAddDuration(long);
+ method public void setChangeDuration(long);
+ method public void setMoveDuration(long);
+ method public void setRemoveDuration(long);
+ field public static final int FLAG_APPEARED_IN_PRE_LAYOUT = 4096; // 0x1000
+ field public static final int FLAG_CHANGED = 2; // 0x2
+ field public static final int FLAG_INVALIDATED = 4; // 0x4
+ field public static final int FLAG_MOVED = 2048; // 0x800
+ field public static final int FLAG_REMOVED = 8; // 0x8
+ }
+
+ @IntDef(flag=true, value={androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_CHANGED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_REMOVED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_MOVED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_INVALIDATED, androidx.recyclerview.widget.RecyclerView.ItemAnimator.FLAG_APPEARED_IN_PRE_LAYOUT}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RecyclerView.ItemAnimator.AdapterChanges {
+ }
+
+ public static interface RecyclerView.ItemAnimator.ItemAnimatorFinishedListener {
+ method public void onAnimationsFinished();
+ }
+
+ public static class RecyclerView.ItemAnimator.ItemHolderInfo {
+ ctor public RecyclerView.ItemAnimator.ItemHolderInfo();
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ method public androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo setFrom(androidx.recyclerview.widget.RecyclerView.ViewHolder, @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges int);
+ field public int bottom;
+ field @androidx.recyclerview.widget.RecyclerView.ItemAnimator.AdapterChanges public int changeFlags;
+ field public int left;
+ field public int right;
+ field public int top;
+ }
+
+ public abstract static class RecyclerView.ItemDecoration {
+ ctor public RecyclerView.ItemDecoration();
+ method @Deprecated public void getItemOffsets(android.graphics.Rect, int, androidx.recyclerview.widget.RecyclerView);
+ method public void getItemOffsets(android.graphics.Rect, android.view.View, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method @Deprecated public void onDraw(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
+ method public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State);
+ method @Deprecated public void onDrawOver(android.graphics.Canvas, androidx.recyclerview.widget.RecyclerView);
+ }
+
+ public abstract static class RecyclerView.LayoutManager {
+ ctor public RecyclerView.LayoutManager();
+ method public void addDisappearingView(android.view.View!);
+ method public void addDisappearingView(android.view.View!, int);
+ method public void addView(android.view.View!);
+ method public void addView(android.view.View!, int);
+ method public void assertInLayoutOrScroll(String!);
+ method public void assertNotInLayoutOrScroll(String!);
+ method public void attachView(android.view.View, int, androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public void attachView(android.view.View, int);
+ method public void attachView(android.view.View);
+ method public void calculateItemDecorationsForChild(android.view.View, android.graphics.Rect);
+ method public boolean canScrollHorizontally();
+ method public boolean canScrollVertically();
+ method public boolean checkLayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public static int chooseSize(int, int, int);
+ method public void collectAdjacentPrefetchPositions(int, int, androidx.recyclerview.widget.RecyclerView.State!, androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry!);
+ method public void collectInitialPrefetchPositions(int, androidx.recyclerview.widget.RecyclerView.LayoutManager.LayoutPrefetchRegistry!);
+ method public int computeHorizontalScrollExtent(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeHorizontalScrollOffset(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeHorizontalScrollRange(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeVerticalScrollExtent(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeVerticalScrollOffset(androidx.recyclerview.widget.RecyclerView.State);
+ method public int computeVerticalScrollRange(androidx.recyclerview.widget.RecyclerView.State);
+ method public void detachAndScrapAttachedViews(androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void detachAndScrapView(android.view.View, androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void detachAndScrapViewAt(int, androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void detachView(android.view.View);
+ method public void detachViewAt(int);
+ method public void endAnimation(android.view.View!);
+ method public android.view.View? findContainingItemView(android.view.View);
+ method public android.view.View? findViewByPosition(int);
+ method public abstract androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.view.ViewGroup.LayoutParams!);
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateLayoutParams(android.content.Context!, android.util.AttributeSet!);
+ method public int getBaseline();
+ method public int getBottomDecorationHeight(android.view.View);
+ method public android.view.View? getChildAt(int);
+ method public int getChildCount();
+ method @Deprecated public static int getChildMeasureSpec(int, int, int, boolean);
+ method public static int getChildMeasureSpec(int, int, int, int, boolean);
+ method public boolean getClipToPadding();
+ method public int getColumnCountForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public int getDecoratedBottom(android.view.View);
+ method public void getDecoratedBoundsWithMargins(android.view.View, android.graphics.Rect);
+ method public int getDecoratedLeft(android.view.View);
+ method public int getDecoratedMeasuredHeight(android.view.View);
+ method public int getDecoratedMeasuredWidth(android.view.View);
+ method public int getDecoratedRight(android.view.View);
+ method public int getDecoratedTop(android.view.View);
+ method public android.view.View? getFocusedChild();
+ method @Px public int getHeight();
+ method public int getHeightMode();
+ method public int getItemCount();
+ method public int getItemViewType(android.view.View);
+ method public int getLayoutDirection();
+ method public int getLeftDecorationWidth(android.view.View);
+ method @Px public int getMinimumHeight();
+ method @Px public int getMinimumWidth();
+ method @Px public int getPaddingBottom();
+ method @Px public int getPaddingEnd();
+ method @Px public int getPaddingLeft();
+ method @Px public int getPaddingRight();
+ method @Px public int getPaddingStart();
+ method @Px public int getPaddingTop();
+ method public int getPosition(android.view.View);
+ method public static androidx.recyclerview.widget.RecyclerView.LayoutManager.Properties! getProperties(android.content.Context, android.util.AttributeSet?, int, int);
+ method public int getRightDecorationWidth(android.view.View);
+ method public int getRowCountForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public int getSelectionModeForAccessibility(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public int getTopDecorationHeight(android.view.View);
+ method public void getTransformedBoundingBox(android.view.View, boolean, android.graphics.Rect);
+ method @Px public int getWidth();
+ method public int getWidthMode();
+ method public boolean hasFocus();
+ method public void ignoreView(android.view.View);
+ method public boolean isAttachedToWindow();
+ method public boolean isAutoMeasureEnabled();
+ method public boolean isFocused();
+ method public final boolean isItemPrefetchEnabled();
+ method public boolean isLayoutHierarchical(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public boolean isMeasurementCacheEnabled();
+ method public boolean isSmoothScrolling();
+ method public boolean isViewPartiallyVisible(android.view.View, boolean, boolean);
+ method public void layoutDecorated(android.view.View, int, int, int, int);
+ method public void layoutDecoratedWithMargins(android.view.View, int, int, int, int);
+ method public void measureChild(android.view.View, int, int);
+ method public void measureChildWithMargins(android.view.View, int, int);
+ method public void moveView(int, int);
+ method public void offsetChildrenHorizontal(@Px int);
+ method public void offsetChildrenVertical(@Px int);
+ method public void onAdapterChanged(androidx.recyclerview.widget.RecyclerView.Adapter?, androidx.recyclerview.widget.RecyclerView.Adapter?);
+ method public boolean onAddFocusables(androidx.recyclerview.widget.RecyclerView, java.util.ArrayList<android.view.View!>, int, int);
+ method @CallSuper public void onAttachedToWindow(androidx.recyclerview.widget.RecyclerView!);
+ method @Deprecated public void onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView!);
+ method @CallSuper public void onDetachedFromWindow(androidx.recyclerview.widget.RecyclerView!, androidx.recyclerview.widget.RecyclerView.Recycler!);
+ method public android.view.View? onFocusSearchFailed(android.view.View, int, androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State);
+ method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityEvent(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.accessibility.AccessibilityEvent);
+ method public void onInitializeAccessibilityNodeInfo(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+ method public void onInitializeAccessibilityNodeInfoForItem(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.View, androidx.core.view.accessibility.AccessibilityNodeInfoCompat);
+ method public android.view.View? onInterceptFocusSearch(android.view.View, int);
+ method public void onItemsAdded(androidx.recyclerview.widget.RecyclerView, int, int);
+ method public void onItemsChanged(androidx.recyclerview.widget.RecyclerView);
+ method public void onItemsMoved(androidx.recyclerview.widget.RecyclerView, int, int, int);
+ method public void onItemsRemoved(androidx.recyclerview.widget.RecyclerView, int, int);
+ method public void onItemsUpdated(androidx.recyclerview.widget.RecyclerView, int, int);
+ method public void onItemsUpdated(androidx.recyclerview.widget.RecyclerView, int, int, Object?);
+ method public void onLayoutChildren(androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+ method public void onLayoutCompleted(androidx.recyclerview.widget.RecyclerView.State!);
+ method public void onMeasure(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, int, int);
+ method @Deprecated public boolean onRequestChildFocus(androidx.recyclerview.widget.RecyclerView, android.view.View, android.view.View?);
+ method public boolean onRequestChildFocus(androidx.recyclerview.widget.RecyclerView, androidx.recyclerview.widget.RecyclerView.State, android.view.View, android.view.View?);
+ method public void onRestoreInstanceState(android.os.Parcelable!);
+ method public android.os.Parcelable? onSaveInstanceState();
+ method public void onScrollStateChanged(int);
+ method public boolean performAccessibilityAction(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, int, android.os.Bundle?);
+ method public boolean performAccessibilityActionForItem(androidx.recyclerview.widget.RecyclerView.Recycler, androidx.recyclerview.widget.RecyclerView.State, android.view.View, int, android.os.Bundle?);
+ method public void postOnAnimation(Runnable!);
+ method public void removeAllViews();
+ method public void removeAndRecycleAllViews(androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void removeAndRecycleView(android.view.View, androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public void removeAndRecycleViewAt(int, androidx.recyclerview.widget.RecyclerView.Recycler);
+ method public boolean removeCallbacks(Runnable!);
+ method public void removeDetachedView(android.view.View);
+ method public void removeView(android.view.View!);
+ method public void removeViewAt(int);
+ method public boolean requestChildRectangleOnScreen(androidx.recyclerview.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean);
+ method public boolean requestChildRectangleOnScreen(androidx.recyclerview.widget.RecyclerView, android.view.View, android.graphics.Rect, boolean, boolean);
+ method public void requestLayout();
+ method public void requestSimpleAnimationsInNextLayout();
+ method public int scrollHorizontallyBy(int, androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+ method public void scrollToPosition(int);
+ method public int scrollVerticallyBy(int, androidx.recyclerview.widget.RecyclerView.Recycler!, androidx.recyclerview.widget.RecyclerView.State!);
+ method @Deprecated public void setAutoMeasureEnabled(boolean);
+ method public final void setItemPrefetchEnabled(boolean);
+ method public void setMeasuredDimension(android.graphics.Rect!, int, int);
+ method public void setMeasuredDimension(int, int);
+ method public void setMeasurementCacheEnabled(boolean);
+ method public void smoothScrollToPosition(androidx.recyclerview.widget.RecyclerView!, androidx.recyclerview.widget.RecyclerView.State!, int);
+ method public void startSmoothScroll(androidx.recyclerview.widget.RecyclerView.SmoothScroller!);
+ method public void stopIgnoringView(android.view.View);
+ method public boolean supportsPredictiveItemAnimations();
+ }
+
+ public static interface RecyclerView.LayoutManager.LayoutPrefetchRegistry {
+ method public void addPosition(int, int);
+ }
+
+ public static class RecyclerView.LayoutManager.Properties {
+ ctor public RecyclerView.LayoutManager.Properties();
+ field public int orientation;
+ field public boolean reverseLayout;
+ field public int spanCount;
+ field public boolean stackFromEnd;
+ }
+
+ public static class RecyclerView.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+ ctor public RecyclerView.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public RecyclerView.LayoutParams(int, int);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public RecyclerView.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public RecyclerView.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public int getAbsoluteAdapterPosition();
+ method public int getBindingAdapterPosition();
+ method @Deprecated public int getViewAdapterPosition();
+ method public int getViewLayoutPosition();
+ method @Deprecated public int getViewPosition();
+ method public boolean isItemChanged();
+ method public boolean isItemRemoved();
+ method public boolean isViewInvalid();
+ method public boolean viewNeedsUpdate();
+ }
+
+ public static interface RecyclerView.OnChildAttachStateChangeListener {
+ method public void onChildViewAttachedToWindow(android.view.View);
+ method public void onChildViewDetachedFromWindow(android.view.View);
+ }
+
+ public abstract static class RecyclerView.OnFlingListener {
+ ctor public RecyclerView.OnFlingListener();
+ method public abstract boolean onFling(int, int);
+ }
+
+ public static interface RecyclerView.OnItemTouchListener {
+ method public boolean onInterceptTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+ method public void onRequestDisallowInterceptTouchEvent(boolean);
+ method public void onTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+ }
+
+ public abstract static class RecyclerView.OnScrollListener {
+ ctor public RecyclerView.OnScrollListener();
+ method public void onScrollStateChanged(androidx.recyclerview.widget.RecyclerView, int);
+ method public void onScrolled(androidx.recyclerview.widget.RecyclerView, int, int);
+ }
+
+ @IntDef({androidx.recyclerview.widget.RecyclerView.HORIZONTAL, androidx.recyclerview.widget.RecyclerView.VERTICAL}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RecyclerView.Orientation {
+ }
+
+ public static class RecyclerView.RecycledViewPool {
+ ctor public RecyclerView.RecycledViewPool();
+ method public void clear();
+ method public androidx.recyclerview.widget.RecyclerView.ViewHolder? getRecycledView(int);
+ method public int getRecycledViewCount(int);
+ method public void putRecycledView(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void setMaxRecycledViews(int, int);
+ }
+
+ public final class RecyclerView.Recycler {
+ ctor public RecyclerView.Recycler();
+ method public void bindViewToPosition(android.view.View, int);
+ method public void clear();
+ method public int convertPreLayoutPositionToPostLayout(int);
+ method public java.util.List<androidx.recyclerview.widget.RecyclerView.ViewHolder!> getScrapList();
+ method public android.view.View getViewForPosition(int);
+ method public void recycleView(android.view.View);
+ method public void setViewCacheSize(int);
+ }
+
+ public static interface RecyclerView.RecyclerListener {
+ method public void onViewRecycled(androidx.recyclerview.widget.RecyclerView.ViewHolder);
+ }
+
+ public static class RecyclerView.SimpleOnItemTouchListener implements androidx.recyclerview.widget.RecyclerView.OnItemTouchListener {
+ ctor public RecyclerView.SimpleOnItemTouchListener();
+ method public boolean onInterceptTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+ method public void onRequestDisallowInterceptTouchEvent(boolean);
+ method public void onTouchEvent(androidx.recyclerview.widget.RecyclerView, android.view.MotionEvent);
+ }
+
+ public abstract static class RecyclerView.SmoothScroller {
+ ctor public RecyclerView.SmoothScroller();
+ method public android.graphics.PointF? computeScrollVectorForPosition(int);
+ method public android.view.View! findViewByPosition(int);
+ method public int getChildCount();
+ method public int getChildPosition(android.view.View!);
+ method public androidx.recyclerview.widget.RecyclerView.LayoutManager? getLayoutManager();
+ method public int getTargetPosition();
+ method @Deprecated public void instantScrollToPosition(int);
+ method public boolean isPendingInitialRun();
+ method public boolean isRunning();
+ method protected void normalize(android.graphics.PointF);
+ method protected void onChildAttachedToWindow(android.view.View!);
+ method protected abstract void onSeekTargetStep(@Px int, @Px int, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action);
+ method protected abstract void onStart();
+ method protected abstract void onStop();
+ method protected abstract void onTargetFound(android.view.View, androidx.recyclerview.widget.RecyclerView.State, androidx.recyclerview.widget.RecyclerView.SmoothScroller.Action);
+ method public void setTargetPosition(int);
+ method protected final void stop();
+ }
+
+ public static class RecyclerView.SmoothScroller.Action {
+ ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int);
+ ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int, int);
+ ctor public RecyclerView.SmoothScroller.Action(@Px int, @Px int, int, android.view.animation.Interpolator?);
+ method public int getDuration();
+ method @Px public int getDx();
+ method @Px public int getDy();
+ method public android.view.animation.Interpolator? getInterpolator();
+ method public void jumpTo(int);
+ method public void setDuration(int);
+ method public void setDx(@Px int);
+ method public void setDy(@Px int);
+ method public void setInterpolator(android.view.animation.Interpolator?);
+ method public void update(@Px int, @Px int, int, android.view.animation.Interpolator?);
+ field public static final int UNDEFINED_DURATION = -2147483648; // 0x80000000
+ }
+
+ public static interface RecyclerView.SmoothScroller.ScrollVectorProvider {
+ method public android.graphics.PointF? computeScrollVectorForPosition(int);
+ }
+
+ public static class RecyclerView.State {
+ ctor public RecyclerView.State();
+ method public boolean didStructureChange();
+ method public <T> T! get(int);
+ method public int getItemCount();
+ method public int getRemainingScrollHorizontal();
+ method public int getRemainingScrollVertical();
+ method public int getTargetScrollPosition();
+ method public boolean hasTargetScrollPosition();
+ method public boolean isMeasuring();
+ method public boolean isPreLayout();
+ method public void put(int, Object!);
+ method public void remove(int);
+ method public boolean willRunPredictiveAnimations();
+ method public boolean willRunSimpleAnimations();
+ }
+
+ public abstract static class RecyclerView.ViewCacheExtension {
+ ctor public RecyclerView.ViewCacheExtension();
+ method public abstract android.view.View? getViewForPositionAndType(androidx.recyclerview.widget.RecyclerView.Recycler, int, int);
+ }
+
+ public abstract static class RecyclerView.ViewHolder {
+ ctor public RecyclerView.ViewHolder(android.view.View);
+ method public final int getAbsoluteAdapterPosition();
+ method @Deprecated public final int getAdapterPosition();
+ method public final androidx.recyclerview.widget.RecyclerView.Adapter<? extends androidx.recyclerview.widget.RecyclerView.ViewHolder>? getBindingAdapter();
+ method public final int getBindingAdapterPosition();
+ method public final long getItemId();
+ method public final int getItemViewType();
+ method public final int getLayoutPosition();
+ method public final int getOldPosition();
+ method @Deprecated public final int getPosition();
+ method public final boolean isRecyclable();
+ method public final void setIsRecyclable(boolean);
+ field public final android.view.View itemView;
+ }
+
+ public class RecyclerViewAccessibilityDelegate extends androidx.core.view.AccessibilityDelegateCompat {
+ ctor public RecyclerViewAccessibilityDelegate(androidx.recyclerview.widget.RecyclerView);
+ method public androidx.core.view.AccessibilityDelegateCompat getItemDelegate();
+ }
+
+ public static class RecyclerViewAccessibilityDelegate.ItemDelegate extends androidx.core.view.AccessibilityDelegateCompat {
+ ctor public RecyclerViewAccessibilityDelegate.ItemDelegate(androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate);
+ }
+
+ public abstract class SimpleItemAnimator extends androidx.recyclerview.widget.RecyclerView.ItemAnimator {
+ ctor public SimpleItemAnimator();
+ method public abstract boolean animateAdd(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public boolean animateAppearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateChange(androidx.recyclerview.widget.RecyclerView.ViewHolder!, androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+ method public boolean animateDisappearance(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo?);
+ method public abstract boolean animateMove(androidx.recyclerview.widget.RecyclerView.ViewHolder!, int, int, int, int);
+ method public boolean animatePersistence(androidx.recyclerview.widget.RecyclerView.ViewHolder, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo, androidx.recyclerview.widget.RecyclerView.ItemAnimator.ItemHolderInfo);
+ method public abstract boolean animateRemove(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchAddFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchAddStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchChangeFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+ method public final void dispatchChangeStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+ method public final void dispatchMoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchMoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchRemoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public final void dispatchRemoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public boolean getSupportsChangeAnimations();
+ method public void onAddFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onAddStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onChangeFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+ method public void onChangeStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!, boolean);
+ method public void onMoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onMoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onRemoveFinished(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void onRemoveStarting(androidx.recyclerview.widget.RecyclerView.ViewHolder!);
+ method public void setSupportsChangeAnimations(boolean);
+ }
+
+ public abstract class SnapHelper extends androidx.recyclerview.widget.RecyclerView.OnFlingListener {
+ ctor public SnapHelper();
+ method public void attachToRecyclerView(androidx.recyclerview.widget.RecyclerView?) throws java.lang.IllegalStateException;
+ method public abstract int[]? calculateDistanceToFinalSnap(androidx.recyclerview.widget.RecyclerView.LayoutManager, android.view.View);
+ method public int[]! calculateScrollDistance(int, int);
+ method protected androidx.recyclerview.widget.RecyclerView.SmoothScroller? createScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager);
+ method @Deprecated protected androidx.recyclerview.widget.LinearSmoothScroller? createSnapScroller(androidx.recyclerview.widget.RecyclerView.LayoutManager);
+ method public abstract android.view.View? findSnapView(androidx.recyclerview.widget.RecyclerView.LayoutManager!);
+ method public abstract int findTargetSnapPosition(androidx.recyclerview.widget.RecyclerView.LayoutManager!, int, int);
+ method public boolean onFling(int, int);
+ }
+
+ public class SortedList<T> {
+ ctor public SortedList(Class<T!>, androidx.recyclerview.widget.SortedList.Callback<T!>);
+ ctor public SortedList(Class<T!>, androidx.recyclerview.widget.SortedList.Callback<T!>, int);
+ method public int add(T!);
+ method public void addAll(T![], boolean);
+ method public void addAll(T!...);
+ method public void addAll(java.util.Collection<T!>);
+ method public void beginBatchedUpdates();
+ method public void clear();
+ method public void endBatchedUpdates();
+ method public T! get(int) throws java.lang.IndexOutOfBoundsException;
+ method public int indexOf(T!);
+ method public void recalculatePositionOfItemAt(int);
+ method public boolean remove(T!);
+ method public T! removeItemAt(int);
+ method public void replaceAll(T![], boolean);
+ method public void replaceAll(T!...);
+ method public void replaceAll(java.util.Collection<T!>);
+ method public int size();
+ method public void updateItemAt(int, T!);
+ field public static final int INVALID_POSITION = -1; // 0xffffffff
+ }
+
+ public static class SortedList.BatchedCallback<T2> extends androidx.recyclerview.widget.SortedList.Callback<T2> {
+ ctor public SortedList.BatchedCallback(androidx.recyclerview.widget.SortedList.Callback<T2!>!);
+ method public boolean areContentsTheSame(T2!, T2!);
+ method public boolean areItemsTheSame(T2!, T2!);
+ method public int compare(T2!, T2!);
+ method public void dispatchLastEvent();
+ method public void onChanged(int, int);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public abstract static class SortedList.Callback<T2> implements java.util.Comparator<T2> androidx.recyclerview.widget.ListUpdateCallback {
+ ctor public SortedList.Callback();
+ method public abstract boolean areContentsTheSame(T2!, T2!);
+ method public abstract boolean areItemsTheSame(T2!, T2!);
+ method public abstract int compare(T2!, T2!);
+ method public Object? getChangePayload(T2!, T2!);
+ method public abstract void onChanged(int, int);
+ method public void onChanged(int, int, Object!);
+ }
+
+ public abstract class SortedListAdapterCallback<T2> extends androidx.recyclerview.widget.SortedList.Callback<T2> {
+ ctor public SortedListAdapterCallback(androidx.recyclerview.widget.RecyclerView.Adapter<?>!);
+ method public void onChanged(int, int);
+ method public void onInserted(int, int);
+ method public void onMoved(int, int);
+ method public void onRemoved(int, int);
+ }
+
+ public class StaggeredGridLayoutManager extends androidx.recyclerview.widget.RecyclerView.LayoutManager implements androidx.recyclerview.widget.RecyclerView.SmoothScroller.ScrollVectorProvider {
+ ctor public StaggeredGridLayoutManager(android.content.Context!, android.util.AttributeSet!, int, int);
+ ctor public StaggeredGridLayoutManager(int, int);
+ method public android.graphics.PointF! computeScrollVectorForPosition(int);
+ method public int[]! findFirstCompletelyVisibleItemPositions(int[]!);
+ method public int[]! findFirstVisibleItemPositions(int[]!);
+ method public int[]! findLastCompletelyVisibleItemPositions(int[]!);
+ method public int[]! findLastVisibleItemPositions(int[]!);
+ method public androidx.recyclerview.widget.RecyclerView.LayoutParams! generateDefaultLayoutParams();
+ method public int getGapStrategy();
+ method public int getOrientation();
+ method public boolean getReverseLayout();
+ method public int getSpanCount();
+ method public void invalidateSpanAssignments();
+ method public void scrollToPositionWithOffset(int, int);
+ method public void setGapStrategy(int);
+ method public void setOrientation(int);
+ method public void setReverseLayout(boolean);
+ method public void setSpanCount(int);
+ field @Deprecated public static final int GAP_HANDLING_LAZY = 1; // 0x1
+ field public static final int GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS = 2; // 0x2
+ field public static final int GAP_HANDLING_NONE = 0; // 0x0
+ field public static final int HORIZONTAL = 0; // 0x0
+ field public static final int VERTICAL = 1; // 0x1
+ }
+
+ public static class StaggeredGridLayoutManager.LayoutParams extends androidx.recyclerview.widget.RecyclerView.LayoutParams {
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.content.Context!, android.util.AttributeSet!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(int, int);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.MarginLayoutParams!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(android.view.ViewGroup.LayoutParams!);
+ ctor public StaggeredGridLayoutManager.LayoutParams(androidx.recyclerview.widget.RecyclerView.LayoutParams!);
+ method public final int getSpanIndex();
+ method public boolean isFullSpan();
+ method public void setFullSpan(boolean);
+ field public static final int INVALID_SPAN_ID = -1; // 0xffffffff
+ }
+
+}
+
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/dao/BooksDao.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/dao/BooksDao.kt
index fac123e..c407527 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/dao/BooksDao.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/dao/BooksDao.kt
@@ -46,6 +46,7 @@
import io.reactivex.Flowable
import io.reactivex.Maybe
import io.reactivex.Single
+import io.reactivex.Observable
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.runBlocking
import java.util.Date
@@ -477,4 +478,19 @@
@Upsert
fun upsertBookCompletable(book: Book): Completable
+
+ @Upsert
+ fun upsertBook(book: Book)
+
+ @Upsert
+ fun upsertBooksWithReturns(books: List<Book>): Array<Long>
+
+ @Query("SELECT * FROM book")
+ fun getBooksFlowable(): Flowable<List<Book>>
+
+ @Query("SELECT * FROM book")
+ fun getBooksObservable(): Observable<List<Book>>
+
+ @Insert
+ fun addPublisherReturnArray(publishers: List<Publisher>): Array<Long>
}
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/BooksDaoTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/BooksDaoTest.kt
index f434424..baae976 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/BooksDaoTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/BooksDaoTest.kt
@@ -48,6 +48,18 @@
class BooksDaoTest : TestDatabaseTest() {
@Test
+ fun addPublisherIdError() {
+ // the following would cause Unique constraint fail and would not return -1
+ // booksDao.addPublishers(TestUtil.PUBLISHER2)
+ val publisherList = buildList<Publisher> {
+ add(TestUtil.PUBLISHER)
+ add(TestUtil.PUBLISHER2)
+ }
+ val result = booksDao.addPublisherReturnArray(publisherList)
+ assertEquals(result[1], 2)
+ }
+
+ @Test
fun bookById() {
booksDao.addAuthors(TestUtil.AUTHOR_1)
booksDao.addPublishers(TestUtil.PUBLISHER)
diff --git a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/UpsertTest.kt b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/UpsertTest.kt
index 3ccd123..65b5fb3 100644
--- a/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/UpsertTest.kt
+++ b/room/integration-tests/kotlintestapp/src/androidTest/java/androidx/room/integration/kotlintestapp/test/UpsertTest.kt
@@ -162,4 +162,50 @@
testObserver.assertError(SQLiteConstraintException::class.java)
assertThat(testObserver.errors().get(0).message).ignoringCase().contains("foreign key")
}
+
+ @Test
+ fun upsertFlowable() {
+ booksDao.upsertPublishers(TestUtil.PUBLISHER)
+ booksDao.upsertBook(TestUtil.BOOK_1)
+ val subscriber = TestSubscriber<List<Book>>()
+ booksDao.getBooksFlowable().subscribeWith(subscriber)
+ drain()
+ assertThat(subscriber.values().size).isEqualTo(1)
+ assertThat(subscriber.values()[0]).isEqualTo(listOf(TestUtil.BOOK_1))
+ booksDao.upsertBook(TestUtil.BOOK_1.copy(title = "changed title"))
+ drain()
+ assertThat(subscriber.values()[1][0].title).isEqualTo("changed title")
+ booksDao.upsertBooksWithReturns(buildList {
+ add(TestUtil.BOOK_2)
+ add(TestUtil.BOOK_3)
+ })
+ drain()
+ assertThat(subscriber.values().size).isEqualTo(3)
+ assertThat(subscriber.values()[2]).isEqualTo(
+ listOf(TestUtil.BOOK_1.copy(title = "changed title"), TestUtil.BOOK_2, TestUtil.BOOK_3)
+ )
+ }
+
+ @Test
+ fun upsertObservable() {
+ booksDao.addPublishers(TestUtil.PUBLISHER)
+ booksDao.upsertBook(TestUtil.BOOK_1)
+ val observer = TestObserver<List<Book>>()
+ booksDao.getBooksObservable().subscribeWith(observer)
+ drain()
+ assertThat(observer.values().size).isEqualTo(1)
+ assertThat(observer.values()[0]).isEqualTo(listOf(TestUtil.BOOK_1))
+ booksDao.upsertBook(TestUtil.BOOK_1.copy(title = "changed title"))
+ drain()
+ assertThat(observer.values()[1][0].title).isEqualTo("changed title")
+ booksDao.upsertBooksWithReturns(buildList {
+ add(TestUtil.BOOK_2)
+ add(TestUtil.BOOK_3)
+ })
+ drain()
+ assertThat(observer.values().size).isEqualTo(3)
+ assertThat(observer.values()[2]).isEqualTo(
+ listOf(TestUtil.BOOK_1.copy(title = "changed title"), TestUtil.BOOK_2, TestUtil.BOOK_3)
+ )
+ }
}
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/AutoClosingRoomOpenHelperTest.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/AutoClosingRoomOpenHelperTest.java
index 3033b44..d4a92d7 100644
--- a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/AutoClosingRoomOpenHelperTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/AutoClosingRoomOpenHelperTest.java
@@ -35,7 +35,6 @@
import androidx.room.integration.testapp.TestDatabase;
import androidx.room.integration.testapp.dao.UserDao;
import androidx.room.integration.testapp.vo.User;
-import androidx.room.util.SneakyThrow;
import androidx.sqlite.db.SupportSQLiteDatabase;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.filters.MediumTest;
@@ -104,16 +103,12 @@
Thread.sleep(30);
mUserDao.load(1);
// Connection should be auto closed here
-
-
mDb.runInTransaction(
() -> {
try {
Thread.sleep(100);
- // Connection would've been auto closed here
- } catch (InterruptedException e) {
- SneakyThrow.reThrow(e);
- }
+ } catch (InterruptedException ignored) { }
+ // Connection would've been auto closed here
}
);
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/EntityUpsertionAdapterTest.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/EntityUpsertionAdapterTest.java
index 36bd106..ef08baf 100644
--- a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/EntityUpsertionAdapterTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/EntityUpsertionAdapterTest.java
@@ -38,6 +38,7 @@
import org.junit.runner.RunWith;
import java.util.Date;
+import java.util.List;
@RunWith(AndroidJUnit4.class)
@SmallTest
@@ -154,6 +155,20 @@
}
@Test
+ public void testUpsertReturnList() {
+ Pet[] testPets = TestUtil.createPetsForUser(0, 1, 10);
+ List<Long> result = mUpsertionAdapter.upsertAndReturnIdsList(testPets);
+ assertThat(result.get(3)).isEqualTo(4);
+ }
+
+ @Test
+ public void testInsertReturnBox() {
+ Pet[] testPets = TestUtil.createPetsForUser(0, 1, 10);
+ Long[] result = mInsertionAdapter.insertAndReturnIdsArrayBox(testPets);
+ assertThat(result[3]).isEqualTo(4);
+ }
+
+ @Test
public void testUpsertWithoutTryCatch() {
Pet testPet = TestUtil.createPet(232);
Pet testPet2 = TestUtil.createPet(232);
diff --git a/room/room-common/api/current.txt b/room/room-common/api/current.txt
index 2d17a93..c70bacd 100644
--- a/room/room-common/api/current.txt
+++ b/room/room-common/api/current.txt
@@ -403,5 +403,10 @@
property @androidx.room.OnConflictStrategy public abstract int onConflict;
}
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public @interface Upsert {
+ method public abstract kotlin.reflect.KClass<?> entity() default java.lang.Object;
+ property public abstract kotlin.reflect.KClass<?> entity;
+ }
+
}
diff --git a/room/room-common/api/public_plus_experimental_current.txt b/room/room-common/api/public_plus_experimental_current.txt
index 2d17a93..c70bacd 100644
--- a/room/room-common/api/public_plus_experimental_current.txt
+++ b/room/room-common/api/public_plus_experimental_current.txt
@@ -403,5 +403,10 @@
property @androidx.room.OnConflictStrategy public abstract int onConflict;
}
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public @interface Upsert {
+ method public abstract kotlin.reflect.KClass<?> entity() default java.lang.Object;
+ property public abstract kotlin.reflect.KClass<?> entity;
+ }
+
}
diff --git a/room/room-common/api/restricted_current.txt b/room/room-common/api/restricted_current.txt
index ab2db40..ddf226b 100644
--- a/room/room-common/api/restricted_current.txt
+++ b/room/room-common/api/restricted_current.txt
@@ -412,5 +412,10 @@
property @androidx.room.OnConflictStrategy public abstract int onConflict;
}
+ @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public @interface Upsert {
+ method public abstract kotlin.reflect.KClass<?> entity() default java.lang.Object;
+ property public abstract kotlin.reflect.KClass<?> entity;
+ }
+
}
diff --git a/room/room-common/src/main/java/androidx/room/Upsert.kt b/room/room-common/src/main/java/androidx/room/Upsert.kt
index e7d5560..117159e 100644
--- a/room/room-common/src/main/java/androidx/room/Upsert.kt
+++ b/room/room-common/src/main/java/androidx/room/Upsert.kt
@@ -16,8 +16,6 @@
package androidx.room
-import androidx.annotation.RestrictTo
-import androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP
import kotlin.reflect.KClass
/**
@@ -84,7 +82,6 @@
*/
@Target(AnnotationTarget.FUNCTION)
@Retention(AnnotationRetention.BINARY)
-@RestrictTo(LIBRARY_GROUP)
public annotation class Upsert(
/**
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/RoomKspProcessor.kt b/room/room-compiler/src/main/kotlin/androidx/room/RoomKspProcessor.kt
index 3c3080d..0a37134 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/RoomKspProcessor.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/RoomKspProcessor.kt
@@ -17,9 +17,12 @@
package androidx.room
import androidx.room.DatabaseProcessingStep.Companion.ENV_CONFIG
+import androidx.room.compiler.processing.XProcessingEnv
+import androidx.room.compiler.processing.XRoundEnv
import androidx.room.compiler.processing.ksp.KspBasicAnnotationProcessor
import androidx.room.processor.Context.BooleanProcessorOptions.USE_NULL_AWARE_CONVERTER
import androidx.room.processor.ProcessorErrors
+import androidx.room.verifier.DatabaseVerifier
import com.google.devtools.ksp.processing.SymbolProcessor
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
import com.google.devtools.ksp.processing.SymbolProcessorProvider
@@ -51,6 +54,12 @@
DatabaseProcessingStep()
)
+ override fun postRound(env: XProcessingEnv, round: XRoundEnv) {
+ if (round.isProcessingOver) {
+ DatabaseVerifier.cleanup()
+ }
+ }
+
class Provider : SymbolProcessorProvider {
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
return RoomKspProcessor(environment)
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/RoomProcessor.kt b/room/room-compiler/src/main/kotlin/androidx/room/RoomProcessor.kt
index e230b3e..5c7daee 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/RoomProcessor.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/RoomProcessor.kt
@@ -17,10 +17,13 @@
package androidx.room
import androidx.room.DatabaseProcessingStep.Companion.ENV_CONFIG
+import androidx.room.compiler.processing.XProcessingEnv
+import androidx.room.compiler.processing.XRoundEnv
import androidx.room.compiler.processing.javac.JavacBasicAnnotationProcessor
import androidx.room.processor.Context
import androidx.room.processor.ProcessorErrors
import androidx.room.util.SimpleJavaVersion
+import androidx.room.verifier.DatabaseVerifier
import androidx.room.vo.Warning
import javax.lang.model.SourceVersion
@@ -113,4 +116,10 @@
override fun getSupportedSourceVersion(): SourceVersion {
return SourceVersion.latest()
}
+
+ override fun postRound(env: XProcessingEnv, round: XRoundEnv) {
+ if (round.isProcessingOver) {
+ DatabaseVerifier.cleanup()
+ }
+ }
}
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/verifier/DatabaseVerifier.kt b/room/room-compiler/src/main/kotlin/androidx/room/verifier/DatabaseVerifier.kt
index 07b664e..6158ff4 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/verifier/DatabaseVerifier.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/verifier/DatabaseVerifier.kt
@@ -24,12 +24,14 @@
import androidx.room.vo.FtsEntity
import androidx.room.vo.FtsOptions
import androidx.room.vo.Warning
-import org.sqlite.JDBC
-import org.sqlite.SQLiteJDBCLoader
import java.io.File
import java.sql.Connection
+import java.sql.Driver
+import java.sql.DriverManager
import java.sql.SQLException
import java.util.regex.Pattern
+import org.sqlite.JDBC
+import org.sqlite.SQLiteJDBCLoader
/**
* Builds an in-memory version of the database and verifies the queries against it.
@@ -59,6 +61,13 @@
"\\s+COLLATE\\s+(LOCALIZED|UNICODE)", Pattern.CASE_INSENSITIVE
)
+ /**
+ * Keep a reference to the SQLite JDBC driver so we can re-register it in the case that Room
+ * finishes processing, cleans up and unregisters the driver but is started again within the
+ * same class loader such that JDBC's static block and driver registration does not occur.
+ */
+ private val DRIVER: Driver
+
init {
verifyTempDir()
// Synchronize on a bootstrap loaded class so that parallel runs of Room in the same JVM
@@ -69,6 +78,10 @@
synchronized(System::class.java) {
SQLiteJDBCLoader.initialize() // extract and loads native library
JDBC.isValidURL(CONNECTION_URL) // call to register driver
+ DRIVER = DriverManager.getDriver("jdbc:sqlite:") // get registered driver
+ check(DRIVER is JDBC) {
+ "Expected driver to be a '${JDBC::class.java}' but was '${DRIVER::class.java}'"
+ }
}
}
@@ -103,6 +116,8 @@
views: List<DatabaseView>
): DatabaseVerifier? {
try {
+ // Re-register driver in case it was unregistered, this is a no-op is already there.
+ DriverManager.registerDriver(DRIVER)
val connection = JDBC.createConnection(CONNECTION_URL, java.util.Properties())
return DatabaseVerifier(connection, context, entities, views)
} catch (ex: Exception) {
@@ -113,6 +128,20 @@
return null
}
}
+
+ /**
+ * Unregisters the SQLite JDBC driver used by the verifier.
+ *
+ * This is necessary since the driver is statically registered and never unregistered and
+ * can cause class loader leaks. See https://github.com/google/ksp/issues/1063.
+ */
+ fun cleanup() {
+ try {
+ DriverManager.deregisterDriver(DRIVER)
+ } catch (ignored: SQLException) {
+ // Driver was not found
+ }
+ }
}
init {
diff --git a/room/room-runtime/api/restricted_current.txt b/room/room-runtime/api/restricted_current.txt
index ed8b0bc..aa860b1 100644
--- a/room/room-runtime/api/restricted_current.txt
+++ b/room/room-runtime/api/restricted_current.txt
@@ -67,6 +67,7 @@
method public Long![] upsertAndReturnIdsArrayBox(T![] entities);
method public Long![] upsertAndReturnIdsArrayBox(java.util.Collection<? extends T> entities);
method public java.util.List<java.lang.Long> upsertAndReturnIdsList(T![] entities);
+ method public java.util.List<java.lang.Long> upsertAndReturnIdsList(java.util.Collection<? extends T> entities);
}
public class InvalidationTracker {
diff --git a/room/room-runtime/src/main/java/androidx/room/AutoCloser.kt b/room/room-runtime/src/main/java/androidx/room/AutoCloser.kt
index f79f982..456d2a9 100644
--- a/room/room-runtime/src/main/java/androidx/room/AutoCloser.kt
+++ b/room/room-runtime/src/main/java/androidx/room/AutoCloser.kt
@@ -20,7 +20,6 @@
import android.os.SystemClock
import androidx.annotation.GuardedBy
import androidx.annotation.VisibleForTesting
-import androidx.room.util.SneakyThrow
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.sqlite.db.SupportSQLiteOpenHelper
import java.io.IOException
@@ -92,11 +91,7 @@
delegateDatabase?.let {
if (it.isOpen) {
- try {
- it.close()
- } catch (e: IOException) {
- SneakyThrow.reThrow(e)
- }
+ it.close()
}
}
delegateDatabase = null
diff --git a/room/room-runtime/src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt b/room/room-runtime/src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt
index d32cf1d..76c4ba8 100644
--- a/room/room-runtime/src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt
+++ b/room/room-runtime/src/main/java/androidx/room/AutoClosingRoomOpenHelper.kt
@@ -26,7 +26,6 @@
import android.os.CancellationSignal
import android.util.Pair
import androidx.annotation.RequiresApi
-import androidx.room.util.SneakyThrow
import androidx.sqlite.db.SupportSQLiteCompat
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.sqlite.db.SupportSQLiteOpenHelper
@@ -69,11 +68,7 @@
}
override fun close() {
- try {
- autoClosingDb.close()
- } catch (e: IOException) {
- SneakyThrow.reThrow(e)
- }
+ autoClosingDb.close()
}
/**
diff --git a/room/room-runtime/src/main/java/androidx/room/EntityInsertionAdapter.kt b/room/room-runtime/src/main/java/androidx/room/EntityInsertionAdapter.kt
index 0fe0daf..056d840 100644
--- a/room/room-runtime/src/main/java/androidx/room/EntityInsertionAdapter.kt
+++ b/room/room-runtime/src/main/java/androidx/room/EntityInsertionAdapter.kt
@@ -151,13 +151,14 @@
* @param entities Entities to insert
* @return The SQLite row ids, for entities that are not inserted the row id returned will be -1
*/
- fun insertAndReturnIdsArrayBox(entities: Collection<T>): Array<Long?> {
+ fun insertAndReturnIdsArrayBox(entities: Collection<T>): Array<Long> {
val stmt: SupportSQLiteStatement = acquire()
+ val iterator = entities.iterator()
return try {
- val result = arrayOfNulls<Long>(entities.size)
- entities.forEachIndexed { index, entity ->
+ val result = Array(entities.size) {
+ val entity = iterator.next()
bind(stmt, entity)
- result[index] = stmt.executeInsert()
+ stmt.executeInsert()
}
result
} finally {
@@ -171,13 +172,14 @@
* @param entities Entities to insert
* @return The SQLite row ids, for entities that are not inserted the row id returned will be -1
*/
- fun insertAndReturnIdsArrayBox(entities: Array<T>): Array<Long?> {
+ fun insertAndReturnIdsArrayBox(entities: Array<T>): Array<Long> {
val stmt: SupportSQLiteStatement = acquire()
+ val iterator = entities.iterator()
return try {
- val result = arrayOfNulls<Long>(entities.size)
- entities.forEachIndexed { index, entity ->
+ val result = Array(entities.size) {
+ val entity = iterator.next()
bind(stmt, entity)
- result[index] = stmt.executeInsert()
+ stmt.executeInsert()
}
result
} finally {
diff --git a/room/room-runtime/src/main/java/androidx/room/EntityUpsertionAdapter.kt b/room/room-runtime/src/main/java/androidx/room/EntityUpsertionAdapter.kt
index 52502db..aad5bbe 100644
--- a/room/room-runtime/src/main/java/androidx/room/EntityUpsertionAdapter.kt
+++ b/room/room-runtime/src/main/java/androidx/room/EntityUpsertionAdapter.kt
@@ -124,7 +124,7 @@
}
fun upsertAndReturnIdsList(entities: Array<T>): List<Long> {
- return buildList<Long> {
+ return buildList {
entities.forEach { entity ->
try {
add(insertionAdapter.insertAndReturnId(entity))
@@ -136,8 +136,21 @@
}
}
- fun upsertAndReturnIdsArrayBox(entities: Array<T>): Array<Long?> {
- return Array<Long?>(entities.size) { index ->
+ fun upsertAndReturnIdsList(entities: Collection<T>): List<Long> {
+ return buildList {
+ entities.forEach { entity ->
+ try {
+ add(insertionAdapter.insertAndReturnId(entity))
+ } catch (ex: SQLiteConstraintException) {
+ updateAdapter.handle(entity)
+ add(-1)
+ }
+ }
+ }
+ }
+
+ fun upsertAndReturnIdsArrayBox(entities: Array<T>): Array<Long> {
+ return Array(entities.size) { index ->
try {
insertionAdapter.insertAndReturnId(entities[index])
} catch (ex: SQLiteConstraintException) {
@@ -147,9 +160,9 @@
}
}
- fun upsertAndReturnIdsArrayBox(entities: Collection<T>): Array<Long?> {
+ fun upsertAndReturnIdsArrayBox(entities: Collection<T>): Array<Long> {
val iterator = entities.iterator()
- return Array<Long?>(entities.size) {
+ return Array(entities.size) {
val entity = iterator.next()
try {
insertionAdapter.insertAndReturnId(entity)
diff --git a/room/room-runtime/src/main/java/androidx/room/util/SneakyThrow.java b/room/room-runtime/src/main/java/androidx/room/util/SneakyThrow.java
deleted file mode 100644
index 76968ab..0000000
--- a/room/room-runtime/src/main/java/androidx/room/util/SneakyThrow.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.room.util;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.RestrictTo;
-
-/**
- * Java 8 Sneaky Throw technique.
- *
- * @hide
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class SneakyThrow {
-
- /**
- * Re-throws a checked exception as if it was a runtime exception without wrapping it.
- *
- * @param e the exception to re-throw.
- */
- public static void reThrow(@NonNull Exception e) {
- sneakyThrow(e);
- }
-
- @SuppressWarnings("unchecked")
- private static <E extends Throwable> void sneakyThrow(@NonNull Throwable e) throws E {
- throw (E) e;
- }
-
- private SneakyThrow() {
-
- }
-}
diff --git a/security/security-app-authenticator/src/main/java/androidx/security/app/authenticator/AppAuthenticator.java b/security/security-app-authenticator/src/main/java/androidx/security/app/authenticator/AppAuthenticator.java
index 0e9f201..7f609b0 100644
--- a/security/security-app-authenticator/src/main/java/androidx/security/app/authenticator/AppAuthenticator.java
+++ b/security/security-app-authenticator/src/main/java/androidx/security/app/authenticator/AppAuthenticator.java
@@ -23,8 +23,10 @@
import android.text.TextUtils;
import android.util.Log;
+import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.RestrictTo;
import androidx.annotation.VisibleForTesting;
import androidx.annotation.XmlRes;
import androidx.collection.ArrayMap;
@@ -38,6 +40,8 @@
import java.io.IOException;
import java.io.InputStream;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -85,6 +89,22 @@
public static final int PERMISSION_DENIED_PACKAGE_UID_MISMATCH = -5;
/**
+ * Values returned when checking that a specified package has the expected signing identity
+ * for a particular permission.
+ *
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ @IntDef(value = {
+ PERMISSION_GRANTED,
+ PERMISSION_DENIED_NO_MATCH,
+ PERMISSION_DENIED_UNKNOWN_PACKAGE,
+ PERMISSION_DENIED_PACKAGE_UID_MISMATCH,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface AppIdentityPermissionResult {}
+
+ /**
* This is returned by {@link #checkAppIdentity(String)} when the specified package name has
* the expected signing identity.
*
@@ -101,6 +121,20 @@
public static final int SIGNATURE_NO_MATCH = -1;
/**
+ * Values returned when checking that a specified package has the expected signing identity
+ * on the device.
+ *
+ * @hide
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY)
+ @IntDef(value = {
+ SIGNATURE_MATCH,
+ SIGNATURE_NO_MATCH,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface AppIdentityResult {}
+
+ /**
* The root tag for an AppAuthenticator XMl config file.
*/
private static final String ROOT_TAG = "app-authenticator";
@@ -233,6 +267,7 @@
* {@link #PERMISSION_DENIED_PACKAGE_UID_MISMATCH} if the uid as returned from
* {@link Binder#getCallingUid()} does not match the uid assigned to the package
*/
+ @AppIdentityPermissionResult
public int checkCallingAppIdentity(@NonNull String packageName, @NonNull String permission) {
return checkCallingAppIdentity(packageName, permission,
mAppAuthenticatorUtils.getCallingPid(), mAppAuthenticatorUtils.getCallingUid());
@@ -258,6 +293,7 @@
* {@link #PERMISSION_DENIED_PACKAGE_UID_MISMATCH} if the specified {@code uid} does not
* match the uid assigned to the package
*/
+ @AppIdentityPermissionResult
public int checkCallingAppIdentity(@NonNull String packageName, @NonNull String permission,
int pid, int uid) {
AppAuthenticatorResult result = checkCallingAppIdentityInternal(packageName, permission,
@@ -332,6 +368,7 @@
* @return {@link #SIGNATURE_MATCH} if the specified package has the expected
* signing identity
*/
+ @AppIdentityResult
public int checkAppIdentity(@NonNull String packageName) {
if (mAppSignatureVerifier.verifyExpectedIdentity(packageName)) {
return SIGNATURE_MATCH;
diff --git a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObject2Tests.java b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObject2Tests.java
index da46fd6..fa4f09d 100644
--- a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObject2Tests.java
+++ b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObject2Tests.java
@@ -494,52 +494,52 @@
@Test
public void testPinchClose() {
- launchTestActivity(UiObject2TestPinchActivity.class);
+ launchTestActivity(PinchTestActivity.class);
UiObject2 pinchArea = mDevice.findObject(By.res(TEST_APP, "pinch_area"));
UiObject2 scaleText = pinchArea.findObject(By.res(TEST_APP, "scale_factor"));
pinchArea.pinchClose(1f);
scaleText.wait(Until.textNotEquals("1.0f"), TIMEOUT_MS);
- float scaleValueAfterPinch = Float.valueOf(scaleText.getText());
+ float scaleValueAfterPinch = Float.parseFloat(scaleText.getText());
assertTrue(String.format("Expected scale value to be less than 1f after pinchClose(), "
+ "but got [%f]", scaleValueAfterPinch), scaleValueAfterPinch < 1f);
}
@Test
public void testPinchClose_withSpeed() {
- launchTestActivity(UiObject2TestPinchActivity.class);
+ launchTestActivity(PinchTestActivity.class);
UiObject2 pinchArea = mDevice.findObject(By.res(TEST_APP, "pinch_area"));
UiObject2 scaleText = pinchArea.findObject(By.res(TEST_APP, "scale_factor"));
pinchArea.pinchClose(.75f, SPEED_MS);
scaleText.wait(Until.textNotEquals("1.0f"), TIMEOUT_MS);
- float scaleValueAfterPinch = Float.valueOf(scaleText.getText());
+ float scaleValueAfterPinch = Float.parseFloat(scaleText.getText());
assertTrue(String.format("Expected scale value to be less than 1f after pinchClose(), "
+ "but got [%f]", scaleValueAfterPinch), scaleValueAfterPinch < 1f);
}
@Test
public void testPinchOpen() {
- launchTestActivity(UiObject2TestPinchActivity.class);
+ launchTestActivity(PinchTestActivity.class);
UiObject2 pinchArea = mDevice.findObject(By.res(TEST_APP, "pinch_area"));
UiObject2 scaleText = pinchArea.findObject(By.res(TEST_APP, "scale_factor"));
pinchArea.pinchOpen(.5f);
scaleText.wait(Until.textNotEquals("1.0f"), TIMEOUT_MS);
- float scaleValueAfterPinch = Float.valueOf(scaleText.getText());
+ float scaleValueAfterPinch = Float.parseFloat(scaleText.getText());
assertTrue(String.format("Expected scale text to be greater than 1f after pinchOpen(), "
+ "but got [%f]", scaleValueAfterPinch), scaleValueAfterPinch > 1f);
}
@Test
public void testPinchOpen_withSpeed() {
- launchTestActivity(UiObject2TestPinchActivity.class);
+ launchTestActivity(PinchTestActivity.class);
UiObject2 pinchArea = mDevice.findObject(By.res(TEST_APP, "pinch_area"));
UiObject2 scaleText = pinchArea.findObject(By.res(TEST_APP, "scale_factor"));
pinchArea.pinchOpen(.25f, SPEED_MS);
scaleText.wait(Until.textNotEquals("1.0f"), TIMEOUT_MS);
- float scaleValueAfterPinch = Float.valueOf(scaleText.getText());
+ float scaleValueAfterPinch = Float.parseFloat(scaleText.getText());
assertTrue(String.format("Expected scale text to be greater than 1f after pinchOpen(), "
+ "but got [%f]", scaleValueAfterPinch), scaleValueAfterPinch > 1f);
}
@@ -683,7 +683,7 @@
@Test
public void testSetGestureMargin() {
- launchTestActivity(UiObject2TestPinchActivity.class);
+ launchTestActivity(PinchTestActivity.class);
UiObject2 pinchArea = mDevice.findObject(By.res(TEST_APP, "pinch_area"));
UiObject2 scaleText = pinchArea.findObject(By.res(TEST_APP, "scale_factor"));
@@ -711,7 +711,7 @@
@Test
public void testSetGestureMargins() {
- launchTestActivity(UiObject2TestPinchActivity.class);
+ launchTestActivity(PinchTestActivity.class);
UiObject2 pinchArea = mDevice.findObject(By.res(TEST_APP, "pinch_area"));
UiObject2 scaleText = pinchArea.findObject(By.res(TEST_APP, "scale_factor"));
diff --git a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObjectTest.java b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObjectTest.java
index aac8e41..ed66e4f 100644
--- a/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObjectTest.java
+++ b/test/uiautomator/integration-tests/testapp/src/androidTest/java/androidx/test/uiautomator/testapp/UiObjectTest.java
@@ -564,18 +564,120 @@
partlyInvisibleRegion.getBounds().toString());
}
+ @Test
+ public void testWaitForExists() throws Exception {
+ launchTestActivity(WaitTestActivity.class);
+
+ UiObject text1 = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id/text_1"));
+ assertEquals("text_1_not_changed", text1.getText());
+
+ UiObject expectedText1 = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id"
+ + "/text_1").text("text_1_changed"));
+
+ text1.click();
+ assertTrue(expectedText1.waitForExists(TIMEOUT_MS));
+ }
+
+ @Test
+ public void testWaitForExist_timeout() throws Exception {
+ launchTestActivity(WaitTestActivity.class);
+
+ UiObject text1 = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id/text_1"));
+ assertEquals("text_1_not_changed", text1.getText());
+
+ UiObject expectedText1 = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id"
+ + "/text_1").text("text_1_changed"));
+
+ assertFalse(expectedText1.waitForExists(1_000));
+ }
+
+ @Test
+ public void testWaitUntilGone() throws Exception {
+ launchTestActivity(WaitTestActivity.class);
+
+ UiObject expectedText1 = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id"
+ + "/text_1").text("text_1_not_changed"));
+ assertTrue(expectedText1.exists());
+ expectedText1.click();
+ assertTrue(expectedText1.waitUntilGone(TIMEOUT_MS));
+ }
+
+ @Test
+ public void testWaitUntilGone_timeout() {
+ launchTestActivity(WaitTestActivity.class);
+
+ UiObject expectedText1 = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id"
+ + "/text_1").text("text_1_not_changed"));
+ assertTrue(expectedText1.exists());
+ assertFalse(expectedText1.waitUntilGone(1_000));
+ }
+
+ @Test
+ public void testExists() {
+ launchTestActivity(WaitTestActivity.class);
+
+ UiObject text1 = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id/text_1"));
+ UiObject text3 = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id/text_3"));
+
+ assertTrue(text1.exists());
+ assertFalse(text3.exists());
+ }
+
+ @Test
+ public void testPinchOut() throws Exception {
+ launchTestActivity(PinchTestActivity.class);
+
+ UiObject pinchArea = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id"
+ + "/pinch_area"));
+ UiObject scaleText = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id"
+ + "/scale_factor"));
+
+ UiObject expectedScaleText = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id"
+ + "/scale_factor").text("1.0f"));
+
+ assertTrue(pinchArea.pinchOut(100, 10));
+ assertTrue(expectedScaleText.waitUntilGone(TIMEOUT_MS));
+ float scaleValueAfterPinch = Float.parseFloat(scaleText.getText());
+ assertTrue(String.format(
+ "Expected scale text to be greater than 1f after pinchOut(), but got [%f]",
+ scaleValueAfterPinch), scaleValueAfterPinch > 1f);
+ }
+
+ @Test
+ public void testPinchIn() throws Exception {
+ launchTestActivity(PinchTestActivity.class);
+
+ UiObject pinchArea = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id"
+ + "/pinch_area"));
+ UiObject scaleText = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id"
+ + "/scale_factor"));
+
+ UiObject expectedScaleText = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id"
+ + "/scale_factor").text("1.0f"));
+
+ assertTrue(pinchArea.pinchIn(100, 10));
+ assertTrue(expectedScaleText.waitUntilGone(TIMEOUT_MS));
+ float scaleValueAfterPinch = Float.parseFloat(scaleText.getText());
+ assertTrue(String.format("Expected scale value to be less than 1f after pinchIn(), "
+ + "but got [%f]", scaleValueAfterPinch), scaleValueAfterPinch < 1f);
+ }
+
+ @Test
+ public void testPinchFamily_throwsExceptions() {
+ launchTestActivity(PinchTestActivity.class);
+
+ UiObject noNode = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id/no_node"));
+ UiObject smallArea = mDevice.findObject(new UiSelector().resourceId(TEST_APP + ":id"
+ + "/small_area"));
+
+ assertThrows(UiObjectNotFoundException.class, () -> noNode.pinchOut(100, 10));
+ assertThrows(UiObjectNotFoundException.class, () -> noNode.pinchIn(100, 10));
+ assertThrows(IllegalStateException.class, () -> smallArea.pinchOut(100, 10));
+ assertThrows(IllegalStateException.class, () -> smallArea.pinchIn(100, 10));
+ }
+
/* TODO(b/241158642): Implement these tests, and the tests for exceptions of each tested method.
- public void testWaitForExists() {}
-
- public void testWaitUntilGone() {}
-
- public void testExists() {}
-
- public void testPinchOut() {}
-
- public void testPinchIn() {}
-
public void testPerformTwoPointerGesture() {}
public void testPerformMultiPointerGesture() {}
diff --git a/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml b/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml
index c82c979..2e3d6d6 100644
--- a/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/test/uiautomator/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -127,6 +127,13 @@
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
+ <activity android:name=".PinchTestActivity"
+ android:exported="true"
+ android:theme="@android:style/Theme.Holo.NoActionBar">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ </intent-filter>
+ </activity>
<activity android:name=".SplitScreenTestActivity"
android:exported="true"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
@@ -157,13 +164,6 @@
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
- <activity android:name=".UiObject2TestPinchActivity"
- android:exported="true"
- android:theme="@android:style/Theme.Holo.NoActionBar">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- </intent-filter>
- </activity>
<activity android:name=".UntilTestActivity"
android:exported="true"
android:theme="@android:style/Theme.Holo.NoActionBar">
@@ -185,6 +185,13 @@
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
+ <activity android:name=".WaitTestActivity"
+ android:exported="true"
+ android:theme="@android:style/Theme.Holo.NoActionBar">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ </intent-filter>
+ </activity>
</application>
</manifest>
diff --git a/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/PinchTestActivity.java b/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/PinchTestActivity.java
new file mode 100644
index 0000000..3c30df3
--- /dev/null
+++ b/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/PinchTestActivity.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.test.uiautomator.testapp;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.MotionEvent;
+import android.view.ScaleGestureDetector;
+import android.view.ScaleGestureDetector.SimpleOnScaleGestureListener;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+
+public class PinchTestActivity extends Activity {
+
+ private ScaleGestureDetector mScaleDetector;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.pinch_test_activity);
+
+ final TextView scaleFactor = findViewById(R.id.scale_factor);
+
+ mScaleDetector = new ScaleGestureDetector(this, new SimpleOnScaleGestureListener() {
+ @Override
+ public void onScaleEnd(ScaleGestureDetector detector) {
+ float scale = detector.getScaleFactor();
+ scaleFactor.setText(Float.toString(scale));
+ }
+ });
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ return mScaleDetector.onTouchEvent(event);
+ }
+}
diff --git a/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/UiObject2TestPinchActivity.java b/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/UiObject2TestPinchActivity.java
deleted file mode 100644
index d205048..0000000
--- a/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/UiObject2TestPinchActivity.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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.test.uiautomator.testapp;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.ScaleGestureDetector;
-import android.view.ScaleGestureDetector.SimpleOnScaleGestureListener;
-import android.widget.TextView;
-
-import androidx.annotation.Nullable;
-
-public class UiObject2TestPinchActivity extends Activity {
-
- private ScaleGestureDetector mScaleDetector;
-
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.uiobject2_testpinch_activity);
-
- final TextView scaleFactor = (TextView)findViewById(R.id.scale_factor);
-
- mScaleDetector = new ScaleGestureDetector(this, new SimpleOnScaleGestureListener() {
- @Override
- public boolean onScaleBegin(ScaleGestureDetector detector) {
- float scale = detector.getScaleFactor();
- Log.d("FOO", String.format("Beginning scale: %s", scale));
- float span = detector.getCurrentSpan();
- Log.d("FOO", String.format("Beginning span: %s", span));
- Log.d("FOO", String.format("Beginning span, X: %s, Y:%s", detector.getCurrentSpanX(), detector.getCurrentSpanY()));
- Log.d("FOO", String.format("Beginning focus: %s, %s", detector.getFocusX(), detector.getFocusY()));
- return true;
-
- }
-
- @Override
- public void onScaleEnd(ScaleGestureDetector detector) {
- float scale = detector.getScaleFactor();
- Log.d("FOO", String.format("Ending scale: %s", scale));
- float span = detector.getCurrentSpan();
- Log.d("FOO", String.format("Ending span: %s", span));
- Log.d("FOO", String.format("Ending span, X: %s, Y:%s", detector.getCurrentSpanX(), detector.getCurrentSpanY()));
- Log.d("FOO", String.format("Ending focus: %s, %s", detector.getFocusX(), detector.getFocusY()));
- scaleFactor.setText(Float.toString(scale));
- }
- });
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- return mScaleDetector.onTouchEvent(event);
- }
-}
diff --git a/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/WaitTestActivity.java b/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/WaitTestActivity.java
new file mode 100644
index 0000000..ec6f962
--- /dev/null
+++ b/test/uiautomator/integration-tests/testapp/src/main/java/androidx/test/uiautomator/testapp/WaitTestActivity.java
@@ -0,0 +1,49 @@
+/*
+ * 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.test.uiautomator.testapp;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.os.Handler;
+import android.widget.TextView;
+
+import androidx.annotation.Nullable;
+
+public class WaitTestActivity extends Activity {
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.wait_test_activity);
+
+ TextView text1 = findViewById(R.id.text_1);
+
+ text1.setOnClickListener(view -> {
+ // Unlike in `UiObject2`, the {@link UiObject#click()} will block the process until
+ // either accessibility event `TYPE_WINDOW_CONTENT_CHANGED` or `TYPE_VIEW_SELECTED`
+ // is received (as in {@link InteractionController#clickAndSync(final int x, final
+ // int y, long timeout)}).
+ // So we have to change the text right after the click to initialize a
+ // `TYPE_WINDOW_CONTENT_CHANGED` event.
+ // Otherwise, the click action will only block everything until the delayed text change
+ // (as the `postDelayed()` method doing), which invalidates this testing mechanism.
+ ((TextView) view).setText("text_1_clicked");
+ new Handler().postDelayed(() -> ((TextView) view).setText("text_1_changed"),
+ 3_000);
+ });
+ }
+}
diff --git a/test/uiautomator/integration-tests/testapp/src/main/res/layout/uiobject2_testpinch_activity.xml b/test/uiautomator/integration-tests/testapp/src/main/res/layout/pinch_test_activity.xml
similarity index 86%
rename from test/uiautomator/integration-tests/testapp/src/main/res/layout/uiobject2_testpinch_activity.xml
rename to test/uiautomator/integration-tests/testapp/src/main/res/layout/pinch_test_activity.xml
index 5f1ecbd..f952013 100644
--- a/test/uiautomator/integration-tests/testapp/src/main/res/layout/uiobject2_testpinch_activity.xml
+++ b/test/uiautomator/integration-tests/testapp/src/main/res/layout/pinch_test_activity.xml
@@ -18,7 +18,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- tools:context=".UiObject2TestPinchActivity">
+ tools:context=".PinchTestActivity">
<LinearLayout
android:id="@+id/pinch_area"
@@ -35,6 +35,12 @@
android:text="1.0f"
android:textColor="@android:color/white" />
+ <TextView
+ android:id="@+id/small_area"
+ android:layout_width="1dp"
+ android:layout_height="1dp"
+ android:text="small area" />
+
</LinearLayout>
</LinearLayout>
diff --git a/test/uiautomator/integration-tests/testapp/src/main/res/layout/uiobject2_testpinch_activity.xml b/test/uiautomator/integration-tests/testapp/src/main/res/layout/wait_test_activity.xml
similarity index 69%
copy from test/uiautomator/integration-tests/testapp/src/main/res/layout/uiobject2_testpinch_activity.xml
copy to test/uiautomator/integration-tests/testapp/src/main/res/layout/wait_test_activity.xml
index 5f1ecbd..530760e 100644
--- a/test/uiautomator/integration-tests/testapp/src/main/res/layout/uiobject2_testpinch_activity.xml
+++ b/test/uiautomator/integration-tests/testapp/src/main/res/layout/wait_test_activity.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?><!--
- * Copyright (C) 2014 The Android Open Source Project
+ * Copyright (C) 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.
@@ -18,23 +18,21 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- tools:context=".UiObject2TestPinchActivity">
+ tools:context=".WaitTestActivity">
<LinearLayout
- android:id="@+id/pinch_area"
+ android:id="@+id/wait_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:layout_margin="30dp"
- android:background="@android:color/white">
+ android:orientation="vertical">
<TextView
- android:id="@+id/scale_factor"
- android:layout_width="27mm"
+ android:id="@+id/text_1"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:background="@android:color/black"
- android:text="1.0f"
- android:textColor="@android:color/white" />
+ android:clickable="true"
+ android:text="text_1_not_changed" />
</LinearLayout>
-</LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/AccessibilityNodeInfoHelper.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/AccessibilityNodeInfoHelper.java
index 7f8f775..5c82419 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/AccessibilityNodeInfoHelper.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/AccessibilityNodeInfoHelper.java
@@ -22,53 +22,58 @@
import android.view.accessibility.AccessibilityWindowInfo;
import androidx.annotation.DoNotInline;
+import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
-/**
- * This class contains static helper methods to work with
- * {@link AccessibilityNodeInfo}
- */
+/** Static helper methods for working with {@link AccessibilityNodeInfo}s. */
class AccessibilityNodeInfoHelper {
private AccessibilityNodeInfoHelper() {}
/**
- * Returns the node's bounds clipped to the size of the display
+ * Returns the visible bounds of an {@link AccessibilityNodeInfo}.
*
- * @param node
- * @param width pixel width of the display
- * @param height pixel height of the display
- * @return null if node is null, else a Rect containing visible bounds
+ * @param node node to analyze
+ * @param width display width in pixels
+ * @param height display height in pixels
+ * @return {@link Rect} containing the visible bounds
*/
- @SuppressWarnings("RectIntersectReturnValueIgnored")
- static Rect getVisibleBoundsInScreen(AccessibilityNodeInfo node, int width, int height) {
- if (node == null) {
- return null;
- }
- // targeted node's bounds
- Rect nodeRect = new Rect();
- node.getBoundsInScreen(nodeRect);
+ @NonNull
+ static Rect getVisibleBoundsInScreen(@NonNull AccessibilityNodeInfo node, int width,
+ int height) {
+ Rect nodeBounds = new Rect();
+ node.getBoundsInScreen(nodeBounds);
- Rect displayRect = new Rect();
- displayRect.top = 0;
- displayRect.left = 0;
- displayRect.right = width;
- displayRect.bottom = height;
+ // Trim portions that are outside the specified display bounds.
+ Rect displayBounds = new Rect(0, 0, width, height);
+ nodeBounds = intersect(nodeBounds, displayBounds);
- nodeRect.intersect(displayRect);
-
- // On platforms that give us access to the node's window
+ // Trim portions that are outside the window bounds on API 21+.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- // Trim any portion of the bounds that are outside the window
- Rect bounds = new Rect();
+ Rect windowBounds = new Rect();
AccessibilityWindowInfo window = Api21Impl.getWindow(node);
if (window != null) {
- Api21Impl.getBoundsInScreen(window, bounds);
- nodeRect.intersect(bounds);
+ Api21Impl.getBoundsInScreen(window, windowBounds);
+ nodeBounds = intersect(nodeBounds, windowBounds);
}
}
- return nodeRect;
+ // Trim portions that are outside the first scrollable ancestor.
+ for (AccessibilityNodeInfo ancestor = node.getParent(); ancestor != null;
+ ancestor = ancestor.getParent()) {
+ if (ancestor.isScrollable()) {
+ Rect ancestorBounds = getVisibleBoundsInScreen(ancestor, width, height);
+ nodeBounds = intersect(nodeBounds, ancestorBounds);
+ break;
+ }
+ }
+
+ return nodeBounds;
+ }
+
+ /** Returns the intersection of two rectangles, or an empty rectangle if they do not overlap. */
+ private static Rect intersect(Rect first, Rect second) {
+ return first.intersect(second) ? first : new Rect();
}
@RequiresApi(21)
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject.java
index 22c1a0f..0db19ba 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject.java
@@ -26,6 +26,8 @@
import android.view.MotionEvent.PointerCoords;
import android.view.accessibility.AccessibilityNodeInfo;
+import androidx.annotation.NonNull;
+
/**
* A UiObject is a representation of a view. It is not in any way directly bound to a
* view as an object reference. A UiObject contains information to help it
@@ -350,56 +352,12 @@
rect.centerY(), rect.right - SWIPE_MARGIN_LIMIT, rect.centerY(), steps);
}
- /**
- * Finds the visible bounds of a partially visible UI element
- *
- * @param node
- * @return null if node is null, else a Rect containing visible bounds
- */
- @SuppressWarnings("RectIntersectReturnValueIgnored")
- private Rect getVisibleBounds(AccessibilityNodeInfo node) {
- if (node == null) {
- return null;
- }
-
- // targeted node's bounds
+ /** Returns the visible bounds of an {@link AccessibilityNodeInfo}. */
+ @NonNull
+ private Rect getVisibleBounds(@NonNull AccessibilityNodeInfo node) {
int w = getDevice().getDisplayWidth();
int h = getDevice().getDisplayHeight();
- Rect nodeRect = AccessibilityNodeInfoHelper.getVisibleBoundsInScreen(node, w, h);
-
- // is the targeted node within a scrollable container?
- AccessibilityNodeInfo scrollableParentNode = getScrollableParent(node);
- if(scrollableParentNode == null) {
- // nothing to adjust for so return the node's Rect as is
- return nodeRect;
- }
-
- // Scrollable parent's visible bounds
- Rect parentRect = AccessibilityNodeInfoHelper
- .getVisibleBoundsInScreen(scrollableParentNode, w, h);
- // adjust for partial clipping of targeted by parent node if required
- nodeRect.intersect(parentRect);
- return nodeRect;
- }
-
- /**
- * Walks up the layout hierarchy to find a scrollable parent. A scrollable parent
- * indicates that this node might be in a container where it is partially
- * visible due to scrolling. In this case, its clickable center might not be visible and
- * the click coordinates should be adjusted.
- *
- * @param node
- * @return The accessibility node info.
- */
- private AccessibilityNodeInfo getScrollableParent(AccessibilityNodeInfo node) {
- AccessibilityNodeInfo parent = node;
- while(parent != null) {
- parent = parent.getParent();
- if (parent != null && parent.isScrollable()) {
- return parent;
- }
- }
- return null;
+ return AccessibilityNodeInfoHelper.getVisibleBoundsInScreen(node, w, h);
}
/**
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject2.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject2.java
index 19ede49..75445bf 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject2.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiObject2.java
@@ -32,6 +32,7 @@
import android.view.accessibility.AccessibilityWindowInfo;
import androidx.annotation.DoNotInline;
+import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import java.util.ArrayList;
@@ -269,57 +270,21 @@
return false;
}
- /** Returns the visible bounds of {@code node} in screen coordinates. */
- @SuppressWarnings("RectIntersectReturnValueIgnored")
- private Rect getVisibleBounds(AccessibilityNodeInfo node) {
- // Get the object bounds in screen coordinates
- Rect ret = new Rect();
- node.getBoundsInScreen(ret);
-
- // Trim any portion of the bounds that are not on the screen
- final int displayId = getDisplayId();
- if (displayId == Display.DEFAULT_DISPLAY) {
- final Rect screen =
- new Rect(0, 0, getDevice().getDisplayWidth(), getDevice().getDisplayHeight());
- ret.intersect(screen);
- } else {
- final DisplayManager dm =
- (DisplayManager) mDevice.getInstrumentation().getContext().getSystemService(
- Service.DISPLAY_SERVICE);
- final Display display = dm.getDisplay(getDisplayId());
- if (display != null) {
- final Point size = new Point();
- display.getRealSize(size);
- final Rect screen = new Rect(0, 0, size.x, size.y);
- ret.intersect(screen);
- }
+ /** Returns the visible bounds of an {@link AccessibilityNodeInfo}. */
+ @NonNull
+ private Rect getVisibleBounds(@NonNull AccessibilityNodeInfo node) {
+ DisplayManager displayManager =
+ (DisplayManager) mDevice.getInstrumentation().getContext().getSystemService(
+ Service.DISPLAY_SERVICE);
+ Display display = displayManager.getDisplay(getDisplayId());
+ if (display != null) {
+ Point displaySize = new Point();
+ display.getRealSize(displaySize);
+ return AccessibilityNodeInfoHelper.getVisibleBoundsInScreen(
+ node, displaySize.x, displaySize.y);
}
-
- // On platforms that give us access to the node's window
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- // Trim any portion of the bounds that are outside the window
- Rect bounds = new Rect();
- AccessibilityWindowInfo window = Api21Impl.getWindow(node);
- if (window != null) {
- Api21Impl.getBoundsInScreen(window, bounds);
- ret.intersect(bounds);
- }
- }
-
- // Find the visible bounds of our first scrollable ancestor
- AccessibilityNodeInfo ancestor = null;
- for (ancestor = node.getParent(); ancestor != null; ancestor = ancestor.getParent()) {
- // If this ancestor is scrollable
- if (ancestor.isScrollable()) {
- // Trim any portion of the bounds that are hidden by the non-visible portion of our
- // ancestor
- Rect ancestorRect = getVisibleBounds(ancestor);
- ret.intersect(ancestorRect);
- break;
- }
- }
-
- return ret;
+ return AccessibilityNodeInfoHelper.getVisibleBoundsInScreen(
+ node, Integer.MAX_VALUE, Integer.MAX_VALUE);
}
/** Returns a point in the center of the visible bounds of this object. */
@@ -796,12 +761,6 @@
static AccessibilityWindowInfo getWindow(AccessibilityNodeInfo accessibilityNodeInfo) {
return accessibilityNodeInfo.getWindow();
}
-
- @DoNotInline
- static void getBoundsInScreen(AccessibilityWindowInfo accessibilityWindowInfo,
- Rect outBounds) {
- accessibilityWindowInfo.getBoundsInScreen(outBounds);
- }
}
@RequiresApi(30)
diff --git a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Colors.kt b/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Colors.kt
index c8e7675..f66a294 100644
--- a/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Colors.kt
+++ b/wear/compose/compose-material/src/commonMain/kotlin/androidx/wear/compose/material/Colors.kt
@@ -29,18 +29,18 @@
@Stable
public class Colors(
primary: Color = Color(0xFFAECBFA),
- primaryVariant: Color = Color(0xFF669DF6),
+ primaryVariant: Color = Color(0xFF8AB4F8),
secondary: Color = Color(0xFFFDE293),
secondaryVariant: Color = Color(0xFF594F33),
background: Color = Color.Black,
- surface: Color = Color(0xFF202124),
+ surface: Color = Color(0xFF303133),
error: Color = Color(0xFFEE675C),
- onPrimary: Color = Color(0xFF202124),
- onSecondary: Color = Color(0xFF202124),
+ onPrimary: Color = Color(0xFF303133),
+ onSecondary: Color = Color(0xFF303133),
onBackground: Color = Color.White,
onSurface: Color = Color.White,
onSurfaceVariant: Color = Color(0xFFDADCE0),
- onError: Color = Color(0xFF202124)
+ onError: Color = Color(0xFF000000)
) {
public var primary: Color by mutableStateOf(primary, structuralEqualityPolicy())
internal set
diff --git a/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceService.kt b/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceService.kt
index 706ae3d..fd936bf 100644
--- a/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceService.kt
+++ b/wear/watchface/watchface-complications-data-source/src/main/java/androidx/wear/watchface/complications/datasource/ComplicationDataSourceService.kt
@@ -65,11 +65,12 @@
public val complicationType: ComplicationType = complicationType
/**
- * If `true` then
- * [ComplicationRequestListener.onComplicationData] should be called as soon as possible
- * (ideally less than 100ms instead of the usual 20s deadline). This will only be `true` within
- * a [ComplicationDataSourceService.onStartImmediateComplicationRequests]
- * [ComplicationDataSourceService.onStopImmediateComplicationRequests] pair.
+ * If `true` then [ComplicationRequestListener.onComplicationData] should be called as soon as
+ * possible (ideally less than 100ms instead of the usual 20s deadline). This will only be
+ * `true` within a [ComplicationDataSourceService.onStartImmediateComplicationRequests]
+ * [ComplicationDataSourceService.onStopImmediateComplicationRequests] pair which will not be
+ * called unless the [ComplicationDataSourceService] has privileged permission
+ * `com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE`.
*/
@get:JvmName("isImmediateResponseRequired")
public val immediateResponseRequired = immediateResponseRequired
@@ -296,7 +297,7 @@
/**
* If a metadata key with [METADATA_KEY_IMMEDIATE_UPDATE_PERIOD_MILLISECONDS] is present in the
* manifest, and the provider has privileged permission
- * com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE, then
+ * `com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE`, then
* [onStartImmediateComplicationRequests] will be called when the watch
* face is visible and non-ambient. A series of [onComplicationRequest]s will follow where
* [ComplicationRequest.immediateResponseRequired] is `true`, ending with a call to
@@ -312,7 +313,7 @@
/**
* If a metadata key with [METADATA_KEY_IMMEDIATE_UPDATE_PERIOD_MILLISECONDS] is present in the
* manifest, and the provider has privileged permission
- * com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE, then
+ * `com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE`, then
* [onStartImmediateComplicationRequests] will be called when the watch face ceases to be
* visible and non-ambient. No subsequent calls to [onComplicationRequest] where
* [ComplicationRequest.immediateResponseRequired] is `true` will be made unless the
diff --git a/wear/watchface/watchface/api/current.txt b/wear/watchface/watchface/api/current.txt
index 413672b..f24bb8c 100644
--- a/wear/watchface/watchface/api/current.txt
+++ b/wear/watchface/watchface/api/current.txt
@@ -199,6 +199,7 @@
method public final android.graphics.Rect getScreenBounds();
method public final android.view.SurfaceHolder getSurfaceHolder();
method @UiThread public final void invalidate();
+ method @UiThread public final void notifyWatchfaceColorsChanged();
method @UiThread public void onDestroy();
method @UiThread public abstract void onDump(java.io.PrintWriter writer);
method @UiThread protected void onRenderParametersChanged(androidx.wear.watchface.RenderParameters renderParameters);
@@ -206,6 +207,7 @@
method public final void setAdditionalContentDescriptionLabels(java.util.Collection<kotlin.Pair<java.lang.Integer,androidx.wear.watchface.ContentDescriptionLabel>>);
method public final void setInteractiveDrawModeUpdateDelayMillis(long);
method @UiThread public boolean shouldAnimate();
+ method @UiThread public androidx.wear.watchface.Renderer.WatchfaceColors? watchfaceColors();
property public final java.util.Collection<kotlin.Pair<java.lang.Integer,androidx.wear.watchface.ContentDescriptionLabel>> additionalContentDescriptionLabels;
property public final float centerX;
property public final float centerY;
@@ -277,6 +279,16 @@
method @UiThread public void onDestroy();
}
+ public static final class Renderer.WatchfaceColors {
+ ctor public Renderer.WatchfaceColors(android.graphics.Color primaryColor, android.graphics.Color secondaryColor, android.graphics.Color tertiaryColor);
+ method public android.graphics.Color getPrimaryColor();
+ method public android.graphics.Color getSecondaryColor();
+ method public android.graphics.Color getTertiaryColor();
+ property public final android.graphics.Color primaryColor;
+ property public final android.graphics.Color secondaryColor;
+ property public final android.graphics.Color tertiaryColor;
+ }
+
public final class RendererKt {
}
diff --git a/wear/watchface/watchface/api/public_plus_experimental_current.txt b/wear/watchface/watchface/api/public_plus_experimental_current.txt
index 4cf90dc..b291496 100644
--- a/wear/watchface/watchface/api/public_plus_experimental_current.txt
+++ b/wear/watchface/watchface/api/public_plus_experimental_current.txt
@@ -215,6 +215,7 @@
method public final android.graphics.Rect getScreenBounds();
method public final android.view.SurfaceHolder getSurfaceHolder();
method @UiThread public final void invalidate();
+ method @UiThread public final void notifyWatchfaceColorsChanged();
method @UiThread public void onDestroy();
method @UiThread public abstract void onDump(java.io.PrintWriter writer);
method @UiThread protected void onRenderParametersChanged(androidx.wear.watchface.RenderParameters renderParameters);
@@ -222,6 +223,7 @@
method public final void setAdditionalContentDescriptionLabels(java.util.Collection<kotlin.Pair<java.lang.Integer,androidx.wear.watchface.ContentDescriptionLabel>>);
method public final void setInteractiveDrawModeUpdateDelayMillis(long);
method @UiThread public boolean shouldAnimate();
+ method @UiThread public androidx.wear.watchface.Renderer.WatchfaceColors? watchfaceColors();
property public final java.util.Collection<kotlin.Pair<java.lang.Integer,androidx.wear.watchface.ContentDescriptionLabel>> additionalContentDescriptionLabels;
property public final float centerX;
property public final float centerY;
@@ -293,6 +295,16 @@
method @UiThread public void onDestroy();
}
+ public static final class Renderer.WatchfaceColors {
+ ctor public Renderer.WatchfaceColors(android.graphics.Color primaryColor, android.graphics.Color secondaryColor, android.graphics.Color tertiaryColor);
+ method public android.graphics.Color getPrimaryColor();
+ method public android.graphics.Color getSecondaryColor();
+ method public android.graphics.Color getTertiaryColor();
+ property public final android.graphics.Color primaryColor;
+ property public final android.graphics.Color secondaryColor;
+ property public final android.graphics.Color tertiaryColor;
+ }
+
public final class RendererKt {
}
diff --git a/wear/watchface/watchface/api/restricted_current.txt b/wear/watchface/watchface/api/restricted_current.txt
index 413672b..f24bb8c 100644
--- a/wear/watchface/watchface/api/restricted_current.txt
+++ b/wear/watchface/watchface/api/restricted_current.txt
@@ -199,6 +199,7 @@
method public final android.graphics.Rect getScreenBounds();
method public final android.view.SurfaceHolder getSurfaceHolder();
method @UiThread public final void invalidate();
+ method @UiThread public final void notifyWatchfaceColorsChanged();
method @UiThread public void onDestroy();
method @UiThread public abstract void onDump(java.io.PrintWriter writer);
method @UiThread protected void onRenderParametersChanged(androidx.wear.watchface.RenderParameters renderParameters);
@@ -206,6 +207,7 @@
method public final void setAdditionalContentDescriptionLabels(java.util.Collection<kotlin.Pair<java.lang.Integer,androidx.wear.watchface.ContentDescriptionLabel>>);
method public final void setInteractiveDrawModeUpdateDelayMillis(long);
method @UiThread public boolean shouldAnimate();
+ method @UiThread public androidx.wear.watchface.Renderer.WatchfaceColors? watchfaceColors();
property public final java.util.Collection<kotlin.Pair<java.lang.Integer,androidx.wear.watchface.ContentDescriptionLabel>> additionalContentDescriptionLabels;
property public final float centerX;
property public final float centerY;
@@ -277,6 +279,16 @@
method @UiThread public void onDestroy();
}
+ public static final class Renderer.WatchfaceColors {
+ ctor public Renderer.WatchfaceColors(android.graphics.Color primaryColor, android.graphics.Color secondaryColor, android.graphics.Color tertiaryColor);
+ method public android.graphics.Color getPrimaryColor();
+ method public android.graphics.Color getSecondaryColor();
+ method public android.graphics.Color getTertiaryColor();
+ property public final android.graphics.Color primaryColor;
+ property public final android.graphics.Color secondaryColor;
+ property public final android.graphics.Color tertiaryColor;
+ }
+
public final class RendererKt {
}
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasAnalogWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasAnalogWatchFaceService.kt
index de2b16d..1f01526 100644
--- a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasAnalogWatchFaceService.kt
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasAnalogWatchFaceService.kt
@@ -20,12 +20,14 @@
import android.content.Context
import android.content.Intent
import android.graphics.Canvas
+import android.graphics.Color
import android.graphics.Paint
import android.graphics.Path
import android.graphics.Rect
import android.graphics.RectF
import android.graphics.drawable.Icon
import android.view.SurfaceHolder
+import androidx.annotation.RequiresApi
import androidx.wear.watchface.complications.ComplicationSlotBounds
import androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy
import androidx.wear.watchface.complications.SystemDataSources
@@ -378,6 +380,7 @@
}
@Suppress("Deprecation")
+@RequiresApi(27)
class ExampleAnalogWatchCanvasRenderer(
surfaceHolder: SurfaceHolder,
private val context: Context,
@@ -449,6 +452,12 @@
}
}
+ override fun watchfaceColors() = WatchfaceColors(
+ Color.valueOf(watchFaceColorStyle.activeStyle.primaryColor),
+ Color.valueOf(watchFaceColorStyle.activeStyle.secondaryColor),
+ Color.valueOf(Color.DKGRAY)
+ )
+
override fun render(canvas: Canvas, bounds: Rect, zonedDateTime: ZonedDateTime) {
val style = if (renderParameters.drawMode == DrawMode.AMBIENT) {
watchFaceColorStyle.ambientStyle
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasDigitalWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasDigitalWatchFaceService.kt
index 7921a53..14eff5b 100644
--- a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasDigitalWatchFaceService.kt
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleCanvasDigitalWatchFaceService.kt
@@ -37,6 +37,7 @@
import android.view.animation.AnimationUtils
import android.view.animation.PathInterpolator
import androidx.annotation.ColorInt
+import androidx.annotation.RequiresApi
import androidx.wear.watchface.complications.ComplicationSlotBounds
import androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy
import androidx.wear.watchface.complications.SystemDataSources
@@ -685,6 +686,7 @@
}
@Suppress("Deprecation")
+@RequiresApi(27)
class ExampleDigitalWatchCanvasRenderer(
surfaceHolder: SurfaceHolder,
private val context: Context,
@@ -1030,6 +1032,12 @@
}
}
+ override fun watchfaceColors() = WatchfaceColors(
+ Color.valueOf(watchFaceColorStyle.activeStyle.primaryColor),
+ Color.valueOf(watchFaceColorStyle.activeStyle.secondaryColor),
+ Color.valueOf(Color.DKGRAY)
+ )
+
override fun renderHighlightLayer(canvas: Canvas, bounds: Rect, zonedDateTime: ZonedDateTime) {
drawComplicationHighlights(canvas, zonedDateTime)
}
diff --git a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLWatchFaceService.kt b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLWatchFaceService.kt
index 8b0e77d..6d9b412 100644
--- a/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLWatchFaceService.kt
+++ b/wear/watchface/watchface/samples/src/main/java/androidx/wear/watchface/samples/ExampleOpenGLWatchFaceService.kt
@@ -27,6 +27,7 @@
import android.util.Log
import android.view.Gravity
import android.view.SurfaceHolder
+import androidx.annotation.RequiresApi
import androidx.wear.watchface.complications.ComplicationSlotBounds
import androidx.wear.watchface.complications.DefaultComplicationDataSourcePolicy
import androidx.wear.watchface.complications.SystemDataSources
@@ -171,6 +172,7 @@
}
@Suppress("Deprecation")
+@RequiresApi(27)
class ExampleOpenGLRenderer(
surfaceHolder: SurfaceHolder,
private val currentUserStyleRepository: CurrentUserStyleRepository,
@@ -639,6 +641,24 @@
}
}
+ override fun watchfaceColors() = when (
+ currentUserStyleRepository.userStyle.value[colorStyleSetting]!!.toString()
+ ) {
+ "red_style" -> WatchfaceColors(
+ Color.valueOf(0.5f, 0.2f, 0.2f, 1f),
+ Color.valueOf(0.4f, 0.15f, 0.15f, 1f),
+ Color.valueOf(0.1f, 0.1f, 0.1f, 1f)
+ )
+
+ "green_style" -> WatchfaceColors(
+ Color.valueOf(0.2f, 0.5f, 0.2f, 1f),
+ Color.valueOf(0.15f, 0.4f, 0.15f, 1f),
+ Color.valueOf(0.1f, 0.1f, 0.1f, 1f)
+ )
+
+ else -> null
+ }
+
override fun render(zonedDateTime: ZonedDateTime) {
// Draw background color and select the appropriate view projection matrix. The background
// should always be black in ambient mode. The view projection matrix used is overhead in
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt
index 052ccf1..808c97f 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/Renderer.kt
@@ -450,6 +450,37 @@
internal open suspend fun backgroundThreadInitInternal() {}
/**
+ * Provides information about the colors of a watch face, exposing the three most
+ * representative colors. This may be used by the system to influence the colors used for the
+ * system ui.
+ */
+ public class WatchfaceColors(
+ val primaryColor: Color,
+ val secondaryColor: Color,
+ val tertiaryColor: Color
+ )
+
+ /**
+ * Called by the system when it needs to know what colors the watch face is using. Return `null`
+ * if no color information is available at the moment and subsequently call
+ * [notifyWatchfaceColorsChanged] when color information becomes available.
+ *
+ * @return The [WatchfaceColors] for this watch face.
+ */
+ @UiThread
+ public open fun watchfaceColors(): WatchfaceColors? = null
+
+ /**
+ * Notifies the system that the watch face's colors have changed, this will trigger a call to
+ * [watchfaceColors]. Note the system automatically calls notifyColorsChanged when the style
+ * changes.
+ */
+ @UiThread
+ public fun notifyWatchfaceColorsChanged() {
+ watchFaceHostApi?.notifySystemThatColorsChanged()
+ }
+
+ /**
* Multiple [WatchFaceService] instances and hence Renderers can exist concurrently (e.g. a
* headless instance and an interactive instance) and using SharedAssets allows memory to be
* saved by sharing immutable data (e.g. Bitmaps and shaders) between them.
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceHostApi.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceHostApi.kt
index 76833ce..f55083a 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceHostApi.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceHostApi.kt
@@ -137,4 +137,7 @@
*/
@UiThread
public fun onActionTimeTick() {}
+
+ /** The engine must notify the system that the watch face's colors have changed. */
+ public fun notifySystemThatColorsChanged() {}
}
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
index f6e51b8..4a9d0dd 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
@@ -17,12 +17,14 @@
package androidx.wear.watchface
import android.annotation.SuppressLint
+import android.app.WallpaperColors
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.pm.PackageManager
import android.graphics.Canvas
+import android.graphics.Color
import android.graphics.Rect
import android.os.Build
import android.os.Build.VERSION.SDK_INT
@@ -1389,9 +1391,7 @@
params.idAndComplicationDataWireFormats = emptyList()
// Let wallpaper manager know the wallpaper has changed.
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
- NotifyColorsChangedHelper.notifyColorsChanged(this)
- }
+ notifySystemThatColorsChanged()
backgroundThreadCoroutineScope.launch {
writeDirectBootPrefs(_context, DIRECT_BOOT_PREFS, params)
@@ -1645,6 +1645,19 @@
surfaceDestroyed = true
}
+ override fun onComputeColors(): WallpaperColors? =
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
+ getWatchFaceImplOrNull()?.renderer?.watchfaceColors()?.let {
+ WallpaperColorsHelper.makeWallpaperColors(
+ it.primaryColor,
+ it.secondaryColor,
+ it.tertiaryColor
+ )
+ }
+ } else {
+ null
+ }
+
override fun onCommand(
action: String?,
x: Int,
@@ -2105,6 +2118,11 @@
}
deferredWatchFaceImpl.complete(watchFaceImpl)
+ // Let wallpaper manager know the wallpaper colors have changed.
+ if (!watchState.isHeadless) {
+ notifySystemThatColorsChanged()
+ }
+
// Apply any pendingInitialComplications, this must be done after
// deferredWatchFaceImpl has completed or there's a window in which complication
// updates get lost.
@@ -2296,6 +2314,12 @@
}
}
+ override fun notifySystemThatColorsChanged() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
+ NotifyColorsChangedHelper.notifyColorsChanged(this@EngineWrapper)
+ }
+ }
+
internal fun draw() {
try {
if (TRACE_DRAW) {
@@ -2561,6 +2585,12 @@
engine.notifyColorsChanged()
}
}
+
+ @RequiresApi(27)
+ private object WallpaperColorsHelper {
+ fun makeWallpaperColors(primaryColor: Color, secondaryColor: Color, tertiaryColor: Color) =
+ WallpaperColors(primaryColor, secondaryColor, tertiaryColor)
+ }
}
/**
diff --git a/wear/watchface/watchface/src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt b/wear/watchface/watchface/src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt
index be99c5d..3669a1d 100644
--- a/wear/watchface/watchface/src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt
+++ b/wear/watchface/watchface/src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt
@@ -19,11 +19,13 @@
import android.annotation.SuppressLint
import android.app.NotificationManager
import android.app.PendingIntent
+import android.app.WallpaperColors
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.Canvas
+import android.graphics.Color
import android.graphics.Insets
import android.graphics.Rect
import android.graphics.RectF
@@ -5512,6 +5514,92 @@
InteractiveInstanceManager.releaseInstance(NEW_ID)
}
+ @Test
+ @RequiresApi(27)
+ public fun onComputeColors() {
+ testWatchFaceService = TestWatchFaceService(
+ WatchFaceType.DIGITAL,
+ emptyList(),
+ { _, currentUserStyleRepository, watchState ->
+ @Suppress("DEPRECATION")
+ object : Renderer.CanvasRenderer(
+ surfaceHolder,
+ currentUserStyleRepository,
+ watchState,
+ CanvasType.HARDWARE,
+ INTERACTIVE_UPDATE_RATE_MS
+ ) {
+ override fun render(
+ canvas: Canvas,
+ bounds: Rect,
+ zonedDateTime: ZonedDateTime
+ ) { }
+
+ override fun renderHighlightLayer(
+ canvas: Canvas,
+ bounds: Rect,
+ zonedDateTime: ZonedDateTime
+ ) {
+ }
+
+ override fun watchfaceColors() =
+ WatchfaceColors(Color.valueOf(1), Color.valueOf(2), Color.valueOf(3))
+ }
+ },
+ UserStyleSchema(emptyList()),
+ null,
+ handler,
+ null,
+ false,
+ null,
+ choreographer,
+ forceIsVisible = true
+ )
+
+ InteractiveInstanceManager
+ .getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance(
+ InteractiveInstanceManager.PendingWallpaperInteractiveWatchFaceInstance(
+ WallpaperInteractiveWatchFaceInstanceParams(
+ SYSTEM_SUPPORTS_CONSISTENT_IDS_PREFIX + "Interactive",
+ DeviceConfig(
+ false,
+ false,
+ 0,
+ 0
+ ),
+ WatchUiState(false, 0),
+ UserStyle(emptyMap()).toWireFormat(),
+ emptyList()
+ ),
+ object : IPendingInteractiveWatchFace.Stub() {
+ override fun getApiVersion() =
+ IPendingInteractiveWatchFace.API_VERSION
+
+ override fun onInteractiveWatchFaceCreated(
+ iInteractiveWatchFace: IInteractiveWatchFace
+ ) {
+ interactiveWatchFaceInstance = iInteractiveWatchFace
+ }
+
+ override fun onInteractiveWatchFaceCrashed(exception: CrashInfoParcel?) {
+ fail("WatchFace crashed: $exception")
+ }
+ }
+ )
+ )
+
+ engineWrapper = testWatchFaceService.onCreateEngine() as WatchFaceService.EngineWrapper
+ engineWrapper.onCreate(surfaceHolder)
+ engineWrapper.onSurfaceChanged(surfaceHolder, 0, 100, 100)
+
+ // Check that onComputeColors is plumbed through to the Renderer.
+ assertThat(engineWrapper.onComputeColors()).isEqualTo(
+ WallpaperColors(Color.valueOf(1), Color.valueOf(2), Color.valueOf(3))
+ )
+
+ engineWrapper.onDestroy()
+ }
+
private fun getLeftShortTextComplicationDataText(): CharSequence {
val complication = complicationSlotsManager[
LEFT_COMPLICATION_ID
diff --git a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkInfoTest.kt b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkInfoTest.kt
index b77d969..eaf97da 100644
--- a/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkInfoTest.kt
+++ b/work/work-multiprocess/src/androidTest/java/androidx/work/multiprocess/ParcelableWorkInfoTest.kt
@@ -48,7 +48,8 @@
Data.EMPTY,
listOf("tag1", "tag2"),
Data.EMPTY,
- 1
+ 1,
+ 1,
)
assertOn(workInfo)
}
@@ -72,7 +73,8 @@
data,
listOf("tag1", "tag2"),
Data.EMPTY,
- 1
+ 1,
+ 3,
)
assertOn(workInfo)
}
@@ -96,7 +98,8 @@
data,
listOf("tag1", "tag2"),
Data.EMPTY,
- 1
+ 1,
+ 0,
)
assertOn(listOf(workInfo, workInfo))
@@ -135,5 +138,6 @@
assertEquals(first.tags, second.tags)
assertEquals(first.progress, second.progress)
assertEquals(first.runAttemptCount, second.runAttemptCount)
+ assertEquals(first.generation, second.generation)
}
}
diff --git a/work/work-multiprocess/src/main/java/androidx/work/multiprocess/parcelable/ParcelableWorkInfo.java b/work/work-multiprocess/src/main/java/androidx/work/multiprocess/parcelable/ParcelableWorkInfo.java
index a37f194..0db9d9a 100644
--- a/work/work-multiprocess/src/main/java/androidx/work/multiprocess/parcelable/ParcelableWorkInfo.java
+++ b/work/work-multiprocess/src/main/java/androidx/work/multiprocess/parcelable/ParcelableWorkInfo.java
@@ -66,7 +66,8 @@
Data progress = parcelableProgressData.getData();
// runAttemptCount
int runAttemptCount = parcel.readInt();
- mWorkInfo = new WorkInfo(id, state, output, tags, progress, runAttemptCount);
+ int generation = parcel.readInt();
+ mWorkInfo = new WorkInfo(id, state, output, tags, progress, runAttemptCount, generation);
}
@NonNull
@@ -110,5 +111,6 @@
parcelableProgress.writeToParcel(parcel, flags);
// runAttemptCount
parcel.writeInt(mWorkInfo.getRunAttemptCount());
+ parcel.writeInt(mWorkInfo.getGeneration());
}
}
diff --git a/work/work-runtime/api/current.txt b/work/work-runtime/api/current.txt
index 0ed04c1..8f18fb4 100644
--- a/work/work-runtime/api/current.txt
+++ b/work/work-runtime/api/current.txt
@@ -318,6 +318,7 @@
}
public final class WorkInfo {
+ method public int getGeneration();
method public java.util.UUID getId();
method public androidx.work.Data getOutputData();
method public androidx.work.Data getProgress();
diff --git a/work/work-runtime/api/public_plus_experimental_current.txt b/work/work-runtime/api/public_plus_experimental_current.txt
index 0ed04c1..8f18fb4 100644
--- a/work/work-runtime/api/public_plus_experimental_current.txt
+++ b/work/work-runtime/api/public_plus_experimental_current.txt
@@ -318,6 +318,7 @@
}
public final class WorkInfo {
+ method public int getGeneration();
method public java.util.UUID getId();
method public androidx.work.Data getOutputData();
method public androidx.work.Data getProgress();
diff --git a/work/work-runtime/api/restricted_current.txt b/work/work-runtime/api/restricted_current.txt
index 0ed04c1..8f18fb4 100644
--- a/work/work-runtime/api/restricted_current.txt
+++ b/work/work-runtime/api/restricted_current.txt
@@ -318,6 +318,7 @@
}
public final class WorkInfo {
+ method public int getGeneration();
method public java.util.UUID getId();
method public androidx.work.Data getOutputData();
method public androidx.work.Data getProgress();
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/WorkUpdateTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/WorkUpdateTest.kt
index 00c51af..37070da 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/WorkUpdateTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/WorkUpdateTest.kt
@@ -473,7 +473,7 @@
@Test
@MediumTest
- fun updateWorkerParameterGeneration() {
+ fun updateWorkerGeneration() {
val >
.setInitialDelay(10, TimeUnit.DAYS)
.build()
@@ -486,6 +486,8 @@
assertThat(workManager.updateWork(updatedWorkRequest).get()).isEqualTo(APPLIED_IMMEDIATELY)
val worker = workerFactory.awaitWorker(oneTimeWorkRequest.id) as WorkerWithParam
assertThat(worker.generation).isEqualTo(1)
+ val workInfo = workManager.getWorkInfoById(oneTimeWorkRequest.id).get()
+ assertThat(workInfo.generation).isEqualTo(1)
}
@After
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java
index 4ece5a4..eacd522 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java
@@ -1206,6 +1206,7 @@
Data.EMPTY,
Collections.singletonList(TestWorker.class.getName()),
Data.EMPTY,
+ 0,
0);
WorkInfo workInfo1 = new WorkInfo(
work1.getId(),
@@ -1213,6 +1214,7 @@
Data.EMPTY,
Collections.singletonList(TestWorker.class.getName()),
Data.EMPTY,
+ 0,
0);
assertThat(captor.getValue(), containsInAnyOrder(workInfo0, workInfo1));
@@ -1229,6 +1231,7 @@
Data.EMPTY,
Collections.singletonList(TestWorker.class.getName()),
Data.EMPTY,
+ 0,
0);
assertThat(captor.getValue(), containsInAnyOrder(workInfo0, workInfo1));
@@ -1245,6 +1248,7 @@
Data.EMPTY,
Collections.singletonList(TestWorker.class.getName()),
Data.EMPTY,
+ 0,
0);
assertThat(captor.getValue(), containsInAnyOrder(workInfo0, workInfo1));
@@ -1280,6 +1284,7 @@
Data.EMPTY,
Arrays.asList(TestWorker.class.getName(), firstTag, secondTag),
Data.EMPTY,
+ 0,
0);
WorkInfo workInfo1 = new WorkInfo(
work1.getId(),
@@ -1287,6 +1292,7 @@
Data.EMPTY,
Arrays.asList(TestWorker.class.getName(), firstTag),
Data.EMPTY,
+ 0,
0);
WorkInfo workInfo2 = new WorkInfo(
work2.getId(),
@@ -1294,6 +1300,7 @@
Data.EMPTY,
Arrays.asList(TestWorker.class.getName(), secondTag),
Data.EMPTY,
+ 0,
0);
List<WorkInfo> workInfos = mWorkManagerImpl.getWorkInfosByTag(firstTag).get();
@@ -1330,6 +1337,7 @@
Data.EMPTY,
Collections.singletonList(InfiniteTestWorker.class.getName()),
Data.EMPTY,
+ 0,
0);
WorkInfo workInfo1 = new WorkInfo(
work1.getId(),
@@ -1337,6 +1345,7 @@
Data.EMPTY,
Collections.singletonList(InfiniteTestWorker.class.getName()),
Data.EMPTY,
+ 0,
0);
WorkInfo workInfo2 = new WorkInfo(
work2.getId(),
@@ -1344,6 +1353,7 @@
Data.EMPTY,
Collections.singletonList(InfiniteTestWorker.class.getName()),
Data.EMPTY,
+ 0,
0);
List<WorkInfo> workInfos = mWorkManagerImpl.getWorkInfosForUniqueWork(uniqueName).get();
@@ -1391,6 +1401,7 @@
Data.EMPTY,
Collections.singletonList(InfiniteTestWorker.class.getName()),
Data.EMPTY,
+ 0,
0);
WorkInfo workInfo1 = new WorkInfo(
work1.getId(),
@@ -1398,6 +1409,7 @@
Data.EMPTY,
Collections.singletonList(InfiniteTestWorker.class.getName()),
Data.EMPTY,
+ 0,
0);
WorkInfo workInfo2 = new WorkInfo(
work2.getId(),
@@ -1405,6 +1417,7 @@
Data.EMPTY,
Collections.singletonList(InfiniteTestWorker.class.getName()),
Data.EMPTY,
+ 0,
0);
assertThat(captor.getValue(), containsInAnyOrder(workInfo0, workInfo1, workInfo2));
@@ -1420,6 +1433,7 @@
Data.EMPTY,
Collections.singletonList(InfiniteTestWorker.class.getName()),
Data.EMPTY,
+ 0,
0);
assertThat(captor.getValue(), containsInAnyOrder(workInfo0, workInfo1, workInfo2));
diff --git a/work/work-runtime/src/main/java/androidx/work/WorkInfo.java b/work/work-runtime/src/main/java/androidx/work/WorkInfo.java
index c1417ee..19a9821 100644
--- a/work/work-runtime/src/main/java/androidx/work/WorkInfo.java
+++ b/work/work-runtime/src/main/java/androidx/work/WorkInfo.java
@@ -40,6 +40,7 @@
private @NonNull Data mProgress;
private int mRunAttemptCount;
+ private final int mGeneration;
/**
* @hide
*/
@@ -50,13 +51,15 @@
@NonNull Data outputData,
@NonNull List<String> tags,
@NonNull Data progress,
- int runAttemptCount) {
+ int runAttemptCount,
+ int generation) {
mId = id;
mState = state;
mOutputData = outputData;
mTags = new HashSet<>(tags);
mProgress = progress;
mRunAttemptCount = runAttemptCount;
+ mGeneration = generation;
}
/**
@@ -116,6 +119,24 @@
return mRunAttemptCount;
}
+ /**
+ * Gets the latest generation of this Worker.
+ * <p>
+ * A work has multiple generations, if it was updated via
+ * {@link WorkManager#updateWork(WorkRequest)} or
+ * {@link WorkManager#enqueueUniquePeriodicWork(String,
+ * ExistingPeriodicWorkPolicy, PeriodicWorkRequest)} using
+ * {@link ExistingPeriodicWorkPolicy#UPDATE}.
+ * <p>
+ * If this worker is currently running, it can possibly be of an older generation rather than
+ * returned by this function if an update has happened during an execution of this worker.
+ *
+ * @return a generation of this work.
+ */
+ public int getGeneration() {
+ return mGeneration;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/work/work-runtime/src/main/java/androidx/work/WorkManager.java b/work/work-runtime/src/main/java/androidx/work/WorkManager.java
index 3989b44..d77cce0 100644
--- a/work/work-runtime/src/main/java/androidx/work/WorkManager.java
+++ b/work/work-runtime/src/main/java/androidx/work/WorkManager.java
@@ -596,7 +596,9 @@
@NonNull WorkQuery workQuery);
/**
- * Updates the work with the new specification.
+ * Updates the work with the new specification. A {@link WorkRequest} passed as parameter
+ * must have an id set with {@link WorkRequest.Builder#setId(UUID)} that matches an id of the
+ * previously enqueued work.
* <p>
* It preserves enqueue time, e.g. if a work was enqueued 3 hours ago and had 6 hours long
* initial delay, after the update it would be still eligible for run in 3 hours, assuming
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/model/WorkSpec.kt b/work/work-runtime/src/main/java/androidx/work/impl/model/WorkSpec.kt
index 1869db8..1e1cfc1 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/model/WorkSpec.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/model/WorkSpec.kt
@@ -351,6 +351,9 @@
@ColumnInfo(name = "run_attempt_count")
var runAttemptCount: Int,
+ @ColumnInfo(name = "generation")
+ val generation: Int,
+
@Relation(
parentColumn = "id",
entityColumn = "work_spec_id",
@@ -382,7 +385,8 @@
output,
tags,
progress,
- runAttemptCount
+ runAttemptCount,
+ generation
)
}
}
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/model/WorkSpecDao.kt b/work/work-runtime/src/main/java/androidx/work/impl/model/WorkSpecDao.kt
index b698d46..d24c710 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/model/WorkSpecDao.kt
+++ b/work/work-runtime/src/main/java/androidx/work/impl/model/WorkSpecDao.kt
@@ -148,7 +148,7 @@
* @return A list of [WorkSpec.WorkInfoPojo]
*/
@Transaction
- @Query("SELECT id, state, output, run_attempt_count FROM workspec WHERE id=:id")
+ @Query("SELECT id, state, output, run_attempt_count, generation FROM workspec WHERE id=:id")
fun getWorkStatusPojoForId(id: String): WorkSpec.WorkInfoPojo?
/**
@@ -159,7 +159,8 @@
* @return A [List] of [WorkSpec.WorkInfoPojo]
*/
@Transaction
- @Query("SELECT id, state, output, run_attempt_count FROM workspec WHERE id IN (:ids)")
+ @Query("SELECT id, state, output, run_attempt_count, generation " +
+ "FROM workspec WHERE id IN (:ids)")
fun getWorkStatusPojoForIds(ids: List<String>): List<WorkSpec.WorkInfoPojo>
/**
@@ -170,7 +171,8 @@
* @return A [LiveData] list of [WorkSpec.WorkInfoPojo]
*/
@Transaction
- @Query("SELECT id, state, output, run_attempt_count FROM workspec WHERE id IN (:ids)")
+ @Query("SELECT id, state, output, run_attempt_count, generation " +
+ "FROM workspec WHERE id IN (:ids)")
fun getWorkStatusPojoLiveDataForIds(ids: List<String>): LiveData<List<WorkSpec.WorkInfoPojo>>
/**
@@ -181,7 +183,7 @@
*/
@Transaction
@Query(
- """SELECT id, state, output, run_attempt_count FROM workspec WHERE id IN
+ """SELECT id, state, output, run_attempt_count, generation FROM workspec WHERE id IN
(SELECT work_spec_id FROM worktag WHERE tag=:tag)"""
)
fun getWorkStatusPojoForTag(tag: String): List<WorkSpec.WorkInfoPojo>
@@ -195,7 +197,7 @@
*/
@Transaction
@Query(
- """SELECT id, state, output, run_attempt_count FROM workspec WHERE id IN
+ """SELECT id, state, output, run_attempt_count, generation FROM workspec WHERE id IN
(SELECT work_spec_id FROM worktag WHERE tag=:tag)"""
)
fun getWorkStatusPojoLiveDataForTag(tag: String): LiveData<List<WorkSpec.WorkInfoPojo>>
@@ -208,7 +210,7 @@
*/
@Transaction
@Query(
- "SELECT id, state, output, run_attempt_count FROM workspec WHERE id IN " +
+ "SELECT id, state, output, run_attempt_count, generation FROM workspec WHERE id IN " +
"(SELECT work_spec_id FROM workname WHERE name=:name)"
)
fun getWorkStatusPojoForName(name: String): List<WorkSpec.WorkInfoPojo>
@@ -222,7 +224,7 @@
*/
@Transaction
@Query(
- "SELECT id, state, output, run_attempt_count FROM workspec WHERE id IN " +
+ "SELECT id, state, output, run_attempt_count, generation FROM workspec WHERE id IN " +
"(SELECT work_spec_id FROM workname WHERE name=:name)"
)
fun getWorkStatusPojoLiveDataForName(name: String): LiveData<List<WorkSpec.WorkInfoPojo>>